modelsim基础2_modelsim仿真分析

仿真分析

概述

a)硬件描述语言的软件仿真根据是否加入延迟信息可以分为功能仿真和时序仿真。功能仿真仅仅验证设计代码是否可以完成预定功能,不考虑实际的延迟信息,所以当某一输入激励发生变化时,会立刻在输出端产生响应,即输入和输出之间没有时间的延迟。时序仿真加入了信号传输需要的时间延迟,这种延迟信息一般来自厂商。例如,FPGA厂商或IC设计厂商会提供一个元件库或设计库,库中包含了该厂商对不同基本器件的延时描述,根据这些库来计算当前设计在实际电路中可能出现的延迟状态,对这种延迟状态进行仿真。功能仿真和时序仿真处于设计流程的不同阶段,功能仿真一般在设计代码完成后进行,验证功能是否正确,如果正确则表示可以尝试进行综合,在综合之后就会根据综合时的约束设置产生时序信息,这时可以进行时序仿真,验证设计是否满足时序要求,主要是建立时间和保持时间的检查。

WLF文件和虚拟对象

a)WLF(wave log format)文件是波形记录的一种形式。WLF文件采用二进制的形式书写并被用来驱动调试窗口,这个文件中包含着被标记的对象数据(如信号、变量等)和对象的设计层次。用户可以记录全部的设计或选择感兴趣的对象进行指定记录,并可以调用存储的WLF文件进行观察和波形比较。

b)dataset就是一个先前被载入modelsim中的仿真文件的副本,可以在modelsim中被打开,打开时会在多标签区域出现对应的标签页,内含该dataset所包含的模块信息。

c)保存仿真状态

1)如果添加一个对象(从sim标签或对象窗口中选择)到波形窗口、数据流窗口、列表窗口,那么每个对象的仿真运行结果就会自动保存到名为vsim.wlf的文件中,这个文件会自动储存在modelsim当前工作的文件夹中。如果在同一个工作文件夹中运行一个新的仿真,那么这个新仿真也会产生名为vsim.wlf的文件,从而覆盖先前生成的WLF文件。如果想要保存的WLF文件不被覆盖,就要采用某种方式保存该WLF文件。

2)保存方式

①菜单操作:选中workspace区域内的sim标签,之后在菜单栏中选择file→savedataset进行保存。

②命令行:dataset save

3)波形是modelsim仿真中非常重要的分析对象,对于WLF文件,modelsim提供了菜单操作,在菜单栏中选择file→dataset选项,即可弹出dataset browser。

4)file标签页可以显示本工程中打开的dataset文件,并且可以按文件层次展开。

5)打开dataset:dataset open 。

6)使用vsim命令也可以打开dataset文件,只是要使用参数-view。例如,要打开文件my_sim1.wlf,但是希望把dataset的逻辑名称改为compare,可以使用命令:vsim -view compare=my_sim1.wlf。

d)dataset结构

1)instance(实例):显示实例化的名称,在每个实例前都有符号,代表该实例的类型。其中方块符号代表模块,圆形符号代表进程;

2)design unit(设计单元):显示设计单元名称。与实例名称不同,设计单元是最原始编写的代码单元;

3)design unit type:显示设计单元类型。例如module、process、entity等;

4)visibility:显示当前对象的可见度。

e)dataset管理

1)dataset browser对话框分为两部分:显示区域、控制区域。显示区域分为四栏:dataset(当前仿真的名称是sim)、context(显示该dataset保存的是哪个设计中的数据,只显示该dataset中顶层的设计名称)、mode(显示模式。当前进行中的仿真模式是simulation,而非进行中的仿真模式是view,即仅为查看模式)、pathname(显示路径名称)。

2)激活的dataset指在命令行中使用某些命令语句,没有指明具体要操作哪个dataset,这时处于激活状态的dataset就会被默认为执行对象,即所有未指明对象的操作都会作用到该激活的dataset上。

3)dataset snapshot在默认情况下是关闭的,可以手动打开。dataset快照可以自动保存指定时间长度或指定文件大小的WLF文件,可以在菜单栏tool→dataset snapshot打开。

