|
準備事項
-
ModelSim試用版下載
-
範例程式下載
(史丹佛大學一門課的期末專題Implememtation of Viterbi
Decoder:constrain length K=3, code rate R=1/2, register-exchange)
整個project共含7個Verilog程式:system.v (top-level)
|-- clkgen.v
|-- chip_core.v
|-- controller.v
|-- spu.v
|-- acs4.v
|-- acs1.v
(或是另外一個Verilog的簡單例子,可以從C:\
SynaptiCAD\
Examples\ TutorialFiles\
VeriLoggerBasicVerilogSimulation\ add4.v and add4test.v)
(或是另外一個VHDL的簡單例子,可以從C:\
Modeltech_5.7e\ examples\ adder.vhd and testadder.vhd)
ModelSim PE /LE /SE 差別在哪?
本篇文章內容主要在教導軟體使用,以Verilog程式為範例。假設各位讀者已經熟悉Verilog,廢話不多說,讓我們馬上來見識一下ModelSim
...
快速上手四部曲:建立Project、引進HDL
Files、Compile、模擬(Simulate/Loading and Run)
-
建立一個新的Project
1-1
第一次執行程式時,可以從
[開始] \ [程式集] \
ModelSim SE \ ModelSim;或是執行ModelSim在桌面的捷徑

在Library標籤頁中,展開各Library就可以看到其下含的所有Package
(for VHDL),進一步以Edit打開,可檢視該Package與Package
Body內容
1-2
File
\ New \ Project ...
輸入project name and Location
按OK鍵後
-
指定的路徑下會產生一個叫"work"的預設子資料夾,還有Viterbi.cr.mti、Viterbi.mpf
兩個檔案
-
主操作畫面左邊的Workspace內,在原本的Library標籤外,會出現另一個Project標籤(但此時裡面內容是空的)
-
還會蹦出另一個"Add items to the Project"視窗
.mpf 檔儲存的是此project的相關資料,下次要開啟此project 就是利用
File \
Open \ Project...
開啟此.mpf
若要移除之前建立的project,請從 File \ Delete
\ Project...
移除
|


|
-
載入Project
的HDL
source codes
按"Add
items to the Project"視窗中的"Add Existing File"
(或是從File \ Add to Project
\ Existing Files ...)


