02-15-2019 03:47 AM
I've noticed recently that if I fill a .mem file with more than 32768 bits I get the following Critical Warning message from updatemem (From 2018.2 running on Ubuntu 18.04.02 LTS):
CRITICAL WARNING: [Memdata 28-247] The input .mem file has exceeded 32768 which is the maximum number of bits for a RAMB18 primitive. The updating of the BRAM init string is terminated. Please check your input .mem file.
Now this would be fine but my design includes only RAMB36's so surely it should be possible for updatemem to write more than 32768 bits if the primitives allow? Is there some kind of switch for updatemem that needs to be flicked to indicate you're using RAMB36's or is a bug? It does mean that I have to resynthesise my design every time I want to change a large program which is a pain so if there is a solution I'd be very interested to hear it.
02-18-2019 08:58 AM
RAMB36 = 32 data bits + 4 parity bits. 32 x 1024 = 32768
updatemem doesnt use the parity bits, so the error you are seeing is correct.
02-19-2019 12:22 AM
Hi @stephenm,
I agree with you very much and that was my calculation as well however, I'm using XPMs to generate me a memory device that stores 32-bit wide words. The MMI file for this is attached to this post. My reading of the file is that it uses 32 RAMB36's and stores 1 bit of each word in each BlockRAM location so that when a read is perform each bit of the word is clocked into a register so the whole word can be read in one cycle. With that being the case the total capacity of this memory structure should be 32 * 32768 = 1048576 bits. Further more I could configure the XPM to provide twice as much memory as this, putting the individual RAMB36's into cascade mode and then have 64 * 32768 = 2097152 bits (which I have done and updatemem fails because it is expecting 32 BRAMs and finds 64 which is not the case but that's a different question though I would also appreciate an answer there as well). That being the case how can updatemem write to the whole contents of a memory of this size when you can only specify an instance of an XPM to write to? Is there a way to specifiy multiple date files per instance (-proc option) or is there some fundamental limitation that I can't see?
02-19-2019 01:44 AM
you have 16 RAMB36, so 16 x 1024.
I dont see the address range in your MMI file
02-19-2019 02:19 AM
Sorry I misrembered the figures. My point still stands though, with 16 BRAMs I should have access to 1048576 bits, why can updatemem not set those bits?
02-19-2019 02:21 AM
Are you not missing an address range?
02-19-2019 02:23 AM
02-19-2019 02:25 AM
I meant the address range for the entire memory block
02-19-2019 02:26 AM