f)虚拟对象

1)虚拟对象是自己建立的一个对象,只在图像窗口界面中使用,在modelsim的内核运算中是没有这个对象信息的。虚拟对象在对象窗口和波形窗口中显示为橘红色的标志符号。可以自行建立虚拟对象查看其特点。

2)virtual signals:虚拟信号是被modelsim仿真核心写到WLF文件中的各个信号的一个合集或子集,这些信号可以显示在对象窗口、列表窗口、波形窗口中。虚拟信号被创建后,可以像正常信号一样使用。但是在保存为WLF文件时不能保存,这是因为虚拟信号只是建立在图形用户界面中,而没有写入modelsim的仿真内核中,WLF文件要从modelsim的内核中读取数据信息。

3)virtual functions:虚拟函数不仅单纯对原信号进行合并或取子集,它可以对原信号进行运算或标记,并可以随时间更改。虚拟函数没有菜单栏命令,只能通过命令行操作。命令格式:virtual function {} 。如:virtual function {not /fpmul_tb/b} not_b。也可以添加多个信号的逻辑运算,或者添加时间延迟等,如:virtual function -delay {100 ns} {/test/signal_A and /test/signal_B} delay_AB。

4)virtual regions:虚拟区域即建立一个虚拟的层次结构,该结构可以指定作为当前仿真中任意层次,并可以链接到原有层次树中。建立虚拟区域也只能使用命令行:virtual region 。命令中是父代的全路径,即要把虚拟区域建立在哪个模块层次的下一级,建立的虚拟区域就是该层次的子层次,该层次就是虚拟区域的父层次。

5)virtual type:使用虚拟类型会建议一个枚举值,当出现枚举值对应的字符串时,显示信号输出就是该字符串。如:virtual type {state0 state1 state2 state3} myvirtualtype。在该命令中,{state0 state1 state2 state3} 部分是指定的字符串列表。执行该命令后,一个虚拟类型就被建立了,但是没有任何提示信息。此时不能直接显示这个枚举值,需要把这个枚举值作用到某一信号上才能观察该枚举值的特点。所以在命令行输入虚拟函数,如:virtual function {(myvirtualtype) sim:/fpmul_tb/control} test。这个虚拟函数的功能是把刚生成的虚拟类型作用到sim:/fpmul_tb/control信号端,完成该函数功能后输出值test。

6)以上虚拟对象都是不可保存的,保存WLF文件时这些虚拟对象都无法被保存下来,在退出仿真时这些虚拟对象也全部被清空,只有使用前面介绍的restart仿真命令才能保留这些虚拟对象。不过可以使用一些辅助文件来保留有用的虚拟对象,如使用do文件。

波形分析

a)列表窗口有时间标记,波形窗口也有类似的功能,即书签bookmark。在波形窗口的显示区域用光标选择一个时间点,在菜单栏中选择bookmarks→add custum选项。

b)在波形窗口选择add→window pane选项,就会在波形窗口中出现一个子区域,该字区域可以用鼠标来扩大和缩小。这种子窗口以一般是用来观察dataset,在同一个窗口中观察不同波形,对比观察比较方便。

c)波形和列表的保存

1)仿真得到的波形和列表在退出仿真后就会全部消失,如果要保存这些波形和列表信息,那么直接选择保存是做不到的。如果选择保存,那么会根据当前是波形窗口还是列表窗口保存为一个wave.do或list.do的文件,保存的是设置信息而不是列表。当然也可以保存为WLF格式的文件,但是这种格式的文件只能在modelsim中被查看。

2)file→export→image只能显示部分的图像。若要得到全部图像,可以采用打印的方式,即file→print。此时有信号选择和时间区域选择。

d)波形比较

1)使用波形比较必须有一个dataset,即至少运行两次仿真,第一次仿真的波形被保存为WLF文件,用来与第二次仿真生成的波形进行比较。波形比较可以在单一语言环境中进行,也可以在多语言混合环境中进行。

2)在主界面菜单栏中选择tool→waveform compare→start comparision选项。

