概述
IC涉及与modelsim
a)modelsim是业界唯一单内核支持VHDL和Verilog混合仿真的仿真器,它采用直接优化的编译技术、TCL/TK技术、单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核。
b)IC设计基本流程
1)综合生成的文件是门级网表。这个网表文件包含了综合之后的电路信息,其中还包含了延迟信息。将这些延迟信息反标注到RTL模型中,进行时序分析,主要检测的是建立时间和保持时间。其中,建立时间的违例和保持时间较大的违例必须要修正,可以采用修正RTL模型或修改综合参数来完成。对于较小的保持时间违例,可以放在后续步骤中修正。对包含延迟信息的RTL模型进行仿真验证的过程叫时序仿真,时序仿真的结果更加接近实际电路。
2)设计通过时序分析与时序仿真后,就可以进行版图规划、时钟树插入、布局布线。这个阶段是把综合后的电路按一定的规则进行排布,设计者可以添加一些参数对版图的大小和速度等性能进行约束。由于时钟网络的规模庞大,所以时钟树一般在本阶段单独进行。布局布线的结果是生成一个物理版图,再对这个版图进行仿真验证,如果不符合要求,那么需要向上查找出错点,重新布局布线或修改RTL模型。如果版图验证符合要求,那么这个设计就可以送到工艺生产线,进行实际芯片生产。
modelsim基础仿真流程
a)modelsim的仿真大致可以分为三种:basic simulation flow、project simulation flow、multiple library simulation flow。
b)basic simulation flow
1)创建新库:库是仿真的基础,所有仿真的程序实例都要编译入库才能进行仿真,所以在进行仿真之前,必须先建立库文件。
// vlib work work // vmap work work //
2)编译设计文件:完成编译后,刚才空的work库就有了编译好的设计文件。
// vlog -reportprogress 300 -work work .v
3)运行仿真:选中需要进行仿真的文件,同时注意下方optimization区域的enable optimization复选框。该选项是为了提升modelsim的仿真速度,勾选后可以进行优化。勾选后选择optimization option按钮,选择其中的apply full visibility to all modules(full debug mode)选项。设置完毕后按ok,在workspace会出现新的sim标签。
// vsim -gui work.and_gate_tb -voptargs="+acc"
c)project simulation flow
1)首先创建工程,然后向工程添加设计文件,接下来编译设计文件,再运行仿真,最后观察仿真结果并调试。
2)编译时,选择compile out-of-data按钮,该命令的功能为:
①首次单击时,编译所有的文件,只在命令窗口中输出有错误的文件时提示,如果无错误,则命令窗口无提示;
②工程标签栏内的status一栏按编译结果显示正确或错误;
③再次点击时,只编译之前出错的文件和上一次编译后修改过的文件。
操作界面
菜单栏
a)FILE菜单
1)NEW
①debug archive:建立一个调试文档,该选项会在启动仿真后被激活,能够把调试的结果保存下来,保存为.dbar文件类型;
②results analysis detabase:建立一个对已有数据文件或波形等记录信息文件的分析文档,可以用来筛选并保存一些关键的信号和端口。
2)LOAD
①LOAD命令可以为modelsim载入三类文件:macro file(宏文件,以do、tcl为后缀,一般是一个命令的集合形式)、debug archive(调试存档文件,可以载入调试文件或日志文件)、UCDB Testanalysis(UCDB测试分析文件)。
3)IMPORT
①Library:主要针对FPGA器件。适用于FPGA的源文件一般都使用到了FPGA自带的基本器件,这些源文件若要在modelsim中仿真,则必须把器件库导入modelsim中。另外,一些规模较大的设计可能需要多个小组并行开发,所设计的各个单元器件也要进入单元库,在最终合并设计的时候也需要把各自的库进行合并;
②EVCD:只有在波形窗口被激活的时候才可选。该命令可以把预先用modelsim波形编辑器编辑的EVCD文件导入波形窗口中;
③Memory Data:只在设计中存在存储器的情况下才可选,该命令的功能是导入一个预先存储好的数据文件,初始化设计中的存储器;
④Testplan:它仅在验证管理窗口打开的时候才能被使用,可以导入一个事先存好的XML文件,这个文件可以显示覆盖率等测试信息,并且和UCDB文件联合使用;
⑤Column configuration:可以修改modelsim各个窗口中的列选项,用户可以根据个人喜好来修改窗口视图,使窗口中自己不需要的部分不再显示。导入的文件是一个.do文件,这个文件需要事先存储好。
4)USE SOURCE
①use source命令可以替换一个选中的文件。选中一个源文件,再使用use source命令,会弹出对话框,让用户选择一个替换文件。选好后,该替换文件就会替换掉当前的工程。但是这个替换不是永久性的,该替换文件只对当前仿真有效,而且自动出现在工程文件列表中。use source命令仅在struature window中使用有效。
5)ENVIRONMENT
①environment命令有4个可选项,分别是follow current dataset、1fix to dataset sim、follow context selection、fix to current context。follow current dataset可以根据当前的dataset更新对象窗口。1fix to dataset sim会把对象窗口的内容固定在一个特定的dataset中。follow context selection会根据工作区中仿真结构标签的选择来更新窗口内容。fix to current context会维持当前波形,不进行更新。
b)VIEW菜单
1)VIEW菜单用来控制显示。如果需要用到其他的窗口,就需要用户自己操作,调出未显示的窗口。
c)COMPILE菜单
1)systemC link
①用来链接已编译好的C/C++文件,注意被链接的文件必须是被编译过的。
d)SIMULATE菜单
1)design optimization
①对当前库中的模块进行优化。modelsim会立即把优化好的设计保存为output design name中的名称,同时,该对话窗口还提供了立即仿真的功能。
2)start simulation
①start simulation命令可以选择要进行仿真的设计单元。如在work库中选择要进行仿真的设计即可。
3)step
①step是一次执行一条语句。step-over是在单步执行的情况下,如果当前语句是用户函数或调用的事件,则将整个函数或事件处理程序作为一条可执行语句。step-line是逐行步进执行。step-out是在子函数中直接跳出子函数操作。其余带有current选项都是针对当前实例范围内所作的相应操作。
4)break和end simulation
①break命令可以跳出当前运行的仿真,但是仿真的所有设置还会保留,只是将时间暂停住,这个命令适用于没有中断或跳出指令的测试平台。end simulation命令则不同,该命令在仿真运行时不可选,在停止或中断仿真后才变为可选。选择此命令会完全退出仿真界面,同时会关闭与仿真相关的各个窗口,主要包括workspace和MDI中的相关窗口。
e)TOOL菜单
1)waveform compare
①方便比较不同的波形,将人为操作变为软件操作。
2)code coverage
①需要在start simulation命令中,选中enable code coverage选项,才能激活带代码覆盖率的仿真,本命令才会变成可选命令。
3)function coverage
①functional coverage命令与code coverage命令类似。code coverage命令是检测仿真中运行的代码占所有设计代码的比例,functional coverage命令是检测仿真中运行到的功能占总设计功能的比例,这个比例越接近100%越好,表示仿真验证的功能越全面。
4)toggle coverage
①toggle coverage命令用来收集和计算特定节点的状态变化。这些节点包括verilog中的net和register,还包括VHDL中的bit和std_logic_vector等。toggle coverage命令的度量方式与其他覆盖的度量方式是完全一致的,也希望尽量接近100%。
5)coverage save
①coverage save命令会把覆盖率数据保存为UCDB文件,主要为代码覆盖率服务。
6)coverage report/coverage configuration
7)profile(属性)
①perform:启动性能的取样统计;
②memory:启动存储器配置分析;
③collapse sections:报告合并的进程和功能;
8)garbage collector(垃圾收集)
①garbage collector用于system verilog,包含run和configure两个选项,单击run按钮会立刻运行垃圾收集并清空存储空间。
9)breakpoint
10)dataset snapshot(dataset快照)
①选中dataset snapshot命令会生成一个dataset快照,即生成一个.wlf文件的快照。
11)trace
①trace命令可以在一些窗口中跟踪数据信号,如可以在数据流窗口中选中某个信号,跟踪变化。
12)jobspy(工作探测)
①jobspy命令可以调出一个jobspy窗口,用这个窗口可以处理批量的仿真,窗口中可以实时显示所有运行的仿真,并且可以方便访问这些仿真。
13)TCL
①TCL命令可以执行宏文件(do文件),或者调出TCL的调试工具,主要功能是编辑和执行TCL文件。
14)wildcard filter(通配符过滤)
①可以根据建模语言的不同选择相应的过滤通配符。
f)layout菜单
1)bookmarks菜单
①bookmarks菜单的功能是对一些窗口添加书签,如波形窗口、源文件窗口等,方便用户快速切换到需要的位置。
g)window菜单
1)部分命令
①tile horizaontally/vertically:按水平/垂直方向分隔名目。
②icon children:除主窗口外,其他窗口被缩为图标形式。
③icon all:将打开的所有窗口都缩为图标形式。
④keyboard shortcut:添加快捷键。modelsim菜单中所有包含的选项都可以被设置成快捷键。
⑤add toolbar button:选择快捷按钮添加到工具栏中。
⑥enable scribble mode(启动涂鸦模式):该命令在linux操作系统下使用。启用该命令后,鼠标会变成绘画模式,这样可以在当前的视图中快速做出标记,并保存下来用于交流使用。
工具栏
a)工具栏位于菜单栏的下方,提供一些比较常用的操作。随着设计或仿真的进行,当进行到不同阶段时,相关的快捷工具也会出现在工具栏中。
标签页
a)标签页就是软件的workspace区域,在新版手册中叫tab group。标签页出现的标签主要分为:
1)library:在modelsim启动之初,workspace区域只有library一个标签页。library标签内显示最初的设计库。当加入新设计时,library标签内还会加入设计库,内含被编译通过的设计单元。
2)project:新建一个工程后便会出现,project标签内会显示当前工程包含的所有文件,包括编译过的和未编译过的。可以通过对project标签内的文件进行操作,管理整个工程。
3)file:包含载入的设计源文件,files标签主要在代码覆盖率方面使用。
4)memories:这个标签页内包含了所有设计中memory的列表。当选中一个memories标签内的内存时,在MDI窗口会显示一个内部数据的窗口。
5)compare:当进行波形比较的时候,这个标签会显示被比较的对象。
6)sim:modelsim还支持将仿真数据保存为wlf文件格式,在调用此文件时,每个wlf文件都会打开一个新的标签,标签名由用户定义,作为与sim标签的区别。打开wlf文件需要用到dataset的操作。
MDI窗口(Multiple Document interface)
a)源文件窗口
1)窗口中还有一些符号,如行号、红色圈、灰色圈、蓝色箭头。其中红色行号表示该行可以设置断点,灰色代码则不可设置断点。设置了断点的行号会显示一个红圈,灰圈则表示该断点被取消。蓝色箭头表示当前仿真运行到该行。
b)list窗口
1)列表list窗口采用列表的形式显示仿真结果。列表窗口可以分为两部分,左侧显示仿真时间和delta时间,右侧部分显示设计中的端口列表。列表窗口中显示的数据与波形窗口显示的数据是完全一致的,只是采用的显示方式不同而已。列表信息可以被保存为.wlf或.do文件形式。
c)数据流窗口
1)数据流窗口可以显示当前设计的连接结构,也可以跟踪通过设计单元的信号变化,还可以识别错误输出的原因。
2)数据流窗口中可以显示进程、信号、线网、寄存器、互联信息,所采用的布局元件都是verilog中最初始的门,如与或非门。虽然modelsim集成了systemc的编译调试,但是数据流窗口仅可以显示verilog或vhdl程序的设计结构,无法显示systemc的设计结构。
3)显示区域的基本门结构都是以类似#AND#9的形式给出的,第1个#号后面表示采用哪种结构,第2个#号后面的数字表示该结构在源文件中的代码位置。
d)属性窗口
1)属性窗口显示统计性能和内存的配置设置,在默认条件下,启动profile操作时可出现该窗口,总共有5个不同的窗口。
2)5个属性窗口分别是:ranked、call tree、structural、design unit、profile details。ranked显示性能分布统计和每个函数或实例的存储器配置分析。call tree显示当前执行程序的调用关系。structural显示实例结构和内存属性信息。design unit显示设计单元信息。profile details显示所有函数或实例的细节信息。
e)进程窗口
1)进程窗口显示仿真中出现的所有进程。每个窗口可以显示HDL和systemc语言的进程。每个进程可以表示为三个状态:ready、wait、done。ready状态表示这个进程在当前delta时间内会被完成,如果选中一个ready进程,那么它将在接下来的仿真中完成。wait状态表示进程需要等待VHDL信号,这个信号是verilog线网或值的变化,或者是指定的时间周期。需注意,systemc中的进程不能是wait状态。done状态表示该进程已经结束,在当前的仿真运行中不会再次开始。同样,systemc中的进程不能是done状态。
d)对象窗口
1)对象窗口中显示选中模块的内部信号,它可与workspace区域内的sim标签配套使用,选中sim标签中的一个模块,在objects窗口中就会出现该模块的输入和输出列表。在objects窗口中还可以查找信号对应的源文件。双击objects窗口中的一个信号,在源文件对应该信号的行前端就会出现一个蓝色旗子,添加相应书签,并在源文件中以高亮显示出该信号的具体位置。
2)在对象窗口中还可以为选中的信号编辑波形,在右键菜单中,可以为选中信号设置不同的值,包括将信号设为恒定值、时钟、随机数、循环、计数器等。用户可以为每个信号加入驱动值,创建出一个模块的驱动列表。
e)存储器窗口
1)存储器窗口可以显示设计中存储器的内部数据。当设计中出现存储器时,在workspace区域的memories标签内会出现存储器的名称。
2)存储器窗口内的数据可以从外界载入,也可以向外界输出。输入和输出的推荐格式都是.mem格式。
f)原理图窗口
1)与数据流窗口的显示比较相似,不过原理图窗口显得更加偏向物理结构,其窗口中可以显示程序代码中的进程信息,也可以以模块为单位显示整体结构。
g)状态机窗口
1)状态机窗口用来显示设计中的有限状态机。当设计代码中包含状态机时,调用此窗口可以显示出设计中所有的状态转换关系,或者查看多个状态机的详细信息,可以帮助用户更加清晰分析状态机性能。不过modelsim的状态机功能并不强大。
界面设置
a)modelsim的用户界面采用TCL/TK语言编写,自定义用户界面非常方便。用户可以控制包括窗口大小、位置、窗口显示颜色、默认输出文件名等设置,甚至可以使用TCL语言自定义一个窗口或菜单选项。
b)大多数用户界面是采用TCL语言变量保存的,退出modelsim时,这些变量会自动存储。
c)版面布局定制
1)nodesign模式用于没有设计输入的时候,simulate模式用于有仿真进行的时候,coverage模式用于进行程序文件的代码覆盖率测试,vmgmt模式用于验证管理。