Isim你不得不知道之艺(整理)搭建Modelsim SE仿真环境-使用do文件仿真。

by admin on 2018年9月26日

自:电子产品世界; 

本章我们介绍伪环境搭建是因Modelsim SE的。Modelsim有为数不少版本,比如说Modelsim-Altera,但是笔者还是建议大家以Modelsim-SE,Modelsim-Altera实际是针对性Altera 的OEM版本,它先用Altera的片IP核仿真库添加到了工具被,但效益及出局部回落。而Modelsim-SE需要好手动添加这些仿真库,但是效果更全,而且做事吃,工程师还倾向于是SE版本,因为以后的FPGA开发中我们见面接触更多外厂商的FPGA,比如Xilinx、Lattice的,遇到这些FPGA时,我们同样需用他们的IP核的仿真库添加到Modelsim 中。

 

1.1.1.模仿真基本概念

FPGA的伪实际就是是一个证计划之过程,验证在“模拟的输入”的情况下,设计文本的输出是否与咱们盼望是同的。这里的“模拟的输入”就是“测试激励”,设计文本就是待测设计,最终通过对输出结果的解析来说明计划的正确。这就算结成了伪的老三只核心有:测试激励(Test_bench)、待测设计(DUT)和结尾结果的输出验证。

图片 1

       上面介绍可能要略微不着边际,我们透过一个略的仿真例子来介绍伪中的逐一部分。大家开拓我们的例程《05_clk_div_even》。

       待测设计(DUT):首先看src文件夹下的clk_div_even.v就是咱待测设计(DUT)。这个于好掌握,就是我们筹之模块。这是一个偶数分频的例证,每次计数从0-4,计数5蹩脚,计数器clk_div_cnt会清零一涂鸦,同时输出分频信号o_clk_div翻转一差,这样各个五单时钟周期,输出信号还见面翻转一破,十独时钟周期后而卷土重来至开状态,使得出口信号10分频。这里大家要格外关注一下此模块的输入和出口,输入将来凡是我们振奋信号进来的地方。

1. 
module clk_div_even

