作者:白栎旸
以下其实是一个tcl语法的脚本,使用了modelsim的命令。
提供4个命令:sim, re, q, clear.功能如下:
sim: 刚开始仿真时,建立库、映射库、编译、仿真。
asim: 和sim功能基本一致,但假如了SVA断言选项。
re: 用于重复调试,前提是你已经将波形文件wave.do存好,re会自动调用,自动重启仿真。
q : 推出仿真。
clear: 清屏。
proc sim {} {
#如果目录中已经存在work文件夹,就不再新建库文件夹。
if {![file isdirectory work]} {
vlib work
}
#将逻辑库映射到实际库文件夹work下。
vmap work work
#编译文件,abc.f是文件列表,-incr是增量编译。
vlog -incr -f abc.f
#仿真,-novopt是禁止优化,不能使用modelsim的优化,会将testbench的信号优化掉。
vsim -novopt abc_tb
}
proc asim {} {
if {![file isdirectory work]} {
vlib work
}
vmap work work
# -sv是用system verilog语法进行编译,增加一个宏SVA_TEST,当使用断言时开启
vlog -sv -incr +define+SVA_TEST -f abc.f
# -assertdebug加入对断言的支持
vsim -assertdebug -novopt abc_tb
# 打开断言报告窗口,断言结果一般显示在命令行,断言报告窗口显示断言的统计结果。
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 选项是指在verilog文件中出现`include "xxx.v" 时,包含文件的搜索路径。
缺省是搜索当前路径,然后是 YOUR_SOURCE_PATH 指定的路径。
(1) +define+:
+define+[=]
允许用户在命令行中定义宏定义,等效于编译器指令:
`define
用户可以指定多个宏定义,如下:
vlog +define+one=r1 +two=r2 +three=r3 test.v
命令行的宏定义会覆盖在源文件中用`define定义的相同名字的宏定义
如:vsim -c -l vsim.log -do ./YourDo.do -L ./work work.foo
开始仿真:
-c 选项让vsim工作在commandline模式;
-l 选项是输出log文件到vsim.log;
-do 选项是开始仿真后运行tcl脚本文件;
-L 选项是指定工作逻辑库;
work.foo是仿真的top level module。