1. 程式人生 > >do文件的編寫(轉)

do文件的編寫(轉)

files mod 強制 delete efi 交互式 models ati snap

以前在使用ModelSim進行仿真的時候,一直是使用其GUI進行操作的,但是這樣很繁瑣也很費時。故希望學習其自動化仿真do文件,下面是學習的一些總結。

一、編寫基本的do文件

下面按照實際仿真的步驟來說明do文件中需要用到的各個tcl命令。

1、quit -sim —- 退出原來的仿真工程;

2、cd —- 設置工作目錄的路徑,就是仿真工程路徑;

3、vlib work —- 在工作目錄下建立一個work目錄,請註意不要用操作系統直接新建一個work的文件夾,因為用操作系統建立的work文件夾並沒有modelsim SE自動生成的_info文件。還有個問題是,當你的軟件工程裏需要用到軟核時,可能會需要一些庫,但這些庫ISE軟件中是沒有的,此時就需要我們自己新建庫了,並映射到當前目錄下。我們將自己新建的庫一般放在work庫前面建立;

4、vmap work /vmap work work —- 將新建的work庫映射到當前工作目錄下(當前目錄就是第一步中的目錄了),其他新建的庫也要這樣的方法映射。此處需要註意的事邏輯庫名與物理庫名最好保持一致,後面的work為物理的庫目錄,即上一步的目錄;

