下面是我們的Tcl模擬步驟:
啟動ModelSim SE, 首先看到在在ModelSim SE右邊的視窗有ModelSim> 這樣的提示符。在提示符後,順序運行以下命令:
vlib work 該命令的作用是在該目錄下建立一個work目錄,請注意不要用作業系統來建立一個work的檔案夾,因為用作業系統建立的work檔案夾並沒有ModelSim SE自動產生的_info檔案。
vmap work work 該命令的作用是將目前的邏輯工作庫work和實際工作庫work映射對應。
vlog camera.v camera_tb.v 該命令的作用是編譯這些檔案,要注意的是檔案可以單獨分開編譯,但是一定要先編譯被調用的檔案。假如是VHDL檔案就可以用vcom file1,file2命令來編譯。
vsim camera_tb 模擬命令, 注意後面的參數必須為camera_tb.v檔案中的模組名。
add wave/camera_tb/ * 該命令的作用是將testbench檔案camera_tb.v中模組camera_tb下所有的訊號變數加到波形檔案中去,注意在“*”前要加空格。這時候你也可以看到wave檔案被開啟。當然也可以單個訊號的添加,例如添加時鐘:add wave clk 等等。
run 2000 該命令的作用是運行2000個單位時間的模擬。也可以用run –all命令來一直模擬下去。
這時候就可以在wave視窗檔案中看到你的模擬結果。
當然也可以觀察其它視窗的結果,用view命令顯示
view * 觀察包括signals、wave、dataflow等視窗檔案。也可以分別開啟。例如用view signals來觀察訊號變數。
quit -f/-force/-sim 該命令分別是退出ModelSim(-f/-force)和退出模擬(-sim)。
ModelSim SE6..2b還有一個很好用的功能。就是可以看整個檔案所形成的資料流程,各個模組之間的邏輯聯絡。具體方法是在模擬後執行命令 view datalflow 就可以開啟dataflow檔案,在dataflow的視窗菜單中點擊add中的view all nets就可以觀察到各個模組之間的邏輯聯絡,模組一般都為initial模組、always模組、assign模組等等。點擊中一個模組,則這個模組變為紅色。這時候在view菜單下點擊show wave就可以在視窗下方彈出wave視窗,不同的是這個wave視窗所顯示的訊號變數僅為點擊中的模組所包括的訊號變數,這時候也可以點擊模擬run –all小表徵圖來模擬有關這個模組的輸入輸出關係。
以上命令,就是ModelSim SE模擬程式所用到的基本命令。實際上都可以在視窗菜單中找到,效果是一樣的,可能大家覺得每次用滑鼠點擊菜單方式更快一點,但是在ModelSim SE中開可以執行一種批次檔,就是file.do檔案,相當於DOS中的.bat檔案。你可以用批處理方式來使你模擬簡單化,具體做法為,將你所要執行的命令編輯在一起,以上面所講為例,我可以編輯一個camera.do檔案,檔案內容如下:
vlib work // 建庫
vmap work work // 映射
vlog camer.v camera_tb.v // 編譯
vsim camera_tb // 模擬(模組名稱)
add wave/camera_tb/ * // 將camera_tb下的所有訊號變數加入到wave視窗中,注意”*”前必須有空格
run 2000 // 或者用run –all等。
view dataflow // 用navigate nets觀察dataflow,不想觀察就可以不加這條指令
將上述內容儲存後,每次用命令do camera.do 就可以自動執行想要的模擬動作。
另外,對tcl命令作一個小小的整理:
1、編譯(它們的效果是等效的):
vlog div.v div_tb.v
vlog -work work div.v div_tb.v
或者將它們分開進行單獨編譯
2、模擬(效果等效):
vsim div_tb
vsim -lib work div_tb
vsim work.div_tb
sim -L D:/Modelsim/Installfiles/altera/altera_mf work.videoin_tb
3、添加波形
add wave/div_tb/ *
add wave sim:/div_tb/* //*前面沒有空格
也可以單獨添加波形(可以將它們直接寫成一個wave.do檔案,以便直接執行do wave.do就可以完成各種波形的編輯設定):
add wave -divider Input
add wave sim:/divider_tb/rst_n
add wave sim:/divider_tb/clk_in
add wave -divider Ouput
add wave sim:/divider_tb/clk_out
#配置wave相關命令
WaveRestoreCursors {{Cursors 1} {200ns} 0} {{Cursors 2} {400ns} 0}
configure wave -rowmargin 4
configure wave -childrowmargin 2
configure wave -namecolwidth 150
configure wave -valuecolwidth 100
configure wave -signalnamewidth 0
configure wave -justifyvalue left
configure wave -snapdistance 10
configure wave -datasetprefix 0
configure wave -gridoffset 0
configure wave -gridperiod 1
configure wave -griddelta 40
configure wave -timeline 0
update
WaveRestoreZoom {0 ns} {1000 ns}
上面就是一些常用的Modelsim的tcl命令,至於其它的tcl命令有待後續補充。