Quartus Prime 中集成了Modelsim,可以调用Modelsim对顶层文件进行仿真。
1、初次使用的话,设置Modelsim-Altera的安装路径:
Tools--Options
General--EDA Tool Options,设置仿真工具的目录。右侧窗口选择你电脑Quartus安装目录中Modelsim-altera的位置,示例如图
2、打开或者新建工程,将当前工程的仿真工具设为ModelSim-Altera
这里以一个译码器的工程为例:
module decode7(keys,segment);
input [3:0] keys;
output [7:0]segment;
reg [7:0] segment;
always @(*)
begin
case(keys)
4'd0:segment = 8'hC0;
4'd1:segment = 8'hF9;
4'd2:segment = 8'hA4;
4'd3:segment = 8'hB0;
4'd4:segment = 8'h99;
4'd5:segment = 8'h92;
4'd6:segment = 8'h82;
4'd7:segment = 8'hF8;
4'd8:segment = 8'h80;
4'd9:segment = 8'h90;
default:segment = 8'hFF;
endcase
end
endmodule
工程设计完成后,设置Assignments -- Settings,弹出的对话框中,左侧选择EDA Tool Setting -- Simulation,右侧的第一个下拉列表选择ModelSim-Altera,示例如图。
3、生成测试文件.vt
先对工程执行分析综合: Analysis & Synthesis
然后生成测试文件模板,操作如下。
生成的.vt文件位于当前工程目录中..\simulation\modelsim\ 文件夹内。
生成的 .vt只是一个模板,并不完整,需要补充。用Quartus打开这个.vt 测试文件:
编辑需要的测试激励后,保存。
`timescale 1 ns/ 1 ps
module decode7_vlg_tst();
reg [3:0] keys;
wire [7:0] segment;
decode7 i1 (
.keys(keys),
.segment(segment)
);
initial
begin
keys = 4'd0;#50;
keys = 4'd1;#50;
keys = 4'd2;#50;
end
endmodule
拷贝下vt文件中的顶层模块名,decode7_vlg_tst
4、将激励文件添加到仿真接口
Assignments -- Settings,弹出的对话框中,左侧选择EDA Tool Setting -- Simulation,右侧的第一个下拉列表选择ModelSim-Altera,下面添加Test Benches,流程示例如图。
第一个Test Bench name给当前的仿真起个名字,可以粘贴刚才的 .vt 里 decode7_vlg_tst
第二个Top level module ....粘贴测试文件.vt 里顶层module的名字 decode7_vlg_tst
点击Add后,点击OK--OK---OK........
5、功能仿真
Tools -- Run ---RTL Simulation(寄存器传输级仿真,与功能仿真相同),等一会儿,大约几十秒,弹出modelsim仿真窗口和结果
6、时序仿真
运行完功能仿真后,如果想观察芯片实际延时信息,可以做时序仿真。
将仿真设置里的 More EDA Netlist Writer Setting ---- Generate funtional simulation netlist, 改成 Off
需要确保设置过芯片型号、引脚分配,然后完整编译。
然后运行时序仿真:Tools -- Run ---Gate level Simulation。弹出一个仿真模型,选一个即可。
常见错误:
1、功能仿真时,输出无信号,波形显示红色直线。
原因:可能是由于设计文件中的寄存器没有初始值,而电路基于该寄存器进行了取值、判断等操作,导致获取不到寄存器的值。
解决办法:为电路添加复位信号,在复位信号有效时给寄存器赋初值。
说明:这是仿真器的问题。在实际电路中,芯片上电后,寄存器内必然有值。
2、error deleting "msim_transcript": permission denied.
原因:Modelsim已经打开了,不能进行新的仿真。
解决办法:关闭已经打开的Modelsim,重新启动仿真。
3、其他错误解决办法
测试文件如果有语法错误的话,会在modelsim的输出窗口以红色字体给予提示。