如何在quartusii使用教程 II 里使用Modelsim

2884人阅读
声明:本文复制与网上,非本人自己写,感觉内容不错,供大家分享学习
(筆記) 如何使用ModelSim作前仿真與後仿真? (SOC) (Quartus II) (ModelSim)
本文介紹使用ModelSim做前仿真,並搭配Quartus II與ModelSim作後仿真。
Introduction
使用環境:Quartus II 8.1 + ModelSim-Altera 6.3g
由於FPGA可重複編程,所以不少開發人員就不寫testbench,直接使用Quartus II的programmer燒進開發板看結果,或者使用Quartus II自帶的Waveform Editor進行仿真,這種方式雖然可行,但僅適用於小project,若project越寫越大,Quartus II光做fitter就很耗時間,一整天下來都在作Quartus II編譯。
比較建議的方式,還是學ASIC那招:『寫testbench先對每個module作前仿真,再對每個module作後仿真,最後再燒入FPGA測試。』
這種方式的優點是:
1.testbench比waveform editor可更靈活的描述電路規格。
2.testbench可使用Verilog的系統函數,如$display()、$fwrite()...等。
但要使用testbench作仿真,單獨Qaurtus II並無法做到,就得使用ModelSim了,這又牽涉到『前仿真』與『後仿真』。
所謂的『前仿真』,就是Quartus II的Functional Simulation,不考慮電路的門延遲與線延遲,重點在觀察電路在理想環境下的行為與設計構想是否一致[1]。由於沒經過fitter階段,所以模擬速度很快。前仿真結果正確,並不表示將來結果結果正確,但若前仿真結果不正確,則將來結果一定不正確。
所謂的『後仿真』,就是Quartus II的Timing Simulation,考慮了電路的門延遲與線延遲,由於經過fitter階段,所以模擬結果最為精準。但fitter在Quartus II編譯需耗費很多時間,所以建議『前仿真』正確後,再考慮『後仿真』。
使用Quartus II的waveform editor作前仿真與後仿真,我就不再多談,本文主要是談如何使用ModelSim-Altera作前仿與後仿。
1.使用GUI的方式在ModelSim-Altera作前仿真。
2.使用DO macro在ModelSim-Altera作前仿真。
3.使用Quartus II + ModelSim-Altera作後仿真。
Counter.v / Verilog
<span style="color:#
<span style="color:#
<span style="color:# `timescale 1ns/<span style="color:#0ps
<span style="color:#
<span style="color:# moduleCounter (
<span style="color:# input&&&&&&& CLK,
<span style="color:# input&&&&&&& RST_N,
<span style="color:# output[<span style="color:#:<span style="color:#]
<span style="color:# );
<span style="color:#
<span style="color:# reg[<span style="color:#:<span style="color:#]
<span style="color:# assignCNT
<span style="color:#
<span style="color:# always@(posedgeCLK,
negedgeRST_N)
<span style="color:# if(!RST_N)
<span style="color:# &&& cnt&=
#<span style="color:#<span style="color:#'h0;
<span style="color:# else
<span style="color:# &&& cnt&=
#<span style="color:#cnt
&#43; <span style="color:#'b1;
<span style="color:# end
<span style="color:#
<span style="color:# endmodule
一個很簡單的counter,從0數到15重複數。由於要使用ModelSim作前仿,所以在reg做了delay,不過這在Quartus II作合成時會自動忽略, 因為delay並非可合成的Verilog。
一般寫給FPGA的RTL,都不會去設定timescale,不過由於要用ModelSim作前仿,所以要加上timescale。
Counter_tb.v / Verilog
<span style="color:#
<span style="color:#
<span style="color:# `timescale 1ns/<span style="color:#0ps
<span style="color:#
<span style="color:# moduleCounter_
<span style="color:#
<span style="color:# reg&&&&&&&
<span style="color:# reg&&&&&&& rst_n;
<span style="color:# wire[<span style="color:#:<span style="color:#]
<span style="color:#
<span style="color:# parameterPERIOD
= <span style="color:#;
<span style="color:#
<span style="color:# Counter counter (
<span style="color:# .CLK(clk),
<span style="color:# .RST_N(rst_n),
<span style="color:# .CNT(cnt)
<span style="color:# );
<span style="color:#
<span style="color:# initialbegin
<span style="color:# #<span style="color:#clk&&
=<span style="color:#'b0;
<span style="color:# &&&& rst_n=
<span style="color:#'b0;
<span style="color:# #<span style="color:#rst_n
= <span style="color:#'b1;
<span style="color:# end
<span style="color:#
<span style="color:# //<span style="color:#MHz
<span style="color:# always#(PERIOD/<span style="color:#) clk=
<span style="color:#
<span style="color:# endmodule
一個很典型的testbench,唯一要注意的是第28行。
= <span style="color:#'b0;
#<span style="color:#
rst_n = <span style="color:#'b1;
之所以一開始要將rst_n為0,是因為ModelSim與Quartus II對reg初始&#20540;看法不一樣,Quartus II認為reg初始&#20540;為0,但ModelSim認為reg初始&#20540;為x,所以需要rst_n=1'b0將reg歸0,這樣用ModelSim前仿才會正確,但ModelSim後仿可以不這樣做,因為Quartus II會先做處理。
不過為了前仿與後仿都使用同一個testbench,建議加上rst_n = 1'b0設定reg初始&#20540;為0。
有了RTL與testbench之後,來看看如何使用ModelSim作前仿與後仿。
1.使用GUI的方式在ModelSim-Altera作前仿真
ModelSim提供了全GUI的方式,只要使用操作的方式,就能做前仿。
File -& New Project
Add Existing File
將Counter.v與Counter_tb.v加入
Compile All
選擇Counter.v或者Counter_tb.v,按滑鼠右鍵,選擇Compile-&Compile All,編譯所有Verilog code。
編譯成功。
在Library tab選擇Counter_tb,按滑鼠右鍵,選Simulate。
Simulate成功。
Add Signal to Wave
將欲觀察的信號從Objects加入Wave,加入clk,rst_n與cnt。
最後結果。
最後前仿結果。
2.使用DO macro在ModelSim-Altera作前仿真
ModelSim也提供macro的方式,以上所有的GUI操作,都可以使用TCL script描述。
Step 1與Step 2與之前一樣。
Execute Macro
Counter_wave.do / ModelSim Macro
<span style="color:# #compile
<span style="color:# vlog Counter.v
<span style="color:# vlog Counter_tb.v
<span style="color:#
<span style="color:# #simulate
<span style="color:# vsim Counter_tb
<span style="color:#
<span style="color:# #probe signals
<span style="color:# add wave *
<span style="color:#
<span style="color:# #<span style="color:#0ns
<span style="color:# run<span style="color:#0
最後前仿結果。
3.使用Quartus II &#43; ModelSim-Altera作後仿真
設定Quartus II使用ModelSim-Altera作後仿真
Assignments -& Settings -& Category :EDA Tool Settings -& Simulation:Tool name:ModelSim-Altera
選取Run gate-level simulation automatically after compilation
Format for output netlist:Verilog
Time scale:1 ns
設定testbench
在同一頁的NativeLink settings選擇Compile test bench,按下TestBenches..加入Counter_tb.v。比較詭異的是,Test bench name、Top level module in test bench與Design instance name in test bench無法自己抓到,必須自己填。
編譯與模擬
Processing -& Start Compilation
来自:.cn/s/blog_76eef73b0100v3om.html
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:439924次
积分:5879
积分:5879
排名:第2845名
原创:124篇
转载:148篇
评论:76条
(2)(1)(2)(2)(2)(1)(2)(1)(3)(3)(4)(2)(2)(4)(18)(3)(1)(14)(3)(8)(11)(1)(5)(7)(25)(2)(40)(22)(11)(14)(6)(6)(18)(20)(4)(2)在Quartus II中如何调用modelsim_百度知道
在Quartus II中如何调用modelsim
调用时直接tools下的run EDA在tools菜单下的options中设置modelsim的路径...好像是第一个选项
其他类似问题
为您推荐:
其他2条回答
最后记得选择编译后自动仿真。设置第三方工具是选择modelsim 或者modelsim-Altera。根据你的版本而定,setting-simulation,就可以了,实例引用的名称等。我刚做过,填写测试模块名称,实体名。,选择新建测试,选择。在后面时,加入testbeach
和顶层文件放在同一目录下并且在Files设置下 加入到工程中
modelsim的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Quartus ii中使用modelsim-alter进行仿真,该怎么处理 - 硬件开发当前位置:& &&&Quartus ii中使用modelsim-alter进行仿真,该怎么处理Quartus ii中使用modelsim-alter进行仿真,该怎么处理&&网友分享于:&&浏览:152次Quartus ii中使用modelsim-alter进行仿真怎么样在Quartus ii 11.1中用modelsim-altera 10.0C对原理图进行功能仿真,由于是初学者,懂得很少,请各位大侠尽量说详细点......------解决方案--------------------
不需要在quartus ii中调用 直接用modelsim仿真即可
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
=============================================================================首先打开Quatus ii,File-&New Project Wizard.操作如下。之后出现如下界面,单击Next按钮.出现如下对话框,输入工程位置:G:\GrayCounter,工程名为:GrayCounter,设置顶层文件:GrayCounter,此次试验比较简单,顶层文件和工程名就命名为一样的。之后单击 Next, &有以下对话框:再单击Next。&&在对话框中设置FPGA为Cyclone II家族的,EP2C8Q208C8,单击Next.对话框中都默认,然后单击Next,&有以下对话框,单击Finish。&&&&Quartus中有以下界面:可以看到工程文件为:GrayCounter&之后要新建一个verilog文件,File-&New选择以下:verilog HDL File,单击OK按钮。在verilog 文件中输入:以下代码:`timescale 1ps/1psmodule GrayCounter &#(parameter N=5 )( input clk, input rst_n, output reg [N-1:0] gray); reg [N-1:0] reg [N-1:0] always @ (posedge clk ,negedge rst_n) begin
if(!rst_n)
cnt &= 1'b0;
cnt &= cnt +1'b1; endalways @(cnt) begin
temp[N-1] = cnt[N-1];
for(i=1; i&=N-1;i=i+1)
temp[i-1] = cnt[i-1]^cnt[i]; endalways @ (posedge clk, negedge rst_n) begin &
if(!rst_n)
gray&=1'b0;
$display("gray=%b",gray); & & & &end
end&endmodule窗口如下:&然后保存verilog文件:Ctrl+S快捷键:出现以下对话框,文件名为GrayCounter,类型选择Verilog文件类型,单击保存。保存之后原来的verilog1文件变为: GrayCounter.v文件。&&&&之后编译工程,Processing-&Start Compilation,编译工程。&.编译成功出现如下界面:&接下来设置Modelsim的设置。Tools-&Option.&&在General-&EDA tool options-&Modelsim-Altera,设置 Modelsim-Altera&的安装路径:G:\altera\91\modelsim_ae\win32aloem(选你自己的安装路径)&开始设置testbench的相关设置项。Processing-&start test bench template writer,&生成的文件位置在这里:G:\GrayCounter\simulation\modelsim\GrayCounter.vtGrayCounter.vt是testbench文件,在modelsim6.5中也可以使用.v文件作为testbench文件,都是可行的。这里顺便说一下:为什么使用Modelsim-altera呢,因为modelsim6.5每次都要写实例化文件,要要自己建立modelsim的工程,相对来说麻烦,而Modelsim-altera每次打开Quartus工程,设置一次就可以使用Modelsim-altera,实例化等基本内容已经写好,省去很多时间。GrayCounter.vttestbench文件内容如下代码:这一步是建立一个仿真模板文件,模板文件提供了基本的写法,具体的testbench文件内容还要自己写。===============================================================// Copyright (C)
Altera Corporation// Your use of Altera Corporation's design tools, logic functions&// and other software and tools, and its AMPP partner logic&// functions, and any output files from any of the foregoing&// (including device programming or simulation files), and any&// associated documentation or information are expressly subject&// to the terms and conditions of the Altera Program License&// Subscription Agreement, Altera MegaCore Function License&// Agreement, or other applicable license agreement, including,&// without limitation, that your use is for the sole purpose of&// programming logic devices manufactured by Altera and sold by&// Altera or its authorized distributors. &Please refer to the&// applicable agreement for further details.// *****************************************************************************// This file contains a Verilog test bench template that is freely editable to &// suit user's needs .Comments are provided in each section to help the user & &// fill out necessary details. & & & & & & & & & & & & & & & & & & & & & & & & &// *****************************************************************************// Generated on "05/29/:48"& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&// Verilog Test Bench template for design : GrayCounter//&// Simulation tool : ModelSim-Altera (Verilog)//&`timescale 1 ps/ 1 psmodule GrayCounter_vlg_tst();// constants & & & & & & & & & & & & & & & & & & & & &&// general purpose registers// test vector input registersreg rst_n;// wires & & & & & & & & & & & & & & & & & & & & & & &&wire [4:0] &// assign statements (if any) & & & & & & & & & & & & &GrayCounter i1 (// port map - connection between master ports and signals/registers && .clk(clk), .gray(gray), .rst_n(rst_n));initial & & & & & & & & & & & & & & & & & & & & & & & &begin & & & & & & & & & & & & & & & & & & & & & & & & &// code that executes only once & & & & & & & & & & & &// insert code here --& begin & & & & & & & & & & & & && & & & & & & & & & & & & & & & & & & & & & & & & & & &// --& end & & & & & & & & & & & & & & & & & & & & & &&$display("Running testbench"); & & & & & & & & & & &&end & & & & & & & & & & & & & & & & & & & & & & & & & &always & & & & & & & & & & & & & & & & & & & & & & & &&// optional sensitivity list & & & & & & & & & & & & &&// @(event1 or event2 or .... eventn) & & & & & & & & &begin & & & & & & & & & & & & & & & & & & & & & & & & &// code executes for every event on sensitivity list &&// insert code here --& begin & & & & & & & & & & & & && & & & & & & & & & & & & & & & & & & & & & & & & & & &@ & & & & & & & & & & & & & & & & & & & & & & &// --& end & & & & & & & & & & & & & & & & & & & & & &&end & & & & & & & & & & & & & & & & & & & & & & & & & &endmodule===================================================================================可以看出文件中提供了模块的写法和实例化调用,做以下修改,以适合我的工程。修改GrayCounter.vt & testbench文件之后,GrayCounter.vt & testbench文件内容如下:===================================================================================`timescale 1 ps/ 1 psmodule GrayCounter_vlg_tst();reg rst_n; & & & & & & & & & & & & & & & & & & & & & &&wire [4:0] && & & & & & & & & &GrayCounter i1 ( .clk(clk), .gray(gray), .rst_n(rst_n));&initial&
$display("Running testbench"); & &
& &rst_n = 0;& & & #5 rst_n = 1; & & & & && & & #500000& & & $ &&
end && & &always#1 clk = ~ & & && & & & & & & & & & & & & & & & & & & & & &&endmodule=================================================================================== 接下来设置工程&&设置GrayCounter工程:在 工程上右键settings在EDA tool settings-&simulation中设置tool name:modelsim-altera&输出文件格式选择为verilog HDL,NativeLink settings选择Compile testbench。&再单击Test Benches&在这顺便说一句,最好不要勾选Run gate-level simulation automatically after compilation,我的Modelsim破解的不是特别好,因此不勾选这个选项。&&再单击Test Benches单击Test benches按钮之后出现如下对话框:选择New...&设置文件名: GrayCounter_vlg_tst模块名:GrayCounter&实例名: i1&在File name中单击按钮:&&弹出以下对话框:选择:G:\GrayCounter\simulation\modelsim\GrayCounter.vt,类型选择All files,否则看不到GrayCounter.vt。单击打开按钮&对话框如下: 单击Add按钮。&对话框变在File name中变为:&&设置完成之后Compile test bench文件为:GrayCounter_vlg_tst文件。最后单击OK。&编译工程:调用RTL仿真:Tools-&Run EDA Simulation Tool -& EDA RTL Simulation&在modelsim窗口中有以下:常用的有Transcript:命令输出,包括display等的输出,wave是波形显示窗口,library是文件的列表&标题如下:对话框下面如下:打开library标签: 最下面的work目录:有GrayCounter_vlg_tst文件&在文件上右键Simulate without Optimization操作。&软件跳转到:sim页面中&&在GrayCounter_vlg_tst文件上右键,Add-&To wave -& All items in region。&&在wave标签页中有:然后运行,执行run,这时候波形看起来不是特清楚,需要调一下放大和缩小。调节到合适位置波形如下:可以看一下Transcript标签页中有:display的输出。&&&&&
阅读(3566)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'Quartus ii与Modelsim-altera 6.5b联调前仿真',
blogAbstract:'本实例使用的是Quartus ii9.1版本,Modelsim-altera版本是 Quartus ii9.1版本&对应的6.5b版本。本实例使用的是格雷码计数器(Gray)=============================================================================首先打开Quatus ii,File-&New Project Wizard.操作如下。',
blogTag:'quartus,modelsim-altera6.5b,modelsim-altera,联调',
blogUrl:'blog/static/5',
isPublished:1,
istop:false,
modifyTime:7,
publishTime:3,
permalink:'blog/static/5',
commentCount:4,
mainCommentCount:3,
recommendCount:2,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}Modelsim初级使用教程(转)
Modelsim简介
Modelsim仿真工具是Model公司开发的。它支持Verilog、VHDL以及他们的混合仿真,它可以将整个程序分步执行,使设计者直接看到他的程序下一步要执行的语句,而且在程序执行的任何步骤任何时刻都可以查看任意变量的当前值,可以在Dataflow窗口查看某一单元或模块的输入输出的连续变化等,比quartus自带的仿真器功能强大的多,是目前业界最通用的仿真器之一。
对于初学者,modelsim自带的教程是一个很好的选择,在Help-&SE PDF
Documentation-&Tutorial里面.它从简单到复杂、从低级到高级详细地讲述了modelsim的各项功能的使用,简单易懂。但是它也有缺点,就是它里面所有事例的初期准备工作都已经放在example文件夹里,直接将它们添加到modelsim就可以用,它假设使用者对当前操作的前期准备工作都已经很熟悉,所以初学者往往不知道如何做当前操作的前期准备。
  同许多其他软件一样,Modelsim