3)tool→waveform compare→option对话框有两个标签,一个设置比较方式,另一个设置比较选项。比较方式有两种:连续比较、时钟比较。连续比较不考虑时钟,类似于电路设计中的异步电路,每当比较信号变化时就进行一次比较,比较的不同点会做出醒目的标记(波形窗口中用红色标记,列表窗口中用黄色标记)。时钟比较以时钟沿为基准,类似同步电路,只有在时钟的边沿到来时才进行比较,在时钟不跳变的区域内,所有信号的变化都不会被考虑。如果选择连续比较,下方还有选择容错差,leading tolerance和trailing tolerance分别是两个比较信号的前后容错差,即两个比较信号变化的时间差在这两个值的范围内,比较器就认为这两个比较信号是相同的。如果选择时钟比较,则需要指定一个比较时钟。

4)设置好选项,在主界面菜单栏中,tool→waveform compare→run comparison选项,比较就会开始运行。下方的信号用三角符号表示,是比较信号。

5)如果需要更加直观看出哪些地方不同,可以tool→waveform compare→different→show选项。此外可以保存为一个.dif格式的文件。如果选择write report选项就会输出一个文本格式的文档,包含信息与选择show命令时在命令窗口中输出的提示信息相同。在保存比较结果时还要保存比较规则,tool→waveform compare→rules→save选项,保存为.rul文件。

存储器的查看和操作

a)如果设计中包含存储器单元,可以使用modelsim对存储器的数据进行查看导出,或者利用已有的文件对存储器进行初始化。

b)存储器查看:如果需要查看某个存储器内部的数据,可以在memory list标签页中选择一个存储器,单击右键选择view content选项,就会在MDI区域内出现存储器窗口。

c)存储器初始化:存储器初始化利用的是导入功能。因为载入的数据可能与存储器大小不匹配,或者没有文件可载入,所以提供了3种模式:file only、data only、both file and data。如果选择both file and data,modelsim会先载入数据文件,如果数据文件无法填满存储器,则再采用赋值的方式初始化剩余部分。

数据流窗口的使用

a)数据流窗口是一个重要的仿真分析窗口,利用这个窗口,可以分析设计的连通性,可以跟踪信号和事件,还可以查找一些从其他窗口种无法察觉的设计隐患。

b)概述

1)数据流窗口显示的是数据的流向。在数据流窗口的显示区域内显示的各种图形符号表示设计中的进程,线条表示信号的互联。

2):=表示该信号是一个赋值过程。赋值语句是由右向左赋值的,但是在数据流窗口中是把左侧的数值赋给右侧。圆圈左右两边的数值在不同时间是不一样的。

3)如果习惯看结构图,那么看到数据流图像的时候就会觉得混乱,没有一个整体的模块和层次,只有一个个信号和线条,就完全不了解哪个赋值语句是在哪个模块或层次中发挥的作用。modelsim提供了层次显示的功能,在数据流窗口的选项设置中可以选择。方框内包含的所有进程都属于该设计单元。数据流窗口中各个信号都是采用连线的形式连接的,数据流窗口的线条是浅蓝色的,在浅蓝色的线条上会有一段白色的部分,该白色段表示该信号穿过了一个层次边界,即该处就是一个设计层次的分界点。

c)设计连通性分析

1)数据流窗口主要的功能之一就是可以用来分析设计中各个信号的物理连通性,这里的物理连通并不是实际电路级的线连通,而是指在设计中各个信号是否按设计需要进行了连接。如果设计中某些信号因手误或其他原因导致了断点,那么采用连通性分析就能找到这些断点。这个功能无论是波形窗口还是列表窗口都无法实现,波形窗口只能对一个个信号查找波形,推断出可能发生错误的位置,而在数据流窗口中采用连通性分析可以迅速找到此类错误。

2)在观察设计连通性之前要把信号添加到数据流窗口中,可以在sim标签中使用右键菜单选择add dataflow选项,或者直接双击仿真波形,可以把选择的信号添加到数据流窗口。添加到数据流窗口中的对象默认是不显示波形的,在菜单栏中选择view→show wave选项可以在数据流窗口下方附加一个波形窗口。选择不同的对象就会出现不同的端口信号波形,通过这些信号的波形判断该对象是否能正常工作。

