modelsim仿真流程:modelsim基本的仿真流程包括建立库、建立工程并编译、仿真、调试、但在libero环境中运行modelsim时,软件自动映射库和生成工程文件。其中功能仿真、综合仿真以及后仿真分别映射presynth、postsynth和postlayout库。
基本流程是:建立工作库→编译源代码→启动仿真→分析、调试。
1建立库并映射
在modelsim中,任何使用VHDL、Verilog HDL、SystemC等语言实现的设计,都被编译到一个库中。
方法一:File>New>Library选择新建并映射到该库;
方法二:在modelsim>提示符下运行命令vlib work2-建立库,vmap work work2-建立映射库;
2建立工程
Modelsim仿真需要建立自己的工程,同时modelsim还提供了文件夹管理工程的功能。
step1:File>New>project,并指定库文件名;
step2:新建文件或导入文件;
3编译文件
建立好工程后,使用compile功能对源文件进行编译。Libero环境启动modelsim时,系统执行run.do脚本文件自动编译源文件。
鼠标右击文件,选择compile All对所有的工程文件执行编译操作;
启动仿真,使用simulation>start simulation>选择design选项卡功能使modelsim进入仿真状态,之后可以运行仿真。在libero环境下,运行modelsim直接从运行仿真这一步骤开始。
运行仿真 可以设置仿真时间或选择仿真全部
tcl命令: do run.do – 当设计修改后,使用此命令重新导入设计;
Do wave.do-打开波形列表文件,或者向当前波形添加列表;
Restart-复位当前仿真,从0时刻重新仿真;
Run 1ms-运行仿真1ms时间;
Run all-运行全部的仿真;
在libero环境下,可以自己编写脚本文件代替run.do文件,在项目比较大的情况下可以大大简化仿真的操作。※do wave.do添加自己所需要的波形列表;※restart复位当前仿真到0时刻;※文件名要区别于run.do文件;※libero中设置:Project->settings->simulation导入自己编写的.do文件;
4分析数据――wave,wave波形窗口直观方便的观察仿真结果,是最常用窗口之一。可以使用菜单view>wave或者命令view wave打开添加信号:※在信号等窗口中右键使用”Add to wave”功能;
※在主窗口中使用add wave命令添加信号;
※在主窗口中使用do
※使用“拖-放”操作,直接从信号、结构等窗口向wave窗口中拖放;
快捷操作:※波形放大缩小等操作,放大-键盘“+”,缩小-键盘“-”,全屏-键盘“F”,光标放大-键盘“C”;
※ 区域放大,选中的区域全屏显示;
※ 使添加光标,可以利用光标时间差计算周期等参数;
※ 显示/隐藏信号路径,方便阅读;
设置断点:※右击变量,选择‘Insert Breakpoint’;当选中的变量波形值发生变化时,仿真自动暂停。
保存/打开列表:※波形列表为.do可执行脚本文件;打开列表可以使用do
保存/打开波形:※波形文件为.wlf格式文件,使用File>datasets>saveas来保存波形;※波形文件可用于波形对比的对象,使用File>datasets>open来打开;
波形对比:※在AE版本中,只能实现简单的手动对比波形;
※ 用File>datasets方式打开波形文件,向wave窗口中添加需要对比的信号;
分析数据――list:表格化显示数据,方便通过搜索特殊值或者特定条件的数据,简化分析数据的过程。List窗口可通过菜单View>list,或者命令view list打开。
分析数据――source:source窗口具有完全的编辑能力,同时提供分析数据的一些操作。Source窗口可通过双击workspace的总的文件或信号打开。※查看变量值:鼠标停留在变量上面,可显示当前值;※设置断点: source源代码窗口设置条件断点;
分析数据――Memories: memory窗口列出工程中存储单元的数据,方便调试存储器的操作。※step1:展开调用RAM单元的模块,并展开至RAM_ROC>STATCONFIG;※step2:objects窗口选择MEM_512_9选择View Memory Contonts;
分析数据――watch: watch窗口中可实现监测变量的变化情况,watch窗口可通过菜单view>watch,或者命令view watch打开。Watch窗口中的对象可以以拖拉的方式从object窗口、wave窗口、source窗口中拖拉进来;
分析数据――signals:signals窗口显示被选中进程模块的变量、变量值。Signals窗口可通过菜单view>signals,或者命令view signals打开。※排序:支持按字母的升序或降序排列。※拖放操作:可以将信号拖动到wave、list、watch窗口;※过滤器:选择要察看的信号(输入、输出部信号等等)。※对信号右键操作,可查看源代码;
Modelsim高级功能 SE版本支持,AE版本不支持的功能。
1 Code Coverage Modelsim SE版可以统计代码覆盖率。代码覆盖率是指代码的覆盖程度,是一种度量方式。
※语句覆盖(statement Coverage)
※分支覆盖(Branch Coverage)
※条件覆盖(Condition Coverage)
※状态机覆盖(FSM Coverage)
※路径覆盖(Path Coverage)
Modelsim SE版本可以测试代码覆盖率,代码覆盖率是测试验证的一个重要指标关于测试验证中的一般观点:※覆盖率只代表测试过哪些代码,不代表是否测试好这些代码;※不要过于相信覆盖率数据;※一个稳定的全面的测试仿真要求某些覆盖率尽量100%;※路径覆盖率>判定覆盖>语句覆盖。
统计覆盖率操作流程:※step1:设置编译选项,勾选要统计的代码覆盖率类别;※step2:使能代码覆盖率统计功能,启动仿真;※运行仿真,并分析数据;
2 Waveform Compare 波形对比能快速定位设计在修改前后的区别,在进行波形对比之前要保存原设计的波形文件,此文件为作为对比文件。※step1:打开波形对比向导设置;tools->waveform compare->comparison wizard;※step2:导入波形文件,作为对比对象;※step3:选择对比信号的范围;※step4:根据信号范围选择需要对比的信号;※step5:分析数据;
3 追踪数据流:数据流窗口能够对VHDL信号或者Verilog的线网型变量进行图示化跟踪 ,在界面中驱动信号或驱动线网变量的进程显示在左边,反之被驱动信号显示在右边。可通过双击wave窗口中需要追踪的信号打开dataflow窗口。
※ 观察设计的连接性:可以检查设计的物理连接性,可以逐个单元的观察所关注的信号、互联网络或寄存器的输入/输出情况。
※ 跟踪事件:跟踪一个非预期的输出事件,使用嵌入波形观察器,可以由一个信号的跳变回溯追踪,查到事件的源头。
※ 追踪未知态:未知态在设计中是传递的,用dataflow中Trace>chaseX功能很容易追踪不定态的来源。
※ 显示层次结构:可以使用层次化实例显示设计的连通性。
数据流窗口追踪不定态的功能是工程师比较青睐的,在dataflow窗口中使用Trace>ChaseX功能,不断往驱动级追踪不定态传递的源头。
小结:
仿真验证在整个项目的过程中有着重要的意义,科学合理的仿真方法和仿真技巧可以达到事半功倍的效果;反之,如果只是一味的理论分析而不会整合利用多种工具的优点特点,可能项目会寸步难行。
做到:※合理仿真系统的每一个模块,缩短系统的设计周期;※完整支持从功能前到布局布线后的仿真功能。