注:這篇是本人原創(chuàng)于2009年11月的一篇關(guān)于Modelsim仿真的文章,當(dāng)時(shí)在使用新浪博客,后來(lái)發(fā)現(xiàn)博客園更加適合我就停止了原新浪博客的更新。今天使用Modelsim想起了這篇文章就移到此博客中,圖片內(nèi)的鏈接就不修改了……
軟件版本:Modelsim SE PLUS 6.5http://www.cnblogs.com/Efronc
前言:
為了搞清Modelsim加載altera仿真庫(kù)的問(wèn)題我已經(jīng)足足查了兩天資料,這篇文章是我第一天寫(xiě)的,當(dāng)時(shí)有些地方只是會(huì)做,可是為什么這樣做就不是很了解了。經(jīng)過(guò)昨天一天的努力,現(xiàn)在基本上明白了整個(gè)過(guò)程。對(duì)這篇文章進(jìn)行整體的完善和補(bǔ)充(本人水平有限,如有錯(cuò)誤請(qǐng)留言指正)。
http://www.cnblogs.com/Efronc
用Modelsim對(duì)Quartus II工程進(jìn)行時(shí)序仿真(在此只討論時(shí)序仿真)可分兩種方式:一種是在Quartus II中設(shè)置run gate-level simulation automatically after compilation,在Quartus II布局布線(xiàn)后自動(dòng)調(diào)用Modelsim,通過(guò)do文件自動(dòng)完成仿真過(guò)程之間顯示波形;另一種方式是自己?jiǎn)?dòng)Modelsim進(jìn)行時(shí)序仿真。第一種方式Quartus II自動(dòng)完成庫(kù)的編譯、添加和調(diào)用,第二種方式則需要自己添加altera仿真庫(kù)(也可以把庫(kù)文件跟仿真激勵(lì)等一起編譯,但是work庫(kù)正大量資源庫(kù)的模塊用起來(lái)很不方便)。
下面我將以附錄中簡(jiǎn)單的Verilog例子分三大部分由淺入深的介紹利用Modelsim進(jìn)行時(shí)序仿真。
第一部分介紹Quartus II自動(dòng)調(diào)用Modelsim進(jìn)行時(shí)序仿真的操作過(guò)程;第二部分介紹altera仿真庫(kù)(Verilog)的添加操作過(guò)程;第三部分簡(jiǎn)單的介紹一下Modelsim庫(kù)的概念,分析一下Quartus II自動(dòng)完成仿真的代碼,最后能自己寫(xiě)一些簡(jiǎn)單的do文件利用我們添加的仿真庫(kù)自動(dòng)進(jìn)行時(shí)序仿真。前兩個(gè)部分是簡(jiǎn)單的操作,掌握其中一個(gè)部分即可進(jìn)行時(shí)序仿真。最后一部分是代碼的分析及利用,如有需要,請(qǐng)參考。
一.Quartus II自動(dòng)調(diào)用Modelsim進(jìn)行時(shí)序仿真
1.Quartus II 下建立新的工程test_sim;

2.編寫(xiě)Verilog代碼
包括test_sim工程文件和sim仿真激勵(lì)文件,保存在工程目錄下的src文件夾中。
注意仿真激勵(lì)文件不要添加進(jìn)工程。代碼如附錄;
3.設(shè)置EDA tool settings>simulation
如圖所示:

4.設(shè)置nativelink settings
如圖所示:



5.點(diǎn)擊Start compilation進(jìn)行全編譯,Quartus II自動(dòng)完成仿真。
注:自動(dòng)啟動(dòng)Modelsim需要在tool>options>EDA tool options下設(shè)置Modelsim安裝路徑。

