Modelsim

一、 Modelsim簡介

    Modelsim仿真工具是Model公司開發的。它支持Verilog、VHDL以及他們的混合仿真,它可以將整個程序分步執行,使設計者直接看到他的程序下一步要執行的語句,而且在程序執行的任何步驟任何時刻都可以查看任意變量的當前值,可以在Dataflow窗口查看某一單元或模塊的輸入輸出的連續變化等,比quartus自帶的仿真器功能強大的多,是目前業界最通用的仿真器之一。

    對於初學者,modelsim自帶的教程是一個很好的選擇,在Help->SE PDF Documentation->Tutorial裏面.它從簡單到複雜、從低級到高級詳細地講述了modelsim的各項功能的使用,簡單易懂。但是它也有缺點,就是它裏面所有事例的初期準備工作都已經放在example文件夾裏,直接將它們添加到modelsim就可以用,它假設使用者對當前操作的前期準備工作都已經很熟悉,所以初學者往往不知道如何做當前操作的前期準備。

二、安裝

  同許多其他軟件一樣,Modelsim SE 同樣需要合法的License,通常我們用Kengen產生license.dat。

1 解壓安裝工具包開始安裝,安裝時選擇Full>

4 安裝完畢,可以運行。

 

注意:1、電腦的用戶名不能爲中文;

        2、安裝路徑不能出現中文和空格,只能有數字、英文字母和下劃線"_"組成;

        3、若計算機還需要使用ModelSim-Altera 6.4a (Quartus II 9.0),可不需做任何額外的設定,ModelSim SE 6.3g會自動抓到這個系統變量,並使用這個license>

圖1 設置modelsim所需環境變量(用戶)

 

PS :建立 Quartus II 和 modelsim 的聯繫

①  完成上述工作之後需要在 Quartus II 中設置 modelsim 路徑,Quartus II 菜單Tools ——>General——>EDA Tool Options,進行相關設置,如modelsim:C:\Modeltech_6.3g\win32  如圖2所示。

圖2 設置modelsim路徑

② 在Quartus II建立工程時,設置 modelsim 作爲仿真軟件,或者是在Assignments——>EDA Tool Settings進行設置。

三、 Modelsim仿真方法

Modelsim的仿真分爲前仿真和後仿真,下面先具體介紹一下兩者的區別。

3.1 前仿真

  前仿真也稱爲功能仿真,主旨在於驗證電路的功能是否符合設計要求,其特點是不考慮電路門延遲與線延遲,主要是驗證電路與理想情況是否一致。可綜合FPGA代碼是用RTL級代碼語言描述的,其輸入爲RTL級代碼與Testbench.

3.2 後仿真

  後仿真也稱爲時序仿真或者佈局佈線後仿真,是指電路已經映射到特定的工藝環境以後,綜合考慮電路的路徑延遲與門延遲的影響,驗證電路能否在一定時序條件下滿足設計構想的過程,是否存在時序違規。其輸入文件爲從佈局佈線結果中抽象出來的門級網表、Testbench和擴展名爲SDO或SDF的標準時延文件。SDO或SDF的標準時延文件不僅包含門延遲,還包括實際佈線延遲,能較好地反映芯片的實際工作情況。一般來說後仿真是必選的,檢查設計時序與實際的FPGA運行情況是否一致,確保設計的可靠性和穩定性。選定了器件分配引腳後在做後仿真。

3.3 Modelsim仿真的基本步驟

Modelsim的仿真主要有以下幾個步驟:

(1)建立庫並映射庫到物理目錄;

(2)編譯原代碼(包括 Testbench);

(3)執行仿真。

上述3個步驟是大的框架,前仿真和後仿真均是按照這個框架進行的,建立modelsim工程對前後仿真來說都不是必須的。

3.3.1建立庫

  在執行一個仿真前先建立一個單獨的文件夾,後面的操作都在此文件下進行,以防止文件間的誤操作。然後啓動Modelsim將當前路徑修改到該文件夾下,修改的方法是點File->Change Directory選擇剛剛新建的文件夾見下圖。

圖3 新建文件夾

  做前仿真的時候,推薦按上述建立新的文件夾。

  做後仿真的時候,在 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窗口輸入以下命令:

vlib work

vmap work work

