Modelesim脚本仿真学习笔记
前言
做FPGA开发的工作少不了需要对RTL逻辑进行功能仿真(前仿真)和时序仿真(后仿真)。我个人习惯使用Modelsim开发工具完成仿真的工作,以前总是使用该工具的UI界面来完成仿真工程的创建、源文件添加、编译等操作。当文件比较少时,感觉不怎么费事,因为Modelsim工具也是比较人性化,易于操作。可是在工作过程中,发现很多同事使用脚本来操作Modelsim实现RTL工程的创建和仿真,感觉很高大上,给人一种大牛的感觉。因此本人抽了一点时间学习了一下TCL脚本相关的仿真指令。其实这部分的内容也不多,真正使用的指令也很少,但是能很快的提高我们的工作效率。还是有必要去熟悉一下Modelsim脚本仿真的知识。我是在Windos平台进行FPGA开发的,所以使用BAT脚本和TCL脚本配合起来操作Modelsim的自动化仿真。
文件分类
为了方便以后的开发工作,我建立了一个文件管理模型,如上图所示,先创建一个文件夹(FPGA_PRJ)用于保存FPGA的工程,在该文件下创建了名为simulate和src的文件夹,simulate文件夹存放于仿真有关的文件,src存放.v源文件。
sim_rtl文件介绍
simulate文件下的文件如上图所示,文件介绍如下所示:
sim_rtl文件夹: 用于保存与仿真激励有关的.v文件。
modelsim_start.bat: Windos的批处理脚本文件。
sim.do: modelsim仿真的脚本文件。
vlog_file_list.f文件: 陈列需要参与编译的源文件路径。
wave.do: 添加波形脚本指令。
首先介绍一下sim.do文件的脚本内容。脚本内容如下:
#判断work库文件是否存在,如果存在强制删除
if {[file exists work]} {
file delete -force work
}
#退出当前仿真功能
quit -sim
#清除命令行显示信息
.main clear
#创建work库和映射work库到逻辑work目录
vlib work
vmap work work
#编译源文件
vlog -sv -work work \
+libext+.v\
+define+SIM\
-timescale "1ns/1ps" \
-l rtl.log \
-f vlog_file_list.f
#仿真功能指令
vsim -voptargs="+acc" -L work +dump_all +initreg0 work.sim_tb -novopt -t ps
#运行wave.do脚本文件,添加要观察的信号波形
do wave.do
#执行200us的仿真
run 200us
关于vlog指令的相关介绍:
-sv: Enable SystemVerilog features and keywords 兼容SystemVerilog标准语法
+libext+.v: work逻辑库目录下的所有.v参与编译。
+define+SIM: 类似于在代码中加入`define SIM语句。
-timescale “1ns/1ps”: 指定时间精度。
-l rtl.log: 将编译的日志记录在rtl.log文件中。
-f vlog_file_list.f: 指定参与编译的源文件在vlog_file_list.f文件中。
与vlog指令相关的其他属性,感兴趣的同学可以在Modelsim的命令行输入 vlog -help查看。
vlog_file_list.f文件介绍:
./sim_rtl/sim_tb.v
../src/led_ctrl.v
vlog_file_list.f主要是放源文件的路径,这里是以modelsim仿真工程为基准的相对路径,建议使用相对路径。本人的DEMO写得比较简单,只有两个.v文件,分别是放在sim_rtl文件下的仿真激励sim_tb.v文件,和src下的led_ctrl.v源文件。
关于vsim指令的相关介绍:
vsim -voptargs="+acc" -L work +dump_all +initreg0 work.sim_tb -novopt -t ps
vsim指令是执行仿真指令,相关属性如下所示:
-voptargs=“+acc”: 优化部分参数
-L work: 链接到默认的work 库
work.sim_tb: 启动仿真顶层测试逻辑库(work)里面的sim_tb文件
wave.do文件介绍:
#Add wave
add wave -divider {sim_tb}
add wave -hex /sim_tb/*
wave.do文件主要是添加需要观察的模块信号的脚本指令。其中,
add wave -divider {sim_tb}:添加分隔线,如果有多个模块需要观察波形的话,使用分隔线可以很清楚各个模块之间的信号。
add wave -hex /sim_tb/*:表示以16进制查看sim_tb.v模块中所有信号
modelsim_start.bat文件介绍:
modelsim -do sim.do
modelsim_start.bat只有一条指令,如上所示。该指令是modelsim工具然后直接sim.do脚本。实现自动化打开modelsim的操作。如果没有该脚本,则需要手动打开modelsim,然后在modelsim的命令行切换路径到需要仿真的工程文件下,这样操作会有点麻烦,所以我使用脚本来完成这一操作。
DEMO仿真
进入FPGA_PRJ的simulate目录下,双击modelsim_start.bat文件即可。DEMO仿真工程如下所示:
说明
本文当没有介绍后仿真的部分内容,后仿真需要先编译工程,导入布线之后的相关文件,以及时序约束文件。这部分内容以后再更新。
参考文献
更多的学习资料可以参考以下链接:
1、基于脚本的modelsim自动化仿真笔记(https://www.cnblogs.com/IClearner/p/7273441.html)
2、ModelSim的TCL脚本仿真流程【超详细案例教学】(https://blog.csdn.net/L_Carpediem/article/details/134223621?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170677096116800227485758%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=170677096116800227485758&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-134223621-null-null.142v99pc_search_result_base9&utm_term=Modelsim%20tcl&spm=1018.2226.3001.4187)