Block Memory Generator: Wrong data in BRAM after initialization with *.ceo File

Oct 17, 2006 4 Replies

Hi,



i'm using Block Memory Generator 2.1 for a 16bit * 1024 RAM implemented in virtex4 BRAM and want to initialize the data with a *.coe file. But if i dump the data from the *.bit file with "data2mem -d" it doesn't match completely with the data from the *.ceo file. for example:


  • .ceo file: memory_initialization_radix=16; memory_initialization_vector= FFFF, FFFF, 0201, 0403, 0605, 0807, 1009, ...

data2mem dump:


7F FF 7F FF 01 01 02 03 03 05 04 07 09 09

It seems that the Block Memory Generator does a wrong mapping of the 16 bit wide ram into the 16 + 2 wide (due to parity bits) BRAM or is this an error of data2mem?



My *.bmm File looks like this: ADDRESS_SPACE bram1_space RAMB16 [0x00000000:0x000017FF] BUS_BLOCK ...BRAM[15:0] PLACED = X2Y12; END_BUS_BLOCK; END_ADDRESS_SPACE;



If i use data2mem to insert BRAM initialization data from a *.mem file into the



*.bit file, the data seems to be correct.

Ben schrieb:

virtex4 BRAM and want to initialize the data with a *.coe file. But if i dump the data from the *.bit file with "data2mem -d" it doesn't match completely with the data from the *.ceo file. for example:

FFFF, FFFF, 0201, 0403, 0605, 0807, 1009, ...

wide ram into the 16 + 2 wide (due to parity bits) BRAM or is this an error of data2mem?

[0x00000000:0x000017FF] BUS_BLOCK ...BRAM[15:0] PLACED = X2Y12; END_BUS_BLOCK; END_ADDRESS_SPACE;

the *.bit file, the data seems to be correct.

try

1) specify RAMB18 in bmm file or 2) make sure the block ram is using 4 or more BRAMs, in that case the parity bits are not used

Antti

formatting link

1) I even tried RAMB18 in the *.bmm file but unfortunately this results in the same wrong data.

2) Why the parity bits aren's used if my block ram use more than 4 BRAMs? I actually need a number of seperate 16*1024 Block RAMs in my project and can't use 4 or more BRAMs for one of my Block RAMs.

Someone has an idea if the bit mapping error is done by data2mem or by the Block Memory Generator?

Ben schrieb:

same wrong data.

actually need a number of seperate 16*1024 Block RAMs in my project and can't use 4 or more BRAMs for one of my Block RAMs.

Block Memory Generator?

option 3 instantiate BRAM from HDL code, that works

Antti

I also could instantiate the Block RAM in HDL and put my initialization data there, but it would be nice if i could use my automatically generated *.ceo files for the initialization of the block ram. I also need this data in the simulation, so i can't use data2mem for just inserting it into the *.bit file.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required