ModelSim仿真入门 (三)时序仿真

【时间:2013 年 11 月 16 日, 来源:本站原创, 作者:】

骏龙科技 程旭

 

正如前面第二讲所述,时序仿真在实际应用中使用的并不多,但是为了保持仿真系列文档的完整性,我们还是把仿真的方法写出来。

时序仿真就要比第二讲的功能仿真步骤上要多一些,本讲以目前的QuartusII12.0SP2版本和Cyclone IVEP4CE6F17C8为例,讲解下时序仿真的方法和步骤。

时序仿真需要的文件总共有以下几种:

①综合后生成的网表文件“ * .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”选择自己熟悉的语言,VHDLVerilog都可以,后面的“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.vocounter8_v.sdo就是时序仿真需要的两个重要的网表文件,它们与counter8_8_1200mv_85c_slow.vocounter8_8_1200mv_85c_v_slow.sdo只是命名不同而已,文件的内容其实是一样的。后两个是QuartusII目前新的网表文件的命名方法,文件名标示出了速度等级(-8)、内核电压(1200mv)、温度条件(85℃)以及时序模型(slow)。

之所以Altera还没有取消旧的命名文件方法并让QuartusII继续生成这两个网表文件,是因为有TclScript文件是按照旧的命名方法写的,需要兼容它们。

以下时序仿真以counter8.vocounter8_v.sdo为例,如果需要用fast时序模型做仿真,也是按照下面的方法进行,只是把vosdo文件换为fast

另外“.xrf”和“.sft”这两个文件,是QuartusII编译生成的一些相关的信息文件,时序仿真用不到。

3. 打开ModelSim软件,新建一个工程,如图5所示:

5 新建工程并指定路径

①接着把刚才生成的counter8.vocounter8_v.sdo两个文件拷贝到现在个仿真工程的目录下面。

②之后还要拷贝一个很重要的文件,到QuartusII的安装目录下: \quartus\eda\sim_lib,找到cycloneive_atoms.v这个文件,这个是Altera器件库的库文件,进行时序仿真就是基于这个库文件的,把它也拷贝到仿真工程目录。

注意:我们是以Cyclone IVEP4CE6F17C8为例的,所以这里需要复制的就是cycloneive这个库文件,如果是其它器件的话,需要再对应选择。

③把test_counter8.v文件拷贝到这个仿真工程目录下面。

④在QII安装目录的..altera\12.0\quartus\eda\fv_lib\verilog,把这里面的dffeas.vdffep.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做深入讲解,计划放在将来来做专门的介绍。