HDL files擺放的位置,路徑名稱不能有中文,否則軟體會抓不到files
關掉"Add items to the Project"視窗,此時的Project下出現了HDL
File,一堆問號表示這些檔案都還沒compile。
如果要對project新增或移除HDL
File:
在Workspace內按滑鼠右鍵,選擇 Add to
Project \ Existing File... (新增)
Remove from Project
(移除)
-
Compile
在Project標籤頁內,選定任一檔案,按滑鼠右鍵選擇
Compile \ Compile All
或是直接按 icon 
Compile Out-of-Data只重新compile有修改過的檔案
(比較節省時間,故也較常用)
此刻只做Compile 還沒做Simulate,而ModelSim必須要作完Simulate
(Loading)後才會把所有檔案link起來。如果compiler的結果出現有errors或warnings的訊息,直接在該訊息上雙擊,即可進一步帶出詳細的訊息說明。
如果您處理的是VHDL
project,那在做Compile前,先在Project標籤頁內,選定所有檔案,按滑鼠右鍵選擇"Properties"做如下設定:
-
Simulate
(Loading)
切換到Library標籤頁,展開"work"目錄,其下可以看到此project包含的所有檔案,檔案前的符號"M",表示這些檔案的性質是"Module";如果你寫的是VHDL程式那檔案前所看到的符號會變成"E"(Entity)
and "A"(Architecture)。
如果compiler完,work目錄底下仍然看不到東西,無法展開,請稍等5~10秒(等程式update最新狀態),或是按滑鼠右鍵選擇"Update"重新整理
4-1
直接以滑鼠左鍵雙擊要Simulate
的檔案,或是按滑鼠右鍵選擇Simulate。
此處選擇要Simulate (Loading)的檔案不一定要是top-level file,但如果你選的不是top-level
file,project中的sub-ciricuit必須一個一個load,比較麻煩。
請注意,這裡的"Simulate"並沒有真的做模擬,只是把程式"Loading"進來,並將sub-module
彼此間 link 起來
Loading
要simulate 的檔案的動作,也可以按Simulate icon
來完成
執行以上動作時,如果再附加一個設定步驟:到Options標籤頁下,核選"Enable
source file coverage",即可在模擬的程序中,附帶幫你檢查testbench
對於 if / case conditional statement的模擬涵蓋率。
執行完Simulate
(Load)的動作後,程式會自動再跳出兩個標籤頁Sim與Files,此時在Sim下可以看到整個Project的Hierarchy關係
要編輯HDL file,可以從Project(顯示檔案的狀態)或File標籤頁內雙擊HDL檔案以開啟編輯視窗(edit window)。sim標籤頁內雖然也有列出所有HDL檔案,但雙擊HDL檔案開啟的是來源視窗(source window),不能edit。
檔案編輯(修改)完成(存檔)後,回到Project標籤頁內看該檔案的狀態時,會發現它變成未compile的問號,要重新對它做compile,把目前的Simulate關掉(Simulate
\ End Simulation...),再重新 load一次,才能對新的程式做模擬
。
若要查看此project架構,必須切換到Sim標籤頁;不像VeriLogger
Pro只要Compiler完,就可以在同一個Project畫面下看到整個project
structure / hierarchy。Sim
標籤頁另外一個有趣的功能是:在Sim
標籤頁內選定哪一個module,其相對的內容會自動update 於signals、source、edit...等window
(如果你有開啟這些視窗的話)。
另外,source與edit
window兩者都可用來查看模擬時的某一個變數值或設定中斷點,但前者不可編輯。
-
Project
標籤頁用以顯示HDL檔案的狀態(也可以開啟其編輯視窗)
-
Library
標籤頁用以選定要Simulate的檔案
-
Sim
標籤頁用以查看project
structure與開啟某module的來源視窗
-
File
標籤頁用以開啟某HDL檔案的編輯視窗
==> 四個功能拆成四個設定頁,這是ModelSim
比較耍寶的地方。
以下,我們接著要把想觀察的訊號引出來,然後"Run"
simulation ... 4-2
在Sim標籤頁內選定top-level file (system.v),打開 signals window:View \
Signals 就可以看到top-level file的所有I/O
signal。
4-3
在signals window的左半邊欄位內選定想看的訊號(如orig_bit_s1、y1_s1、y2_s1、decoded_coulmn_s1),按滑鼠右鍵
Add to Wave \ Selected
Signals,會跳出另一個"wave window"並把您想觀察的訊號都列出來
直接把signals window 的訊號拖曳到wave window 也可以 (訊號的排列次序也可以用左鍵拖曳搬移)。
訊號的排列次序,可以直接用滑鼠拖曳調整。
如果要看的是module / sub-module 所有訊號,4-2~4-3步驟可以一次完成:
4-4 切回主視窗,Simulate
\ Run \ Run 100ns
--> 預設Run length=100ns (一次跑100ns;可以更改)
Simulate \ Run \ Run-All
--> 跑到按 "Break"
才暫停
--> 按"Continue Run"
則繼續
Simulate \ Run \ Step
--> 單步執行程式 (for debugging)
Simulate \ Run \ Restart
--> 重新執行模擬
程式執行暫停或是跑到中斷點時,要查看任一訊號或變數的數值,方法有三種
模擬結果如下
如果想要看所有波形的範圍:View
\ Zoom \ Zoom Full
以滑鼠左鍵在波形顯示區域點一下,就會出現黃色的垂直座標線(cursor,
參閱step 5-4)。
直接在訊號波形上雙擊,會帶出Dataflow
window (step 5-3);如果你是在紅色的(unknown)線上雙擊,還可以進一步的在Dataflow
window內選定該unknown signal 的wire,按滑鼠右鍵選擇 TraceX
協助你debug
如果訊號不想以預設的二進位表示,可以在wave window內選定該訊號名稱,按滑鼠右鍵選擇Signal
Properties...,然後選擇表示方法(如十進位表示Decimal)。
-
Dataflow window
(for debugging and tracing)
"Dataflow
window"可用來檢視所設計的電路,其訊號的實際連接情況(Drivers / Receivers),也就是顯示訊號在執行模擬的過程中,經過哪些程序(process),開啟的方法有兩個:
5-1
假設我們要看的是orig_del_bit_s1訊號,此時Dataflow
window顯示如下:

