Jul
16
infer memory, initialize memory and $readmemb
和Kingbeful同学讨论了infer memory的问题。
Infer ROM/RAM,一般使用Language Template --> Verilog --> Synthesis Constructs --> Coding Examples --> RAM/ROM。
要对ROM/RAM做初始化,可以用readmemb/readmemh这两个system task。功能都是读取外部的文件来初始化内存。
XST, ISIM, ModelSim都支持readmemh/readmemb。
readmemb的基本格式是:
initial begin
$readmemh("mem.data", my_memory, start_address, end_address);
end
其中,start_address和end_address都是可选项。
不写start_address的时候,默认从高位地址写起。
如果要从低位写起,start address = 0。
例子工程:
下载文件
参考资料:
asic-world - 不过XST不支持数据文件中有任何其他字符,包括注释和下划线。
XST User Guide
Infer ROM/RAM,一般使用Language Template --> Verilog --> Synthesis Constructs --> Coding Examples --> RAM/ROM。
要对ROM/RAM做初始化,可以用readmemb/readmemh这两个system task。功能都是读取外部的文件来初始化内存。
XST, ISIM, ModelSim都支持readmemh/readmemb。
readmemb的基本格式是:
initial begin
$readmemh("mem.data", my_memory, start_address, end_address);
end
其中,start_address和end_address都是可选项。
不写start_address的时候,默认从高位地址写起。
如果要从低位写起,start address = 0。
例子工程:
下载文件 参考资料:
asic-world - 不过XST不支持数据文件中有任何其他字符,包括注释和下划线。
XST User Guide
当`ifdef遇到XST
在FPGA内手动做Delay





我medulesim仿真中有句$readmemb("test1.dat",t_ram.ram);
好像仿真出问题了,可能是test1.dat放的不是位置
哪位有经验这个test1.dat文件应该放在那个目录里
谢谢
就是,synplify只有8.8.04才能infer双端口RAM,还不一定支持真正的双端口,嗨!
不过,感觉自从使用了ISE 9.1i,9.1i的XST已经非常不错了,综合速度也快了不少,综合后的频率也非常不错了,完全可以和syn有的一拼!
请教你在synplify中怎么综合xilinx的block RAM的ipcore。syn综合一般的ip,为了获得时间和面积信息,都要在syn的工程中加入.edn和ndf文件,但我尝试了很多次,在core gen中根本没法产生RAM的.edn文件。不知道为什么?在种情况下怎么综合RAM?
谢谢!
要让synplify综合出BRAM:
方法一:直接在代码中infer,就像上面的代码一样
方法二:直接在代码例化,初始值可以用INIT属性设置
方法三:CoreGen生成完毕后再当作blackbox添加到工程中。不过这样子因为不是Synplify支持的EDIF文件,所以没办法得到面积和时序信息的。
由此可见,不是一家人的东西,最好还是不要混用,整合得总不是那么好。
不过我对Synplify还是不熟的,可以再问问高人有啥好办法