Quartus II ROM IP核仿真配置
在FPGA开发中,会经常使用到ROM IP核,特别是存储一些序列号、版本信息、加密信息时。ROM IP核使用比较简单,但是利用Quartus软件下子程序modelsim-altera联合仿真时,按正常的使用流程却往往仿真不了。例如下面这个简单的代码:
module rom_test( input wire clk, input wire rst, output wire [7:0] q ); reg [7:0] address; always@(posedge clk or posedge rst) begin if(rst) address <= 0; else address <= address + 1; end rom rom_inst ( .address ( address ), .clock ( clk ), .q ( q ) ); endmodule
tb 文件如下:
`timescale 1ns/1ns module rom_test_tb(); reg clk; reg rst; wire [7:0] q; initial begin clk = 0; rst = 1; #5 rst = 0; end always #10 clk = ~clk; rom_test inst_rom_test( .clk (clk), .rst (rst), .q (q) ); endmodule
原本是一个非常简单的工程,也配置了rom ip核以及对应的mif文件作为初始化文件。但就是仿真不了。modelsim运行后得不到rom里的数据:
图1
查看modelsim提示,能看到下面的提示信息:
图2
图2显示找不到 mif 文件。(使用的软件版本:<ModelSimSetup-18.1.0.625-windows.exe> <QuartusLiteSetup-18.1.0.625-windows.exe>)
问题原因:
原因如提示信息中所说的,找不到mif文件,打开失败。这个配置其实并没有错误,那怎么会找不到文件呢?
这应该算Quartus 和ModelSim 两个软件配合中的一个小bug了。具体原因是rom 配置的时候,指定mif 文件的路径,记录的是相对路径,如下图:
图3
此相对路径,是相对于quartus而言,也就是相对于“ rom_test.qpf”这个文件。但是modelsim在遇到这个路径的时候,却以为这个相对于它自己(rom_test_run_msim_rtl_verilog.do)的。所以找不到文件。
解决办法:
1、可以将mif文件复制一份到modelsim的文件夹下。让modelsim按照相对路径也能找到mif文件。按上图的配置,则只需要把mif所在文件夹复制到rom_test_run_msim_rtl_verilog.do的上层目录。
2、可以在运行仿真前修改ROM IP 核里的初始化文件路径信息,也就是要修改 rom.v 文件,找到 “altsyncram_component.init_file = “../ipcore/rom_test.mif”,” 这条语句,使文件位置和路径能匹配的上。(不推荐)
经过上面的修改,就可以解决问题了:
图4
从图4的显示可以看出,经过以上两种配置办法,都可以很好的解决问题。