问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用Modelsim脚本命令实现自动化仿真

创作时间:
2025-03-12 07:14:01
作者:
@小白创作中心

使用Modelsim脚本命令实现自动化仿真

引用
1
来源
1.
https://www.bilibili.com/read/mobile?id=34786938

使用Modelsim脚本命令实现自动化仿真

前言

当年,前同事教我仿真的时候,只教了用GUI图形界面,(猜测,他来的时候也是就只学了这个)即传统的在Modelsim软件内新建工程,写测试文件,加设计,导入元件库,用鼠标点来点去。每次更新迭代了测试文件或电路设计,整个仿真流程又要重新来一遍,重复的步骤,空耗时光。很长一段时间内,我都是使用这种方法。直到有一次去外地出差学习,接触到另一位前辈,当时在旁边看他跑仿真,就敲了几行代码,回车一下,编译仿真加波型信号,都完成了。对于初出茅庐的小菜鸟来说,还是很震撼的。大佬就是大佬,同样是仿真,人家可以搞这么快。

在我的虚心求教下,虽然没有每一行命令都讲解,但是知道了自动化的基础流程,还不会自己写,但照着他的脚本文件改改,可以跑仿真。(也不是说什么留一手的,大佬确实忙,是好几个项目的负责人,能抽空给我讲解一下用法,已经是很难得了)回来后,自己专研总结了这里面的道道。自动化仿真,有点东西,但不多,只要掌握了方法就不难。万变不离其宗,两种方法仿真流程可能不一样,但都可以得到同一个结果,都是通过观察波形,来判断信号逻辑是否正常,设计的电路功能是否实现。之所以推荐使用自动化仿真,是因为它可以完成很多内容重复的工作,帮助我们从仿真过程解脱出来,从而只需要关心与芯片功能相关的仿真结果,提高工作效率。

前期准备

先简单的介绍一下Modelsim的仿真过程

完成一次最基础的仿真需要以下步骤:

  1. 建库
  2. 映射
  3. 编译
  4. 启动仿真
  5. 添加信号到波形窗口
  6. 设置仿真时间
  7. 最后进行工程调试,通过观察波形窗口,实际波形逻辑是否和预期一致,来判断设计的电路,功能是否正常,反之,就要重复,修改->仿真->再修改->再仿真…… 迭代这一过程,直至功能完全正常,这还是前仿,后面还要进行综合后仿(这次仿真也过了逻辑上一般不会出现问题了,但可能出现时序上的错误,导致功能出现问题)。以上都是软件仿真模拟的,只能说理论上没有问题了,实际还需要把电路下载到FPGA上,看看真实电路逻辑会不会出现问题,(根据测试文档,同事提供的,没有的话自己写一个,把芯片规格要求的功能,列个表,一个个测过去)再焊个外围控制电路,测试芯片各模块功能。