SE 同样需要合法的License,通常我们用Kengen产生license.dat。
解压安装工具包开始安装,安装时选择Full product安装。当出现Install Hardware Security Key
Driver时选择否。当出现Add Modelsim To Path选择是。出现Modelsim License
Wizard时选择Close。
在C盘根目录新建一个文件夹flexlm,用Keygen产生一个License.dat,然后复制到该文件夹下。
若License通过,但是打开ModelSim仍出错,则将系统时间调到2008年之前,重新生成License,再将时间调回来即可。
修改系统的环境变量。右键点击桌面我的电脑图标,属性-&高级-&环境变量-&(系统变量)新建。按下图所示内容填写,变量值内如果已经有别的路径了,请用";"将其与要填的路径分开。LM_LICENSE_FILE
= c:\flexlm\license.dat
安装完毕,可以运行。
注意:1、电脑的用户名不能为中文;
2、安装路径不能出现中文和空格,只能有数字、英文字母和下划线"_"组成;
3、若计算机还需要使用ModelSim-Altera 6.4a (Quartus II
9.0),可不需做任何额外的设定,ModelSim SE 6.3g会自动抓到这个系统变量,并使用这个license
file;反之亦然。&
设置modelsim所需环境变量(用户)
Quartus II 和 modelsim 的联系
完成上述工作之后需要在 Quartus II 中设置 modelsim 路径,Quartus II 菜单Tools
——&General——&EDA Tool
Options,进行相关设置,如modelsim:C:\Modeltech_6.3g\win32&
如图2所示。
设置modelsim路径
在Quartus II建立工程时,设置 modelsim 作为仿真软件,或者是在Assignments——&EDA Tool
Settings进行设置。
Modelsim仿真方法
Modelsim的仿真分为前仿真和后仿真,下面先具体介绍一下两者的区别。
  前仿真也称为功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。可综合FPGA代码是用RTL级代码语言描述的,其输入为RTL级代码与Testbench.
  后仿真也称为时序仿真或者布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,是否存在时序违规。其输入文件为从布局布线结果中抽象出来的门级网表、Testbench和扩展名为SDO或SDF的标准时延文件。SDO或SDF的标准时延文件不仅包含门延迟,还包括实际布线延迟,能较好地反映芯片的实际工作情况。一般来说后仿真是必选的,检查设计时序与实际的FPGA运行情况是否一致,确保设计的可靠性和稳定性。选定了器件分配引脚后在做后仿真。
