Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
準備事項
1. ModelSim 試用版下載
2. 範例程式下載 (史丹佛大學一門課的期末專題 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\
VeriLoggerBasicVerilo
gSimulation\ 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)
1. 建立一個新的 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... 移除
2. 載入 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 (移
除 )
3. Compile
在 Project 標籤頁內,選定任一檔案,按滑鼠右鍵選擇 Compile \ Compile All 或
是直接按 icon
Compile Out-of-Data 只重新 compile 有修改過的檔案 (比較節省時間,故也較
常用 )
此刻只做 Compile 還沒做 Simulate,而 ModelSim 必須要作完 Simulate
(Loading)後才會把所有檔案 link 起來。如果 compiler 的結果出現有 errors 或
warnings 的訊息,直接在該訊息上雙擊,即可進一步帶出詳細的訊息說明。
4. 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 --> 重新執行模擬
程式執行暫停或是跑到中斷點時,要查看任一訊號或變數的數值,方法有三種
• 從 wave window 查看
• 游標指到 source or edit 視窗內的該變數,即會顯示該變數當時的數值
• View \ Variables
模擬結果如下
如果想要看所有波形的範圍: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)。
5. Dataflow window (for debugging and tracing)
"Dataflow window"可用來檢視所設計的電路,其訊號的實際連接情況(Drivers /
Receivers),也就是顯示訊號在執行模擬的過程中,經過哪些程序(process),開啟
的方法有兩個:
• 直接雙擊 wave window 的訊號波形,會自動跳出 dataflow window,
其中顯示該訊號的連接情況;以這種方法帶出 dataflow window 會在
下方同時顯示 wave viewer,不需要的話可以從 View\Show Wave
取消。
• 從 ModelSim主視窗中的 View\Dataflow開啟視窗,從 signals window
將要看的訊號 "拖曳 "到 Dataflow window
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 的輸入觸發輸出的情況
1. 選定想要用 cursor 測量觸發時間點的訊號
2. 以滑鼠左鍵在 wave 顯示視窗上點一下,cursor(黃色垂直線含時間座標)
會自動出現
3. 利用 "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 觸發的情況呢?
1. 選定想要追蹤被觸發情況的訊號
2. 按 "Trace input net to event" icons
3. 自動產生另一個 cursor 指到前一個觸發 output 的 input 時間點,多按
幾次 "Trace input net to event",會看到如下圖所示的情況,兩個
cursor 之間的時間間距,為白色文字所顯示的 100 ns。
6. 如果只要編輯與 Compile HDL file
File \ New \ Source \ VHDL or Verilog or Other
或是
File \ Add to Project \ New File (或是在 Project 標籤內,按滑鼠右鍵 Add to
Project \ New File)
7. 儲存檔案並關閉程式
File \ Save \ ...
Simulate \ End Simulation...
File \ Close \ Project (要先關掉 simulation,project 才能關掉 )
File \ Quit (直接 Quit 最快,可以省下上面關閉 Simulation、Project 的動作 )
8. 重新開啟 Project
File \ Open \ Project... (選擇 .mpf 檔 )
9. 進一步訊息,請參考
Help \ SE PDF Documentation \ Tutorials 線上使用手冊
一些值得進一步參閱的功能:creating and viewing datasets、
performance analyzer、code coverage ...
其他用途: (以下這些做法,必須在工作站下執行,PC 環境下產生的檔案不能用 )
§ 如何用 ModelSim 產生 .vcd 檔(Value Change Dump)
在 testbench 內加入以下這段程式,然後執行 ModelSim 從 compile -> Simulate
-> Run -All,關閉 ModelSim 後,就會在工作目錄下看見 "file_name.vcd"。
§ 如何用 ModelSim 產生 .fsdb 檔
在 testbench 內加入以下這段程式,然後執行 ModelSim 從 compile -> Simulate
-> Run -All,關閉 ModelSim 後,就會在工作目錄下看見 "file_name.fsdb"。
要用 ModelSim 產生 .fsdb 的條件是:跑 ModelSim 的環境下必須有安裝
Debussy,否則 ModelSim 會說它看不懂 "fsdbDumpfile"這個指令
§ 如何用 ModelSim 產生 .vec 檔 (vector file)
在 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。 (參閱 NanoSim 教學 Step 1 ~ 2)
系統任務 (system task)命令$monitor, $fmonitor, $display, $fdisplay 的用
法,請自行參閱 Verilog 書籍 [2]sec. 3-3, sec. 9-5