2. 
    (

3. 
        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/2-1时,输出分频信号翻转

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可以知道呢一个鼓舞产生器。大家可以看到我们的待测设计之输入是i_clk和i_rst_n,实际于开发板上,板子上的晶振输出50MHz激励时钟信号为FPGA,同样电路中之复位电路给FPGA提供了i_rst_n的激发信号。在伪过程中,Testbench就顶替了实际上的电路,通过Verilog模拟实现这些外部电路的激信号,提供被DUT,从而通过输出验证计划。工程目录的sim文件夹下的tb_clk_div_even.v 就是咱已修好的Testbench。如下就是一个基本Testbench的宏图。

图片 2

下从达图所出示5单部分介绍Testbench基本写法。

1、`\timescale 1ns/1ps 决定一切仿真中之时间单位信息,在文书中其他关于时间之音讯都是根据此之,1ns表示仿真中的为主时间单位,1ps尽管意味着仿真精度可以高达1ps。例如 #10.005代表的虽是延时10.005ns。实际仿真中,精度是得操纵及0.005ns的,即5ps。

2、tb_clk_div_even() 是实际上testbench的称,同样用module定义,但是注意testbenc是没有端口描述的,这与我们待测文件DUT是无均等的。

3、激励信号与输出信号的概念,细心之同室应该可以看看,激励信号就是咱DUT文件的输入,输出信号吗尽管是咱们DUT文件的出口。不同之是以Testbench中,我们以激发信号定义也reg类型,输出信号定义为wire类型。

4、第四局部即使是有刺激信号,具体详尽实现我们便无介绍了,大家可翻阅我们的文档《Testbench常用语法及技术》,阅读后是地方即充分易懂了。

5、最后一片段是待测设计之实例化,在FPGA设计着,模块的实例化就类似C语言中之函数调用,我们于其它模块中调用当前模块时,就需盖实例化的措施来贯彻。不同的凡,Verilog文件模块实例化时,我们要标明每一个端口信号。在我们计划之Testbench中,通过模块实例化,将我们的鼓舞信号最终传递给了待测设计文本。

输出验证:生图是咱们仿真的最后输出的浪文件,可以视输出信号o_clk_div是输入信号i_clk的10分频。

图片 3

末段我们总结所有仿真过程中,各个组成部分内的关系,如下图。

图片 4

 注:本文由NingHeChuan本人多来整理所得,原文章图片未鲜明,自己收拾配图后再度上

1.1.2.  立Modelsim仿真工程

本节咱们介绍如何树立Modelsim仿真工程,了解Modelsim仿真工具的运用。

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

图片 5

其次步:弹出“Create Project”对话框,按下图填写仿真工程名称,以及工程的囤路径,以及默认库的底号,这里默认库名也“work”,我们司空见惯为作工作库。设置好后点击OK。

图片 6

此间介绍一下库之定义,即library。库是Modelsim仿真的载体,Modelsim会将虚假工程被的统筹文本(DUT)和激发文件(Testbench)的编译(Compile)结果存放于work库中,在咱们新建工程的下就会见带来在老成一个work库,如下图在Modelsim工作区,选择Library选项卡,我们得以视变化的work库,此时work库是空的,因为咱们尚无长并虚假设计文本和激发文件。

图片 7

老三步:新建或加上设计文本,这里我们曾写好之testbench和待测模块,所以选择直接长已在文件即可。

图片 8

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

图片 9

第五步:编译我们的DUT和Testbench文件,如下图在做事区域选择Project选项卡,右键选择Compile—>Compile All,编译所有。

图片 10

 

第六步:切回到Library,此时重拘留work库就无是拖欠的了,work库里的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,启动无优化仿真。

图片 11

第七步:弹出仿真波形窗口(wave窗口),但是窗口外没有其余信号波形,工作区域多矣一个sim选项卡,进入sim选项页,可以见到仿真实例clk_div_even和tb_clk_div_even。选择相应的实例,右键—>add wave,添加信号及wave窗口。

图片 12

第八步:切到wave 窗口,如下图,设置仿真运行时也100us,这个时刻根据实际统筹所需要时日来决定,再点击旁边的图片 13,运行仿真。这样咱们就可以看到输出的脉信号了,从而证实计划之没错。

图片 14

  安装好ISE,系统都起带了ISim仿真软件,相比叫正规的虚假软件Modelsim,ISim是免费之,不用编译库,小型设计仿真速度比快,对于轻量级的设计应当是一点一滴足够的。Modelsim作为专业的假冒伪劣软件,具备了ISim的具备力量,同时还持有了ISim不具有的功能以波形显示,任意添加中游变量到波形图中,数据导出等。不过会真的用好ISim,掌握住仿真技巧,你虽无敌啦。

1.1.3.  用do文件进行Modelsim仿真

及一样省咱们介绍了通过Modelsim建立伪工程的不二法门,但是这种方式我们用以界面操作,这样会坏困难很烦。这里我们介绍一栽高效的办法,通过do文件快速搭建仿真环境,只待双击批处理公事modelsim_run.bat,就足以自动调用Modelsim,并活动完成对Testbench和内需验证计划文本的编译和虚假,并且可活动将观察的信号添加到wave窗口。

先是打开“02_Project_Examples\05_clk_div_even\sim”文件夹,可以看看如下文件。

图片 15

我们着重介绍一下前方片个文本,最后一个是咱们的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库,相当给当直达同样节约中新建工程时所生成的work库,后期咱编译的结果信息寄存到work库中。

vlog ../sim/*.v:vlog相当给modelsim工具中之compile,“../sim/*.v ”表示编译05_clk_div_even\sim路径下所有的verilog文件。vlog ../src/*.v表示编译05_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文件时,就不用还手动添加波形了。

图片 16

run –all :  运作都经过。当然也得运作一段时间。run 10us 表示运行10us。

操纵这些极其中心的tcl脚本,使用do文件仿真会为我们省成千上万日子。后续之课程里我们且见面默认为这种方式进行虚假。当然这里只是介绍了最好基本的伪脚本语言,今后咱们仿真时或许还会见发生第三着的IP核文件,如altera的PLL、FIFO、RAM等需要丰富到虚假用例中,这些我们后面在介绍IP核使用时会让大家介绍如何使用do文件仿真含有IP核的设计。

兹咱们可以体验一下do文件仿真所用之年华,双击“modelsim_run.bat”,即可运行仿真。

来自为喻笔记(Wiz)

  先来瞧ISim的界面吧,跟ISE的界面类似,在界面的顶端是菜单栏,和有些功力菜单,界面中是波形界面,界面的下面是决定高窗口和片另功能窗口,界面的左手包含了伪的工文件(Instances
and Processes
Name),对承诺文件的输入输出端口(Objects)等,这些窗口都是足以轻易拖动的,可以拿窗口的职摆放及一个友好习惯的岗位,如果无这些窗口,可以点击菜单栏的View
-> Panels 勾选需要展示的窗口即可。

图片 17

 

技能同样:更改数据显示格式

  ISim于伪时默认是次向前制格式,为了便于显示,我们可改其出示的格式,右键单击需要改变显示格式的数及,Radix
->
选择相当的格式即可(如图2所出示),Binary(二进制),Hexadecimal(十六进制),Unsigned
Decimal(无符号十向前制数),Signed
Decimal(有号子十迈入制数),Octal(八进制),ASCII(ASCII码)。如果发现高低位不对,可以选取
Reverse bit order(反转bit顺序,即高位和地位对换)。

图片 18

 

  对于1bit数,有些人未希罕看一个独身的线(类似于图1遇之CLK_62M5),可以选中这个数右键单击,选择New
Virtual
Bus,然后修改名字啊原本的信号名字,以防忘记。如图3所出示,为修改后的数额,将CLK_62M5改动成了New
Virtual Bus形式,将datain更改成了无符号十前进制数。

  

术二:查看中变量

  有些时候由于联系不完,导致模块和模块之间的连天起问题,则需查看中变量来规定问题所在。

  于Instances and Processes Name
窗口被甄选相应的非顶层模块(中间模块),会以Objects中冒出得增长到波形文件之信号名字,选择要丰富信号,可以直接拖到波形文件列表中,也足以右键添加到波形文件列表中(如图4所著),或者按(Ctrl+W)添加对承诺信号及波形文件被。

  为了便于又仿真,能够看到这些中变量,而不用手动添加(对转移数据展示格式为适用),可以保存波形文件,File
-> Save As
输入而想使的名即可,关闭ISim时记得保存波形文件。再次仿真时,ISim不见面直接调用你保存之浪文件,而是一个defalut.wcfg,此时单纯需要通过File->Open打开你保存的波文件,然后再次仿真即可。

图片 19

 

技能三:断点调试

  断点调试是一个不胜有利之功效,可以查指定位置是否发荒唐,方便debug程序。相对与另外虚假,FPGA是并行执行,更多之时段是翻开波形是否是,通过波发现错误,进而定位及对应之语或者状态,然后断点查找错误。

  以Instances and Processes
Name窗口被,双击对应模块,则可打开对应的.v文件,然后于待之地方在断点,此时点击reset(Ctrl+Shift+F5)按钮,然后点击run
all(F5)运行,即可运行至断点处。此时得点击单步(step
快捷键F11)执行按钮,查看是否来bug。

 

技巧四:产看Memory

  很多上咱们得查阅我们的储存空间是否对的贮存了咱所待的价;有些上会赶上,明明给了一旦能,却没数输出,或者数额输出时左的,此时,若能够真实的关押同样扣存储器的状态,然后于波文件中上加入存储器相关的变量,就可怜有或发现问题了。

  点击Memory窗口,如果没有发现Memory窗口,可以点击菜单栏的View ->
Panels 勾选,然后双击需要展示的内存空间,则可打开对应之memory空间。

默认显示的数值也二进制,可以修改数据显示的格式(二进制、十迈入制出记号数、十前行制无符号数、十六进制、八进制、ASCII码),同时为堪修改地址显示的格式。如果只要寻找某个地点的价值,只需要于地方栏中输入是价值,按回车即可。

 

技巧五:添加块

  添加块不是丰富模块,而是添加一个诚心方块或者分组,可以拿不同模块之间的信号,分单初步,方便查看。如图8所展示。

  这样加加分割线和分组后看起就是大有益了,一眼便扣留明白了信号的用意以及所在模块的,十分方便。

  点击波形文件之Name 空白处,右键 –> New Divider/New
Group,即可添加分割和分组,当然也得选中需要进入分组的信号,然后右键 –
> New Group然后改也对应的名字即可,如图9所显示。

图片 20 

图片 21

                                                           

技能七:测量时

  在聊上,需要测量两单信号中的光阴间隔,可以通过如下方式来兑现。

  如果只是简单的测两独边沿的岁月距离,如图10所出示,可先行照在鼠标左键选中一个边际,然后拖动鼠标到任何一个边,此时当波的底下将出现时间轴,则可测量两单上升沿之间的时日。

            
   图片 22

 

  如果要测量的时光最多,可以添加Marker,鼠标左键单击击到如参加标记的地方,然后点击标记按钮,或者右键
–> Markers->Add
Marker,此时并无克起时间轴,鼠标单击Marker线,蓝色的线将化白色,并坐这为时刻0接触,此时就可以看到日间隔啦,如图11所著。

图片 23

技巧八:重仿真

  在编制verilog模块后,很关键之一律组成部分就是指向所编纂的模块进行虚伪。而于伪过程遭到,很重点的同等有就是相波形。这里所说的技术其实是于我个人而言,可能大部分人还早已了解。但还是记录下来,算是对我好的唤起吧。

   现在思维还是看好笑,以前每次打开波形窗口的时节,都是点击下图的Simulate
Behavioral
Model.每次修改了代码,都是关原来的脉窗口,然后又重点击打开,麻烦程度明显(好吧,当初以程序简单,其实还未觉得大烦。)

                                                                       
               图片 24

  现在了解了,对于这种情形,肯定是会发出大概的操作的,否则立即用户体验也最好差了。

  当然,第一糟糕假冒伪劣打开波形窗口时,还是一直艺术,点击上图的Simulate
Behavioral
Model。添加之中信号与修改数值进制后结果一旦下图(这里运用的凡一个FIFO读写序,程序不是此用小心的题材,我们才关注软件之操作)。

                                 
 图片 25

  下面我们经过修改din[3:0]的初始值来体现这个进程,由臻图会,din[3:0]的初始值为6.接下来自己将代码中din[3:0]的初始值改吗0继再观察波形,那该如何操作为?千万不要像本人以前那么傻的闭现有窗口然后再次仿真打开了。这样咱们还要使重新长内部信号和修改数值显示了。

惠及的步子应该是,首先,将拖欠波形保存,这部大简单即非粘图了,保存的实际就是若对拖欠窗口的各种配置,哪怕以后你再打开软件,也可经过打开事先封存的脉配置来查看仿真波形,而未用重新配置了。

保存后,修改完毕代码(这里自己管din[3:0]的初始值改呢0,另外,代码要记得保存,保存后代码才会见效),然后点击波形窗口的re-launch(如果前从没展开封存操作的话,点击re-launch后软件为会见提醒您保存之).就可以看到假波形发生了扭转,din[3:0]的初始值由之前的6转换成为了0.

                             
 图片 26

  另外,关于re-launch边上的那么几个按钮,也都是老大有因此处的,尤其仿真时间设置的,甚至有些时候还见面因这些设置的题目导致每次不可知起预期结果,这些操作非常简短,就不一一解释了,大家不怎么用用便理解了。

  注意:当您每次修改了test_bench文件后,就毫无关闭isimulator,重新打开,这样可提高仿真的效率。

艺九:改变波形颜色

  在进展比特别之工程进展虚假时,信号于多,仿真起来不便于查看波形,所以可以选中信号右键点击
signal
color,可以将您的信号设置成各种你欣赏的颜料,这样虽提高了仿真的频率!

图片 27

术十:重新打开事先安排好之假分组

咱们为仿真方便,一浅假冒伪劣后拿冒牌所安排的分组和文书保留及指定文件夹,为了后面再打开。

图片 28

 

一般来说图,右键点击Simulate Behavioral Model,选择Process Properties。

图片 29

 勾选Use Custom Waveform Configuration File这等同抉择

 在脚那无异栏上加你刚刚保存的虚假文件路径,完成后点击apply。

图片 30

如下图,右键点击Simulate Behavioral Model,点击Run
,这样你不怕足以打开自己原本所安排的仿真分组文件了。

图片 31

图片 32

最后

  仿真真的凡特别重大,我修了一致年FPGA才真正算是的是虚能力可了门,如果对一个工程仿真做的好之话语,可以省而不少时之。这是自我多年来所以的vivodo中的Isim做的虚伪,算是充分利用了伪工具,这么老吧,这说不定是自己举行了的绝优秀的虚假了!

图片 33

 图片 34

转载请注明出处:NingHeChuan(宁河川)

个人微信订阅号:NingHeChuan

而您想这接受个人创作的博文推送,可以扫描左边二维码(或者添加准识别二维码)关注个人微信订阅号

知乎ID:NingHeChuan

微博ID:NingHeChuan

原稿地址:http://www.cnblogs.com/ninghechuan/p/6214706.html 

相关文章

发表评论

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

网站地图xml地图