modelsim如何使用tcl脚本来写编写翻译文件,使用do文件仿真

By admin in 4858.com on 2019年4月9日

  对于modelsim实行虚假,能够通过GUI来进展虚伪,当然尤为便捷的点子能够动用TCL脚本文件举行快捷仿真。

  对于modelsim进行虚假,能够因而GUI来开始展览虚伪,当然尤为神速的格局能够运用TCL脚本文件进行飞快仿真。

比方的工程是多少个加法器,待测试效能模块是add.v,测试激励是tb_add.v,do文件是tb.do

本章我们介绍仿真环境搭建是遵照Modelsim SE的。Modelsim有为数不少本子,比如说Modelsim-Altera,可是作者仍旧建议大家利用Modelsim-SE,Modelsim-Altera实际是针对性Altera 的OEM版本,它预先将Altera的片段IP核仿真库添加到了工具中,但效能上有1些滑坡。而Modelsim-SE必要本身手动添加那些仿真库,可是效果更全,而且做事中,工程师更倾向用SE版本,因为今后的FPGA开发中大家会触发更加多别的厂商的FPGA,比如Xilinx、Lattice的,蒙受那一个FPGA时,我们同样必要将她们的IP核的仿真库添加到Modelsim 中。

  Modelsim选取TCL脚本文件仿真的具体流程如下所示:

  Modelsim采用TCL脚本文件仿真的切切实实流程如下所示:

上边直接附上首要步骤:

一.一.壹.冒牌基本概念

FPGA的仿真实际正是贰个证实布署的进度,验证在“模拟的输入”的动静下,设计文本的出口是还是不是和我们意在是1致的。这里的“模拟的输入”便是“测试激励”,设计文本正是待测设计,最后经过对输出结果的分析来注明安插的正确。这就组成了虚假的八个基本组成都部队分:测试激励(Test_bench)、待测设计(DUT)和最终结出的出口验证。

4858.com 1

       下边介绍恐怕照旧有点无的放矢,大家由此三个大约的虚假例子来介绍仿真中的各类部分。大家开辟大家的例程《0五_clk_div_even》。

       待测设计(DUT):首先看src文件夹下的clk_div_even.v正是我们待测设计(DUT)。那些相比好通晓,便是大家设计的模块。那是三个偶数分频的例证,每一趟计数从0-四,计数4回,计数器clk_div_cnt会清零贰回,同时输出分频非时限信号o_clk_div翻转3回,那样每七个时钟周期,输出非复信号都会翻转一遍,11个时钟周期后又恢复生机到开首状态,使得出口功率信号13分频。那里大家需求额外关心一下这么些模块的输入和出口,输入未来是我们振奋非时域信号进来的地点。

1. 
module clk_div_even

2. 
    (

3. 
        modelsim如何使用tcl脚本来写编写翻译文件,使用do文件仿真。input                  i_clk        , //模块输入机械钟 ,50mhz

4. 
        input                  i_rst_n      ,    //复位时限信号,低电平有效

5. 
        outputreg             o_clk_div         //偶数分频输出

6. 
    );

7. 
    

8. 
    parameter        DIV_EVEN      =10  ;   //10分频,输入50MHz,输出频率为5Mhz

9. 
    reg    [3:0]clk_div_cnt           ;   //分频计数器

10.//——————————————————————-

11.//  分频计数器,每一次计数到N-1时归零

12.//——————————————————————-

13.    always @ (posedge i_clk ornegedge i_rst_n)

14.    begin

15.        if(!i_rst_n)

16.            clk_div_cnt  <=4’d0;  

17.        else    if(clk_div_cnt  ==DIV_EVEN/2-1)

18.            clk_div_cnt  <=4’d0;  

19.        else  

20.            clk_div_cnt  <=clk_div_cnt   +  
4’d1;                              

21.    end

22.//——————————————————————-

23.//  分频计数器,每一次计数N/二-一时,输出分频复信号翻转

24.//——————————————————————- 
  

25.    always @ (posedge i_clk ornegedge i_rst_n)

26.    begin

27.        if(!i_rst_n)

28.            o_clk_div  <=1’b0;  

29.        else    if(clk_div_cnt  ==DIV_EVEN/2-1)

30.            o_clk_div  <=~o_clk_div;

31.    end   

32.endmodule

测试激励(Testbench):Testbench是FPGA仿真的要害,Testbench能够精晓为1个鼓舞产生器。我们能够见到我们的待测设计的输入是i_clk和i_rst_n,实际在开发板上,板子上的晶振输出50MHz激励石英钟能量信号给FPGA,同样电路中的复位电路给FPGA提供了i_rst_n的激发连续信号。在虚假进程中,Testbench就顶替了事实上的电路,通过Verilog模拟达成这个外部电路的刺激时限信号,提要求DUT,从而通过输出验证陈设。工程目录的sim文件夹下的tb_4858.com,clk_div_even.v 正是大家早已编制好的Testbench。如下正是三个基本Testbench的安顿性。

