在用Quartus II与ModelSim分别对一个简单的分频程序进行仿真时发现了一个关于设置初值得问题
Intrduction
使用环境: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下也要把这句加上,这很大一部分涉及到编程习惯问题,所以我们在编写程序时一定要养成良好的变成习惯,做到周密的考虑!