Modelsim仿真的基本步骤
Modelsim的仿真主要有以下几个步骤:
(1)建立库并映射库到物理目录;
(2)编译原代码(包括 Testbench);
(3)执行仿真。
上述3个步骤是大的框架,前仿真和后仿真均是按照这个框架进行的,建立modelsim工程对前后仿真来说都不是必须的。
3.3.1建立库
  在执行一个仿真前先建立一个单独的文件夹,后面的操作都在此文件下进行,以防止文件间的误操作。然后启动Modelsim将当前路径修改到该文件夹下,修改的方法是点File-&Change
Directory选择刚刚新建的文件夹见下图。
新建文件夹
  做前仿真的时候,推荐按上述建立新的文件夹。
  做后仿真的时候,在 Quartus
II 工程文件夹下会出现一个文件夹:工程文件夹\simulation\modelsim,前提是正确编译 Quartus II
工程;因此,不必再建立新的文件夹了。
  仿真库是存储已编译设计单元的目录,modelsim
中有两类仿真库,一种是工作库,默认的库名为work,另一种是资源库。Work库下包含当前工程下所有已经编译过的文件。所以编译前一定要建一个work库,而且只能建一个work库。资源库存放work库中已经编译文件所要调用的资源,这样的资源可能有很多,它们被放在不同的资源库内。例如想要对综合在cyclone芯片中的设计做后仿真,就需要有一个名为cyclone_ver的资源库。
  映射库用于将已经预编译好的文件所在的目录映射为一个modelsim可识别的库,库内的文件应该是已经编译过的,在Workspace窗口内展开该库应该能看见这些文件,如果是没有编译过的文件在库内是看不见的。
  建立仿真库的方法有两种。一种是在用户界面模式下,点File-&New-&Library出现下面的对话框,选择a