二.Altera仿真庫(kù)(Verilog)的添加
1.設(shè)置工作路徑http://www.cnblogs.com/Efronc
打開(kāi)modelsim安裝目錄(我的modelsim安裝在d:/modelsim目錄下),新建文件夾altera。后面的步驟將在該目錄下的primitive、altera_mf、lpm、cycloneii文件夾下存放編譯的庫(kù)。
啟動(dòng)Modelsim SE仿真工具,在主窗口中選擇【file】→【change directory】命令將路徑轉(zhuǎn)到altera文件夾?;蛘咴诿钚兄袌?zhí)行cd D:/modelsim/altera命令。

2.新建庫(kù)http://www.cnblogs.com/Efronc
在主窗口中選擇【file】→【new】→【library】命令,新建一個(gè)名為primitive的庫(kù)。

3.查找編譯資源庫(kù)所需文件http://www.cnblogs.com/Efronc
在Quartus II安裝目錄下找到quartus\eda\sim_lib文件夾,用于編譯資源庫(kù)的文件有220model.v,220model.vhd,220pack.vhd,altera_mf.v,altera_mf.vhd,altera_mf_components.vhd,altera_primitives.v,altera_primitives.vhd,altera_primitives_components.vhd,cycloneii_atoms.v,cycloneii_atoms.vhd,cycloneii_components.vhd文件。方便起見(jiàn)把它們復(fù)制到altera下src文件夾下。
網(wǎng)上的很多教程都是把這些文件一起編譯,這樣適用于Verilog和VHDL混合仿真,但如果只用一種語(yǔ)言,如Verilog則完全沒(méi)必要全部編譯。這幾個(gè)文件可分為Verilog組:220model.v、altera_mf.v、altera_primitives.v、cycloneii_atoms.v和VHDL組:220model.vhd、220pack.vhd、altera_mf.vhd、altera_mf_components.vhd,altera_primitives.vhd,altera_primitives_components.vhd,cycloneii_atoms.vhd,cycloneii_components.vhd。
編譯時(shí)根據(jù)需要編譯一組或全部編譯。下面以Verilog組為例,首先編譯primitive庫(kù)。
4. 編譯庫(kù) http://www.cnblogs.com/Efronc
在主菜單中選【compile】→【compile】命令,對(duì)altera_primitives.v進(jìn)行編譯。
VHDL文件編譯有所不同,LPM庫(kù)的220model.vhd和220pack.vhd可以同時(shí)編譯,MegaFunction庫(kù)的先編譯altera_mf_components.vhd文件,后編譯altera_mf.vhd文件,Primitiv庫(kù)先編譯altera_primitive_components.vhd文件,后編譯altera_primitive.vhd文件,元件庫(kù),如cyclone II庫(kù)先編譯cycloneii_atoms.vhd文件,后編譯cycloneii_components.vhd文件,如果是其他系列的元件庫(kù)則只要把對(duì)應(yīng)的cycloneii改成其他系列的名稱(chēng)即可,如cyclone庫(kù)則文件改為cyclone_atoms.vhd、cyclone_components.vhd或cyclone_atoms.v。

5.重復(fù)2.4過(guò)程添加剩下的庫(kù)http://www.cnblogs.com/Efronc
重復(fù)2.4過(guò)程添加剩下的庫(kù)。
還有一種方法是把這些庫(kù)放到一個(gè)庫(kù)中,即一起編譯。根據(jù)需要自行選擇。
6. 配制modelsim.ini文件http://www.cnblogs.com/Efronc
這一步是為了添加進(jìn)系統(tǒng)庫(kù),以后不用再重復(fù)添加。
將modelsim 根目錄下的配制文件modelsim.ini的屬性只讀改為可寫(xiě),用記事本或者Ultraedit等其他文本編輯軟件打開(kāi)它。如下圖所示添加此庫(kù)(注:第一步的工程必須在modelsim的安裝目錄下才能使用此相對(duì)路徑)。注意修改后關(guān)閉并改回只讀屬性。
primitive = $MODEL_TECH/../altera/primitive
altera_mf = $MODEL_TECH/../altera/altera_mf
lpm = $MODEL_TECH/../altera/lpm
cycloneii = $MODEL_TECH/../altera/cycloneii

