日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Modelsim SE 進行時序仿真及altera庫的添加

 Gordon_W 2012-10-07

Modelsim SE 進行時序仿真及altera庫的添加 【原創(chuàng)】

注:這篇是本人原創(chuàng)于2009年11月的一篇關于Modelsim仿真的文章,當時在使用新浪博客,后來發(fā)現(xiàn)博客園更加適合我就停止了原新浪博客的更新。今天使用Modelsim想起了這篇文章就移到此博客中,圖片內(nèi)的鏈接就不修改了……

軟件版本:Modelsim SE PLUS 6.5http://www.cnblogs.com/Efronc

前言:

    為了搞清Modelsim加載altera仿真庫的問題我已經(jīng)足足查了兩天資料,這篇文章是我第一天寫的,當時有些地方只是會做,可是為什么這樣做就不是很了解了。經(jīng)過昨天一天的努力,現(xiàn)在基本上明白了整個過程。對這篇文章進行整體的完善和補充(本人水平有限,如有錯誤請留言指正)。

http://www.cnblogs.com/Efronc

    用Modelsim對Quartus II工程進行時序仿真(在此只討論時序仿真)可分兩種方式:一種是在Quartus II中設置run gate-level simulation automatically after compilation,在Quartus II布局布線后自動調(diào)用Modelsim,通過do文件自動完成仿真過程之間顯示波形;另一種方式是自己啟動Modelsim進行時序仿真。第一種方式Quartus II自動完成庫的編譯、添加和調(diào)用,第二種方式則需要自己添加altera仿真庫(也可以把庫文件跟仿真激勵等一起編譯,但是work庫正大量資源庫的模塊用起來很不方便)。

    下面我將以附錄中簡單的Verilog例子分三大部分由淺入深的介紹利用Modelsim進行時序仿真。

    第一部分介紹Quartus II自動調(diào)用Modelsim進行時序仿真的操作過程;第二部分介紹altera仿真庫(Verilog)的添加操作過程;第三部分簡單的介紹一下Modelsim庫的概念,分析一下Quartus II自動完成仿真的代碼,最后能自己寫一些簡單的do文件利用我們添加的仿真庫自動進行時序仿真。前兩個部分是簡單的操作,掌握其中一個部分即可進行時序仿真。最后一部分是代碼的分析及利用,如有需要,請參考。

一.Quartus II自動調(diào)用Modelsim進行時序仿真

 1.Quartus II 下建立新的工程test_sim;

 2.編寫Verilog代碼

   包括test_sim工程文件和sim仿真激勵文件,保存在工程目錄下的src文件夾中。

   注意仿真激勵文件不要添加進工程。代碼如附錄;

 3.設置EDA tool settings>simulation

   如圖所示:

 4.設置nativelink settings

   如圖所示:

 5.點擊Start compilation進行全編譯,Quartus II自動完成仿真。

 注:自動啟動Modelsim需要在tool>options>EDA tool options下設置Modelsim安裝路徑。

 

二.Altera仿真庫(Verilog)的添加

1.設置工作路徑http://www.cnblogs.com/Efronc

    打開modelsim安裝目錄(我的modelsim安裝在d:/modelsim目錄下),新建文件夾altera。后面的步驟將在該目錄下的primitive、altera_mf、lpm、cycloneii文件夾下存放編譯的庫。

    啟動Modelsim SE仿真工具,在主窗口中選擇【file】→【change directory】命令將路徑轉(zhuǎn)到altera文件夾?;蛘咴诿钚兄袌?zhí)行cd D:/modelsim/altera命令。

2.新建庫http://www.cnblogs.com/Efronc

    在主窗口中選擇【file】→【new】→【library】命令,新建一個名為primitive的庫。

3.查找編譯資源庫所需文件http://www.cnblogs.com/Efronc

    在Quartus II安裝目錄下找到quartus\eda\sim_lib文件夾,用于編譯資源庫的文件有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文件。方便起見把它們復制到altera下src文件夾下。

    網(wǎng)上的很多教程都是把這些文件一起編譯,這樣適用于Verilog和VHDL混合仿真,但如果只用一種語言,如Verilog則完全沒必要全部編譯。這幾個文件可分為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。

    編譯時根據(jù)需要編譯一組或全部編譯。下面以Verilog組為例,首先編譯primitive庫。

4. 編譯庫 http://www.cnblogs.com/Efronc
    在主菜單中選【compile】→【compile】命令,對altera_primitives.v進行編譯。

    VHDL文件編譯有所不同,LPM庫的220model.vhd和220pack.vhd可以同時編譯,MegaFunction庫的先編譯altera_mf_components.vhd文件,后編譯altera_mf.vhd文件,Primitiv庫先編譯altera_primitive_components.vhd文件,后編譯altera_primitive.vhd文件,元件庫,如cyclone II庫先編譯cycloneii_atoms.vhd文件,后編譯cycloneii_components.vhd文件,如果是其他系列的元件庫則只要把對應的cycloneii改成其他系列的名稱即可,如cyclone庫則文件改為cyclone_atoms.vhd、cyclone_components.vhd或cyclone_atoms.v。