4858.com 2

下边从上图所示四个部分介绍Testbench基本写法。

1、`\timescale 壹ns/一ps 决定壹切仿真中的时间单位音讯,在文书中其余有关时间的音讯都以依据此的,1ns代表仿真中的基本时间单位,一ps则意味着仿真精度能够达到一ps。例如 #拾.005意味着的正是延时10.00五ns。实际仿真中,精度是足以操纵到0.005ns的,即5ps。

2、tb_clk_div_even() 是实在testbench的称呼,同样用module定义,不过注意testbenc是尚未端口描述的,那与大家待测文件DUT是不平等的。

叁、激励时域信号和出口功率信号的概念,细心的同学应该能够观察,激励信号正是我们DUT文件的输入,输出复信号也正是我们DUT文件的输出。分歧的是在Testbench中,大家将激励复信号定义为reg类型,输出复信号定义为了wire类型。

4、第四有些就是发出刺激频限信号,具体详尽达成大家就不介绍了,大家能够阅读大家的文书档案《Testbench常用语法及技术》,阅读之后那几个地点就很不难驾驭了。

伍、最终一有个别是待测设计的实例化,在FPGA设计中,模块的实例化就类似C语言中的函数调用,大家在其余模块中调用当前模块时,就需求以实例化的主意来完毕。不一样的是,Verilog文件模块实例化时,我们须要标明各类端口信号。在大家铺排的Testbench中,通过模块实例化,将大家的振奋复信号最后传递给了待测设计文本。

出口验证:下图是大家仿真的最终输出的波浪文件,能够看看输出时域信号o_clk_div是输入频域信号i_clk的10分频。

4858.com 3

最终我们总计全数仿真进度中,各类部分之间的涉嫌,如下图。

4858.com 4

4858.com 54858.com 6

4858.com 74858.com 8

(一)首先新建文件夹,如sim_add,在该文件夹下再新建2个文件夹,分别是:sim、tb、src

一.一.二.  建立Modelsim仿真工程

本节我们介绍怎么着建立Modelsim仿真工程,精晓Modelsim仿真工具的选拔。

率先步:打开Modelsim SE,点击菜单栏“File—>New—>Project”,准备新建筑工程程。

4858.com 9

其次步:弹出“Create Project”对话框,按下图填写仿真工程名称,以及工程的仓储路径,以及暗许库的的名目,那里私下认可库名叫“work”,我们常见叫作工作库。设置好后点击OK。

4858.com 10

那边介绍一下库的概念,即library。库是Modelsim仿真的载体,Modelsim会将冒牌工程中的设计文本(DUT)和鼓舞文件(Testbench)的编写翻译(Compile)结果存放在work库中,在大家新建工程的时候就会带着生成2个work库,如下图在Modelsim工作区,采用Library选项卡,我们能够看来变化的work库,此时work库是空的,因为大家还从来不添加并虚若是计文本和鼓舞文件。

4858.com 11

其三步:新建或加上设计文本,那里大家早已写好的testbench和待测模块,所以采取直接抬高已存在文件即可。

4858.com 12

第四步:依次添加testbench和待测模块文件。

4858.com 13

第4步:编写翻译大家的DUT和Testbench文件,如下图在劳作区域选用Project选项卡,右键选用Compile—>Compile All,编写翻译全部。

4858.com 14

 

第5步:切回到Library,此时再看work库就不是空的了,workCurry的clk_div_even和tb_clk_div_even分别是tb_clk_div_even.v(Testbench)和clk_div_even.v(DUT)的编写翻译结果。选中Testbench仿真结果tb_clk_div_even,右键—>Simulate without Optimization,运转无优化仿真。

4858.com 15

第八步:弹出仿真波形窗口(wave窗口),但是窗口内尚未任何频域信号波形,工作区域多了三个sim选项卡,进入sim选项页,能够看到仿真实例clk_div_even和tb_clk_div_even。选用相应的实例,右键—>add wave,添加时限信号到wave窗口。

4858.com 16

第十步:切到wave 窗口,如下图,设置仿真运转时刻为拾0us,那么些时刻依据实际规划所需时间来决定,再点击旁边的4858.com 17,运营仿真。那样大家就能够看到输出的波浪时限信号了,从而证实安顿的不易。

4858.com 18

 

 

sim:modelsim的工程文件存放,如tb.do

壹.1.3.  利用do文件举办Modelsim仿真

上一节大家介绍了通过Modelsim建立仿真工程的章程,可是那种办法大家要求采纳界面操作,那样会很伤脑筋很辛苦。那里大家介绍一种高效的不二等秘书诀,通过do文件急速搭建仿真环境,只需求双击批处理公事modelsim_run.bat,就能够活动调用Modelsim,并活动完毕对Testbench和待验证安顿文本的编写翻译和虚假,并且能够自动将要寓指标数字信号添加到wave窗口。

先是打开“0二_Project_Examples\05_clk_div_even\sim”文件夹,能够看出如下文件。

4858.com 19

大家最主要介绍一下前三个文件,最终一个是我们的testbench:

modelsim_run.bat文件:那是一个批处理公事,里面就壹行“modelsim -do sim.do”,那是一条DOS命令,意思就是调用Modelsim工具,并在Modelsim工具中实施sim.do这几个文件。

sim.do:do文件是由tcl脚本语言编写的,这一个参考例程中的do文件是最宗旨的tcl脚本语言。下边介绍一下至关心注重要脚本语言的用法。以下是do文件的情节。

1. 
vlib work       

2. 
vlog  ../sim/*.v

3. 
vlog  ../src/*.v

4. 
vsim-t ns -novopt +notimingchecks  work.tb_clk_div_even 

5. 
radix hex

6. 
addwave -position insertpoint
sim:/tb_clk_div_even/clk_div_even_inst/*

7. 
runall

vlib work:建立work库,相当于在上1节中新建筑工程程时所生成的work库,早先时期大家编写翻译的结果音信寄存到work库中。

vlog ../sim/*.v:vlog相当于modelsim工具中的compile,“../sim/*.v ”表示编写翻译05_clk_div_even\sim路径下拥有的verilog文件。vlog ../src/*.v表示编写翻译0伍_clk_div_even /src/路径下的享有verilog文件。

vsim -t  ns  -novopt
 +notimingchecks  work.tb_clk_div_even:编写翻译实现有着verilog文件后,就要运转仿真了,vsim正是运行仿真功用,vsim后边有成都百货上千关键词,那里大致说雅培下,-t代表仿真时间单位为ns,-novopt表示仿真时无优化,+notimingchecks表示无时序检查,work.tb_clk_div_even表示对work库中的tb_clk_div_even举行虚伪,实际也就是在界面操作时,展开work库,右键—>Simulate without Optimization,运维仿真。

radix hex :表示要添加wave窗口的信号,以16进制的来得。

add wave–position
 insertpoint
 sim:/tb_clk_div_even/clk_div_even_inst/*:表示将clk_div_even_inst中的全数复信号添加到wave窗口中去,执行那句以往,大家每一遍仿真时,就绝不每一趟都手动去丰盛仿真波形了。不过那句话实际是Modelsim生成的,不要求大家和好编辑。最初阶我们写的do文件是不带有那条语句的,当大家运营到如下图状态时,选用要抬高的时限信号,右键—>add wave后,下边的剧本窗口会弹出相应操作的tcl脚本语句。那样大家把那条语句赋值到大家的do文件中即可。第贰次再调用sim.do文件时,就毫无再手动添加波形了。

4858.com 20

run –all :  运作全经过。当然也足以运作壹段时间。run 十us 代表运转10us。

左右那几个最中央的tcl脚本,使用do文件仿真会为大家节省不计其数岁月。后续的学Corey大家都会默许以那种办法展开虚假。当然那里只是介绍了最中央的假冒伪造低劣脚本语言,未来我们仿真时大概还会有第1方的IP核文件,如altera的PLL、FIFO、RAM等急需丰富到假冒伪造低劣用例中,那几个大家后边在介绍IP核使用时会给我们介绍怎样运用do文件仿真含有IP核的筹划。

近日我们能够体会一下do文件仿真所用的年月,双击“modelsim_run.bat”,即可运转仿真。

来自为知笔记(Wiz)

4858.com 21     具体的操作步骤如下:

4858.com 22     具体的操作步骤如下:

tb:测试激励文件存放,如tb_add.v

  1. 在进展modelsim仿真从前应先在工程目录下新建叁个文书夹,名称任意,这里小编设置为sim文件。
  2. 开辟modelsim,然后新建二个工程,file—new—-project,将冒牌文件路径放置到sim文件中,注意,整个路径不要有闽南语路径,注释的文字最棒是英文,上边为了印证选拔汉语注释。
  3. 在sim文件中新建三个run.do文件,能够先新建贰个.txt文件,然后修改对应的后缀,改成.do文件即可。
  4. 打开run.do文件,然后在其间添加如下的代码:

    4858.com 23

     

    4858.com 24

    上述是根据相比老实的写法的开始展览的假冒伪造低劣文件.do的编写制定,当然也得以简化一下写法,具体操作如下所示:

    quit -sim

    .main clear

    vlib work

    vlog ./xxx.v

    vlog ./xxx_tb.v

    vsim
    -voptargs=+acc    work.xxx            #只顾那里的.xx是xxx_tb.v文件中的模块名称,那条语句的意味是拓展确定性信号不优化仿真

    其余和上海体育场合写法壹致,注意./和../的分别,./是当前目录,当前目录指的是sim那几个文件,因为modelsim建立的虚假工程在这一个目录下,所以统称为当前目录,不在sim文件下的任何文件供给用到./../,也便是从当前目录往上翻,然后找到相应的文本夹。

  1. 在进展modelsim仿真在此之前应先在工程目录下新建二个文书夹,名称任意,那里作者设置为sim文件。
  2. 开拓modelsim,然后新建二个工程,file—new—-project,将虚假文件路径放置到sim文件中,注意,整个路径不要有汉语路径,注释的文字最棒是英文,上面为了证实选用中文注释。
  3. 在sim文件中新建3个run.do文件,能够先新建贰个.txt文件,然后修改对应的后缀,改成.do文件即可。
  4. 开辟run.do文件,然后在里边添加如下的代码:

    4858.com 25

     

    4858.com 26

    上述是依据比较老实的写法的拓展的假冒伪造低劣文件.do的编排,当然也能够简化一下写法,具体操作如下所示:

    quit -sim

    .main clear

    vlib work

    vlog ./xxx.v

    vlog ./xxx_tb.v

    vsim
    -voptargs=+acc    work.xxx            #瞩目那里的.xx是xxx_tb.v文件中的模块名称,那条语句的意味是开始展览时域信号不优化仿真

    其余和上海教室写法一致,注意./和../的差异,./是当前目录,当前目录指的是sim那么些文件,因为modelsim建立的虚假工程在那一个目录下,所以统称为当前目录,不在sim文件下的其他文件必要用到./../,也正是从当前目录往上翻,然后找到相应的文书夹。

src:待测试的模块代码(*.v、仿真库文件.v、IP模块文件.v),如add.v

    4858.com 27     注意2三行是拓展的分割窗建立,贰伍行是对源文件中的全部连续信号的虚假。最终仿真的波形如下所示:

    4858.com 28     注意贰3行是进行的分割窗建立,二五行是对源文件中的全体复信号的仿真。最终仿真的波形如下所示:

里头假设工程里含有IP的设计,则src文件夹里还亟需仿真库文件和IP模块文件

4858.com 29

4858.com 30

继之编写do文件,存放在sim文件夹下,一般do文件都写些如下的操作:

任何详细具体内容请查看博客:http://www.raymontec.com/modelsim%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8tcl%e8%84%9a%e6%9c%ac%e6%9d%a5%e5%86%99%e7%bc%96%e8%af%91%e6%96%87%e4%bb%b6/

别的详细具体内容请查看博客:http://www.raymontec.com/modelsim%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8tcl%e8%84%9a%e6%9c%ac%e6%9d%a5%e5%86%99%e7%bc%96%e8%af%91%e6%96%87%e4%bb%b6/

vlib work
vmap work work

vlog -novopt -incr -work work "../tb/tb_add.v"
vlog -novopt -incr -work work "../src/add.v"

vsim -novopt work.tb_add

add wave -noupdate /tb_add/clk
add wave -noupdate /tb_add/rst_n
add wave -noupdate -hex /tb_add/a1
add wave -noupdate -hex /tb_add/a2
add wave -noupdate -hex /tb_add/out

run -all

自此进行通用时,须要修改的几句主如果以下几句:

编译相关文书:vlog -novopt -incr -work work “../tb/tb_add.v”      vlog -novopt -incr -work
work “../src/add.v”

仿真测试激励:vsim -novopt work.tb_add

添加时限信号波形:add wave -noupdate /tb_add/clk           add wave -noupdate
/tb_add/rst_n  

*                   *add wave -noupdate -hex /tb_add/a1    add wave -noupdate -hex
/tb_add/a2 

                   add wave -noupdate -hex
/tb_add/out 

能够增进本身索要调查的波形时限信号,这几个很有益,省去了能量信号查找的麻烦

最后打开modelsim,在File/Change
Directory下内定仿真工程的公文夹地点,如x:/sim_add/sim下即可。

 4858.com 31

照旧在Tcl框中一向输入cd命令,如下图所示:

4858.com 32

紧接着在Tcl框里输入do *.do即可开始展览虚假

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有