完成后如圖:

7.添加搜索庫(kù)
可以根據(jù)自己需要添加某個(gè)庫(kù),可以不全加進(jìn)來(lái)。如圖所示:


8.編譯自己的vo文件和testbench文件到work庫(kù)即可仿真。
波形同上。
三.Modelsim庫(kù),Quartus II生成do文件代碼分析及自行設(shè)計(jì)do文件
1.modelsim仿真庫(kù)
以下是官方文檔中的內(nèi)容(更多內(nèi)容請(qǐng)自行查看PDF文檔)。
Design Library Overview
A design library is a directory or archive that serves as a repository for compiled design units.
The design units contained in a design library consist of VHDL entities, packages, architectures,and configurations; Verilog modules and UDPs (user-defined primitives); and SystemC modules. The design units are classified as follows:
Primary design units — Consist of entities, package declarations, configuration
declarations, modulesUDPs, and SystemC modules. Primary design units within a given
library must have unique names.
Secondary design units — Consist of architecture bodies, package bodies, and
optimized Verilog modules. Secondary design units are associated with a primary
design unit. Architectures by the same name can exist if they are associated with
different entities or modules.
Working Library Versus Resource Libraries
Design libraries can be used in two ways:
1. as a local working library that contains the compiled version of your design;
2. as a resource library.
The contents of your working library will change as you update your design and recompile. A resource library is typically static and serves as a parts source for your design. You can create your own resource libraries or they may be supplied by another design team or a third party(e.g., a silicon vendor).
Only one library can be the working library.
Any number of libraries can be resource libraries during a compilation. You specify which
resource libraries will be used when the design is compiled, and there are rules to specify in
which order they are searched (refer to Specifying Resource Libraries).
A common example of using both a working library and a resource library is one in which your gate-level design and testbench are compiled into the working library and the design references gate-level models in a separate resource library.
由上面的介紹可知,工作庫(kù)只能有一個(gè),而資源庫(kù)則可以有許多。其中,在modelsim安裝后有些庫(kù)已經(jīng)默認(rèn)安裝,例如IEEE庫(kù)中包含預(yù)編譯的synopsys的IEEE算法包,用于仿真加速等功能。這些庫(kù)都有專(zhuān)用用途,初學(xué)者不宜更改。在仿真時(shí),系統(tǒng)可以調(diào)用這些資源庫(kù)來(lái)進(jìn)行仿真,并且這些庫(kù)是固定不變的。而工作庫(kù)(默認(rèn)的為work庫(kù),詳見(jiàn)PDF文檔)只有一個(gè),它是用來(lái)把不同設(shè)計(jì)的編譯文件等放進(jìn)去,并且是不斷更新變化的。
到處,我們初步了解了modelsim庫(kù)的作用和概念。我們上面做的就是在modelsim中建立altera器件的仿真資源庫(kù),并且修改了ini文件使這些庫(kù)是固定的(不必在不同設(shè)計(jì)中重復(fù)添加資源庫(kù),但是需要在每次打開(kāi)Modelsim后添加搜索庫(kù),這兩個(gè)是不同的概念)。
Modelsim仿真中會(huì)調(diào)用四種常用的仿真庫(kù):
(1)元件庫(kù),例如cycloneII元件庫(kù),在仿真中必用的特定型號(hào)的FPGA/CPLD的庫(kù)。
(2)primitive,調(diào)用altera的原語(yǔ)(primitive)設(shè)計(jì)仿真時(shí)需要;
(3)altera_mf,調(diào)用MagaFunction的設(shè)計(jì)仿真時(shí)需要;
(4)lpm,調(diào)用lpm元件的設(shè)計(jì)仿真時(shí)需要;
第一種元件庫(kù)是進(jìn)行時(shí)序仿真時(shí)不可缺少的資源庫(kù)。后三種庫(kù)是調(diào)用了相應(yīng)的Altera設(shè)計(jì)模塊進(jìn)行設(shè)計(jì)時(shí)才必須用到的庫(kù)。值得一提的是,在modelsim-altera的AE版本中,后三種庫(kù)是已經(jīng)編譯好的,在modelsim-altera安裝目錄下altera文件夾中可以找到。
2.Quartus II生成do文件代碼分析
注:讀者需在之前對(duì)Modelsim命令有初步的了解,可參閱help文檔。
打開(kāi)仿真目錄.\test_sim\simulation找到其中的test_sim_run_msim_gate_verilog.do文件,用記事本或其他文本編輯軟件打開(kāi)。完整代碼如下:
transcript on
if ![file isdirectory verilog_libs] {
file mkdir verilog_libs
}
vlib verilog_libs/cycloneii_ver
vmap cycloneii_ver ./verilog_libs/cycloneii_ver
vlog -vlog01compat -work cycloneii_ver {d:/altera/quartusii/quartus/eda/sim_lib/cycloneii_atoms.v}
if {[file exists gate_work]} {
vdel -lib gate_work -all
}
vlib gate_work
vmap work gate_work
vlog -vlog01compat -work work +incdir+. {test_sim.vo}
vlog -vlog01compat -work work +incdir+D:/Programs/Quartus/test_sim/src {D:/Programs/Quartus/test_sim/src/sim.v}
vsim -t 1ps +transport_int_delays +transport_path_delays -L cycloneii_ver -L gate_work -L work -voptargs="+acc" sim
add wave *
view structure
view signals
run -all
下面扼要的介紹一下它的控制流程。首先調(diào)用它的時(shí)候它會(huì)檢測(cè)當(dāng)前目錄下有沒(méi)有Verilog_libs這個(gè)文件夾,沒(méi)有的話(huà)創(chuàng)建;然后在該文件夾下創(chuàng)建了一個(gè)物理庫(kù)cyclone_ver并把邏輯庫(kù)cyclone_ver映射到前面的物理庫(kù);由于前面的工程很簡(jiǎn)單,只用到了一些基本部件,所以只編譯了cycloneii_atoms.v文件到cyclone_ver庫(kù);之后又創(chuàng)建了一個(gè)gate_work的物理庫(kù)并把邏輯庫(kù)work庫(kù)映射到gate_work;編譯了網(wǎng)表文件和仿真激勵(lì)文件到work庫(kù);啟動(dòng)仿真(注意-L后面的庫(kù),這條指令的作用和第二部分最后一步的添加搜索庫(kù)是一樣的,感興趣可以打開(kāi)Start simulation看一下);加窗口波形信號(hào)等后運(yùn)行。
3.自行設(shè)計(jì)do文件
通過(guò)上面庫(kù)的介紹和Quartus II代碼的分析,可以自己寫(xiě)一下簡(jiǎn)單的do文件自動(dòng)運(yùn)行了。
下面的代碼是我寫(xiě)的do文件,注意路徑的修改和代碼最后的回車(chē)符。
點(diǎn)擊tools>tcl>execute macro..打開(kāi)剛剛保存的do文件運(yùn)行即可。
cd D:/Programs/Quartus/test_sim/simulation/modelsim
vlib work
vmap work work
vlog -vlog01compat -work work +incdir+. {test_sim.vo}
vlog -vlog01compat -work work +incdir+D:/Programs/Quartus/test_sim/src {D:/Programs/Quartus/test_sim/src/sim.v}
vsim -t 1ps +transport_int_delays +transport_path_delays -L cycloneii -L primitive -L lpm -L altera_mf -L work -voptargs="+acc" sim
add wave *
view structure
view signals
run -all
附錄:
測(cè)試程序:
module test_sim(
a,
b,
c
);
input a;
input