21
準備事項 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 FilesCompile 、模擬 (Simulate/Loading and Run) 1. 建立一個新的 Project 1-1 第一次執行程式時,可以從 [ 開始 ] \ [ 程式集 ] \ ModelSim SE \ ModelSim;或 是執行 ModelSim 在桌面的捷

準備事項 1. - eetrend.comxilinx.eetrend.com/files-eetrend-xilinx/forum/201302/3722-7427-modelsimjiao_cheng_.pdf準備事項 1. ModelSim試用版下載 2. 範例程式下載 (史丹佛大學一門課的期末專題I

  • 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 的訊息,直接在該訊息上雙擊,即可進一步帶出詳細的訊息說明。

如果您處理的是 VHDL project,那在做 Compile 前,先在 Project 標籤頁內,

選定所有檔案,按滑鼠右鍵選擇 "Properties"做如下設定:

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