Modelsim仿真之精度设置错误
0 背景
最近在用ISE和Modelsim联合仿真调试程序,可刚一打开modelsim,就弹框 are you want to finish,然后提示错误内容为
Error: (vsim-3601) Iteration limit reached at time 0 ns. 采用ISE自带的Isim仿真工具就可以顺利完成仿真过程。为此,开始思考如何解决该问题。
1 问题分析
错误提示log:“Error: (vsim-3601) Iteration limit reached at time 0 ns. ” 表面意思就是modelsim迭代次数在0ns时,就已到达其上限值,故modelsim工具自动弹框提示are you want to finish? 但是,0ns就到达迭代次数,只有两种可能情况。
第一种情况:迭代次数设置过小。 例如modelsim迭代次数被误设置为0;我查看了仿真工具的迭代次数设置,其值为默认值5000。故这一种情况可以排除。迭代次数设置路径为simulate --> runtime option -->iteration limit,见下图所示。
第二种情况: 提示该错误只是表象,该错误可能由其他错误导致的,即该错误仅仅是前一错误导致的结果而已。于是我又往前查看log,果然发现一个隐蔽的错误提示。如下所示。
# Simulator Resolution Error : Simulator resolution is set to a value greater than 1 ps.
# In order to simulate the MMCME2_ADV, the simulator resolution must be set to 1ps or smaller.
该错误提示意思是仿真工具的精度错误:仿真工具精度值被设定>1ps, 为了仿真MMCME2_ADV这个instance,仿真工具的精度必须设置为1ps,或者更小,因此仿真工具提示错误。
此时我打开MMCME2_ADV.v对应的ISE库文件,其精度范围为·timescale 1ps/1ps,果然与log的错误提示相一致。该MMCME2_ADV这个instance的仿真精度需要1ps。 那么问题来了,仿真工具的精度在哪儿设置呢,为什么提示我的精度设置错误? 如果这个设置找到后,就能定位到该问题出错点了。
2 问题解决
于是我开始在modelsim的菜单栏寻找仿真工具精度在哪儿设置,废了好半天也没有找到。在网上看到有网友采用TCL脚本命令的方式直接设置,我是很羡慕的。(但是脚本命令我基本不懂,囧,因此就放弃了该方法。)modelsim工具没有找到,困惑一段时间后,我开始在ISE仿真界面去寻找,功夫不负有心人,终于被我发现了。见如下截图。
设置路径为:Modelsim Simulator目录下的simulat Behavior Model里设置,设置界面见上图。 果然我的Simulation resolution被我之前设置为1ns,那时候是为了提高仿真速度,但不知道后续会影响某些IP核的仿真,例如PLLE2_ADV这种时钟管理Instance。
于是我将imulation resolution这一栏的1ns修改为1ps,再次进行仿真,结果就得到预期的仿真波形了。此刻非常开心啦。