verilog 存储型寄存器组的问题
另外,这种形式的定义的初始化,好像系统任务$readmemb 只是仿真中用于读入数据吧?是不能综合的吧 ?那是不是得一个一个在复位期间赋值呢 例如 mem [0]<=16'h0000; mem[1]<=16'h8888;…………
请教交流,谢谢!
第一种消耗的是LE
后面一种只能在仿真中使用
这种定义出来的就是寄存器堆,要初始化(复位)的话必须跟普通的寄存器复位一下。另外,就算是RAM的话,也不会自动初始化的
是用LE组成的
不可能综合吧
4# bunengwang
或许我能明白你的意思,呵呵,差点误以为你说 消耗的LE 初始化不可综合呢? 针对问题请说清楚嘛,也别让他人也理解错了。谢谢!
3# fireheart
看到你的回复,突然又想发问:如果是定制的RAM模块的初始化不是自动初始化的,那与RAM 结合的MIF里面 的数值是什么时间存在(就是说赋值可读)?是加载后一上电就存在可读的吗? 不管你这里说的RAM 是不是定制的,我只是想发问…… 谢谢!
如果是 reg [16:1]mem [255:0]; 这样定义,要如何赋初值(不同的值)才方便呢 要可综合的!
规范的用法 应该是复位期间赋值
It depends on the memory implementation.
If you like to use synthesis to impl. memory. reg [16:..] mem usage is OK. If you use memory module, build the memory module.
$readmemb/h just a initiation of memory call.
9# juniper14211
of course the definiton of reg [16:1]mem [255:0]; could be synthesized ,but with the initialization instruction of $readmemb/h is only for the simulation ,isn't it?
in addition,I didn't consider using the memory module just like RAM /ROM with single or dual ports,because the module with at least 32 words,my usages less than 32 words (17words),thought that it is a wast of resources of my chip . thks!
看你需要的是RAM还是Register了,如果RAM没必要初始化,只要在read之前write了,就可以了。除非你需要ROM。当然在做FPGA时候可以加载MIF文件,加载的MIF文件也是存在PROM里,上电后又写到RAM里而已。
去看看什么是RTL级的可综合代码规范,什么是行为级的仿真建模......
可以设置综合选项来让软件根据你的逻辑来自动确定使用LE或者内部RAM模块。
RAM根据复位要赋初值。
13# nan123chang
这是如何设置综合选项的呢?请教了
assignments->settings->analysis&synthesis settings->more settings->auto ram replacement=on,
默认是on。软件最终会不会替换,还是要看你的设计功能是否可直接用内部RAM来实现。具体可查看compile report.
看看。