new library and a logical mapping to it,在Library
Name内输入要创建库的名称,然后OK,即可生成一个已经映射的新库。另一种方法是在Transcript窗口输入以下命令:
建立仿真库
  如果要删除某库,只需选中该库名,点右键选择Delete即可。
  需要注意的是不要在modelsim外部的系统盘内手动创建库或者添加文件到库里;也不要modelsim用到的路径名或文件名中使用汉字,因为modelsim可能无法识别汉字而导致莫名其妙的错误。
3.3.2编写与编译测试文件
在编写Testbench之前,最好先将要仿真的目标文件编译到工作库中,点Compile-&Compile或
,将出现下面的对话框,
编译目标文件
  在Library中选择工作库,在查找范围内找到要仿真的目标文件(Library选择刚才建立的库,查找范围选择目标文件所在的文件夹),然后点Compile和Done;或在命令行输入vlog
Counter.v。此时目标文件已经编译到工作库中,在Library中展开work工作库会发现该文件。&&
当对要仿真的目标文件进行仿真时需要给文件中的各个输入变量提供激励源,并对输入波形进行的严格定义,这种对激励源定义的文件称为Testbench,即测试台文件。下面先讲一下Testbench的产生方法。
方法一:我们可以在modelsim内直接编写Testbench,而且modelsim还提供了常用的各种模板。具体步骤如下:
执行File-&New-&Source-&verilog,或者直接点击工具栏上的新建图标,会出现一个verilog文档编辑页面,在此文档内设计者即可编辑测试台文件。需要说明的是在Quartus中许多不可综合的语句在此处都可以使用,而且testbench只是一个激励源产生文件,只要对输入波形进行定义以及显示一些必要信息即可,切记不要编的过于复杂,以免喧宾夺主。
Modelsim提供了很多Testbench模板,我们直接拿过来用可以减少工作量。在verilog文档编辑页面的空白处右键点Show
Language Templates然后会出现一个加载工程,接着你会发现在刚才的文档编辑窗口左边出现了一个Language
Templates窗口,见下图。
图6 应用模板生成
Testbench文件
Testbench会出现一个创建向导,见下图。
选择Specify
Unit工作库下,work工作库下的目标文件,点Next,出现下面对话框:&
设置Testbench向导
  可以指定Testbench的名称以及要编译到的库等,此处我们使用默认设置直接点Finish。这时在Testbench内会出现对目标文件的各个端口的定义还有调用函数接下来,设计者可以自己往Testbench内添加内容了(有注释的为添加的内容),然后保存为.v格式即可。按照前面的方法把Testbench文件也编译到工作库中。
