ModelSim编译与仿真——脚本模式

//本文主要介绍如何编写脚本使用命令行或脚本模式调用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 中,是一个包含编译后的设计单元(如模块、实体等)的目录。通过库,可以将设计单元组织在一起,便于管理和重用。在编译和仿真过程中,库用于存储和查找编译后的设计单元。
vlibvmap 是用于管理库的命令。

  1. vlib 命令

vlib用于创建一个新的库。示例:

vlib work

创建一个名为work的库,通常作为默认的工作库。

  1. 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支持多种仿真波形的查看。

  1. 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
  1. 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
  1. 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
  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ME_Felix

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值