用verilog写的ROM用quartusII综合后为啥没综合到memory bit里而是综合到了LE里面要怎样才能弄到memory

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用verilog写的ROM用quartusII综合后为啥没综合到memory bit里而是综合到了LE里面要怎样才能弄到memory相关的知识,希望对你有一定的参考价值。

module rom(addr,en,data);
input en;
input[3:0] addr;
output[7:0] data;
reg[7:0] data;

function[7:0] romout;
input[3:0] addr;
begin
case(addr)
3'h0:romout=8'b1010_1001;
3'h1:romout=8'b1111_1101;
3'h2:romout=8'b1110_1001;
3'h3:romout=8'b1101_1101;
3'h4:romout=8'b1011_1001;
3'h5:romout=8'b1100_0010;
3'h6:romout=8'b1100_0101;
3'h7:romout=8'b0000_0100;
3'h8:romout=8'b1110_1100;
3'h9:romout=8'b1000_1010;
3'h10:romout=8'b1100_1111;
3'h11:romout=8'b0011_0100;
3'h12:romout=8'b1100_0001;
3'h13:romout=8'b1001_1111;
3'h14:romout=8'b1010_0101;
3'h15:romout=8'b0101_1100;
default:romout=8'bx;
endcase
end
endfunction

always@(*)
begin
if(en)
data=romout(addr);
else
data=8'bz;
end
endmodule

参考技术A memory bit是由quartus里面的memory生成器自动产生的吧,可以自定义RAM的位数,容量等等。可以查一下相关资料,好像叫memory compiler追问

谢谢你的回答,那再问一下上面的代码能不能综合到FPGA的memory里面?当要利用FPGA的memory资源时就只能像你说的那样用memory compiler?感觉要弄个ROM让它利用上FPGA的memory资源时就只能用ROM IP了。(我是新手,对FPGA的一些知识还很不了解,有些问题可能是错的,但还是希望大家能够指出来)

追答

memory compiler 里面定义RAM位数、容量之后,初始化加载rom数据,不就是相当于ROM的功能了吗?FPGA通常用来做芯片设计验证,实际ASIC设计中,调用ROM IP

本回答被提问者采纳
参考技术B 我来回答一下吧,最终结果看资源的,根据资源消耗情况,软件自己决定是用le还是用mem,当然在综合策略选择上,可适当人为干扰,比如调整优化策略(面积/速度优先),但主要决定权在软件本身对资源的评估

用Verilog写的ROM存储器里面有memory类型变量在Modelsim里面仿真时看不见是怎么回事?求高手指点。谢谢

是不是没有把这个memory定义成端口,要定义成输入或者输出,然后在测试文件中例化,就可以看见了。 参考技术A Step1:关闭所有modelsim窗口。
Step2:把安装目录或者用户根目录下.modelsim文件删掉,重启modelsim。
Step3:在modelsim图形界面中的Windows下拉菜单中点击reset。
Step4:看一下调用库里面的memory模型能看到不,如果可见就在检查一次代码。
Step5:还不行?
参考技术B 这是一个计数器的verilog程序 module counter10(clk,q); input clk; `timescale 1ns/1ns,前一个表示你在tb里头写的数字的单位,后一个表示仿真 参考技术C 要设置成端口

以上是关于用verilog写的ROM用quartusII综合后为啥没综合到memory bit里而是综合到了LE里面要怎样才能弄到memory的主要内容,如果未能解决你的问题,请参考以下文章

如何用verilog综合出RAM和ROM使用BlockRAM

verilog HDL 的$display显示的信息在哪里?

异步fifo要求用verilog编写

关于fpga的除法

Verilog里面如何初始化数组才能被Quartus II综合?

怎么用verilog实现cos,sin等三角函数