//本文主要介绍如何编写脚本使用命令行或脚本模式调用ModelSIm进行数字电路的编译与仿真,如有错误,欢迎指正
1、基础示例
以下是一个完整的、简单的调用modelSim进行编译与仿真的脚本(run_sim.sh)。
#! /bin/bash
# 设置工作目录
WORK_DIR=work
# 创建工作库
vlib $WORK_DIR
# 映射工作库
vmap work $WORK_DIR
# 编译Verilog文件
vlog -work $WORK_DIR +incdir+../src ../src/your_design.v ../src/your_testbench.v
# 运行仿真
vsim -64 -batch -do "run -all; quit" -lib $WORK_DIR your_testbench
运行脚本:
chmod +x run_sim.sh
./run_sim.sh
这是最简单的modelSim进行编译(vlog)与仿真(vsim)的脚本,执行的功能是编译所有文件,run -all。但实际使用时还会添加其他参数,来对仿真环境做一定的限制,或增加一些功能(例如生成波形)。
接下来则会按流程分别介绍这些参数的使用。
2、创建工作库
在 ModelSim 中,库是一个包含编译后的设计单元(如模块、实体等)的目录。通过库,可以将设计单元组织在一起,便于管理和重用。在编译和仿真过程中,库用于存储和查找编译后的设计单元。
vlib 和 vmap 是用于管理库的命令。
- vlib 命令
vlib用于创建一个新的库。示例:
vlib work
创建一个名为work的库,通常作为默认的工作库。
- vmap命令
vmap 用于将库名称映射到实际的路径。它可以用来设置默认工作库或映射其他库。示例:
vmap work work
vmap altera_lib /path/altra/sim_lib
将库名称work映射到当前目录下的work文件夹。
3、编译
vlog 是用于编译 Verilog 和 SystemVerilog 文件的命令。常见参数包括:
- -work :指定工作库。
- -sv:启用 SystemVerilog 支持。
- -timescale :设置时间尺度。
- -mfcu:启用多文件编译单元。
- -lint:启用 lint 检查。
- -incr:启用增量编译。
- -novopt:禁用优化。
- -debug:启用调试信息。
- -coverage:启用覆盖率收集。
- -f :指定包含文件列表的文件。
- +define+:定义宏。
- +incdir+<dir_name>:指定包含目录。
- -l <log_file>:指定打印日志命令(log)。
- -suppress:抑制特定的警告消息。
示例:
vlog -work work -sv +incdir+../src +define+SIMULATION sim_define.v -f ../filelist/sim.f -timescale=1ns/1ps -l vlog.log
4、仿真
vsim 是用于运行仿真的命令,常见参数包括:
- -64:启用64为模式
- -batch:以批处理模式运行仿真,不启动GUI。
- -c:以命令行模式运行。
- -gui:以 GUI 模式运行。
- -lib 或者-L :指定库。
- -do <run_file>:指定要执行的命令文件。
- -l <log_file>:指定日志文件。
- -voptargs :指定优化参数。
- -coverage:启用覆盖率收集。
- -assertdebug:启用断言调试。
- -g<parameter>=<value>:设置VHDL仿真参数。
- -G<parameter>=<value>:设置Verilog仿真参数。
- -t <time_unit>:设置仿真时间单位。
- -wlf <waveform_file>:指定波形文件。
- -novopt:禁用优化。
- -suppress:抑制特定的警告消息。
- +nospecify:禁用 specify 块,通常用于忽略时需检查和路径延时。
示例:
vsim -64 -batch -L /path/alter/sim_lib -L work -GRUN_VSIM=1 -t 1ps -l vsim.log -do "run -all; quit" test_tb
运行上述脚本会在指定工作区与相关参数下,执行“run -all; quit”命令,其中,我们可以把运行命令放在一个run.do脚本中。
## run.do
run -all
quit
修改vsim.do为:
vsim -64 -batch -L /path/alter/sim_lib -L work -GRUN_VSIM=1 -t 1ps -l vsim.log -do run.do test_tb
5、波形
ModelSim支持多种仿真波形的查看。
- wlf(Waveform Log Format)
是ModelSim的默认格式波形,通常会命名为vsim.wlf,可以使用-wlf参数指定波形名称及路径。其他不需要更多的操作。
vsim -64 -batch -L /path/alter/sim_lib -L work -GRUN_VSIM=1 -t 1ps -wlf dump.wlf -l vsim.log -do run.do test_tb
使用ModelSim的GUI查看生成的wlf波形:
vsim -view dump.wlf
- vcd(Value Change Dump)
vcd是一种标准的波形文件,用于纪录数字信号在仿真过程中值的变化。在run.do脚本中添加生成波形文件的命令:
## run.do
run -all
vcd file wave.vcd
vcd add /test_tb/*
quit
然后在vsim的脚本中,使用“-do run.do”即可生成vcd波形。
或者可以提前在tb中添加语句以生成vcd波形
initial begin
$dumpfile("wave.vcd");
$dumpvars(0, test_tb);
end
编译仿真后即生成vcd波形。
使用ModelSim或者Gtkwave来查看vcd波形
vsim -view wave.vcd
- fsdb(Fast Signal Database)
FSDB格式通常用于更高效的波形存储和查看。需要使用 Verdi 或其他支持 FSDB 格式的工具来查看。但这要提前确定你的仿真环境中已经添加了FSDB生成库(例如Novas FSDB库)。
在run.do脚本中添加波形生成语句以生成fsdb波形:
## run.do
run -all
fsdbDumpfile \"waveform.fsdb\"
fsdbDumpvars
quit
或者提前在tb中添加语句以生成fsdb波形。
initial begin
$fsdbDumpfile("dump.fsdb");
$fsdbDumpvars(0, test_tb);
end
使用verdi查看fsdb波形:
verdi -f sim.f -ssf dump.fsdb