利用ModelSim进行时序仿真(门级仿真),可以比较真实地反映出器件的延时情况,不过它也需要相关器件atom库的支持。
下面就用分频器实例简要说明一下:
1、在QuartusII中新建一个div工程。注意EDA Simulator的设置,可以新建工程时设置也可以后续再设置,如图:
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测试文件,然后编译,完了直接运行仿真即可,得到结果如下:
可以看到输入、输出是没有延时的,只进行了功能仿真验证。
4、进行时序仿真,这时候就需要相关预编译库和延时文件的加入了。
a)将之前的div.v文件Remove,并添加div.vo文件,(因为div.vo就是div.v的输出文件,所以直接用QuartusII编译输出的div.vo就行了),然后编译div.vo和div_tb.v。
b)开始仿真设置。
首先,添加预编译的器件库,本例中用的是cycloneii_atoms,找到它所在位置并添加进来(具体这个库的编译之前已经有说过,这里就不多说了),完成后如图所示:
然后,添加SDF延时文件,也就是刚刚生成的div.sdo文件,点击Add后出现如下窗口:
首先加入SDF文件,另外还有一个选项就是Apply to Region,这里输入u_div,这个选项主要是指明时序仿真的实体名,即Testbench中实例化的div名(u_div),完了OK。
添加后的结果如下:
c)完成上述相关设置后,即可开始仿真了。点击div_tb顶层实体开始仿真。
仿真完成后的结果放大后如下:
与之前的功能仿真结果相比,可以明显看到输入输出具有了一定的延时,经测量是6063ps,大约6ns。
我们的器件选择是EP2C25F672C6,也就是它的速度等级是C6,即最小延时可以达到6ns,因此上面的时序仿真结果与此也是相符合的。
上面对ModelSim的时序仿真做了简要的说明,其实还可以让仿真更加便捷,比如让时序仿真(门级)在QuartusII编译完成后自动运行,这些待后续再补充。