如何能从Quartus II中调用Modelsim进行仿真

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何从Quartus II中调用Modelsim进行仿真

--穆永强版本说明:Quartus II 11.0版本;ModelSim-Altera 6.6d版本。

一、设置第三方EDA工具

在Tools -> Options中设置ModelSim的安装路径,注意要设置到win32文件夹(64位软件对应的就是win64)。

在Assignments -> Settings中设置仿真工具为ModelSim。这样Quartus就能无缝调用ModelSim了。

二、编写Testbench

我们可以通过Quartus自动生成一个Testbench的模板,选择Processing -> Start -> Start Test Bench Template Writer,等待完成后打开刚才生成的

Testbench,默认是保存在simulation\modelsim文件夹下的.vt格式文件。

打开vt文件后可以看到Quartus已经为我们完成了一些基本工作,包括端口部分的代码和接口变量的声明,我们要做的就是在这个做好的模具里添加我们需要的测试代码。

一个最基本的Testbench包含三个部分,信号定义、模块接口和功能代码。

‘timescale 1ns/ 1ps表示仿真的单位时间为1ns,精度为1ps。想要进行仿真首先要规定时间单位,而且最好在Testbench里面统一规定时间单位,而不要在工程代码里定义,因为不同的模块如果时间单位不同可能会为仿真带来一些问题,而timescale本身对综合也就是实际电路没有影响。

其实Testbench本身可以看做一个模块或者设备(本例中的模块名为

add_vlg_tst),和你自己编写的模块进行通信。通过Testbench模块向待测模块输出信号作为激励,同时接收从待测模块输出的信号来查看结果。因此,在待测模块中的reg型信号在Testbench中就变成了wire,待测模块中的wire型信号在Testbench 中则对应为reg型。那么inout怎么办呢,inout型信号也要设成wire,同时要用一个reg型信号作为输出寄存器,同时设置一个三态门,由一个使能信号控制,如:assign inout_sig = out_en ? out_reg : 1’bz;

处理完接口和声明之后,需要自己设置一些激励信号,激励信号的容就是肯能会输

入到待测模块中的波形。下面我们就来写一个简单的测试程序。

【复位信号】

initial

begin

rst = 0;

#100 rst = 1;

end

initial开头的这个过程在Testbench中只执行一次,#100表示延时了100个时

间单位,我们之前已经通过timescale进行了设置,这里延时了100ns。这就有点类

似于C语言了,代码通过延时被顺序执行,rst在0时刻为低电平(也就是逻辑0),

100ns后变成高电平,从而形成了一个上电复位。

【时钟】

initial

begin

clk = 0;

while(1)

#10 clk = ~clk;

always模块中的代码会不断重复执行,利用这个特点,每10ns翻转一次clk,只是这样还不行,还要给clk一个初值,就是上面的initial语句。如此便可以生成一个周期为20ns,频率50MHz的方波信号,作为本例的系统时钟。

【输入信号】

initial

begin

a = 1;

b = 3;

#200 a = 2;

b = 0;

#200 a = 3;

b = 3;

end

注意这里a = 1和b = 3是同时发生的,也就是并行的,之后延时200ns,a = 2同时b = 0,如前面所说,想要实现顺序操作,就需要使用延时,如果两个语句间没有延时,就表示同时执行。还有一点,这个initial语句块和负责复位的initial语句块也是并行的,并且都是从0时刻开始。也就是说,0时刻后经过100ns rst_n复位,再经过100ns(从0时刻起),a = 2被执行。

至此,测试程序也完成了,让我们开始仿真吧

【输出信号】

initial

begin

$display($time,"clk=%d rst =%d led =%d", clk, rst, led);

例如:

`timescale 1ns/1ns //单位时间为1ns/精度为1ns module LED_FLOW;

reg CLOCK_50M;

reg RST_n;

wire [9:0] LED;

led led_inst

(

.clk_50M(CLOCK_50M),

.reset_n(RST_n),

.led(LED)

);

initial

begin

CLOCK_50M = 0;

while (1)

#10 CLOCK_50M = ~CLOCK_50M; end

initial

RST_n = 0;

while (1)

#10 RST_n = 1;

end

initial

begin

$display($time,"CLOCK_50M=%d RST_n=%d LED =%d", CLOCK_50M, RST_n, LED); end

endmodule

三、设置Quartus并调用仿真工具

运行仿真之前,还要设置一下。在Simulation选项卡中配置仿真选项,可以配置仿真语言、仿真时间的格式以及输出目录。选中mpile test bench,点击Test Benches 打开Test Benches对话框。

相关文档
最新文档