自动化do文件所做的工作就是把上述的步骤,用TCL脚本语言编写出来,Modelsim能识别并执行脚本内的各命令,从而达到自动执行仿真的要求。这种方式,在需要频繁的修改电路和功能仿真的电路设计初期,能提供很大的便利,因为仿真过程需要用到的命令都是一样的,脚本文件自动执行这些过程,因而可以免除大量的重复工作,节省时间和精力。自动化仿真其准备过程,与在软件内建立仿真工程一致,需要提前将与仿真有关的文件,诸如test_tb测试文件,电路设计的.v文件,程序生成的.Bin,(这个文件与test_tb不一样,我是用汇编写的程序,然后通过编译器将其编码成二进制文件。

实际操作

前期工作完成后,开始编写do文件,新建一个名为tb_top.do的文件,我自己习惯不加后缀,直接是tb_top文件也可以使用(别学我)。一个完整的仿真过程,需要用到的命令,会写在这个文件内。具体使用时,打开Modelsim软件,在Transcript窗口(若这个窗口不小心关掉了,可以在view栏内,选中Transcrip即可恢复)内键入do tb_top,回车后,Modelsim SE会按顺序执行文件内的命令。注意 #井号后面的是注释内容,do命令不会执行。

(我的前仿tb_top.do文件,精简版,只用这几个命令也能跑起来)
(前辈的do文件,他都是直接跑ISE综合后仿的,不跑前仿,后仿do文件要调用sdf文件,信号加上时延信息,)

完成一次仿真只需要6个命令:

  1. 建库
  2. 映射
  3. 编译
  4. 启动仿真
  5. 添加信号到波形窗口
  6. 设置仿真时间

使用do命令仿真的第一步,是加载更改工程路径,不做这一步,你敲do命令是找不到你的do文件的,如图1
图1
设置工作目录的路径,就是仿真工程路径有两种方法

  1. 在软件上方的选项栏,中找到 file => change directory => 选择.do文件所在文件夹
  2. 在Transcript窗口,敲cd命令,空一格,盘符,c盘或d盘,加冒号加斜杠,命令行上方有对应文件提示
    cd E:/learn/LX/do_file
    注意:更改文件路径时,需要退出仿真状态。

Do文件详解

do文件内容:

  1. 首先是 vlib work 命令,在tb_top文件同一个目录下,建立一个work目录,注意不要用操作系统自己建一个work文件夹,因为用操作系统建立的work文件,并没有Modelsim SE 自动生成的_info文件, “_info”是运行的一些信息,和work文件是配套的,一般情况下不会用到这个文件,当然没事也不要去改它。

  2. vmap work work 映射(将目前的逻辑工作库和时间工作库映射对应)
    vmap映射命令后的两个work都是文件名。前一个work是vlib命令所创建的物理文件夹名(此文件夹必须用vlib命令事先定义好,才能被引用)
    后一个work表示,在Modelsim的library窗口,创建一个名为work的库文件夹(逻辑目录),其对应的物理目录,是vlib命令创建好的名为work的文件夹
    创建work文件夹的目的,是为了后续编译的文件都可以存放在这个文件夹下,Modelsim的work library里可以看到编译文件名称,而这些编译文件实际是存放在vlib创建的work文件夹下。

  3. vlog *.v vlog是编译命令,
    星号是通配符,.v,表示编译tb_top文件所在目录下的所有.v文件,并将其添加进工作库(work)中,包括IP或你设计的电路的.v文件,test_tb,库文件等都需要编译。当然不在同一个目录也可以单独进行编译,需要添加文件所在路径

#vlog -reportprogress 300 -work work {./test_1.v}
./一个点加斜杠号,
表示do文件所在的当前文件夹路径,编译test_1.v。
#vlog -reportprogress 300 -work work {../../demo/rev_1/n52170.v}
../两点加斜杠,
表示在do文件夹的上一层,上几层就重复../几次,

  1. vsim -novopt work.m52180_tb vsim 启动modulsim仿真命令 work.固定用法,后面接上测试模块的模块名vsim -voptargs=+acc work.tb_top
    -voptargs=+acc 是固定命令脚本,表示优化部分参数
    设计优化功能是用来提高仿真速度的,对于小工程,选择不优化或者选择优化其实对仿真速度的影响微乎其微,根本感觉不到:有三种优化方式
    不优化(命令 -novopt):完全不进行设计优化,所有信号可见,但仿真速度较慢。
    优化(命令-vopt):进行设计优化,但信号不可见,速度最快。调试完全依赖于testench的打印输出,无法正常看到中间信号。在不是非常高度自动化的进行测试,并且需要观察中间调试信号的情况下,一般不推荐该模式
    vsim -novopt work.m52180_tb
    部分优化(命令 -voptargs=+acc):进行部分设计优化,但又保证所有信号可见,速度较快,调试常用
    vsim -l M52180_rtl.log –Lf D:/EE095LPT5_LIB -novopt +maxdelays work.m52180_tb
    此处-Lf D:/EE095LPT5_LIB 这是电路设计所用到的编译过的底层元件库,在仿真之前,新建一个文件夹,将编译后的底层元件库放在这里,启动仿真时,调用这个库文件来仿真

  2. add wave /添加需要观察的信号到波形窗口,/表示测试文件所包含的所有信号
    add wave /m52180_tb/m52180_u/
    需要观察哪个模块的信号,就添加哪个模块的实例名,/

    add wave /m52180_tb/m52180_u/APR52170/*
    这里要注意,和编译命令不同,只需要一个单斜杠再加模块实例化名就可以
    也可以单独写一个TOP1_WAV.do 文件,把需要观察的信号都加在文件内如下图,然后在tb_top 文件内加上一行 do TOP1_WAV.do ,此命令会将信号放在新的窗口打开
    若想要把某条波形信号,醒目的观察,可以更改此信号的颜色,方法是:将鼠标移至信号窗口栏,选中那条信号,右键,选择properties,弹出波形属性窗口,更改波形颜色。
    废了半天,把想要的波形的颜色都搞绿了,但若没保存,下次进入仿真,这些波形还是会恢复成原来的颜色。这时可以按Crtl + S 保存当前状态为wave.do,路径为默认路径。下次想打开保存的波形,在你的工程文件目录下,有一个vsim.wif文件,打开它,会自动打开Modelsim软件,但并没有跑仿真。接下来的步骤你懂的,我懂,
    在Transcript输入:do tb_top,按Enter回车键。上次的波形就回来了! ?????什么情况,我花花绿绿的波形呢,怎么又还原了,怎么回事。我知道你急,但是你先别急。执行do tb_top,执行的是最开始的仿真,他的波形设置是按默认的,想要找回上次保持的波形,只需要敲入do wave.do,你上次保存的波形do文件,回车一下就回来了。

更改波形颜色
5 run 50ms 表示仿真运行时间,格式: run +时间,时间单位ms 、us、ps,不可用秒,run用小写
run -all Modelsim命令,表示直接运行仿真,直到遇上,test_tb测试文件中的$stop或$finish命令才终止 ,如果没有停止命令仿真就会一直跑,可通过头部菜单栏中的stop选项,停止仿真
run –continue ,表示继续运行
6 .main clear 清除命令行内容命令,注意main前面有一个 “.”
不常用到,要清命令行,在Transcrip窗口空白处,右键,点击clear更方便
7view
指令格式:view窗口名
指令功能:打开Modelsin的窗口
view souce,打开源代码窗口:
view wave,打开波形窗口;
view list,打开列表窗口;
view varibles,打开变里窗口;
view signals,打开信号窗口;
view all,打开所有窗口。
若想要单独观察某组数据,可使用此命令将需要的信号,放在自己命名的波形窗口中
8 quit -sim是退出仿真工程
quit –f -f参数是关闭软件命令
10.history 在transcript窗口中,键入history可以查看执行过的历史命令,也可直接使用键盘上的方向键,上下切换命令,再敲回车执行命令
11.若是你连Modelsim软件都懒得打开,想要自动化仿真,也有妙招。即编写.bat文件,
新建txt文件,保存文件名为tb_top.bat,保存路径需要跟tb_top文件目录一致。想要编写.bat文件内容,可以下载一个notepad软件,打开方式选择notepad, UltraEdit 好像打不开.bat文件。也可以在.txt 或 .v文件内把源码写好,再改文件名。
源码如下:
::请按任意键继续...
pause
::打开Modelsim并执行do tb_top
vsim -do tb_top1
::两个冒号是注释,pause的作用是,打开命令提示符后,需要敲击键盘上的任意键,命令才会往下执行。
在工程目录下直接点击tb_top.bat,会自动打开Modelsim并执行do to_top操作。但需要注意.bat是批处理文件,是在cmd.exe命令提示符下运行的,故关闭此窗口会导致仿真也一起关闭。用不用这个看个人喜好。

随笔

使用flash ip时需要先erase flash 擦除flash,然后再写flash,这是由flash的特性决定的,独特的电路结构,让flash可以将一个bit从1变为0,但是不可以从0变为1,所以只有先通过erase操作,把flash全写成1后,再写入数据,实际是一个写0的过程
施加激励
Fork ….join块中不但能够赋值,还可以并行执行循环、条件语句、任务或函数调用。
循环或always块能有效的产生规则激励,例如:产生某频率的时钟
always
begin
#(15.625) // 32MHz
OSC <= 0;
#(15.625)
OSC <= 1;
end
产生一个32m的时钟信号
不规则的激励适合用在initial块,例如给信号赋初值,输出周期不定的波形
产生激励并加到设计有很多种方法,一些常用的方法如下
从一个initial块中施加线激励
从一个循环或always块时间激励
从一个向量或整数组施加激励
有4种循环语句
1 Repeat:将一块语句循环执行确定次数。
Repeat(次数表达式)<语句>
2 While:在条件表达式为真时一直循环执行
While(条件表达式)<语句>
3 Forever:重复执行直到仿真结束
Forever<语句>
前三种综合工具还不支持,即不能综合成网表
基本单元强度说明语法
<基本单元名> <强度> <延时><实例名> (<端口>)
glbl.v文件也需要在仿真时运行,因为它是BUFGCE原语执行时引用的一个初始化文件,这是一个固定的文件,通常对于Xilinx提供的IP核、原语等都通用。
时序约束应该符合设计的性能目标要求,因为
1过紧的时序约束会延长编译时间
2不现实的时序约束可能导致执行工具罢工
芯片后仿的意义:
既然前仿保证了逻辑功能,STA保证了时序,PT对各个corner进行了时序穷举计算,并确保时序收敛,那么作为数字IC设计流程的最后一环后仿真的意义是什么呢?

1.后仿是否必要

随着芯片规模的增大,关于IC设计流程中的后仿是否必要,有多种声音。
认为不必要的理由是:布局布线后的网表,已经可以通过STA保证时序,后仿只不过是确认一遍电路的时序。而且随着电路规模不断增大,仿真工具的仿真速度的提升仍不明显,后仿必然是一个很耗时的步骤,时间代价大而收益不明显。
必要观点:STA并不能完全覆盖所有的路径。后仿的工作是对后端实现最后的check。。

2.前后仿的区别

前仿:RTL的仿真
后仿:门级仿真。又分为综合后仿真和布局布线后仿真

a.关注点不同;

前仿:关注RTL在功能上是否正确(符合设计)
后仿:关注电路在各种工作条件下,插入了延时后,功能是否依然正确。

b.仿真对象不同;

前仿:仿真的对象是RTL
后仿:仿真的对象是门级网表+sdf文件(可能包括一些IP的sdf)
综合后仿真用的是综合后的网表+PreSTA产生的sdf(无net延时,cell延时不准确,时钟树不准确)
布局布线后仿真用的是PR后的网表+PostSTA产生的sdf

3. 认识sdf文件

sdf = 标准延时文件
SDF文件是在VCS/NC-Verilog后仿真
运行时将STD/IO/Macro门级verilog中
specify的延迟信息替换为QRC/Star-RC抽
取的实际物理延时信息。如果SDF文件的
条件信息在verilog的specify中没有的话,
就会报SDFCOM_INF的warning,意思是
IOPATH not found.

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号