微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog 存储型寄存器组的问题

verilog 存储型寄存器组的问题

时间:10-02 整理:3721RD 点击:
verilog 中定义的存储型寄存器组,例如,reg [16:1]mem [255:0];这应该是可综合的,可是综合之后消耗的是 芯片中 分布式 LE 组成的 RAM 呢 还是 存储模块里的RAM 呢?(假定芯片中有存储模块RAM 区)
另外,这种形式的定义的初始化,好像系统任务$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.

看看。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top