From: Wipster on
Hi,
The age old problem it seems data2mem and BMM files and I am stuck
with a new problem I cant find the answer for.
I have some generic ram in verilog which the xilinx software suite
looks at and maps to two RAMB16s (higher two bytes and lower two
bytes) so I have made a BMM file with the right names and widths
depths etc Thats fine, it recognizes them and updates the _bd.bmm with
the locations they have been mapped too.
However the CPU does not turn over, I did a bit of digging and did a
dump of working and non working BRAM data, it seems that on the
working dump the higher two byte block is bit-shifted right 2 (I'm
guessing because readmemh uses the parity as the lsbs).
Is there a way I can tell data2mem that I want the parity on the other
side or not atall so it inserts the code properly because its giving
an offset when it inserts, its also interesting to note that the lower
block matches perfectly?
I have tried using RAMB18 but that didn't generate anything that
looked right. Here is the working, two bit shifted, readmemh output:
http://pastebin.com/0hgNpAnP and here is the non working data2mem, non
bit shifted version: http://pastebin.com/Tcs3PJjZ

Much thanks,
Ben
From: Wipster on
On Apr 22, 8:25 pm, Wipster <benwhit...(a)gmail.com> wrote:
> Hi,
> The age old problem it seems data2mem and BMM files and I am stuck
> with a new problem I cant find the answer for.
> I have some generic ram in verilog which the xilinx software suite
> looks at and maps to two RAMB16s (higher two bytes and lower two
> bytes) so I have made a BMM file with the right names and widths
> depths etc Thats fine, it recognizes them and updates the _bd.bmm with
> the locations they have been mapped too.
> However the CPU does not turn over, I did a bit of digging and did a
> dump of working and non working BRAM data, it seems that on the
> working dump the higher two byte block is bit-shifted right 2 (I'm
> guessing because readmemh uses the parity as the lsbs).
> Is there a way I can tell data2mem that I want the parity on the other
> side or not atall so it inserts the code properly because its giving
> an offset when it inserts, its also interesting to note that the lower
> block matches perfectly?
> I have tried using RAMB18 but that didn't generate anything that
> looked right. Here is the working, two bit shifted, readmemh output:http://pastebin.com/0hgNpAnPand here is the non working data2mem, non
> bit shifted version:http://pastebin.com/Tcs3PJjZ
>
> Much thanks,
> Ben

Just to give an update on this, I have found the problem.
It seems that map connects 16 bits of the first RAMB16 as you would
expect but then connects the parity of that block and 14 bits of the
second RAMB16. Data2mem assumes parity bits are parity bits so the
codewords where missing the top bits, this is corrected by going into
the unrouted xdl and editing the connections back to connect to the 16
data bits of both.

And there you go, hopefully they can fix this issue as its a time
consuming correction.

Ben