生成及修改后的Testbench文件
  方法二:在
Quartus II 内编写并编译 Testbench ,之后将 Testbench 和目标文件放在同一个文件夹下,按照前面的方法把
Testbench 文件和目标文件都编译到工作库中之后。
PS:如果在工作库中没有该文件(在Testbench文件没有端口的情况下),则在Simulate——&Start
Simulate卡片中去掉优化选项,如下图所示。之后再重新编译,即可在工作库中找到该文件。&
去掉优化选项
3.3.3执行仿真
因为仿真分为前仿真和后仿真,下面分别说明如何操作。
前仿真,相对来说是比较简单的。在上一步我们已经把需要的文件编译到工作库内了,现在我们只需点simulate-&Start
Simulation或快捷按钮 会出现start simulate对话框。点击Design标签选择Work库下的 Testbench
文件,然后点 OK 即可,也可以直接双击 Testbench文件Counter_tb.v,此时会出现下面的界面。
图11 start
  在主界面中会多出来一个Objects窗口,里面显示
里定义的所有信号引脚,在Workspace里也会多出来一个Sim标签。右键点击Counter_tb.v,选择Add-&Add
to Wave,如下图所示。然后将出现Wave窗口,现在就可以仿真了,见下图。
窗口里面已经出现了待仿真的各个信号,点 将开始执行仿真到100ns,继续点仿真波形也将继续延伸,见下图。
,则仿真一直执行,直到点 才停止仿真。
也可以在命令行输入命令: run
则执行仿真到1000ns,后面的1000也可以是别的数值,设计者可以修改。在下一次运行该命令时将接着当前的波形继续往后仿真。
至此,前仿真步骤完成。
  这里是采用的Cyclone
