Modelsim的tcl命令

一. 前言

最近學習了modelsim的tcl命令,可以直接在transcript窗口通過命令來執行操作,更重要的是通過.do文件可以不打開modelsim就生成一些波形文件(例如.vcd等),方便後續使用(debussy調試波形)。
注:
本文偏總結性,先去了解一下基礎知識再來看效果更佳~ 文中也有幾篇可以參考~

二. 命令總結

總結了一下tcl中常見命令(都加了註釋):

#Quit last sim
quit -sim

#Create the work library
vlib work

#vmap the work lib
vmap work work

#include the head files
vlog +incdir+ YOURPATH sfifo_def.v
#eg: vlog +incdir+ sfifo_def.v

# Compile the verilog files
vlog -work work sfifo.v
vlog -work work sfifo_tb.v

#Or you can merge them, but be sure to compile the called file first
vlog -work work sfifo.v sfifo_tb.v
#You can also ignore the ‘-work work’, such as vlog sfifo.v sfifo_tb.v

#Run simulation
vsim sfifo_tb
vsim -lib work sfifo_tb
vsim work. sfifo_tb

#Prohibit to optimize
vsim -novopt work.sfifo_tb
vsim -voptargs=+acc -novopt work.sfifo_tb
#Attention: If you don’t add ‘-novopt’ to disable optimization in your commands, there will be error when add wave to window: # (vish-4014) No objects found matching '/sfifo_tb/*'.   

#specified time pricision is 1ns
vsim -novopt work.sfifo_tb -t 1ns

#Set the window types
#Open the wave window
view wave

#Open the instance structure window
view structure

#Open the signals list window
view signals

#Open the source window
view source

#Open the list window
view list

#Open the variables window
view variables

#Open the dataflow window
view dataflow

