原创 Modelsim之时序仿真

2011-4-2 16:19 2914 9 12 分类: FPGA/CPLD

利用ModelSim进行时序仿真(门级仿真),可以比较真实地反映出器件的延时情况,不过它也需要相关器件atom库的支持。


下面就用分频器实例简要说明一下:
1、在QuartusII中新建一个div工程。注意EDA Simulator的设置,可以新建工程时设置也可以后续再设置,如图:


1d815e3e-7b16-49fd-83d0-f01f78b6da75.jpg


Tool name选择ModelSim,Format for output netlist选择Verilog(会生成.vo的Verilog输出文件,若选择VHDL则会生成.vho的VHDL输出文件),其它的可以默认就行。
2、添加源文件,并编译。完了就会在当前工程目录下生成Simulation>ModelSim的文件夹,里面就存放了相关仿真所需要的文件,如.vo(verilog输出文件),.sdo(延时文件)等。
3、打开ModelSim,并在刚才生成的ModelSim文件夹路径下新建一个div的工程。为了对比,分别进行功能仿真和时序仿真。
首先,功能仿真,这个比较简单,直接添加div.v源文件和div_tb.v测试文件,然后编译,完了直接运行仿真即可,得到结果如下:


0f18586e-1cf8-4ffe-8254-516c83e66e18.jpg


可以看到输入、输出是没有延时的,只进行了功能仿真验证。
4、进行时序仿真,这时候就需要相关预编译库和延时文件的加入了。
a)将之前的div.v文件Remove,并添加div.vo文件,(因为div.vo就是div.v的输出文件,所以直接用QuartusII编译输出的div.vo就行了),然后编译div.vo和div_tb.v。
b)开始仿真设置。
首先,添加预编译的器件库,本例中用的是cycloneii_atoms,找到它所在位置并添加进来(具体这个库的编译之前已经有说过,这里就不多说了),完成后如图所示:


f6f7c9be-5a10-4c27-a6b0-901944a3aa37.jpg


然后,添加SDF延时文件,也就是刚刚生成的div.sdo文件,点击Add后出现如下窗口:


83685a0f-86c5-4eec-9cca-1aadae8ee8cc.jpg 


加入SDF文件,另外还有一个选项就是Apply to Region,这里输入u_div,这个选项主要是指明时序仿真的实体名,即Testbench中实例化的div名(u_div),完了OK。
添加后的结果如下:


23a34b24-77e7-4284-95b4-dbad68eacc02.jpg


c)完成上述相关设置后,即可开始仿真了。点击div_tb顶层实体开始仿真。


1309f640-c321-4d2b-8037-004fab1e4f1e.jpg


仿真完成后的结果放大后如下:


d93a65de-1cd5-4072-920d-9a4cd6afa3cd.jpg


与之前的功能仿真结果相比,可以明显看到输入输出具有了一定的延时,经测量是6063ps,大约6ns。
我们的器件选择是EP2C25F672C6,也就是它的速度等级是C6,即最小延时可以达到6ns,因此上面的时序仿真结果与此也是相符合的。


上面对ModelSim的时序仿真做了简要的说明,其实还可以让仿真更加便捷,比如让时序仿真(门级)在QuartusII编译完成后自动运行,这些待后续再补充。

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户1631631 2012-10-28 22:25

原先按照altera指定教材低级篇中所讲的做,遗漏了不少细节,仿真总是有问题,现在参考该文后其中的问题得到了解决,非常感谢!

asus119_412419641 2011-4-14 21:37

个人觉得还是Verilog灵活,用的也是越来越多,另外,Modelsim-altera我没怎么用的,仿真主要还是以Modelsim为主的。

用户1002534 2011-4-14 20:26

你好,你会用vhdl编写testbench文件吗,我在学习fpga,用modelsim-altera仿真时出现了错误,请你帮我看看
相关推荐阅读
asus119_412419641 2013-07-17 23:41
Allegro使用小结
1、解决Allegro在大鼠标模式下的拖影问题(尤其在Win7系统下) 大鼠标去掉拖影的设置方法:在env文件里面一句set infinite_cursor_bug_nt 注意:在pcbe...
asus119_412419641 2013-07-15 23:37
FPGA代码设计规范整理
  1、设计中的FIFO、状态机接口需要有异常恢复状态和状态上报机制,格雷码电路防止被综合电路优化掉。 a)自行设计的格雷码FIFO(一般用于连续数据流跨时钟域)用Synplify综合时,...
asus119_412419641 2013-07-15 22:03
FPGA代码设计规范整理
  1、设计中的FIFO、状态机接口需要有异常恢复状态和状态上报机制,格雷码电路防止被综合电路优化掉。 a)自行设计的格雷码FIFO(一般用于连续数据流跨时钟域)用Synplify综合时,...
asus119_412419641 2013-07-15 21:58
FPGA代码设计规范整理
  1、设计中的FIFO、状态机接口需要有异常恢复状态和状态上报机制,格雷码电路防止被综合电路优化掉。 a)自行设计的格雷码FIFO(一般用于连续数据流跨时钟域)用Synplify综合时,...
asus119_412419641 2013-06-30 23:28
Cadence Allegro导网表的错误问题解决
  在Allegro导入网表的时候,有时候会出现这样一个错误问题,如下:   ------ Oversights/Warnings/Errors ------   #1   E...
asus119_412419641 2013-04-24 17:22
[博客大赛]关于OrCAD Capture CIS导网表出现问题的解决方法
在Capture CIS中完成原理图编辑修改后,导出网表时,出现了以下错误:   #192 ERROR(ORCAP-36004): Conflicting values of part n...
EE直播间
更多
我要评论
3
9
关闭 站长推荐上一条 /3 下一条