ii做的一个counter的例子。
  后仿真与前仿真的步骤大体相同,只不过中间需要添加仿真库(和所选器件及所有IP
Core相关)、网表和延时文件的步骤。
  后仿真的前提是quartus已经对要仿真的目标文件进行编译,并生成modelsim仿真所需要的.vo文件(网表文件)和.sdo文件(时延文件),具体操作过程又有两种方法,一种是通过Quartus调用Modelsim,Quartus在编译之后自动把仿真需要的.vo文件以及需要的仿真库加到modelsim中,操作简单;一种是手动将需要的文件和库加入modelsim进行仿真,这种方法可以增加主观能动性,充分发挥modelsim的强大仿真功能。
通过Quartus调用Modelsim
  使用这种方法时首先要对Quartus进行设置。
先运行Quartus,打开要仿真的工程,点菜单栏的Assignments,点EDA Tool
settings,选中左边Category中的Simulation.,在右边的Tool
name中选ModelSim(Verilog),选中下面的Run Gate Level Simulation
automatically after complication.见下图。
对Quartus进行设置
  Quartus中的工程准备好之后点击start
complication按钮,此时modelsim会自动启动,而quartus处于等待状态(前提是系统环境变量中用户变量中PATH要设置好modelsim安装路径,如:D:\Modeltech_6.3\win32)。在打开的modelsim的Workspace窗口中你会发现多了工作库和资源库,而且work库中出现了需要仿真的文件。Modelsim自动将quartus生成的.vo文件编译到work库,并建立相应的资源库。如图所示。
Quartus II 编译之后自启动modelsim
  观察库,可以发现,多了verilog_libs库、gate_work库和work库,但是在"工程文件夹\simulation\modelsim"下,只有verilog_libs和gate_work文件夹,为什么库里面却多了一个work库呢?而且gate_work库和work库文件内容相同!
  gate_work 库是Quartus II