圖4 建立仿真庫 

  如果要刪除某庫,只需選中該庫名,點右鍵選擇Delete即可。

  需要注意的是不要在modelsim外部的系統盤內手動創建庫或者添加文件到庫裏;也不要modelsim用到的路徑名或文件名中使用漢字,因爲modelsim可能無法識別漢字而導致莫名其妙的錯誤。

3.3.2編寫與編譯測試文件

    在編寫Testbench之前,最好先將要仿真的目標文件編譯到工作庫中,點Compile->Compile或,將出現下面的對話框,

 圖5 編譯目標文件

 

  在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文件

 

雙擊Creat Testbench會出現一個創建嚮導,見下圖。

 圖7 創建嚮導

 

選擇Specify Design Unit工作庫下,work工作庫下的目標文件,點Next,出現下面對話框: 

圖8 設置Testbench嚮導

 

  可以指定Testbench的名稱以及要編譯到的庫等,此處我們使用默認設置直接點Finish。這時在Testbench內會出現對目標文件的各個端口的定義還有調用函數接下來,設計者可以自己往Testbench內添加內容了(有註釋的爲添加的內容),然後保存爲.v格式即可。按照前面的方法把Testbench文件也編譯到工作庫中。

圖9 生成及修改後的Testbench文件

  方法二:在 Quartus II 內編寫並編譯 Testbench ,之後將 Testbench 和目標文件放在同一個文件夾下,按照前面的方法把 Testbench 文件和目標文件都編譯到工作庫中之後。

PS:如果在工作庫中沒有該文件(在Testbench文件沒有端口的情況下),則在Simulate——>Start Simulate卡片中去掉優化選項,如下圖所示。之後再重新編譯,即可在工作庫中找到該文件。 

圖10 去掉優化選項

3.3.3執行仿真

    因爲仿真分爲前仿真和後仿真,下面分別說明如何操作。

⑴ 前仿真

    前仿真,相對來說是比較簡單的。在上一步我們已經把需要的文件編譯到工作庫內了,現在我們只需點simulate->Start Simulation或快捷按鈕 會出現start simulate對話框。點擊Design標籤選擇Work庫下的 Testbench 文件,然後點 OK 即可,也可以直接雙擊 Testbench文件Counter_tb.v,此時會出現下面的界面。

圖11 start simulate

 

  在主界面中會多出來一個Objects窗口,裏面顯示 Testbench 裏定義的所有信號引腳,在Workspace裏也會多出來一個Sim標籤。右鍵點擊Counter_tb.v,選擇Add->Add to Wave,如下圖所示。然後將出現Wave窗口,現在就可以仿真了,見下圖。

圖12 Wave窗口

 

    窗口裏面已經出現了待仿真的各個信號,點 將開始執行仿真到100ns,繼續點仿真波形也將繼續延伸,見下圖。

 圖13 仿真波形 

若點,則仿真一直執行,直到點 才停止仿真。

也可以在命令行輸入命令: run @1000

則執行仿真到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.見下圖。

圖14 對Quartus進行設置

 

  Quartus中的工程準備好之後點擊start complication按鈕,此時modelsim會自動啓動,而quartus處於等待狀態(前提是系統環境變量中用戶變量中PATH要設置好modelsim安裝路徑,如:D:\Modeltech_6.3\win32)。在打開的modelsim的Workspace窗口中你會發現多了工作庫和資源庫,而且work庫中出現了需要仿真的文件。Modelsim自動將quartus生成的.vo文件編譯到work庫,並建立相應的資源庫。如圖所示。

圖15 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庫中會出現測試臺文件。如下圖所示。

圖16 編譯測試文件

 

  點擊simulate->Start Simulation或快捷按鈕 會出現start simulate對話框。點擊Design標籤選擇Work庫下的Counter_tb.v文件,然後點擊Libraries標籤在Search Library中點擊Add按鈕,選擇仿真所需要的資源庫(如果不知道需要選擇哪個庫,可以先直接點Compile看出現的錯誤提示中說需要的庫名,然後再重複上述步驟)見下圖。

 圖17 選擇仿真所需要的資源庫

 

  再點start simulate對話框的SDF標籤。在出現的對話框的SDF File框內加入.sdo時延文件路徑。在Apply To Region框內有一個“/”,在“/”的前面輸入測試臺文件名,即“Counter_tb”,在它的後面輸入測試臺程序中調用被測試程序時給被測試程序起的名稱,本例中爲“DUT”,見下圖。然後點OK。後面觀察波形與前仿真步驟相同。

 圖18 添加.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"下。如下圖所示。