3)分析信号连通性用的是数据流窗口的展开命令,展开进程后可以看到指定对象的驱动和读取信号。展开方式很简单,只需要使用鼠标双击就可以完成。

d)信号追踪和查找

1)在数据流窗口中可以利用菜单栏中的trance选项对某信号进行追踪。在给出的波形窗口中使用光标操作,选择一个信号的跳变沿,在菜单栏选择trace→trace next event选项观察该信号的下一个跳变。如果观察整个信号无误,可以选择trace→trace event set选项显示上一级驱动,modelsim将倒查与该单元信号连通的单元。

原理图窗口使用

a)原理图窗口可以显示设计的连通性,可以看到整个设计的结构、连接关系、层次。原理图窗口显示设计文件中各设计单元物理层次上的连接关系。与数据流窗口类似,原理图窗口也可以追踪事件和信号,可以显示可综合和不可综合的设计。对于可综合的部分,原理图窗口可显示信息有:显示器件和数据的连通性、指出时钟和触发事件、分离组合逻辑和时序逻辑、识别ROM/RAM存储模块。

b)原理图窗口提供两种模式显示,分别是full view和incremental view模式。可以在sim标签中选中某个模块来添加,使用右键菜单中的add to→schematic→full或incremental选项来进行添加。full view可以展示各种模块或结构体之间的连接关系,最低的显示粒度是HDL中的process和always块,也可以通过选项显示所有模块的内部信息。incremental view用来显示设计文件中的逻辑门或关系式等,显示RTL信息,使整个程序的语句变得更直观易懂,可以只显示某个线网或块,然后依次展开驱动信号和接收信号,并在原理图窗口中显示,这在设计调试中非常实用,可以按信号的驱动和读取来展开设计的连接,并检查信号的变化情况。

c)原理图窗口操作与数据流窗口操作比较类似。例如,在原理图窗口选中某个器件或连线,双击之后就会在源文件窗口出现对应的源代码,并以红色字体显示。同时,可以使用显示驱动和读取来展开设计,使用到的快捷工具栏与数据流窗口的快捷工具栏相同,原理图窗口的菜单栏add→expand net to→drivers、readers、drivers&readers,用于切换。

d)原理图窗口中的模块可以采用折叠或展开的方式来选择内部信息的可见性。

e)在原理图窗口中可以激活时间标签,可以在菜单栏中选择tools→preference选项打开原理图窗口选项设置,与数据流窗口中的信息基本一致。把其中的current time label选项激活,就会在窗口的右上角看到时间标签。时间标签的中间是当前时间,左侧是显示上一个事件按钮,右侧是显示下一个事件按钮。在波形窗口或原理图窗口中选择某个跳变沿,即发生了事件,此时单击事件标签左右按钮可以显示上一次和下一次发生变化的位置。

f)在原理图中可以联合源文件窗口进行调试,选择某个变化沿,在原理图中选择对应信号,使用右键菜单中的event traceback→show cause选项,红色字体就是代码在当前仿真时刻的变化值,恒定值直接显示数值,变化值采用→来连接变化前后的数值。

g)原理图窗口必须使用优化后的设计,可以使用下面代码进行f仿真,即先进行优化,再使用-debugDB命令来激活原理图窗口。

vopt +acc top -o top_opt

vsim -debugDB top_opt

