CrazyBingo

Quartus II 自带Simulaiton 与 Modelsim Simulaiton功能仿真

0
阅读(5023)

Quartus II 自带Simulaiton 与

Modelsim Simulaiton功能仿真

wps_clip_image-26535VSwps_clip_image-17086

目录

Quartus II 自带Simulaiton 与 1

Modelsim Simulaiton功能仿真 1

一、两者优缺点 1

二、彼此仿真步骤 2

1. Quartus II 自带Simulation 2

2. Modelsim Simulation功能仿真 4

一、两者优缺点

1) Quartus II 自带的Simulation比较适合初学者使用,纯粹的GUI,用鼠标设置即可进行仿真,非常简洁明明了。但是相对于比较大的工程,比较复杂的项目,纯粹的手工,死板的设置,或许在设计者面前便是束手无策了,这个时候,无奈之下,《移情别恋,开始Modelsim》。

2) 相对于Quartus II 自带的Simulation而言,Modelsim Simulation虽然也能简单的进行GUI设置激励,但是更强大的在于testbench测试语言,来对逻辑设计进行仿真测试。对于强大的项目,往往是测试占去了大部分时间,如若还用Quartus II自带的Simulation,设计者必然脑残。复杂的同时意味着强大,Modelsim Simulation更适合项目的开发,能熟练运用Modelsim必然对fpga开发项目带来事半功倍的效益。

二、彼此仿真步骤

1. Quartus II 自带Simulation

1) 新建wave_test工程

2) 编辑代码如下

/*-------------------------------------------------------------------------

This confidential and proprietary software may be only used as authorized

by a licensing agreement from CrazyBingo.

(C) COPYRIGHT 2012 CrazyBingo. ALL RIGHTS RESERVED

Filename : led_matrix_display.v

Author : CrazyBingo

Data : 2012-01-18

Version : 0.1

Description : This file has the module of led_matrix_display top.

Modification History :

Data By Version Change Description

===========================================================================

12/01/18 CrazyBingo 0.1 Original

--------------------------------------------------------------------------*/

`timescale 1ns / 1ns

module wave_test

(

//golobal clock

input clk,

input rst_n,

//divide clock

output clk_out,

//adder signals

input [7:0] din1,

input [7:0] din2,

output reg [7:0] dout,

//self add data

output reg [3:0] addout

);

//-------------------------------------

//divide clock

reg [1:0] cnt;

always@(posedge clk or negedge rst_n)

begin

if(!rst_n)

cnt <= 2'b0;

else

cnt <= cnt + 1'b1;

end

assign clk_out = cnt[1];

//-------------------------------------

//add din1 with din2 to dout

always@(posedge clk or negedge rst_n)

begin

if(!rst_n)

dout <= 8'd0;

else

dout <= din1 + din2;

end

//-------------------------------------

//self add addout

always@(posedge clk or negedge rst_n)

begin

if(!rst_n)

addout <= 4'd0;

else

addout <= addout + 1'b1;

end

endmodule

3) 编译修改调试,RTL如下所示

wps_clip_image-17317

4) 新建wave文件,输入激励,如下所示

wps_clip_image-19671

5) Simulation,完成,输出仿真结果如下所示

a) 四分频clk_out

b) 加法器dout

c) 自增addout

wps_clip_image-1600

2. Modelsim Simulation功能仿真

1) 同上

2) 在wave_test代码最前面添加`timescale 1ns / 1ns 即仿真单位为1ns,仿真精度为1ns

注:若多个文件,,每个文件都得加·timescale 1ns/1ns

3) 同上

4) 打开Modelsim,新建wave_test_presynth工程,如下所示

wps_clip_image-12542

a) src(最后一个)为Quartus II中verilog设计源文件保存目录

b) simulation为modelsim工程保存目录

c) presynth为modelsim功能仿真文件保存目录

i. src为testbench 文件保存目录

ii. work为工程文件保存目录

d) postsynth为综合后的功能仿真(后续仿真设计备用,只进行功能仿真没必要此)

e) postlayout为布局布线后的时序仿真(后续仿真设计备用,只进行功能仿真没必要此)

5) Add File wave_test_tb.v的testbench文件,图与代码如下所示

(添加`timescale 1ns / 1ns 即仿真单位为1ns,仿真精度为1ns同上)

`timescale 1ns / 1ns

module wave_test_tb;

//-------------------------------

//golobal clock

reg clk;

reg rst_n;

//divide clock

wire clk_out;

//adder signals

reg [7:0] din1;

reg [7:0] din2;

wire [7:0] dout;

//self add data

wire [3:0] addout;

//-------------------------------

wave_test U_wave_test

(

//golobal clock

.clk   (clk),

.rst_n (rst_n),

//divide clock

.clk_out (clk_out),

//adder signals

.din1 (din1),

.din2 (din2),

.dout (dout),

//self add data

.addout (addout)

);

//-------------------------------

//初始化

initial

begin

clk = 1'b0;

rst_n = 1'b0;

#20 rst_n = 1'b1;

end

always

#10 clk = !clk; //20ns,50MHz

//-------------------------------

//输入加法器激励

initial

begin

#20   din1 = 8'h11;   din2 = 8'h22;

#100  din1 = 8'h33;  din2 = 8'h44;

#500  din1 = 8'h55;  din2 = 8'h66;

End

endmodule

当然也可以在Quartus中新建此文件到目录下,或者Modelsim中新建,如下所示

wps_clip_image-27141

wps_clip_image-6298

6) Add Exitiing Files,添加Quartus src文件如下

wps_clip_image-12176wps_clip_image-13177

7) Compile All差错修正,若有错误双击error便会跳出错误提示

wps_clip_image-31378

8) Simulation-Start Simulation,选择work中的wave_test_tb文件为design Units,OK,如下所示(添加design units也可以预编译库文件,下篇中讲述;或者直接在library-work中右键单击warm_test_tb,选择simulation,或者直接双击即可)

wps_clip_image-25915

wps_clip_image-31760

此时已经对wave_test_tb.v于wave_test进行Loading,VSIM 2>表示等待命令

9) Modelsim必须做完Simulation才能把所有档案link起来,因此(8)之后添加激励如下所示。打开View-Wave,然后在View-Objects中wave_test_tb的objects添加需要的输入到Wave中,此处与Quartus II无异。如下图所示:

wps_clip_image-12055

10) 在Transcript窗口VISIM 2>后面输入 run 1000ns(表示运行1000ns),如此如下所示

wps_clip_image-31649

11) 点击Wave窗口右上角的wps_clip_image-16530Dock/Undock,更方便查看wave,如下图所示

wps_clip_image-8128

修改显示的进制格式与Quartus II无异。

12) 复位仿真与结束仿真(也可在Transcript用tcl脚本实现)

wps_clip_image-12069wps_clip_image-5471

其他按钮功能如下:

wps_clip_image-5094

13) 如要修改:结束仿真--修改代码--编译--run即可

14) 再试试,不行就再试试,试着试着,就行了。