Modelesim脚本仿真学习笔记

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)

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值