modelsim仿真.docx

上传人:b****5 文档编号:6074168 上传时间:2023-01-03 格式:DOCX 页数:15 大小:347.77KB
下载 相关 举报
modelsim仿真.docx_第1页
第1页 / 共15页
modelsim仿真.docx_第2页
第2页 / 共15页
modelsim仿真.docx_第3页
第3页 / 共15页
modelsim仿真.docx_第4页
第4页 / 共15页
modelsim仿真.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

modelsim仿真.docx

《modelsim仿真.docx》由会员分享,可在线阅读,更多相关《modelsim仿真.docx(15页珍藏版)》请在冰豆网上搜索。

modelsim仿真.docx

modelsim仿真

Abstract

本文介紹使用ModelSim做前仿真,並搭配QuartusII與ModelSim作後仿真。

Introduction

使用環境:

QuartusII8.1+ModelSim-Altera6.3g

由於FPGA可重複編程,所以不少開發人員就不寫testbench,直接使用QuartusII的programmer燒進開發板看結果,或者使用QuartusII自帶的WaveformEditor進行仿真,這種方式雖然可行,但僅適用於小project,若project越寫越大,QuartusII光做fitter就很耗時間,一整天下來都在作QuartusII編譯。

比較建議的方式,還是學ASIC那招:

『寫testbench先對每個module作前仿真,再對每個module作後仿真,最後再燒入FPGA測試。

這種方式的優點是:

1.testbench比waveformeditor可更靈活的描述電路規格。

2.testbench可使用Verilog的系統函數,如$display()、$fwrite()...等。

但要使用testbench作仿真,單獨QaurtusII並無法做到,就得使用ModelSim了,這又牽涉到『前仿真』與『後仿真』。

所謂的『前仿真』,就是QuartusII的FunctionalSimulation,不考慮電路的門延遲與線延遲,重點在觀察電路在理想環境下的行為與設計構想是否一致[1]。

由於沒經過fitter階段,所以模擬速度很快。

前仿真結果正確,並不表示將來結果結果正確,但若前仿真結果不正確,則將來結果一定不正確。

所謂的『後仿真』,就是QuartusII的TimingSimulation,考慮了電路的門延遲與線延遲,由於經過fitter階段,所以模擬結果最為精準。

但fitter在QuartusII編譯需耗費很多時間,所以建議『前仿真』正確後,再考慮『後仿真』。

使用QuartusII的waveformeditor作前仿真與後仿真,我就不再多談,本文主要是談如何使用ModelSim-Altera作前仿與後仿。

1.使用GUI的方式在ModelSim-Altera作前仿真。

2.使用DOmacro在ModelSim-Altera作前仿真。

3.使用QuartusII+ModelSim-Altera作後仿真。

Counter.v/Verilog

1 /* 

2 (C)OOMusou2008

4 Filename   :

Counter.v

5 Compiler   :

QuartusII8.1/ModelSim-Altera6.3g

6 Description:

simplecounter

7 Release    :

01/30/20091.0

8 */

10 `timescale1ns/100ps

11 

12 moduleCounter(

13  input       CLK,

14  input       RST_N,

15  output[3:

0]CNT

16 );

17 

18 reg[3:

0]cnt;

19 assignCNT=cnt;

20 

21 always@(posedgeCLK,negedgeRST_N)begin

22  if(!

RST_N)

23    cnt<=#5 4'h0;

24  else

25    cnt<=#5cnt+ 1'b1; 

26 end

27 

28 endmodule

复制代码

一個很簡單的counter,從0數到15重複數。

由於要使用ModelSim作前仿,所以在reg做了delay,不過這在QuartusII作合成時會自動忽略,因為delay並非可合成的Verilog。

一般寫給FPGA的RTL,都不會去設定timescale,不過由於要用ModelSim作前仿,所以要加上timescale。

Counter_tb.v/Verilog 

1 /* 

2 (C)OOMusou2008

4 Filename   :

Counter_tb.v

5 Compiler   :

QuartusII8.1/ModelSim-Altera6.3g

6 Description:

simplecountertestbench

7 Release    :

01/30/20091.0

8 */

10 `timescale1ns/100ps

11 

12 moduleCounter_tb;

13 

14 reg       clk;

15 reg       rst_n;

16 wire[3:

0]cnt;

17 

18 parameterPERIOD= 20;

19 

20 Countercounter(

21  .CLK(clk),

22  .RST_N(rst_n),

23  .CNT(cnt)

24 );

25 

26 initial begin

27  #0clk  = 1'b0;

28     rst_n= 1'b0;

29  #5rst_n= 1'b1;

30 end

31 

32 //50MHz

33 always#(PERIOD/2)clk= ~clk;

34 

35 endmodule

复制代码

一個很典型的testbench,唯一要注意的是第28行。

  rst_n= 1'b0;

#5rst_n= 1'b1;

复制代码

之所以一開始要將rst_n為0,是因為ModelSim與QuartusII對reg初始值看法不一樣,QuartusII認為reg初始值為0,但ModelSim認為reg初始值為x,所以需要rst_n=1'b0將reg歸0,這樣用ModelSim前仿才會正確,但ModelSim後仿可以不這樣做,因為QuartusII會先做處理。

不過為了前仿與後仿都使用同一個testbench,建議加上rst_n=1'b0設定reg初始值為0。

有了RTL與testbench之後,來看看如何使用ModelSim作前仿與後仿。

1.使用GUI的方式在ModelSim-Altera作前仿真

ModelSim提供了全GUI的方式,只要使用操作的方式,就能做前仿。

Step1:

File->NewProject

Step2:

AddExistingFile

將Counter.v與Counter_tb.v加入

Step3:

CompileAll

選擇Counter.v或者Counter_tb.v,按滑鼠右鍵,選擇Compile->CompileAll,編譯所有Verilogcode。

編譯成功。

Step4:

Simulate

在Librarytab選擇Counter_tb,按滑鼠右鍵,選Simulate。

Simulate成功。

 

Step5:

AddSignaltoWave

將欲觀察的信號從Objects加入Wave,加入clk,rst_n與cnt。

最後結果。

Step6:

Run300ns

最後前仿結果。

2.使用DOmacro在ModelSim-Altera作前仿真

ModelSim也提供macro的方式,以上所有的GUI操作,都可以使用TCLscript描述。

Step1與Step2與之前一樣。

Step3:

ExecuteMacro

Counter_wave.do/ModelSimMacro 

1 #compile

2 vlogCounter.v

3 vlogCounter_tb.v

5 #simulate

6 vsimCounter_tb

8 #probesignals

9 addwave*

10 

11 #300ns

12 run 300ns

复制代码

最後前仿結果。

3.使用QuartusII+ModelSim-Altera作後仿真

Step1:

設定QuartusII使用ModelSim-Altera作後仿真

Assignments->Settings->Category:

EDAToolSettings->Simulation:

Toolname:

ModelSim-Altera

選取Rungate-levelsimulationautomaticallyaftercompilation

Formatforoutputnetlist:

Verilog

Timescale:

1ns

Step2:

設定testbench

在同一頁的NativeLinksettings選擇Compiletestbench,按下TestBenches..加入Counter_tb.v。

比較詭異的是,Testbenchname、Toplevelmoduleintestbench與Designinstancenameintestbench無法自己抓到,必須自己填。

Step3:

編譯與模擬

Processing->StartCompilation

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1