5、vlog +acc –work work “file_path/*.v” —- 編譯“file_path”目錄下所有.v文件,並將其添加進工作庫(work)中,包括IP生成的V文件也要編譯的。編譯時可以分開單獨編譯,但是一定要註意順序,先編譯被調用的文件。其中的“-work work”是將後面的源文件編譯到哪個庫中,如果是編譯到默認的work庫中,則也可以不寫該參數。若只想編譯其中某些文件,則可以直接寫出這些文件的名字,比如下面兩種寫法等效:

vlog div.v div_tb.v
vlog -work work div.v div_tb.v

若是要編譯基本器件庫,可參照下面的例子:

vlib verilog_libs/altera_ver
vmap altera_ver ./verilog_libs/altera_ver
vlog -vlog01compat -work altera_ver {d:/quartus9.0/quartus/eda/sim_lib/altera_primitives.v
vlog後面的兩個參數“-vlog01compat”、“-work”是固定的。其中“-work”是必須保留的,“-vlog01compat”則在源文件為verilog文件時可以保留,如果為VHDL文件則不能使用該參數。需要註意的一點是該工程目錄下的“verilog_libs”庫文件夾需要手動建立,否則運行會出現錯誤。
需要編譯的文件有兩種:源代碼文件、庫文件。對於庫文件的編譯可以有兩種處理方式:
1、將這些庫文件與源代碼文件一起編譯到work庫中,這樣比較方便省事;
2、將庫文件單獨編譯到一個庫中,在運行的時候需要通過參數設置來將庫選擇上。由於第一種方式較為簡單,後面將采用第二種方式。
當某一路徑會經常用到時,可以通過設置一個路徑變量來存儲該路徑,示例如下:
set LIBPATH c:/altera/11.0/quartus/eda/sim_lib/
vlib sim_lib
vmap sim_lib sim_lib
vlog -work sim_lib

LIBPATH/alteramf.vvlog?worksimlibLIBPATH/alteramf.vvlog?worksimlibLIBPATH/altera_primitives.v
vlog命令負責編譯verilog文件,如果是VHDL文件,則需要將vlog命令換成vcom命令。
在該命令中,如果想要include某個文件,則可以通過vlog的incdir選項來實現,比如:
vlog +incdir+d:/work

6、vsim -novopt -quiet -c -L altera_ver -L E:/modeltech_6.6a/Xilinx_lib_edk/unimacro_ver -lib work div -t 1ns -do “run 2084655ns” —- 啟動仿真命令,該命令可以有許多參數。

參數“-L altera_ver”是添加仿真庫,該處是直接使用邏輯庫名稱,也可以像後面一樣使用物理庫的名稱及路徑;若是庫與源文件一起編譯到work庫中的,則不需要該參數;
參數“-t 1ns”表示仿真時間單位為1ns;
參數“-novopt”禁止優化(no vopt),可能會因為vopt的緣故使得一些不重要signal被modelsim自動忽略,一般會保留該參數;
參數“-do”表示運行時間,該參數一般不用,在後面再運行該命令;
參數“-c”表示進入命令行模式,如果沒有該參數,則表示進行GUI模式。
默認工作庫為work,因而下面幾種寫法等效:
vsim div_tb
vsim -lib work div_tb
vsim work.div_tb
sim -L D:/Modelsim/Installfiles/altera/altera_mf work.videoin_tb

7、view signals source wave —- 打開signal、source、wave窗口,也可以只打開wave窗口;

8、delete wave * —- 刪除原來wave窗口中的波形;

9、add wave -binary clk rst —- 打添加要觀察的波形信號,clk、rst為tb的頂層信號名,若要添加內部信號則要給出路徑,-binary表示使用二進制顯示;

添加一個模塊的所有信號則可以用下面的方式:
add wave -dec sim:/div_tb/*
若只是要添加單個信號,則把“*”換成對應的信號即可,比如:
add wave -unsigned sim:/div_tb/clk
在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}
如果所有信號均采用同一種方式顯示,則可以用如下方式設置,就不必要在每次添加信號時設置顯示參數:
radix -hex

10、run 5000/run @5000 —- 開始運行仿真程序;

沒有“@”則表示在當前時刻繼續運行5000個單位時間;
有“@”則表示運行到5000這個時刻,如果當前程序仿真已經運行到了5000以後的時刻,則該方法不會繼續向後運行,而會彈出一個錯誤信息,提示當前仿真時刻已經超過了該數值。
run -all則表示一直運行,直到手動停止。
在5000後面也可以跟上一個單位,不跟單位時則以仿真的最小單位為基準。

11、quit -f/quit -sim —- 參數為“f”時則結束ModelSim,參數為“sim”時則結束該仿真進程。

下圖是我寫的一個do文件的截圖,能夠正確運行。
技術分享圖片

這裏只是編寫了基本的do文件,需要在ModelSIm的Transcipts窗口輸入相應的命令才可以執行。
1、cd filepath —-進入do文件所在的目錄;
2、do filename.do —-執行do文件,開始仿真。

二、進行優化

還可以對上面的流程進行優化,真正達到自動仿真,使得仿真更有效率。
1、批處理bat文件 —- 直接運行該文件即可啟動仿真,而不需要首先進入ModelSim啟動do文件;該方法還未實驗成功。
2、單獨的文件存儲文件路徑 —-當有多個不同的文件路徑時,為使do文件更加簡潔,可以將所有路徑存儲在一個文件中。該方法也未實驗成功。
我是按照Modelsim中常用的Tcl命令中的方法實驗的,以後有時間再來看看怎麽弄這個。
三、交互式命令
通過在主窗口的命令窗口輸入命令來實現,具有更好的調試和交互功能,提供多種指令,既可以是單步指令,也可以構成批處理文件,用來控制編輯、編譯和仿真流程。
1、force-repeat
指令格式:force 開始時間開始電平值,結束電平值忽略時間(即0電平保持時間) -repeat 周期
force clk 0 0,1 30 -repeat 100 表示強制clk從0時間單元開始,起始電平為0,結束電平為1,0電平保持時間為30個默認時間單元,周期為100個默認時間單元,占空比為70%。
指令功能:每隔一段的周期重復一定的force命令,用來產生時鐘信號,也可用來產生周期的輸入信號,如01010101,00110011等。
2、force
指令格式: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
指令格式:run timestepstime_unit,timesteps時間步長,time_unit時間單元,可以是fs、ps、ns、us、ms、sec;
指令功能:運行(仿真)並指定時間及單元;
run 100,表示運行100個默認時間單元;
run 2500ns,表示運行2500ns;
run -all,表示運行全過程;
run -continue,表示繼續運行。
4、force-cancel
指令格式:force-cancel period
指令功能:執行period周期時間後取消force命令;
force clk 0 0,1 30 -repeat 60-cancel 1000,表示強制clk從0時刻開始,直到1000個時間單元結束。
5、view
指令格式:view 窗口名
指令功能:打開Modelsim的窗口
view souce,打開源代碼窗口;
view wave,打開波形窗口;
view list,打開列表窗口;
view varibles,打開變量窗口;
view signals,打開信號窗口;
view all,打開所有窗口。

do文件的編寫(轉)