基于Quartus II+ModelSim SE的后仿真(Verilog版)
基于Quartus II+ModelSim SE的后仿真(Verilog版)
一、Quartus 中的相关设置
- 在Quartus中建立名为counter的工程,设置仿真工具为ModelSim(Verilog),这一步您可以在New Project Wizard中指定(如图1所示),也可以在后面的Assignments->EDA Tool Settings中设置
- 设置完以后,在 Quartus 中进行全编译,这里使用 counter.v作为例子,这样在工程目录下会生成 simulation 文件夹,内部ModelSim文件夹中有三个文件分别是counter.vo(布局布线后的仿真模型文件),counter_modelsim.xrf(好像是实例化的元件),counter_v.sdo(标准延时输出文件)。到这里可以关闭Quartus II了!
二、ModelSim 中手工添加 Altera的仿真库
在您的ModelSim安装目录中建立两个文件夹,一个是用于存放公用的库我给它取名altera_base_v;另一个是用于存放您要用到的特定的器件库,我用到的是cyclone系列所以命名为cyclone_v。我是这样建的:
注意要在altera_base_v和cyclone_v两个目录下分别新建一个 _info ,否则在对库文件进行编译的时候会提示找不到_info文件。
- 现在可以启动您的ModelSim SE了。从主菜执行File->New->Library 命令,出现对话框如图3所示,选中a new library and a logical mapping to it,在Library Name填写altera_base_v,Library Physical Name填。填写如图3所示:
图3 图4
- 点击OK,如图4所示,可以看到altera_base_v这样一个库名,不过这时库里面还是空的。如果要修改库文件映射的名称或者路径,在相应的库上右击,如图4中的altera_base_v,选择Edit,就可以进行相应的修改,注意修改后的结果不能立即生效,立即点击Compile->Compile…Compile>Compile…会出错。可以右击Update就可以使修改生效。
- 从主菜单工具栏中执行 Compile->Compile…命令,弹出一个对话框,点中 Library 下拉菜单,由 work改为 altera_base_v,点中查找范围下拉菜单,指向 Quartus II 安装目录\quartus\eda\sim_lib,对图 5 中的220model.v、altera_mf.v和altera_primitives.v三个文件进行编译。
图5
- 现在开始编译您要用到的器件库,我要用的是 cycloneii 系列的 FGPA 我就只编译 cycloneii 相关的.v 文件就好了。重复1至3的步骤,并编译cycloneii_atoms.v 。
图6
- 编译结束后,点击Done按钮。这样虽然编译了仿真时所需的Altera库文件。为了在每次新建工程的时候不需要重新编译Altera的仿真库,需要修改Modelsim的安装目录下的modelsim.ini文件。
第一步 选中modelsim.ini文件,右键单击属性,将只读属性去掉。
第二步 用写字板或其它工具打开modelsim.ini文件,在[Library]这个位置下面添加如下2行,如图7所示:
图7
第三步 保存文件,关闭文件后,再将只读属性打开。 最后在左侧面板位置点鼠标右键->Refresh一下。
三、现在开始建立您的 ModelSim 工程了。
1. 在ModelSim 中新建一个工程工程目录可以直接使用 Quartus生成的 “Quartus工程所在目录\simulation\modelsim”,把 counter.v 还有测试文件 counter_tb.v一起 Copy 到这个文件夹中。
2. 点击ModelSim面板中的File->New->Project…选项,新建一个工程,点击 Add new file to project 将counter.v , coumter_tb.v , 和 counter.vo三个文件添加到工程中去,这三个文件是后仿真所需要的。
4. 编译上述的三个文件,如果正确会在命令窗口出现如图8的提示信息
图8
- 点击工具栏的 simulate->start simulate,启动仿真设置页面如下。选中上面的选项卡中的 Design 再点击 work 左边的“+”,选中文件 counter_tb.v,如图 9 所示。把 Enable optimization 前面的勾去掉。选中Libraries加载刚才建的库如图11所示。
图9
- 选中选项中的DSF,在SDF File中,点Browse...找到ModelSim中的工程目录,找counter_v.sdo加入。其中作用域 Apply Region 即为顶层模块的例化名称,这里是 u1 。如图10:
图10
- 然后点击 OK,准备运行,若有问题会在命令窗口中显示响应警告信息。选择View> Wave,出现波形窗口,点击Run-all , Break,得到仿真波形。需要注意的是,当不小心修改了 .v 文件时,由于 .vo文件未能实时更新,会造成仿真无法进行,这是需要打开Quartus重新综合,在Modelsim下对最新的 .vo 文件重新进行编译,就可以了。仿真结果如图11:
图11
可以发现,后仿真的信号数量比功能仿真要多得多,并且从波形输出中也可以看到明显的由器件本身带来的延时。图12是信号的局部放大图。
图12
附录:
/***** 顶层文件 : counter.v *****/
module counter(
clk,
dout
);
input clk;
output [7:0]dout;
reg [7:0] cnt;
initial
cnt = 8'd0;
always @ (posedge clk)
begin
if(cnt == 8'd255)
cnt = 8'd0;
else
cnt = cnt + 8'd1;
end
assign dout = cnt;
endmodule
/***** test bentch : counter_tb.v *********/
`timescale 1ns/1ns
module counter_tb;
reg clk;
wire [7:0] dout;
always
#10 clk = ~clk;
initial
clk = 0;
counter u1(.clk(clk),.dout(dout));
endmodule