5-2
如果想進一步察看此訊號的Receiver,選定其輸出連線(red
highlight),按
(expand net to all readers, ie. dow-stream circuit)
就會顯示如下結果: (直接以滑鼠左鍵雙擊red
highlighted line也有同樣效果)

同理,可以使用
查看訊號的Drivers (ie. up-stream circuit)、使用
查看訊號的Drivers and Receivers。
(Erase All):清除dataflow window
5-3
從dataflow視窗的View\Show Wave,打開embedded
wave viewer
選定dataflow視窗內的元件#ASSIGN#104,此時會看到wave視窗內列出該元件的所有I/O:
(此時如果有打開edit or source
window,會自動顯示出元件#ASSIGN#104在原始碼的相對位置)
5-4
執行模擬3500 ns,結果如下:可以看到此cell的輸入觸發輸出的情況
-
選定想要用cursor測量觸發時間點的訊號
-
以滑鼠左鍵在wave顯示視窗上點一下,cursor(黃色垂直線含時間座標)會自動出現
-
利用"Finder
Previous Transition"、"Finder Next Transition"兩個icons,可以讓cursor自動貼到trigger
edge,以便正確的量測觸發時間點。此功能非常便於尋找訊號的觸發/轉態點(active
point)
如果想將某一個cursor快速顯示在wave
window內(將顯示波形範圍移到該處):
View
\ Cursors \ 選擇想跳至的cursor
5-5
如何step by step追蹤output被input觸發的情況呢?
-
選定想要追蹤被觸發情況的訊號
-
按
"Trace
input net to event" icons
-
自動產生另一個cursor指到前一個觸發output的input時間點,多按幾次"Trace
input net to event",會看到如下圖所示的情況,兩個cursor之間的時間間距,為白色文字所顯示的100
ns。
-
如果只要編輯與Compile
HDL file
File
\ New
\ Source \ VHDL or
Verilog or Other
或是
File
\ Add to Project \ New File (或是在Project標籤內,按滑鼠右鍵Add
to Project \ New File)
-
儲存檔案並關閉程式
File
\ Save \ ...
Simulate
\ End Simulation...
File
\ Close \ Project (要先關掉simulation,project才能關掉)
File
\ Quit (直接Quit 最快,可以省下上面關閉Simulation、Project的動作)
-
重新開啟
Project
File \ Open \ Project... (選擇.mpf檔)
-
進一步訊息,請參考
Help
\ SE PDF Documentation \ Tutorials 線上使用手冊
一些值得進一步參閱的功能:creating
and viewing datasets、performance analyzer、code coverage ...
其他用途:
(以下這些做法,必須在工作站下執行,PC環境下產生的檔案不能用)
在testbench內加入以下這段程式,然後執行ModelSim從compile
-> Simulate -> Run -All,關閉ModelSim後,就會在工作目錄下看見"file_name.vcd"。

在testbench內加入以下這段程式,然後執行ModelSim從compile
-> Simulate -> Run -All,關閉ModelSim後,就會在工作目錄下看見"file_name.fsdb"。

要用ModelSim產生.fsdb的條件是:跑ModelSim的環境下必須有安裝Debussy,否則ModelSim會說它看不懂"fsdbDumpfile"這個指令
在testbench內加入以下這段程式,然後執行ModelSim從compile
-> Simulate -> Run -All,關閉ModelSim後,就會在工作目錄下看見"add4.vec"。

您必須依自己的需要,在header information那幾行稍做修改,改成你design的I/Os(此處所列是一個4-bit full-adder的vector範例)。這是目前我所知道產生vector file最快的方法,否則你就必須先從testbench.v轉成file.vcd再轉成file.vec。
系統任務(system task)命令$monitor, $fmonitor, $display, $fdisplay的用法,請自行參閱Verilog書籍[2]sec.
3-3, sec. 9-5
相關資源
Art
of Writing TestBench -- 一個專門教導寫TestBench的網站
參考用書
-
VHDL與FPGA設計,胡振華
編著,全華,2002 (含ModelSim使用介紹)
-
Verilog HDL -- A Guide to Digital Design and Synthesis,原著Samir
Palnitkar,有中文版(全華)
-
VHDL初學者指南--VHDL
Starter's Guide,原著Sudhakar Yalamanchili,吳中浩
編譯,全華 2000
-
VHDL概論,
由模擬到合成,原著Sudhakar Yalamanchili,吳中浩
編譯,全華 2002
|