作者:白櫟旸
以下其實(shí)是一個(gè)tcl語法的腳本,使用了modelsim的命令。
提供4個(gè)命令:sim, re, q, clear.功能如下:
sim: 剛開始仿真時(shí),建立庫、映射庫、編譯、仿真。
asim: 和sim功能基本一致,但假如了SVA斷言選項(xiàng)。
re: 用于重復(fù)調(diào)試,前提是你已經(jīng)將波形文件wave.do存好,re會自動(dòng)調(diào)用,自動(dòng)重啟仿真。
q : 推出仿真。
clear: 清屏。
proc sim {} {
#如果目錄中已經(jīng)存在work文件夾,就不再新建庫文件夾。
if {![file isdirectory work]} {
vlib work
}
#將邏輯庫映射到實(shí)際庫文件夾work下。
vmap work work
#編譯文件,abc.f是文件列表,-incr是增量編譯。
vlog -incr -f abc.f
#仿真,-novopt是禁止優(yōu)化,不能使用modelsim的優(yōu)化,會將testbench的信號優(yōu)化掉。
vsim -novopt abc_tb
}
proc asim {} {
if {![file isdirectory work]} {
vlib work
}
vmap work work
# -sv是用system verilog語法進(jìn)行編譯,增加一個(gè)宏SVA_TEST,當(dāng)使用斷言時(shí)開啟
vlog -sv -incr +define+SVA_TEST -f abc.f
# -assertdebug加入對斷言的支持
vsim -assertdebug -novopt abc_tb
# 打開斷言報(bào)告窗口,斷言結(jié)果一般顯示在命令行,斷言報(bào)告窗口顯示斷言的統(tǒng)計(jì)結(jié)果。
view assertions
}
proc re {} {
restart -f
do wave.do
run -all
}
proc q {} {quit -sim}
proc clear {} {.main clear}
(1) +incdir+:
如:vlog +incdir+YOUR_SOURCE_PATH foo.v
+incdir+YOUR_SOURCE_PATH 選項(xiàng)是指在verilog文件中出現(xiàn)`include "xxx.v" 時(shí),包含文件的搜索路徑。
缺省是搜索當(dāng)前路徑,然后是 YOUR_SOURCE_PATH 指定的路徑。
(1) +define+:
+define+[=]
允許用戶在命令行中定義宏定義,等效于編譯器指令:
`define
用戶可以指定多個(gè)宏定義,如下:
vlog +define+one=r1 +two=r2 +three=r3 test.v
命令行的宏定義會覆蓋在源文件中用`define定義的相同名字的宏定義
如:vsim -c -l vsim.log -do ./YourDo.do -L ./work work.foo
開始仿真:
-c 選項(xiàng)讓vsim工作在commandline模式;
-l 選項(xiàng)是輸出log文件到vsim.log;
-do 選項(xiàng)是開始仿真后運(yùn)行tcl腳本文件;
-L 選項(xiàng)是指定工作邏輯庫;
work.foo是仿真的top level module。