h)原理图窗口中要观察的数据或信号必须在之前的仿真中被记录下来,对于一些比较大的设计,要想把所有信号都添加到波形窗口或数据流窗口是不现实的,这样仿真器工作起来占用的资源很大。可以在仿真开始前使用命令log -r /*来添加当前所有可记录的信号到log文件,这样再调用原理图窗口就不用担心无法显示信号了。

状态机窗口的使用

a)概述

1)在HDL建模的时候,经常会使用状态机进行核心状态转换的设计,modelsim也提供了状态机的检验方法,除了使用波形观察,还可以通过有限状态机窗口来直观观察程序中包含的状态机。

2)状态机默认为关闭状态,可以在软件中选择view→FSM list选项来显示,该窗口显示在标签页区域。状态机窗口必须用命令行来激活,否则是看不到信号的。

3)启动状态机窗口命令行的方法有很多种,主要有vlog或vopt命令后添加选项,可以采用+cover、+cover=f、-fsmverbose、-fsmmultirans这几种附加命令选项。如:vlog *.v ; vopt +cover top -o opt_top。最后在仿真时,启动仿真需要加入-fsmdebug选项,而且必须是启动仿真优化后的仿真文件,不能直接仿真原始模块。

4)选择add to wave命令后,会把状态机作为一个整体添加到波形窗口中。在sim标签中添加了状态机信号,在FSM标签页添加的状态机会以s1等状态直接显示,方便观察。

5)在运行仿真后,可以结合显示的状态机和波形共同观察仿真结果,这对检测状态机的转换是很方便的。状态机中会以黄色显示前一状态,绿色显示当前状态。同时在状态机的右上角,会有当前仿真时间的显示。

modelsim的剖析工具

a)modelsim的剖析工具联合了一个统计抽样的剖析器和一个存储分配剖析器,可以统计实例完成的进程和存储器分配的数据。它能够快速确定设计中的存储器是如何分配的,并且可以轻松找到设计仿真中哪个区域可以进行性能改良。性能剖析可以使用在设计的任何层次中,如算法级、RTL级、门级。另外,在ASIC和FPGA的设计流程中,性能剖析是一个很重要的部分,可以利用性能剖析得到更好的收益。

b)运行性能剖析和存储器剖析

1)剖析工具的性能剖析和存储器剖析是两个相对独立的部分,可以各自独立使用。性能剖析是附加于仿真流程之外的,需要运行性能剖析的时候不需要更改仿真流程。运行性能剖析需要先运行文件的编译,编译通过后可以通过三种方式来启动性能剖析。

①tools→profile→performance

②命令栏中输入profile on(profile on -m启动存储器剖析)

③点击快捷工具栏的按钮。按钮凸起状态表示功能未启用

④(仅存储器剖析)在开始仿真的菜单栏中选中存储器剖析选项,勾选enable memory frofiling复选框再启动仿真。

c)查看性能剖析结果

1)在单独启动性能剖析器后,运行仿真,在仿真中断或结束时会出现以下提示:#profiling #profiling paused,1510samples taken。同时在modelsim最下方的状态栏里也有相应提示,显示的采样信息是相同的。

2)性能剖析和波形列表等窗口不同,不能在仿真的时候同时显示窗口,需要手动开启。在需要查看分析信息的时候可以在菜单栏中选择view→profile选项,会出现下拉菜单,有5个选项:

①ranked profile:显示每个函数或实例的性能统计分布结果和存储器分配剖析结果。显示信息中默认为蓝色字体,如果出现了红色字体,那么表示此进程或实例占用了5%以上的仿真时间;

②call tree profile:该窗口的name栏以树形的形式显示当前设计中各个子函数的调用情况,体现了调用的层次,所以叫calltree窗口。calltree窗口显示了各个子程序的实际占用资源情况,另外该窗口多了%parent一栏,显示某个子程序的父程序占用仿真时间的情况。如,有一个函数包含AB两个子程序,在ranked窗口只能显示这个函数占用的资源,却不能标记其中两个子函数哪个更占用资源,此时使用calltree窗口可以得到更精确的信息,进而优化设计。红色显示只能在底层的函数中显示。

③structural profile:该窗口是一个层次结构的显示窗口,显示了设计中各个层次模块的资源占用情况,其层次显示信息与sim标签中的层次显示信息相似。

④design unit profile

⑤profile detail:此时调出的窗口并没有具体信息。如果需要查看profile上述四个窗口中某个对象的细节,可以选中此对象,在右键菜单中选择function usage,此时对象的详细信息就会显示在profile detail窗口中。

3)利用剖析工具的主要目的是判断哪些进程和实例占用了较多的仿真时间,有时候一些占用1%或2%仿真时间的选项完全可以忽略。

d)查看存储器剖析工具

1)如果只选择了存储器剖析功能,那么执行run命令时不会有任何的提示信息。执行完仿真后,会显示仿真过程中一共使用的存储器容量。另外,如果同时选择了性能剖析和存储器剖析,那么在状态栏中会显示对应的两个信息,位置不变。

e)保存结果

1)在性能剖析和存储器剖析结束后,可以保存剖析报告结果。在菜单栏中选择tools→profile→profile report选项。在output区域选择输出位置,选择write to transcript选项会把报告输出到命令窗口中。

2)profile report -calltree -file profile.out -cutoff 3 -p -m

覆盖率检测

a)在进行单元测试时,代码覆盖率常常被作为衡量测试好坏的指标。

b)启用代码覆盖率

1)启用代码覆盖率需要在文件编译和仿真时添加参数。在编译的时候,需要加入参数-cover。即vlog -cover bcest filename.v。其中:

①b:收集分支统计数据,即分支覆盖检测。该检测方式判断程序中每个判定的分支是否都被测试到了,这个分支可能由if-else或case等语句引起;

②c:收集条件统计数据,即条件覆盖检测。该检测方式判断程序中每个分支的可能性是否被测试,每个分支语句可能为真,也可能为假,使用分支检测时只检测是否实现该分支语句,不考虑该分支语句的可能状态,所以该检测方式是分支覆盖检测的延申;

③e:收集表达式统计数据,即表达式覆盖检测。该检测方式用来分析赋值语句右侧的表达式,类似于条件覆盖检测;

④s:收集语句统计数据,即语句覆盖检测。这是最常用的覆盖方式,就是度量被测代码中每个可执行语句是否被执行到,只统计能够执行的代码被执行了多少行;

⑤t:收集开关统计数据,即开关覆盖率检测。该检测方式统计一个逻辑节点从一个状态到另一个状态的转变次数。

2)还有另一种命令行方式,即+cover。使用时后面加上等号,然后写上需要检测的对应字母。

3)optimization level(-coveropt)区域给出了4种优化级别:第一级关闭所有影响代码覆盖率报告的选项;第二级是在数据更迭过程中如果能借助时序进程来获得较大性能提升则可以进行优化,此时会导致覆盖率统计的计数总量降低;第三级是在第二级基础上允许移动一些语句,也允许常量传递和VHDL子程序的插入;第四级是在第三级的基础上允许几乎所有的优化,如改变区域代码、移除无用信号、优化verilog单元门和表达式、识别VHDL触发器等。在other coverage区域可以设置一些杂项,如启动有限状态机覆盖、禁用case语句中default检测等。

4)编译之后启动仿真:vsim -coverage design_name

5)启动仿真后,modelsim会改变版式排布,如果在菜单栏中选择layout,就会看到其中的coverage区域已经被选择。多标签区域会多出一个instance标签,同时在files和sim标签的显示栏会发生变化。在sim和files标签会出现stmt count等栏,这些栏用来统计代码覆盖率计算时的语句。举例来说,stmt count是该单元包含的总语句数,后面的stmt hits是命中的语句数,并且有一个百分比显示的数据。其次,instance标签页也出现了,这个标签页中出现的是本仿真中所有能识别出来的设计实例,即层次化的模块,以及能识别的函数任务等具有模块输入与输出性质的部分,该窗口包含的栏数较多,所有启动的代码覆盖率都在此窗口显示。

6)另外,代码覆盖率显示部分还有3个窗口:assertion窗口、cover directives窗口、covergroups窗口。assertions窗口用来判断断言语句的覆盖率情况;cover directives窗口用来显示覆盖指令的累加和,有百分比和图形两种显示方式;covergroup窗口用来显示多种覆盖率的加权平均值。这三个窗口一般在systemverilog断言语句用的较多。

c)覆盖率的查看

1)在运行代码覆盖率时,modelsim会自动记录各个窗口中的命中数据,在仿真中断或停止的时候更新当前窗口的显示。运行一段时间仿真后,各个窗口都会发生一些变化。

2)覆盖率低于50%会显示红色图标,覆盖率在50%-90%时会显示黄色图标,覆盖率高于或等于90%时显示绿色图标。

3)测试文件由于自身特点,达到100%的代码覆盖率很简单,尤其是达到100%的语句覆盖率。

4)如果选择了实例化窗口中的某个实例,则源文件窗口就会发生变化,会跳转到该语句对应的文件行,方便设计者观察。在Hits栏中表示的是语句命中检测,在BC栏中表示的是分支命中检测。源文件窗口中有9种命中状态显示,分别是:绿色√、红色×、绿色E、红色XT、红色XF、红色XC、红色XE、红色XB、红色XS。绿色E表示Exclusion,表示当前行是排除行,可以在当前排除窗口种找到这个行表示的信息。红色XT和XF用于BC行,因为分支检测会检测true和false,这两种状态哪种没有被执行,哪种就会以下角标的形式显示出来,XT表示该行没有被执行true状态。红色XC表示该行的分支语句没有被覆盖执行。红色XS表示该行的语句没有被覆盖执行。

5)如果把鼠标移动到某行代码上,那么在该行代码的命中状态显示部分还会出现命中的数值。鼠标移至该行的原来√位置会出现51,表示该行命中51次。

6)如果想要直接看到具体的数值信息,tools→code coverage→show coverage numbers。

7)只有开关覆盖检测不能用源码窗口观察,观察开关覆盖率主要借助对象窗口,即view→object。此时在对象窗口会详细显示各个信号的变化状态,由于没有使用Z的信号变化,所以把Z值有关的信号变化都去除了。

d)覆盖率检测的过滤

1)在实例化覆盖窗口中使用右键菜单,选择set filter命令可以进行过滤设置,有三个对话框区域:filter method、code coverage type、threshold level。

2)在设计中可能有一些不重要的部分,或者有时测试平台不需要进行覆盖率检测,这时就可以对某些文件进行排除设置。在files标签中选中某个文件,在右键菜单中选择code coverage→exclude selected file或cancel file exclusions,就可以把选中的文件排除或取消排除,同时在命令窗口有对应提示,这些信息可以在随后的报告中保存。

信号探测

a)概述

1)信号探测主要用在VHDL文件或Verilog与VHDL文件的混合仿真中。Verilog语言提供了层次化访问,这样就可以不通过模块的接口来访问不同层次的对象。例如,仿真top模块下的A子模块中的a信号,可以直接用top.A.a来访问。但是在VHDL中没有层次化访问,如果混用了VHDL设计,而碰巧这种访问要穿过该VHDL设计或是操纵VHDL设计中的对象,那么这种层次化访问的功能会失效。

2)VHDL语言不允许层次化访问,如果要访问设计内部的层次信号,就必须在全局包中定义信号,使用这些定义的全局信号来访问各个层次,但是这样又面临一个问题,就是在改变要访问信号的时候必须修改全局信号。使用信号探测能很好解决这个问题,信号探测功能可以很好解决VHDL和混合仿真中对层次对象的监视、驱动、赋值、释放问题。

3)使用信号探测时需要注意,如果是VHDL设计,则在VHDL文件前需要加上:library modelsim_lib; use modelsim_lib.util.all;

b)信号探测功能是modelsim附带的一个功能,也可以说是工具,主要就是为仿真和测试文件中的测试信号服务。使用信号探测功能写出的测试文件只能在modelsim使用。

c)基础语句

1)disable_signal_spy(src_object,dest_object,verbose):用于禁止与之关联的init_signal_spy语句,在disable和init之间的联系是通过该语句的src_object和dest_object两个参数建立的。这两个参数是必须的,需给出一个完整的层次名。verbose是一个可选参数,0表示不输出信息报告,1表示输出信息报告;

2)enable_signal_spy:激活某个与之关联的init_signal_spy语句

3)init_signal_driver(src_object,dest_object,delay,delay_type,verbose):可以驱动VHDL信号或verbose线网的值到一个已知的VHDL信号或verilog信号中,这就允许从VHDL的内部层次中驱动任意层次的信号值,实现与verilog层次调用相同的功能。其中delay是延迟信息,指定一个时间延迟,该延迟可以是惯性延迟或传输延迟,是可选项,如果不指定延迟就是0。delay_type是延迟类型,可以是mti_inertial或mti_transport,默认情况是mti_inertial。

4)init_signal_spy:可以把某个VHDL信号或verilog寄存器(或线网)的值映射到一个已有的VHDL信号或Verilog寄存器(或线网)。

5)signal_force:强制赋值给某个指定的VHDL信号或verilog寄存器(或线网)

6)signal_release

使用jobspy控制批处理仿真

a)jobspy功能与流程

1)在实际的测试过程中,设计者往往要同时进行多个仿真,即把多个仿真做一个批次来处理。这时就需要使用jobspy功能来管理批量的仿真,jobspy的功能主要有:

①检测一个仿真,观察它运行了多长时间;

②检查设计的内部信号,确定设计的功能是否正确,而不需要停止仿真;

③挂起一个仿真工作,释放license以提供给更重要的工作,可以稍后重启挂起的仿真;

④为允许批量的任务设置一个任务断点,稍后可以继续运行。如果允许仿真的工作站被迫中断仿真,那么可以利用保存的断点文件重启这些仿真。

2)jobspy是很好的管理工具,可以控制仿真中应该有的操作,并且提供了中断方案,可以最大限度保存用户的仿真结果。这一点对于长时间仿真的用户有很大好处,可以脱离效率低下的监控工作,转而做其他事情,而不用担心仿真的数据会丢失,可以提高测试效率。

3)使用jobspy管理批量仿真的步骤:

①设置环境变量JOBSPY_DAEMON。环境变量指明了端口和用户名,设置了后台程序。当一个仿真开始的时候,daemon会打开指定的端口并且记录端口数目、用户名称、工作路径。即JOBSPY_DAEMON=<port_number>@

②启动jobspy daemon

③启动一个或多个仿真

④使用命令行或图形窗口管理仿真。

b)运行jobspy

1)tool→jobspy→jobspy settings显示jobspy设置信息

2)tool→jobspy→daemon→start daemon选项启动后台程序,再选择tool→jobspy→jobspy job manager选项打开jobspy管理器,可以进行批处理管理。

3)在jobspy job manager窗口中,jobID是数值,按从小到大递增,每个仿真ID都是不同的。job type标志仿真类型,如verbose仿真的时候类型就是mti。status标志仿真状态。

c)在jobspy job manager窗口可以使用右键菜单来选择操作:

1)suspend:挂起并释放license。由于modelsim的仿真需要license,使用此命令可以挂起某个正在进行的仿真,并释放该仿真占用的license,供其他仿真使用,在其他仿真结束后,可以使用该命令下方的unsuspend命令取消挂起,让先前的仿真继续。

相关推荐
tiger1192 小时前
FPGA 在大模型推理中的应用
人工智能·llm·fpga·大模型推理
FPGA小迷弟7 小时前
FPGA处理图像需要用到的主流接口详解
学习·fpga开发·verilog·fpga·modelsim
ALINX技术博客4 天前
ALINX 携手 Electra lC 亮相卡塔尔 DIMDEX,共拓 FPGA 全球市场
fpga开发·fpga
坏孩子的诺亚方舟7 天前
modelsim基础0_概述和操作界面
modelsim
知识充实人生8 天前
Xilinx 7系列器件特性对比
fpga·xilinx·赛灵思·7系列·器件资源对比
坏孩子的诺亚方舟10 天前
FPGA系统架构设计实践14_OTA升级
fpga·加载
北城笑笑13 天前
FPGA 50 ,Xilinx Vivado 2020 版本安装流程,以及常见问题解析,附中文翻译( Vivado 2020 版本安装教程 )
fpga开发·fpga
XINVRY-FPGA16 天前
XC7VX690T-2FFG1761I Xilinx AMD FPGA Virtex-7
arm开发·嵌入式硬件·fpga开发·硬件工程·fpga
Js_cold16 天前
Xilinx FPGA温度等级及选型建议
fpga开发·fpga·vivado·xilinx