QuestaSim自动化仿真之do文件
一、編寫基本的do文件
下面按照實(shí)際仿真的步驟來(lái)說(shuō)明do文件中需要用到的各個(gè)tcl命令。
1、quit -sim ---- 退出原來(lái)的仿真工程;
2、cd ---- 設(shè)置工作目錄的路徑,就是仿真工程路徑;
3、vlib work ---- 在工作目錄下建立一個(gè)work目錄,請(qǐng)注意不要用操作系統(tǒng)直接新建一個(gè)work的文件夾,因?yàn)橛貌僮飨到y(tǒng)建立的work文件夾并沒有modelsimSE自動(dòng)生成的_info文件。還有個(gè)問(wèn)題是,當(dāng)你的軟件工程里需要用到軟核時(shí),可能會(huì)需要一些庫(kù),但這些庫(kù)ISE軟件中是沒有的,此時(shí)就需要我們自己新建庫(kù)了,并映射到當(dāng)前目錄下。我們將自己新建的庫(kù)一般放在work庫(kù)前面建立;
4、vmapwork/vmapworkwork ---- 將新建的work庫(kù)映射到當(dāng)前工作目錄下(當(dāng)前目錄就是第一步中的目錄了),其他新建的庫(kù)也要這樣的方法映射。此處需要注意的事邏輯庫(kù)名與物理庫(kù)名最好保持一致,后面的work為物理的庫(kù)目錄,即上一步的目錄;
5、vlog+acc–workwork“file_path/*.v”---- 編譯“file_path”目錄下所有.v文件,并將其添加進(jìn)工作庫(kù)(work)中,包括IP生成的V文件也要編譯的。編譯時(shí)可以分開單獨(dú)編譯,但是一定要注意順序,先編譯被調(diào)用的文件。其中的“-work work”是將后面的源文件編譯到哪個(gè)庫(kù)中,如果是編譯到默認(rèn)的work庫(kù)中,則也可以不寫該參數(shù)。若只想編譯其中某些文件,則可以直接寫出這些文件的名字,比如下面兩種寫法等效:
vlog div.v div_tb.v
vlog -work work div.v div_tb.v
若是要編譯基本器件庫(kù),可參照下面的例子:
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后面的兩個(gè)參數(shù)“-vlog01compat”、“-work”是固定的。其中“-work”是必須保留的,“-vlog01compat”則在源文件為verilog文件時(shí)可以保留,如果為VHDL文件則不能使用該參數(shù)。需要注意的一點(diǎn)是該工程目錄下的“verilog_libs”庫(kù)文件夾需要手動(dòng)建立,否則會(huì)運(yùn)行會(huì)出現(xiàn)錯(cuò)誤。
需要編譯的文件有兩種:源代碼文件、庫(kù)文件。對(duì)于庫(kù)文件的編譯可以有兩種處理方式:1、將這些庫(kù)文件與源代碼文件一起編譯到work庫(kù)中,這樣比較方便省事;2、將庫(kù)文件單獨(dú)編譯到一個(gè)庫(kù)中,在運(yùn)行的時(shí)候需要通過(guò)參數(shù)設(shè)置來(lái)將庫(kù)選擇上。由于第一種方式較為簡(jiǎn)單,后面將采用第二種方式。
當(dāng)某一路徑會(huì)經(jīng)常用到時(shí),可以通過(guò)設(shè)置一個(gè)路徑變量來(lái)存儲(chǔ)該路徑,示例如下:
set LIBPATH c:/altera/11.0/quartus/eda/sim_lib/
vlib sim_lib
vmap sim_lib sim_lib
vlog -work sim_lib $LIBPATH/altera_mf.v
vlog -work sim_lib $LIBPATH/altera_primitives.v
vlog命令負(fù)責(zé)編譯verilog文件,如果是VHDL文件,則需要將vlog命令換成vcom命令。
在該命令中,如果想要include某個(gè)文件,則可以通過(guò)vlog的incdir選項(xiàng)來(lái)實(shí)現(xiàn),比如:
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" ---- 啟動(dòng)仿真命令,該命令可以有許多參數(shù)。
參數(shù)“-L altera_ver”是添加仿真庫(kù),該處是直接使用邏輯庫(kù)名稱,也可以像后面一樣使用物理庫(kù)的名稱及路徑;若是庫(kù)與源文件一起編譯到work庫(kù)中的,則不需要該參數(shù);
參數(shù)“-t 1ns”表示仿真時(shí)間單位為1ns;
參數(shù)“-novopt”禁止優(yōu)化(no vopt),可能會(huì)因?yàn)関opt的緣故使得一些不重要signal被modelsim自動(dòng)忽略,一般會(huì)保留該參數(shù);
參數(shù)“-do”表示運(yùn)行時(shí)間,該參數(shù)一般不用,在后面再運(yùn)行該命令;
參數(shù)“-c”表示進(jìn)入命令行模式,如果沒有該參數(shù),則表示進(jìn)行GUI模式。
默認(rèn)工作庫(kù)為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 * ---- 刪除原來(lái)wave窗口中的波形;
9、addwave-binaryclkrst ---- 打添加要觀察的波形信號(hào),clk、rst為tb的頂層信號(hào)名,若要添加內(nèi)部信號(hào)則要給出路徑,-binary表示使用二進(jìn)制顯示;
添加一個(gè)模塊的所有信號(hào)則可以用下面的方式:
add wave -dec sim:/div_tb/*
若只是要添加單個(gè)信號(hào),則把“*”換成對(duì)應(yīng)的信號(hào)即可,比如:
add wave -unsigned sim:/div_tb/clk
在wave窗口中,可以對(duì)波形進(jìn)行相關(guān)配置,下面是常用的配置命令:
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}
如果所有信號(hào)均采用同一種方式顯示,則可以用如下方式設(shè)置,就不必要在每次添加信號(hào)時(shí)設(shè)置顯示參數(shù):
radix -hex
10、run 5000/run @5000---- 開始運(yùn)行仿真程序;
沒有“@”則表示在當(dāng)前時(shí)刻繼續(xù)運(yùn)行5000個(gè)單位時(shí)間;
有“@”則表示運(yùn)行到5000這個(gè)時(shí)刻,如果當(dāng)前程序仿真已經(jīng)運(yùn)行到了5000以后的時(shí)刻,則該方法不會(huì)繼續(xù)向后運(yùn)行,而會(huì)彈出一個(gè)錯(cuò)誤信息,提示當(dāng)前仿真時(shí)刻已經(jīng)超過(guò)了該數(shù)值。
run -all則表示一直運(yùn)行,直到手動(dòng)停止。
在5000后面也可以跟上一個(gè)單位,不跟單位時(shí)則以仿真的最小單位為基準(zhǔn)。
11、quit -f/quit -sim---- 參數(shù)為“f”時(shí)則結(jié)束ModelSim,參數(shù)為“sim”時(shí)則結(jié)束該仿真進(jìn)程。
這里只是編寫了基本的do文件,需要在ModelSIm的Transcipts窗口輸入相應(yīng)的命令才可以執(zhí)行。
1、cd filepath----進(jìn)入do文件所在的目錄;
2、do filename.do----執(zhí)行do文件,開始仿真。
二、進(jìn)行優(yōu)化
還可以對(duì)上面的流程進(jìn)行優(yōu)化,真正達(dá)到自動(dòng)仿真,使得仿真更有效率。
1、批處理bat文件---- 直接運(yùn)行該文件即可啟動(dòng)仿真,而不需要首先進(jìn)入ModelSim啟動(dòng)do文件;該方法還未實(shí)驗(yàn)成功。
2、單獨(dú)的文件存儲(chǔ)文件路徑----當(dāng)有多個(gè)不同的文件路徑時(shí),為使do文件更加簡(jiǎn)潔,可以將所有路徑存儲(chǔ)在一個(gè)文件中。該方法也未實(shí)驗(yàn)成功。
我是按照Modelsim中常用的Tcl命令中的方法實(shí)驗(yàn)的,以后有時(shí)間再來(lái)看看怎么弄這個(gè)。
三、交互式命令
通過(guò)在主窗口的命令窗口輸入命令來(lái)實(shí)現(xiàn),具有更好的調(diào)試和交互功能,提供多種指令,既可以是單步指令,也可以構(gòu)成批處理文件,用來(lái)控制編輯、編譯和仿真流程。
1、force-repeat
指令格式:force開始時(shí)間開始電平值,結(jié)束電平值忽略時(shí)間(即0電平保持時(shí)間)-repeat周期
forceclk00,130-repeat100表示強(qiáng)制clk從0時(shí)間單元開始,起始電平為0,結(jié)束電平為1,0電平保持時(shí)間為30個(gè)默認(rèn)時(shí)間單元,周期為100個(gè)默認(rèn)時(shí)間單元,占空比為70%。
指令功能:每隔一段的周期重復(fù)一定的force命令,用來(lái)產(chǎn)生時(shí)鐘信號(hào),也可用來(lái)產(chǎn)生周期的輸入信號(hào),如01010101,00110011等。
2、force
指令格式:forceitem_namevaluetime,valuetime;item_name為端口信號(hào)或內(nèi)部信號(hào),支持通配符號(hào),但只能匹配一個(gè);value不能默認(rèn),time,可選項(xiàng),支持時(shí)間單元;forcedin16#40900000從當(dāng)前時(shí)刻起給din賦值16進(jìn)制40900000;forcebus16#F@100ns在100ns時(shí)刻給bus賦值16進(jìn)制F;forceclr1100經(jīng)歷100個(gè)默認(rèn)時(shí)間單元延遲后為clr賦值1;
forceclr1,0100表示clr賦值1后,經(jīng)歷100個(gè)默認(rèn)時(shí)間單元延遲后為clr賦值為0。
3、run
指令格式:runtimestepstime_unit,timesteps時(shí)間步長(zhǎng),time_unit時(shí)間單元,可以是fs、ps、ns、us、ms、sec;
指令功能:運(yùn)行(仿真)并指定時(shí)間及單元;
run100,表示運(yùn)行100個(gè)默認(rèn)時(shí)間單元;
run2500ns,表示運(yùn)行2500ns;
run-all,表示運(yùn)行全過(guò)程;
run-continue,表示繼續(xù)運(yùn)行。
4、force-cancel
指令格式:force-cancelperiod
指令功能:執(zhí)行period周期時(shí)間后取消force命令;
forceclk00,130-repeat60-cancel1000,表示強(qiáng)制clk從0時(shí)刻開始,直到1000個(gè)時(shí)間單元結(jié)束。
5、view
指令格式:view窗口名
指令功能:打開Modelsim的窗口
viewsouce,打開源代碼窗口;
viewwave,打開波形窗口;
viewlist,打開列表窗口;
viewvaribles,打開變量窗口;
viewsignals,打開信號(hào)窗口;
viewall,打開所有窗口。
總結(jié)
以上是生活随笔為你收集整理的QuestaSim自动化仿真之do文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 超人卡上征信吗
- 下一篇: lpr基点是什么意思