编译之后自动生成的,而work库是modelsim默认库。仔细观察二者路径,二者路径相同,均为gate_work文件夹,可知
modelsim 将 gate_work 库映射到 work 库。因此,在后续的工作中操作gate_work 库或者 work
库都能得到正确结果。
  编写测试台程序Counter_tb.v
,最好放在生成的.vo文件所在的目录,以方便在需要手动仿真时使用。点Compile在出现的对话框中选中Counter_tb.v文件,然后点Compile按钮,编译结束后点Done,这时在Work库中会出现测试台文件。如下图所示。
编译测试文件
  点击simulate-&Start
Simulation或快捷按钮 会出现start
simulate对话框。点击Design标签选择Work库下的Counter_tb.v文件,然后点击Libraries标签在Search
Library中点击Add按钮,选择仿真所需要的资源库(如果不知道需要选择哪个库,可以先直接点Compile看出现的错误提示中说需要的库名,然后再重复上述步骤)见下图。
选择仿真所需要的资源库
  再点start
simulate对话框的SDF标签。在出现的对话框的SDF File框内加入.sdo时延文件路径。在Apply To
Region框内有一个“/”,
在“/”的前面输入测试台文件名,即“Counter_tb”,在它的后面输入测试台程序中调用被测试程序时给被测试程序起的名称,本例中为“DUT”,见下图。然后点OK。后面观察波形与前仿真步骤相同。
添加.sdo文件
自动仿真和手动仿真的区别:
  这种方法比较简单,因为Quartus
II调用Modelsim
,所以除了生成自动生成了modelsim仿真所需要的.vo文件(网表文件)和.sdo文件(时延文件)外,还生成了gate_work文件夹、verilog_libs文件夹;gate_work文件夹(可以叫工作库,也可以叫编译库)下存放了已编译的文件,verilog_libs文件夹下存放了仿真所需要的资源库,上例是cycloneii_ver库(文件夹)。而手动仿真则需要自己添加这些文件和库。具体如下。
  手动仿真需要自己添加文件和编译库,但可以充分发挥modelsim强大的仿真功能。操作时也要先对quartus进行设置,设置与前面相同只是不要选中Run
Gate Level Simulation automatically after
complication。然后启动modelsim,将当前路径改到"工程文件夹\simulation\modelsim"下。如下图所示。
启动modelsim
  相比&#9312;中,这里少了一些库(实际是verilog_libs库、gate_work库和work库),因此下面要添加一个库。新建一个库,此处默认库名为work,此时,"工程文件夹\simulation\modelsim"文件夹下出现了一个work文件夹,work库下面没有目标文件和测试文件,即work文件夹下没有任何文件,建库的目的就是将编译的文件都放在该库里,即放在该文件夹下。编译之前,还需要添加仿真所需要的资源库cycloneii_atoms(用到EP2C8),将D:\altera\90\quartus\eda\sim_lib目录下的cycloneii_atoms文件复制到.vo所在的目录,即"工程文件夹\simulation\modelsim"下。
  如果按照&#9312;中的方法编写testbench并同样放在.vo所在的目录,这时点Compile下的Compile或点