5.重復2.4過程添加剩下的庫http://www.cnblogs.com/Efronc

    重復2.4過程添加剩下的庫。

    還有一種方法是把這些庫放到一個庫中,即一起編譯。根據(jù)需要自行選擇。

6. 配制modelsim.ini文件http://www.cnblogs.com/Efronc

    這一步是為了添加進系統(tǒng)庫,以后不用再重復添加。
    將modelsim 根目錄下的配制文件modelsim.ini的屬性只讀改為可寫,用記事本或者Ultraedit等其他文本編輯軟件打開它。如下圖所示添加此庫(注:第一步的工程必須在modelsim的安裝目錄下才能使用此相對路徑)。注意修改后關閉并改回只讀屬性。

 

primitive = $MODEL_TECH/../altera/primitive
altera_mf = $MODEL_TECH/../altera/altera_mf
lpm = $MODEL_TECH/../altera/lpm
cycloneii = $MODEL_TECH/../altera/cycloneii

完成后如圖:

 

 7.添加搜索庫

   可以根據(jù)自己需要添加某個庫,可以不全加進來。如圖所示:

8.編譯自己的vo文件和testbench文件到work庫即可仿真。

   波形同上。

三.Modelsim庫,Quartus II生成do文件代碼分析及自行設計do文件

    1.modelsim仿真庫

    以下是官方文檔中的內(nèi)容(更多內(nèi)容請自行查看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.

    由上面的介紹可知,工作庫只能有一個,而資源庫則可以有許多。其中,在modelsim安裝后有些庫已經(jīng)默認安裝,例如IEEE庫中包含預編譯的synopsys的IEEE算法包,用于仿真加速等功能。這些庫都有專用用途,初學者不宜更改。在仿真時,系統(tǒng)可以調(diào)用這些資源庫來進行仿真,并且這些庫是固定不變的。而工作庫(默認的為work庫,詳見PDF文檔)只有一個,它是用來把不同設計的編譯文件等放進去,并且是不斷更新變化的。

    到處,我們初步了解了modelsim庫的作用和概念。我們上面做的就是在modelsim中建立altera器件的仿真資源庫,并且修改了ini文件使這些庫是固定的(不必在不同設計中重復添加資源庫,但是需要在每次打開Modelsim后添加搜索庫,這兩個是不同的概念)。

    Modelsim仿真中會調(diào)用四種常用的仿真庫:

(1)元件庫,例如cycloneII元件庫,在仿真中必用的特定型號的FPGA/CPLD的庫。

(2)primitive,調(diào)用altera的原語(primitive)設計仿真時需要;

(3)altera_mf,調(diào)用MagaFunction的設計仿真時需要;
(4)lpm,調(diào)用lpm元件的設計仿真時需要;
    第一種元件庫是進行時序仿真時不可缺少的資源庫。后三種庫是調(diào)用了相應的Altera設計模塊進行設計時才必須用到的庫。值得一提的是,在modelsim-altera的AE版本中,后三種庫是已經(jīng)編譯好的,在modelsim-altera安裝目錄下altera文件夾中可以找到。

 2.Quartus II生成do文件代碼分析

   注:讀者需在之前對Modelsim命令有初步的了解,可參閱help文檔。

   打開仿真目錄.\test_sim\simulation找到其中的test_sim_run_msim_gate_verilog.do文件,用記事本或其他文本編輯軟件打開。完整代碼如下:

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)用它的時候它會檢測當前目錄下有沒有Verilog_libs這個文件夾,沒有的話創(chuàng)建;然后在該文件夾下創(chuàng)建了一個物理庫cyclone_ver并把邏輯庫cyclone_ver映射到前面的物理庫;由于前面的工程很簡單,只用到了一些基本部件,所以只編譯了cycloneii_atoms.v文件到cyclone_ver庫;之后又創(chuàng)建了一個gate_work的物理庫并把邏輯庫work庫映射到gate_work;編譯了網(wǎng)表文件和仿真激勵文件到work庫;啟動仿真(注意-L后面的庫,這條指令的作用和第二部分最后一步的添加搜索庫是一樣的,感興趣可以打開Start simulation看一下);加窗口波形信號等后運行。

 3.自行設計do文件

    通過上面庫的介紹和Quartus II代碼的分析,可以自己寫一下簡單的do文件自動運行了。

    下面的代碼是我寫的do文件,注意路徑的修改和代碼最后的回車符。

    點擊tools>tcl>execute macro..打開剛剛保存的do文件運行即可。

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


 

    附錄:

測試程序:

module  test_sim(

                 a,

                 b,

                 c

                 );
input            a;
input            b;
output           c;
assign c = a & ( ~ b);
endmodule

仿真激勵:

`timescale  1ns/1ps
`define     period  10
module      sim   ();
reg         a;
reg         b;
wire        c;

initial
begin
    # (`period * 10)     = 1'b0;
    # (`period * 10)     = 1'b0;
    # (`period * 1000)   $stop;   
end

always #(`period * 10)   = {$random} % 2;
always #(`period * 15)   = {$random} % 2;

test_sim   t_sim  (
                    .a(a),
                    .b(b),
                    .c(c)
                    );
                   
endmodule

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多