ModelSim仿真入门 (三)时序仿真
【时间:2013 年 11 月 16 日, 来源:本站原创, 作者:】
骏龙科技 程旭
正如前面第二讲所述,时序仿真在实际应用中使用的并不多,但是为了保持仿真系列文档的完整性,我们还是把仿真的方法写出来。
时序仿真就要比第二讲的功能仿真步骤上要多一些,本讲以目前的QuartusII的12.0SP2版本和Cyclone IV的EP4CE6F17C8为例,讲解下时序仿真的方法和步骤。
时序仿真需要的文件总共有以下几种:
①综合后生成的网表文件“ * .vo ”(假如在Setting里面设置里输出语言为VHDL的话,则生成的网表文件为“ * .vho”)
②综合后生成的具有工程延时信息的文件“ * .sdo ”(VHDL语言亦为此)
③ Test Bench程序文件
④ Altera的元器件库
大致的过程就是先在Quartus II中生成网表文件和时延文件,然后调用ModelSim进行仿真,具体的时序仿真步骤如下:
1. 打开Quartus II软件,新建工程,再新建文件counter8.v,把上一讲中的counter8.v这个源文件复制到Quartus II的工程目录中,并添加该文件到工程中。接着,选择“Settings”→“EDA Tool Settings”,选择左栏的“Simulation”,设置情况如图1所示。
第一栏的“Tool name”选择ModelSim-Altera
第二栏的“Format for output netlist”选择自己熟悉的语言,VHDL或Verilog都可以,后面的“output directory”是选择输出的网表文件和延时信息文件的存放路径,一般选择默认即可,这样的话,将来编译成功后,会在Quartus II的工程文件夹(本例为counter8这个文件夹)下面生成一个simulation/modelsim的文件夹,里面存有将来要用到的.vo和.sdo这两个文件。
再往下,看到有“More EDA Netlist WritterSettings…”按钮,点击后进入设置画面,设置情况如图2所示。注意的地方就是Generatenetlist for functional simulation这一项后面是处于OFF的关闭状态,这样才能生成我们所要的时序仿真文件。
图1 simulation的设置
图2 More EDA Netlist WritterSettings的设置
都设置好了以后,全部点击“OK”后退出设置,在QII的编译环境下执行全编译。编译中的情况如图3所示:
图3 编译中的情况
注意:下面比我们平时进行的全编译时多了一项“EDANetlist Writer”,图3的红色箭头指向的位置。
2. 找到新建工程目录所在的文件夹,在里面找到simulation/modelsim这个文件夹,会发现文件夹内有10个文件,如图4所示:
图4 生成的10个文件
注意:counter8.vo和counter8_v.sdo就是时序仿真需要的两个重要的网表文件,它们与counter8_8_1200mv_85c_slow.vo和counter8_8_1200mv_85c_v_slow.sdo只是命名不同而已,文件的内容其实是一样的。后两个是QuartusII目前新的网表文件的命名方法,文件名标示出了速度等级(-8)、内核电压(1200mv)、温度条件(85℃)以及时序模型(slow)。
之所以Altera还没有取消旧的命名文件方法并让QuartusII继续生成这两个网表文件,是因为有TclScript文件是按照旧的命名方法写的,需要兼容它们。
以下时序仿真以counter8.vo和counter8_v.sdo为例,如果需要用fast时序模型做仿真,也是按照下面的方法进行,只是把vo和sdo文件换为fast。
另外“.xrf”和“.sft”这两个文件,是QuartusII编译生成的一些相关的信息文件,时序仿真用不到。
3. 打开ModelSim软件,新建一个工程,如图5所示:
图5 新建工程并指定路径
①接着把刚才生成的counter8.vo和counter8_v.sdo两个文件拷贝到现在个仿真工程的目录下面。
②之后还要拷贝一个很重要的文件,到QuartusII的安装目录下: \quartus\eda\sim_lib,找到cycloneive_atoms.v这个文件,这个是Altera器件库的库文件,进行时序仿真就是基于这个库文件的,把它也拷贝到仿真工程目录。
注意:我们是以Cyclone IV的EP4CE6F17C8为例的,所以这里需要复制的就是cycloneive这个库文件,如果是其它器件的话,需要再对应选择。
③把test_counter8.v文件拷贝到这个仿真工程目录下面。
④在QII安装目录的..altera\12.0\quartus\eda\fv_lib\verilog,把这里面的dffeas.v和dffep.v文件拷贝到这个仿真工程目录下面。
4. 进行完上面的步骤后,返回到ModelSim这个软件界面,会发现软件还停留在刚才新建工程,需要我们为其工程添加文件的对话框,那我们就添加文件,把“counter8.vo”、“cycloneive_atoms.v”、“test_counter8.v”、“dffeas.v”和“dffep.v”这5个文件添加进去,如图6所示:
图6 添加的5个文件
注意:此时不需要添加counter8.v这个文件了,.vo文件可以替代它。
5. 之后关闭添加文件对话框,可以看见Project区域有了我们添加的5个文件了,在该区域点右键,“Compile”→“Compile All”执行全部编译。
6. 在Project区域点右键,“Add to Project”→“Simulation Configuration”添加一个仿真配置的设置,这时会直接弹出添加仿真配置对话框,这里,我们要进行如下的设置:
①在“Design”选项卡下展开work前面的“+”号后点选test_counter8,这个就是Test Bench文件。如图7所示:
图7 Design选项卡的设置
②再切换到“SDF”选项卡,点击“Add”添加“.sdo”文件,点击浏览后会直接出现这个“.sdo”文件的,选择即可,在下面的“Apply to Region”内输入“U”,这个就是我们的Test Bench程序中例化顶层文件的例化名字。如图8所示:
图8 SDF选项卡的设置
接着把下面的两个SDF选项的复选框都选中。如图9所示:
图9 选中SDF选项的两个复选框
点击“OK”退出配置设置界面。配置好了以后的Project区域的内容如图10所示:
图10 Project区域的内容
7. 双击Simulation执行仿真,后面的步骤和功能仿真一样的了,不再赘述。仿真的波形图如图11所示:
图11 时序仿真的波形图
从图11中可以看到dout相对于主时钟clk有明显的延时,这个延时大小与当前使用的器件的时序模型有关。
在具体实践过程中,可能还会遇到各种各样的问题,ModelSim正常运行也依赖于仿真库文件的齐备,所以碰到某些工程在仿真中遇到报错的情况时,不妨检查下ModelSim的提示信息,看看是否有仿真所必需的库文件没有添加进来。
至此,功能仿真和时序仿真都讲解完了,本文并未对如何编写Test Bench做深入讲解,计划放在将来来做专门的介绍。