集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2380|回复: 7

关于quartus的时序仿真问题!

[复制链接]
chinesebear 发表于 2012-3-8 20:02:35 | 显示全部楼层 |阅读模式
声明本人菜鸟一个!
今天遇到个问题,主要是在此之前也没在意!
如下很简单的一段代码。降频、分频的用的,想实现8分之1的CLK的频率。
然后时序仿真,第一次用,有点跛脚!
  1. module test(CLK,CLK_m);
  2. input CLK;
  3. output reg CLK_m;

  4. reg [4:0] count;

  5. always@(posedge CLK)
  6. if(count==5'd4)
  7. begin
  8. CLK_m<=~CLK_m;
  9. count<=0;
  10. end
  11. else
  12. count<=count+1;
  13. endmodule

复制代码
仿真的时序图我感觉不对!
我明明写的CLK_m是在CLK的第四个上升沿翻转(~CLK_m),可是仿真图却是在第五个下降沿之后翻转。
我试过很多次,调整了参数,反正都是在都是在n+1的下降沿之后翻转。这软件是不是有问题。还是我想的不对!
 楼主| chinesebear 发表于 2012-3-8 20:03:54 | 显示全部楼层
图片传不上来!
zxy19876280 发表于 2012-3-8 20:58:57 | 显示全部楼层
因为你的count在第一次计数到4变为0后再次变为4需要5个时钟沿才行,所以你每次看到的都是在第5个时钟沿翻转的而不是第4个,所以需要把伺候的翻转count值设置为3就可以了。
bear0514 发表于 2012-3-9 17:53:04 | 显示全部楼层
因为是用的非阻塞,当记到4时,要等下一个激励来时时钟才翻转意味着4就变成了5
zombes 发表于 2012-3-11 18:15:39 | 显示全部楼层
参看四楼非阻塞,所以不要看第一次时在哪个时钟,如果用在分频里的话,是8分频就够了
yuxuejun1123 发表于 2012-3-23 09:40:41 | 显示全部楼层
可能两个原因,一个是楼主使用了非阻塞方式,第二就是楼主使用了时序仿真而非功能仿真
wsq19800917 发表于 2012-3-25 15:50:21 | 显示全部楼层
第一个沿时count=1......第四个沿时count=4,当第五个沿来时才能判断count==4,才翻转同时count清零。应该是在第五个上升沿来时才能翻转吧。所以个人认为三楼说的还是有道理的。
至于楼上说使用了时序仿真而非功能仿真,但是时序仿真有问题,肯定是程序有问题,并不是功能仿真没有问题程序就没有问题。
求知鸟 发表于 2012-3-31 10:24:47 | 显示全部楼层
因为在时序逻辑中,楼主用上升沿触发。那么寄存器在上升沿时候采值,在下降沿时候释放。所以分频后始终始终是在下降沿开始翻转。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-6-16 16:56 , Processed in 0.073111 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表