modelsim仿真ROM IP数据输出为0的解决办法
Posted 只是有点小怂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了modelsim仿真ROM IP数据输出为0的解决办法相关的知识,希望对你有一定的参考价值。
- 解决办法:把mif文件放在根目录下,和文件夹db同一级,File name就会直接显示这个文件名字
- 总结主要问题应该还是出在文件路径
- 主要参考这篇博客 FPGA的ROM-IP核配置问题 https://blog.csdn.net/weixin_41059920/article/details/89841835
- 参考博客 modelsim仿真ROM IP核没有输出数据问题如何解决https://blog.csdn.net/weixin_44939178/article/details/111928005
-
参考博客编写代码测试 ROM IP核的使用(Verilog) https://blog.csdn.net/WJC1997/article/details/118994133
-
顶层模块 ROM,v
module ROM(clk, rst_n, q);
input clk;
input rst_n;
output [7:0] q;
wire [7:0]addr;
//控制地址变化
addr_ctrl addr_ctrl_dut(
.clk(clk),
.rst_n(rst_n),
.addr(addr)
);
//IP核:ROM
rom_8x256 my_rom_dut(
.address(addr),
.clock(clk),
.q(q)
);
endmodule
- 地址模块
module addr_ctrl(clk, rst_n, addr);
input clk;
input rst_n;
output reg [7:0] addr; //控制ROM的地址变化(0~255)
always@ (posedge clk,negedge rst_n)begin
if(rst_n == 1'b0)
addr <= 8'd0;
else if(addr <= 8'd255)
addr <= addr + 8'd1;
else
addr <= 8'd0;
end
endmodule
- 添加仿真文件tb_ROM.v进行测试
`timescale 1ns/1ns
module tb_ROM();
reg clk;
reg rst_n;
wire [7:0] q;
initial
begin
clk = 1'b1;
rst_n <= 1'b0;
#10
rst_n <= 1'b1;
end
always #10 clk = ~clk;
ROM ROM_inst
(
.clk(clk),
.rst_n(rst_n),
.q(q)
);
endmodule
- 存在两个触发器,数据出现比地址出现晚了 2 个时钟周期
-
踩坑记录点
-
没有altera_mf文件仿真库,在modelsim中确实没看见这个仿真库,但有alter_mf_ver应该就行了
-
我在这个安装目录下看到是有这个文件的 \\17.1\\quartus\\eda\\sim_lib\\altera_mf.v
-
看mif文件是否加载进来可以直接点击Memory List选项卡,双击查看是否有数据
-
我试了这个改路径方法不太行 modelsim仿真ROM IP核遇到无法读取mif文件的解决方法 https://blog.csdn.net/huhangf362/article/details/86539478
-
查看rom_8x256文件可以看出mif文件在project文件夹中
-
另外修改IP核的方法,把选项卡切到IP Components双击IP核即可
以上是关于modelsim仿真ROM IP数据输出为0的解决办法的主要内容,如果未能解决你的问题,请参考以下文章
用Verilog写的ROM存储器里面有memory类型变量在Modelsim里面仿真时看不见是怎么回事?求高手指点。谢谢