最近做
仿真需要用到Quartus ii里的ROM IP核,为了验证功能,我新建了工程,生成IP核,数据深度512,位宽8bit,用
matlab产生512个随机整数,新建hex文件,将512个随机数粘贴进hex文件表格里,保存后导入ip核。编写v文件和testbench代码,想在测试时根据addr依次读出rom中存储的随机数。结果仿真波形如下,没报错:
输出波形完全看不懂。。。
后来我又生成了mif文件,直接在已生成的ip核中修改了初始化文件为mif文件,结果点击Finish按钮时就开始报错,
实在弄不动了,请教大神是什么原因~
像ram,rom这样的,可以采用代码映射的模块,不如直接用verilog,这样描述问题更清晰。如:
module rom
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=9)
(
input [(ADDR_WIDTH-1):0] addr,
input clk,
output reg [(DATA_WIDTH-1):0] q
);
reg [DATA_WIDTH-1:0] rom[2**ADDR_WIDTH-1:0];
initial
begin
$readmemb("rom_init_binary.txt", rom);
end
always @ (posedge clk)
begin
q <= rom[addr];
end
endmodule
数据文件这里用的是二进制,每行一个数据即可。
多谢大神!回去试试
一周热门 更多>