Modelsim中.do脚本语言基本介绍
Modelsim中.do脚本语⾔基本介绍
⽹上的关于DO⽂件的编写好像资料不多,⽐较杂,所以本⼈总结⼀下常⽤的简单语法,⽅便⼤家查看。其实本⼈也刚接触DO⽂件没多久,有纰漏很正常,欢迎指正批评,互相学习。PS:写得有点乱
还有⼀个值得注意的是 我在看到这篇⽂章的时候我正在仿真⼀个verilog⽂件,⽂件中调⽤了⼀个ROM , 但是我怎么仿真 rom的输出⽂件都有问题, 经过⼀个QQ好友的指点,我发现竟然是我 QUARTUS 下考过来的库⽂件 有问题, ⾃此提醒遇到过此问题 但还没有解决的同学。。
⼀.DO⽂件的简介和⼯作⽅式
DO⽂件是⼀次执⾏多条命令的脚本。这个脚本可以像带有相关参数的⼀系列ModelSim命令⼀样简单,或者是带有变量,执⾏条件等等的Tcl程序。可在GUI⾥或系统命令提⽰符后执⾏Do⽂件。
由于TCL脚本语⾔内容很多,本⼈是刚学不久,菜鸟⼀个。但是针对我们这门课程的话,有些基本常⽤的语法还是值得提⼀下的,⽅便⼤家⼀起学习交流,如果以下内容有什么写错了,希望⼤家提出并批评,互相进步。
⾸先,我们如何建⽴DO⽂件呢?
⽅法挺多,⼀种是可以打开Modelsim,执⾏File/New/Source/Do命令,进⼊Do⽂件编辑⽅式,在编辑窗⼝输⼊仿真批处理⽂件的代码,以.do为扩展名保存⽂件。当然也可以在windows系统中新建⼀个记事本,在“另存为”的时候写上.do的后缀名,也是⼀种⽅法。 调⽤⽅式是在Modelsim的Transcript窗⼝中使⽤指令:do filename.do,完成对设计的⾃动化仿真。
下⾯简单讲讲仿真的步骤。⾸先我们要对⼀个设计进⾏仿真呢,我们⼀般需要进⾏以下⼏个步骤:
①创建⼀个⼯程和⼯程库;
②加载设计⽂件(包括你编写好的testbench);
③编译源⽂件;
④运⾏仿真,并查看结果;
⑤最后进⾏⼯程调试。
⽽do⽂件,就是把上述的步骤①---④⽤tcl脚本语⾔来编写出来,让Modelsim来运⾏该do⽂件宏命令,并⾃动执⾏仿真的步骤。这种好处也许在⼩设计中没怎么表现,但是如果在⼀个⼤的⼯程中,常常需要对⼀个设计单元进⾏反复的调试和仿真,但是仿真时的设置是不变的,这时如果使⽤了do⽂件,把仿真中使⽤到的命令都保存下来了,就可以节省⼤量的⼈⼒,提⾼了⼯作效率。
下⾯将对照⼀个简单的例⼦counter.do,讲⼀下我们常⽤的⼀些基本指令。
PS:  do⽂件的注释是由#开始的,但不可以在代码⾏后⾯添加,只能另起⼀⾏。
正确的是:
vlib work
#新建⼀个work库
错误的是:
vlib work  #新建⼀个work库
编写名为counter.do的⽂件,其内容为下:
vlib  work (对应仿真步骤①:新建work库。该命令的作⽤是在当前⽬录下建⽴⼀个work⽬录,请注意不要直接在windows中新建⼀个work的⽂件夹,因为⽤操作系统建⽴的work⽂件夹并没有ModelSim SE⾃动⽣成的_info⽂件。)
vmap work  work(对应仿真步骤①:该命令的作⽤是将⽬前的逻辑⼯作库work和实际⼯作库work映
射对应。也可以直接⽤指令“vmap work”表⽰将work库映射到当前⼯作⽬录下。)
vlog counter.v  counter_tb.v (对应仿真步骤②③:编译counter.v和counter_tb.v⽂件,默认编译到work库下。该命令的作⽤是编译这些⽂件,要注意的是⽂件可以单独分开编译,但是⼀定要先编译被调⽤的⽂件。假如是VHDL⽂件,只需要把指令vlog换成vcom即可。)vsim  unter_tb  -t 1ns (对应仿真步骤④:仿真work库中名为counter_tb的模块,最⼩时间单位为1ns。)
add  wave/counter_tb/ * (该命令的作⽤是将testbench⽂件camera_tb.v中模块camera_tb下所有的信号变量加到波形⽂件中去,注意在“*”前要加空格。这时候你也可以看到wave⽂件被打开。当然也可以单个信号的添加,例如添加时钟:add wave clk 等等。)
run 2000  (该命令的作⽤是运⾏2000个单位时间的仿真。也可以⽤run –all命令来⼀直仿真下去。)
这时候就可以在wave窗⼝⽂件中看到你的仿真结果。当然也可以观察其它窗⼝的结果,⽤view *命令显⽰ 。view *命令可以观察包括signals、wave、dataflow等窗⼝⽂件,也可以分别打开。例如⽤view signals来观察信号变量。
以上就是do⽂件的⼀些基本TCL脚本语⾔的使⽤,写得⽐较简单,但是其实复杂的也就是在添加信号线那⾥add wave 有⽐较多的参数设置⽽已,主要的指导仿真流程的指令还是这⼏条。
编写好DO⽂件之后,在Modelsim中,将⼯作⽬录切换到counter.v、counter_tb.v和counter.do三个⽂件所在⽬录下,然后在Transcript窗⼝中的命令⾏输⼊ do counter.do即可。切换⼯作⽬录的⽅法如下图1,点击Change Directory:
磐安农家乐
图1
PS: 如果在仿真的时候要修改.do⽂件,需要现在modelsim⾥运⾏quit -sim,退出仿真,然后修改.do⽂件,再保存,然后再重新执⾏do filename.do指令即可。
⼩技巧Tips:
为了区分仿真波形窗⼝中的各种信号线,需要信号波形作设置,如不同信号线的颜⾊、显⽰基数、显
⽰⽅式等要有区别,这时就需要在仿真波形窗⼝单独对每⼀个信号线⼿动进⾏设置,这对于不断修改源代码然后再不断地进⾏仿真来说,⾮常⿇烦。
这⾥,我说⼀下有个简单的⾃动⽣成这类个性化设置DO⽂件的⽅法。⾸先,我们需要先进⾏⼀次仿真,在波形窗⼝的时候先⼿动对需要的信号线进⾏⼀定的设置,如下图2所⽰:
图2六一演讲稿
然后,点击wave窗⼝左上⾓的save图标,会出现⼀个保存DO⽂件的窗⼝,如图3所⽰:
图3
它的路径Pathname表⽰Modelsim⾃动在当前的默认⽬录下新建了⼀个wave.do的DO⽂件,我们可以⾃⼰修改保存的路径和DO⽂件名。接下来我们来看⼀下上⾯保存的wave.do⽂件,打开如下图4所⽰:
银行利息是多少
图4
由wave.do⽂件中,可以见到我们定义的那些不同颜⾊、不同显⽰⽅式所⽤的TCL脚本语⾔,如add wave -color Yellow
/freq_meter_tb/i1/freq_data表⽰让该freq_data信号显⽰黄⾊…如add wave -noupdate -radix decimal
/freq_meter_tb/i1/div_coef 表⽰让div_coef信号⽤⼗进制decimal来显⽰…其他的信息可以对照⾃⼰的波形设置⼀⼀对应上,其他依次类推。
细⼼的同学会发现这个DO⽂件根本不完整,基本都是⼀些add wave,即是对每个信号的各种设置的TCL代码⽽已。不错,因为它缺少了我们之前所讲的仿真步骤①②③④,那么我们可以利⽤上⾯已学过的TCL语⾔来补完整它。
如在前⾯加上⼀下语句,使这个DO⽂件包括了仿真过程的完整指令,包括新建⼯作库、编译源⽂件、仿真testbench⽂件等:
vlib work
vmap work work
vlog  freq_meter.v
vlog  freq_meter_direct.v
vlog  freq_meter_tb.v
新的DO⽂件如下所⽰:
图5
⾄此,该DO⽂件才能⽤来实现较完整的⾃动化仿真。
⼆.交互式命令
通过在主窗⼝的命令窗⼝输⼊命令来实现,具有更好的调试和交互功能,提供多种指令,既可以是单步指令,也可以构成批处理⽂件,⽤来控制编辑、编译和仿真流程;
常见交互式命令如下:
1.force-repeat指令
指令格式:force 开始时间 开始电平值,结束电平值 忽略时间(即0电平保持时间) -repeat 周期
force clk 0 0,1 30 -repeat 100 表⽰强制clk从0时间单元开始,起始电平为0,结束电平为1,0电平保持时间为30个默认时间单元,周期为100个默认时间单元,占空⽐为70%。
指令功能:每隔⼀段的周期重复⼀定的force命令,⽤来产⽣时钟信号,也可⽤来产⽣周期的输⼊信号,如01010101,00110011等。2.force指令
指令格式:force item_name value time,value time;item_name为端⼝信号或内部信号,⽀持通配符号,但只能匹配⼀个;value不能默认,time,可选项,⽀持时间单元;6字暖心话
force din 16#40900000 从当前时刻起给din赋值16进制40900000;
force bus 16#F @100ns 在100ns时刻给bus赋值16进制F;
force clr 1 100 经历100个默认时间单元延迟后为clr赋值1;地震发生时怎样保护自己
force clr 1,0 100 表⽰clr赋值1后,经历100个默认时间单元延迟后为clr赋值为0;
3.run指令
指令格式:run timesteps time_unit,timesteps时间步长,time_unit时间单元,可以是fs、ps、ns、us、ms、sec;
指令功能:运⾏(仿真)并指定时间及单元;
run 100, 表⽰运⾏100个默认时间单元;
run 2500ns, 表⽰运⾏2500ns;
run -all, 表⽰运⾏全过程;
run -continue, 表⽰继续运⾏
4.force-cancel指令属猪的和什么属相最配
指令格式:force-cancel period
指令功能:执⾏period周期时间后取消force命令;
force clk 0 0,1 30 -repeat 60-cancel 1000,表⽰强制clk从0时间单元开始,直到1000个时间单元结束;
5.view指令
指令格式:view 窗⼝名
指令功能:打开Modelsim的窗⼝
view souce,打开源代码窗⼝;
view wave,打开波形窗⼝;
view list,打开列表窗⼝;
view varibles,打开变量窗⼝;
view signals,打开信号窗⼝;
view all,打开所有窗⼝;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。