#Add all signals to wave window
add wave -r /*  
#Attention: -r should be followed by a space 

#Add the specific test signal to wave window, eg: add wave sim:/ sfifo_tb /clock
add wave sim:/ sfifo_tb /signal  
#Attention: ‘sim:’ can be ignored, which means ‘add wave / sfifo_tb /signal’ is also right 

#Add the tb signals to wave window
add wave sim:/sfifo_tb /* 
add wave /sfifo_tb /*
add wave *

#Display in hexadecimal or binary or decimal or unsigned or others
add wave -hex/-decimal/-unsigned/-binary *

#format: Logic/Literal/Event/analogautomatic/analogcustom
#add wave -noupdate -format Logic -radix decimal -color Red /sfifo_tb/sfifo1/clock
#add wave  -radix unsigned  -color pink -format analogautomatic sim: sfifo_tb/sfifo1/clock
add wave  -unsigned sim: sfifo_tb/sfifo1/clock 
add wave -noupdate -color pink -format Analog-Step -height 74 -max 4094.9999999999995 -radix unsigned sfifo_tb/sfifo1/clock

#Delete signal
delete  wave  /test/i

#Restart simulation, then click OK or press ENTER
restart 

#Run simulation
run 100 us
run -all

#quit -f/-force to quit Modelsim
#quit -sim to quit simulation
quit -f/-force/-sim 

#Clear transcript window
.main clear

中文理解可以參考這幾個網頁:
modelsim之命令行仿真入門
modelsim中常用的tcl命令

三. 腳下留心:

1.Enable optimization

仿真的時候:vsim -novopt work.sfifo_tb,如果不加‘-novopt’或者沒有勾選掉‘Enable optimization’,添加波形的時候會出現錯誤:# (vish-4014) No objects found matching ‘/sfifo_tb/*’
Enable optimization
ERROR:
ERROR

2.restart

如果想要重新仿真,可以直接輸入restart,然後點擊OK即可,或者點擊界面工具欄,最後run -all。

界面工具欄
在這裏插入圖片描述
點擊OK
在這裏插入圖片描述

3.路徑

有時候需要添加一些宏定義文件,路徑有兩種方法:
絕對路徑和相對路徑。

3.1絕對路徑

就是平時經常用到的,比如:F:\ModelProject\04_tcl_practice就爲絕對路徑,但是這種路徑有個壞處,就是換一臺電腦基本就不適用了。

3.2相對路徑

相對路徑中./表示當前文件夾,兩個點…/表示上一級文件,所以用相對路徑:./…/…/Wang_code/iVerilogLab/11_sfifo/sfifo.v
表示當前文件夾的上一級文件的上一級文件中的Wang_code中的iVerilogLab中的11_sfifo中的sfifo.v文件,當然,你可以直接把這個文件拷貝到當前目錄下,這裏只是舉個栗子。

3.3直接include

如果要添加宏定義文件的話,可以選中要添加的文件,右擊,選擇Properties,然後Include directory即可。
在這裏插入圖片描述
在這裏插入圖片描述
可以看到其實和直接使用+incdir+命令效果是一樣的。

4.↑的使用

當我們使用tcl的時候,不必每次都輸入指定do文件的命令,在腳本控制檯直接按上鍵就會顯示上一個執行過的命令。

四. do文件

1. file.do

ModelSim SE中可以執行一種批處理文件,就是.do文件,相當於DOS中的.bat文件。我們可以用批處理方式來使仿真簡單化,具體做法爲,將所要執行的命令編輯在一起,將上面的命令行加入到do文件中即可。

大體是這樣一個步驟,具體內容請看上面的命令註釋:
在這裏插入圖片描述
有了.do文件,以後就不用每次都點擊那麼多啦,直接在transcript中輸入do file.do(file爲你命名的名字)即可。
注意:
do文件的註釋是由#開始的,但不可以在代碼行後面添加,只能另起一行。

2. wave.do

添加波形的時候,可以直接使用add wave命令來添加所需的波形,然後修改顏色等,也可以將它們直接寫成一個wave.do文件,以便直接執行do wave.do就可以完成各種波形的編輯設置。在wave window使用ctrl + s 保存爲wave.do文件,然後找到並打開,會看到以下內容:
在這裏插入圖片描述
修改你要顯示的波形配置,以後直接do wave.do可以啦。

五. bat文件

.bat文件是DOS中的批處理文件,我們可以將剛纔的file.do文件直接命名爲file.bat,然後雙擊即可。

圖中爲優化後的代碼
在這裏插入圖片描述
vsim命令中的-c表示不打開GUI界面。
編譯的時候使用的是vlog -f vflist.f命令,vflist.f是一個.f文件,裏面包含了你要編譯的文件(設計文件)名稱。
在這裏插入圖片描述
雙擊.bat後
在這裏插入圖片描述
可以看到,效果是一樣的。

do文件具體可以參考:
moedlsim中do文件的寫法技巧
Modelsim之TCL仿真

六. 交互式命令

通過在主窗口的命令窗口輸入命令來實現,具有更好的調試和交互功能,提供多種指令,既可以是單步指令,也可以構成批處理文件,用來控制編輯、編譯和仿真流程。
常見交互式命令如下:

1.force-repeat指令

1.1指令格式:

force 開始電平值開始時間,結束電平值結束時間 -repeat 週期

force clk 0 0,1 30 -repeat 100 

解釋:強制clk從0時間單元開始,起始電平爲0,結束電平爲1,0電平保持時間爲30個默認時間單元,週期爲100個默認時間單元,佔空比爲70%。

1.2指令功能:

每隔一段的週期重複一定的force命令,用來產生時鐘信號,也可用來產生週期的輸入信號,如01010101,00110011等。

1.3栗子:

force clk 0 10,1 20 -r 20 

解釋:在第10ns時,clk = 0,在第20ns,clk=1,-r 20從第20個時間單位單位開始重複循環clk值的變化規律。

force rst_n 0 1,1 60

解釋:在第1ns,rst_n = 0,在第60ns,rst_n = 1;

force en 0 1,1 101,0 121

解釋: 在第1ns,en = 0,在第101ns,en = 1,在第121ns,en = 0;

2.force指令

2.1指令格式:

force item_name value time,value time;item_name爲端口信號或內部信號,支持通配符號,但只能匹配一個;value不能默認,time,可選項,支持時間單元;

force din 16#40900000 

從當前時刻起給din賦值16進制40900000;

force bus 16#F @100ns 

在100ns時刻給bus賦值16進制F;

force clr 1 100 

經歷100個默認時間單元延遲後爲clr賦值1;

force clr 1,0 100 

表示clr賦值1後,經歷100個默認時間單元延遲後爲clr賦值爲0;

3.run指令

3.1指令格式:

run timesteps time_unit,timesteps時間步長,time_unit時間單元,可以是fs、ps、ns、us、ms、sec;

3.2指令功能:

運行(仿真)並指定時間及單元;

run 100

表示運行100個默認時間單元;

run 2500ns

表示運行2500ns;

run -all

表示運行全過程;

run -continue

表示繼續運行

4.force-cancel指令

4.1指令格式:

force-cancel period

4.2指令功能:執行period週期時間後取消force命令;

force clk 0 0,1 30 -repeat 60-cancel 1000

表示強制clk從0時間單元開始,直到1000個時間單元結束;

5.view

# Open the wave window
view wave

#Open the instance structure window
view structure

# Open the signals list window
view signals

#Open the source window
view source

#Open the list window
view list

#Open the variables window
view variables

#Open the dataflow window
view dataflow

參考:
modelsim仿真中do文件的寫法

以上就是基本命令和do文件的基礎知識,希望對你有幫助~

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