将会出现下面的对话框,将所选文件进行编译。
编译所需文件和资源库
  编译完成之后,work工作库下多了很多文件,同样work文件夹下也多了很多文件(夹),建库的目的可见一斑,其中有Counter_tb测试文件和counter目标文件。点击simulate-&Start
Simulation或快捷按钮 会出现start simulate对话框。这里和&#9312;相比只有Libraries标签在Search
Library时不一样,其余2项都一样。Libraries标签在Search Library的设置如下图。
选择仿真所需要的资源库
后面的观察波形步骤跟前面一样。
四、观察波形的一些方法和技巧。
4.1 手动创建输入波形(待定)
  对于复杂的设计文件,最好是自己编写testbench文件,这样可以精确定义各信号以及各个信号之间的依赖关系等,提高仿真效率。
对于一些简单的设计文件,也可以在波形窗口自己创建输入波形进行仿真。具体方法是鼠标右击work库里的目标仿真文件counter.v,然后点create
wave,弹出wave default窗口。如下图所示。
  在wave窗口中选中要创建波形的信号,如此例中的CLK,然后右键点击,选择Create/Modify/Wave项出现下面的窗口:
设置输入波形
  在Patterns中选择输入波形的类型,然后分别在右边的窗口中设定起始时间、终止时间以及单位,再点Next出现下面的窗口,我们把初始值的HiZ改为0,然后修改时钟周期和占空比,然后点Finish。
设置输入波形
  接着继续添加其他输入波形,出现下面的结果。前面出现的红点表示该波形是可编辑的。后面的操作与用testbench文本仿真的方法相同
4.2 观察特定信号波形
  如果设计者只想查看指定信号的波形,可以先选中objects窗口中要观察的信号,然后点右键选择Add
to Wave-&Selected
signals,见下图,那么在Wave窗口中只添加选中的信号。&
查看特定信号波形
4.3 保存和导入波形文件(待定)
  如果要保存波形窗口当前信号的分配,可以点File-&Save,在出现的对话框中设置保存路径及文件名,保存的格式为.do文件。
如果是想导出自己创建的波形(在文章最后有详细的解释)可以选择File-&Export
Waveform在出现的对话框中选择EVCD File并进行相关设置即可。
如果导入设计的波形选择File-&Import
ECVD即可。
4.4 Dataflow窗口观察信号波形
  在主界面中点View-&Dataflow可以看到会出现dataflow窗口,在objects窗口中拖一个信号到该窗口中,你会发现在dataflow窗口中出现你刚才选中信号所在的模块,如果双击模块的某一引脚,会出现与该引脚相连的别的模块或者引线,见下图。
Dataflow窗口
  在dataflow窗口中点View-&Show
Wave,会在dataflow窗口中出现一个wave窗口,双击上面窗口中的某一模块,则在下面的wave窗口中出现与该模块相连的所有信号,如果已经执行过仿真,在wave窗口中还会出现对应的波形,见下图。
Dataflow窗口观察仿真波形
  在波形窗口中拖动游标,上面模块的引脚信号的值也会随着游标当前位置的改变而改变。
如果要在modelsim中修改原设计文件,在文档页面点击右键,取消Read
Only,即可修改,修改后继续仿真。如果想结束仿真可以点Simulate-&End
Simulation,或直接在命令行输入quit -sim,此时quartus也会显示结束所有编译过程。
关于在testbench里使用`timescale的问题
`timescale
是编译器指令,用来定义时延精度和时延单位,命令格式为
`timescale time_unit/time_precision
其中time_unit定义时延单位,即后面模块中出现的时延数值的单位,time_precision定义时延精度。例如
`timescale 1ns/100ps
&表示时延单位为1ns,时延精度为100ps。
如果后面有语句 #5.22 a=1;
此时时延值5.22ns应该对应为5.2ns,因为精度为0.1ns。
如果设计中多个模块带有自身的`timescale,编译时模拟器总是定义在所有模块的最小时延精度上,并且所有模块中的时延都自动地换算为到最小试验精度上。
Counter源代码:
&`timescale
&input&&&&&&&
&input&&&&&&&
&always@(posedge
CLK, negedge RST_N) begin
cnt &= #5 4'h0;
cnt &= #0 cnt + 1'b1;
&endmodule
&Counter_tb源代码:
`timescale
Counter_tb& ;
wire& [3:0]&
.CNT (CNT ) ,
.RST_N (RST_N ) ,
.CLK (CLK ) );
///view/cd93f34ecf84b9d528ea7a95.html
CLK&& = 1'b0;
RST_N = 1'b0;
RST_N = 1'b1;
#10 CLK = ~CLK;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 quartusii使用教程 的文章

 

随机推荐