采用data2mem工具可以直接修改bitstream中blockram中的数据段。我们需要准备三个文件做为data2mem工具的输入 ,oldbit文件,.mem文件(想要修改的ram的数据),.bmm文件(Block ram memorymap文件,即指定想要修改的ram的位置)。
bmm的文件格式如下:
ADDRESS_SPACE <tag_name> RAMB16DEX_ADDRESSING [0x00000000:0x000003FF]
BUS_BLOCK
<instance_name> [15:0] PLACED =<location>;
END_BUS_BLOCK;
END_ADDRESS_SPACE;
其中<tag_name>可以随便命名,RAMB16会根据我们所用的器件的不同而有所不同,如RAMB4,RAMB18等。<instance_name>以及<location>则分别指代RAM的例化名以及位置。这两个值可以通过xdl工具来获得。如敲入命令
xdl -ncd2xdl top.ncd top.xdl
会产生top.xdl文件,我们在这个文件找到我们想要改变的那个RAM的地方,如:
inst "TestRomDUT/BU5" "RAMB16",placed BRAM_X18Y72RAMB16_X2Y18
就可以得到<instace_name>为TestRomDUT/BU5,location为X2Y18,因为TestRomDUT使用的数据宽度为2bit,所以BMM文件可以按如下方式写:(init.bmm)
ADDRESS_SPACE ROM RAMB16 INDEX_ADDRESSING[0x00000000:0x0001FFF]
BUS_BLOCK
TestRomDUT/BU5 [1:0] PLACED = X2Y18;
END_BUS_BLOCK;
END_ADDRESS_SPACE;
.mem文件编写就较为简单了,格式如下:
@0000
00AB....
其中@开头的代表地址
接下来,就可以转换新的bit了
data2mem -bm init.bmm -bd init.mem -bt topold.bit -o btopnew.bit 转换得到新的bit
data2mem -bm init.bmm -bt topnew.bit -d >topbitmemnew.txt查看新的bit里对应的RAM的值
http://home.mnet-online.de/al/BRAM_Bitstreams.html