使用环境:Quartus II 7.2 SP3 + UP-SOPC2000(Cyclone II EP2C35F627C8)+ ModelSim SE PLUS 6.2b
以前用惯了Quartus II自带的方针工具进行程序的功能和时序仿真,今天尝试了一下用ModelSim进行仿真,待仿真的程序时一个
简单的分频程序,但是就是这样的一个简单的程序分频程序在Quartus II下和ModelSim下的除了截然不同的结果,原因就归结于
一个计数变量cnt的初值问题
在Quartus II环境下仿真
Step1
待仿真的源程序clk_div.v
PS: 注意第17行在Quartus II仿真时我并没有加这句
Step2
在编译成功,生成逻辑网表后进行功能仿真,仿真结下图
以上是在Quartus II进行功能仿真的结果,与预期一致
在ModelSim SE PLUS 6.2b下仿真
待仿真文件与在Q2下的一样
测试激励文件
结果就是在这样的待测试和测试激励文件下,居然iCLK和rst都有波形产生,就是oCLK输出始终为0,最出我还以为时我的程序在
ModelSim下失效了,同样的程序在两个不同的环境下互相开起了玩笑,想了又想,测试一遍又一遍,还是无结果,最后我把整个
文件发给了“基督山伯爵”网友,还是他帮我我问题解决了:
原因出在源文件的第17行
我原来是没有这段代码的,等加上这段代码后,可以进行功能仿真了,仿真结果如下:
DownLoad
modelsim_count4.rar
Conclusion
在ModelSim中出现上述情形有两种情况可供参考:
情形一:如果程序中加入了cnt<=19'd0,但是在编写测试激励文件时没有对rst波形进行描述(或者是rst在激励中始终为'0'或'1'),那么
仿真时也不会出现结果,原因是cnt没有正常初始化
情形二:就是本文提到的没有写cnt<=19'd0这行代码,即使测试激励文件有对rst波形进行描述,复位有效时也因为没有对cnt正常初始
化而正确仿真
在modelsim 中cnt默认值不是0,在Quatus II仿真的时候cnt被默认为0;所以在ModelSim仿真时一定要注意这一点,
即使在Q2下也要把这句加上,这很大一部分涉及到编程习惯问题,所以我们在编写程序时一定要养成良好的变成习惯,做到周密的考虑!
文章评论(0条评论)
登录后参与讨论