cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
quincyq2003
Explorer
Explorer
3,190 Views
Registered: ‎03-31-2016

Virtex7 block ram initial value issue

Hello

 

I want to used vivado IP Catalog to generator block ram IP, and configure initial value.

 

But in FPGA verify, the initial value is 02FFFFFE, this value is not my configure.

 

How to resolve this issue?

 

In simulation waveform:

 

simulation.JPG

 

Verify result:

verify.JPG

 

 

COE file: 

Memory_initialization_radix = 16;
Memory_initialization_vector = EAFFFFFE 00000000;

 

 

0 Kudos
9 Replies
balkris
Xilinx Employee
Xilinx Employee
3,186 Views
Registered: ‎08-01-2008

can you please run simulation with example test bench provided with core generation. check general checks in debug section
https://www.xilinx.com/support/documentation/ip_documentation/blk_mem_gen/v8_0/pg058-blk-mem-gen.pdf
Thanks and Regards
Balkrishan
--------------------------------------------------------------------------------------------
Please mark the post as an answer "Accept as solution" in case it helped resolve your query.
Give kudos in case a post in case it guided to the solution.
0 Kudos
vemulad
Xilinx Employee
Xilinx Employee
3,149 Views
Registered: ‎09-20-2012

Hi @quincyq2003

 

What is this FPGA verify tool?

Thanks,
Deepika.
--------------------------------------------------------------------------------------------
Google your question before posting. If someone's post answers your question, mark the post as answer with "Accept as solution". If you see a particularly good and informative post, consider giving it Kudos (the star on the left)
0 Kudos
quincyq2003
Explorer
Explorer
3,140 Views
Registered: ‎03-31-2016

Hello @vemulad @balkris

 

I used synopsys identify to capture block ram output data.

0 Kudos
balkris
Xilinx Employee
Xilinx Employee
3,132 Views
Registered: ‎08-01-2008

I would suggest write some valid data and read back . have you tried using test bench provided with IP core.
Thanks and Regards
Balkrishan
--------------------------------------------------------------------------------------------
Please mark the post as an answer "Accept as solution" in case it helped resolve your query.
Give kudos in case a post in case it guided to the solution.
0 Kudos
vemulad
Xilinx Employee
Xilinx Employee
3,121 Views
Registered: ‎09-20-2012

Hi @quincyq2003

 

This looks like synopsys tool issue to me as simulation shows proper data. You may have to check with Synopsys support team.

Thanks,
Deepika.
--------------------------------------------------------------------------------------------
Google your question before posting. If someone's post answers your question, mark the post as answer with "Accept as solution". If you see a particularly good and informative post, consider giving it Kudos (the star on the left)
0 Kudos
ryanbales
Observer
Observer
3,078 Views
Registered: ‎12-01-2017

Usually when you generate a BRAM IP core that has initial values, you pass a .coe file into the tool (or specify values in the wizard), and the tool generates a .mif file that contains the binary data for each address.  The .mif data is what really gets loaded into the memory.  Check that the data in the .mif file is correct (it's human readable in a text editor).  I had a case several years ago in which Vivado messed up the translation from .coe to .mif, and loaded the wrong data into the BRAM.  

0 Kudos
quincyq2003
Explorer
Explorer
3,045 Views
Registered: ‎03-31-2016

Hello @ryanbales

 

I check COE and MIF file again, there initial value is the same, but real verify is not there value.

 

COE file

Memory_initialization_radix = 16;
Memory_initialization_vector =
EAFFFFFE,
00000000;

Mif file

11101010111111111111111111111110
00000000000000000000000000000000
0 Kudos
nanson
Explorer
Explorer
3,010 Views
Registered: ‎08-31-2017

 

Hi, gentlemen,

 

 Where can I find out the generated .mif file ? In my case, I use the language template of Vivado to infer BRAM with INIT_FILE which I create a .coe. However, in field testing, the default value check doesn't match the .coe file as you did. Thus, I saw your thread and would like to check the generated .mif file first in my case. Thanks

 

N.B. I use Vivado 2017.2 and in synthesis log runme.log under synth_1 , it does read the .coe file successfully.

0 Kudos
ryanbales
Observer
Observer
2,955 Views
Registered: ‎12-01-2017

The .mif file gets generated by the IP Generator; you pass in the .coe file and IP Generator creates the .mif and initializes the BRAM IP core with it.  In those cases, the .mif shows up in /project directory/synth/*.ip_user_files/mem_init_files/.

 

When inferring BRAM from VHDL or Verilog, I usually initialize it with a .mif file that I've previously created by making a similar core in IP Generator.  I've never tried initializing inferred BRAM with a .coe file.  I doubt Vivado creates a .mif if you let it infer the BRAM.  

 

Does your inferred BRAM simulate correctly, so you know your initialization function is working?

 

Is your ".coe" file purely binary or hexadecimal?  Xilinx coe file syntax includes a header with strings for memory_initialization_radix and memory_initialization_vector.  I believe the initialization file expected by inferred BRAM must contain only binary or hexadecimal data, without those strings.

 

If that's the problem, you probably need to make a .mif file instead of a .coe file.

Tags (2)
0 Kudos