Jul 16

infer memory, initialize memory and $readmemb 不指定

RickySu , 17:42 , 技术经验 , 评论(4) , 引用(0) , 阅读(3491) , Via 本站原创 | |
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
Tags: , , ,
碧水寒潭
2008/05/14 22:30
各位大侠
我medulesim仿真中有句$readmemb("test1.dat",t_ram.ram);
好像仿真出问题了,可能是test1.dat放的不是位置
哪位有经验这个test1.dat文件应该放在那个目录里
RickySu 回复于 2008/05/16 15:19
所有文件都放在一个目录中一般没有问题吧。
nolaner
2008/04/10 14:35
zan
谢谢
lubee
2007/07/19 10:49
谢谢ricksu大哥哦!
就是,synplify只有8.8.04才能infer双端口RAM,还不一定支持真正的双端口,嗨!
不过,感觉自从使用了ISE 9.1i,9.1i的XST已经非常不错了,综合速度也快了不少,综合后的频率也非常不错了,完全可以和syn有的一拼!
lubee
2007/07/17 19:46
你好!
请教你在synplify中怎么综合xilinx的block RAM的ipcore。syn综合一般的ip,为了获得时间和面积信息,都要在syn的工程中加入.edn和ndf文件,但我尝试了很多次,在core gen中根本没法产生RAM的.edn文件。不知道为什么?在种情况下怎么综合RAM?
谢谢!
RickySu 回复于 2007/07/18 23:15
一般CoreGen只生成NGC的,就算生成了EDIF也不能用来implement的。
要让synplify综合出BRAM:
方法一:直接在代码中infer,就像上面的代码一样
方法二:直接在代码例化,初始值可以用INIT属性设置
方法三:CoreGen生成完毕后再当作blackbox添加到工程中。不过这样子因为不是Synplify支持的EDIF文件,所以没办法得到面积和时序信息的。

由此可见,不是一家人的东西,最好还是不要混用,整合得总不是那么好。

不过我对Synplify还是不熟的,可以再问问高人有啥好办法
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]