在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4122|回复: 12

[求助] case 语句仿真问题

[复制链接]
发表于 2010-11-26 20:59:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
程序大概这样的
   case(cnt)
0:  Q=4'b0000;
1:   Q= 4'b0010;
。。。

仿真出来的结果是:当计数到1的时候才出现 Q=4'b0000;计数到2的时候出现Q= 4'b0010;
为什么仿真出来的结果会慢一拍呢?
发表于 2010-11-26 21:50:22 | 显示全部楼层
在赋值的同时,计数器也会继续计数呀
发表于 2010-11-26 23:57:59 | 显示全部楼层
同意楼上
发表于 2010-11-27 11:03:32 | 显示全部楼层
你要是计数,就应该是时序电路,你最好用非阻塞赋值,<=,你修改一下,把结果发上来!
发表于 2010-11-27 14:04:53 | 显示全部楼层
你的cnt计数部分和case语句部分时序上可能没没弄好,好好检查一些代码
发表于 2010-11-27 18:04:57 | 显示全部楼层
想来,是否这里Q的赋值应该是在时序逻辑里面做的吧。

always @(posedge clock) begin
case(cnt)
0: Q= xxxxxx;
1: Q= xxxxxx;

如果是这样的,那么结果很自然解释了,因为这个case在clock上升沿采样cnt的时候,cnt还是上一个时钟周期的值,所以Q感觉会反应慢一拍,如果把这个case改成组合逻辑就没有问题了
 楼主| 发表于 2010-11-27 19:42:06 | 显示全部楼层
我的程序只能用时序逻辑,而我改成非阻塞仿真结果也一样
请问还有没有其他办法,计数和赋值一一对应?这种现象对实际的电路将会有多大?
发表于 2010-11-28 21:26:30 | 显示全部楼层
只能用时序,那你换一种写法啊
always @(cnt) begin
  case(cnt)
  0: QTmp = 4'bxxxx;
  1: Qtmp = 4'bxxxx;

always @(clock) begin
   Q <= QTmp;
end

这样不就解了。
发表于 2010-11-30 13:04:38 | 显示全部楼层
我猜你肯定是这么写的:
...
always@(clock)
begin
     ...
     cnt <= cnt+1;
     ...
end

always@(clock)
begin
    ...
    case(cnt)
       0:  Q = 4'bxxxx;
       1:  Q = 4'byyyy;
     ...
end

这种写法就会出现你说的所谓慢一拍的问题。
发表于 2010-11-30 13:08:35 | 显示全部楼层
只要把对Q赋值的地方不用时钟沿打就对了

always@(cnt)
begin
   case(cnt)
      0: Q <= 4'bxxxx;
      1: Q <= 4'byyyy;
      ...
    endcase
end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-26 04:24 , Processed in 0.031448 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表