圖19 啓動modelsim

 

  相比①中,這裏少了一些庫(實際是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"下。

  如果按照①中的方法編寫testbench並同樣放在.vo所在的目錄,這時點Compile下的Compile或點將會出現下面的對話框,將所選文件進行編譯。

 圖20 編譯所需文件和資源庫

 

  編譯完成之後,work工作庫下多了很多文件,同樣work文件夾下也多了很多文件(夾),建庫的目的可見一斑,其中有Counter_tb測試文件和counter目標文件。點擊simulate->Start Simulation或快捷按鈕 會出現start simulate對話框。這裏和①相比只有Libraries標籤在Search Library時不一樣,其餘2項都一樣。Libraries標籤在Search Library的設置如下圖。

圖21 選擇仿真所需要的資源庫

 

後面的觀察波形步驟跟前面一樣。

 

四、觀察波形的一些方法和技巧。

4.1 手動創建輸入波形(待定)

  對於複雜的設計文件,最好是自己編寫testbench文件,這樣可以精確定義各信號以及各個信號之間的依賴關係等,提高仿真效率。

對於一些簡單的設計文件,也可以在波形窗口自己創建輸入波形進行仿真。具體方法是鼠標右擊work庫裏的目標仿真文件counter.v,然後點create wave,彈出wave default窗口。如下圖所示。

圖22 Add to Wave

 

  在wave窗口中選中要創建波形的信號,如此例中的CLK,然後右鍵點擊,選擇Create/Modify/Wave項出現下面的窗口:

圖23 設置輸入波形

 

  在Patterns中選擇輸入波形的類型,然後分別在右邊的窗口中設定起始時間、終止時間以及單位,再點Next出現下面的窗口,我們把初始值的HiZ改爲0,然後修改時鐘週期和佔空比,然後點Finish。

圖24 設置輸入波形

 

  接着繼續添加其他輸入波形,出現下面的結果。前面出現的紅點表示該波形是可編輯的。後面的操作與用testbench文本仿真的方法相同。

圖25 仿真波形

 

4.2 觀察特定信號波形

  如果設計者只想查看指定信號的波形,可以先選中objects窗口中要觀察的信號,然後點右鍵選擇Add to Wave->Selected signals,見下圖,那麼在Wave窗口中只添加選中的信號。 

圖26 查看特定信號波形

 

4.3 保存和導入波形文件(待定)

  如果要保存波形窗口當前信號的分配,可以點File->Save,在出現的對話框中設置保存路徑及文件名,保存的格式爲.do文件。

如果是想導出自己創建的波形(在文章最後有詳細的解釋)可以選擇File->Export Waveform在出現的對話框中選擇EVCD File並進行相關設置即可。

如果導入設計的波形選擇File->Import ECVD即可。

4.4 Dataflow窗口觀察信號波形

  在主界面中點View->Dataflow可以看到會出現dataflow窗口,在objects窗口中拖一個信號到該窗口中,你會發現在dataflow窗口中出現你剛纔選中信號所在的模塊,如果雙擊模塊的某一引腳,會出現與該引腳相連的別的模塊或者引線,見下圖。

圖27 Dataflow窗口

 

  在dataflow窗口中點View->Show Wave,會在dataflow窗口中出現一個wave窗口,雙擊上面窗口中的某一模塊,則在下面的wave窗口中出現與該模塊相連的所有信號,如果已經執行過仿真,在wave窗口中還會出現對應的波形,見下圖。

圖28 Dataflow窗口觀察仿真波形

 

  在波形窗口中拖動遊標,上面模塊的引腳信號的值也會隨着遊標當前位置的改變而改變。

如果要在modelsim中修改原設計文件,在文檔頁面點擊右鍵,取消Read Only,即可修改,修改後繼續仿真。如果想結束仿真可以點Simulate->End Simulation,或直接在命令行輸入quit -sim,此時quartus也會顯示結束所有編譯過程。

 

五、一些說明

關於在testbench裏使用`timescale的問題

`timescale 是編譯器指令,用來定義時延精度和時延單位,命令格式爲

   `timescale>

 always@(posedge CLK,>

    RST_N = 1'b0;

 #5 RST_N = 1'b1;

 end

 

 // 50MHz

 always #10 CLK = ~CLK;

 

endmodule

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章