请教计数器问题

[复制链接]
2085|3
 楼主| 情场探花 发表于 2012-4-28 13:26 | 显示全部楼层 |阅读模式
本帖最后由 情场探花 于 2012-5-2 09:26 编辑

我用VHDL写这样的代码:
SIGNAL cnt1K RANGE 1 TO 9999;

IF (RISING_EDGE(clk)) THEN
    cnt1K <= cnt1K +1;
    IF  (cnt1K > 1000) THEN
        cnt1K <= 1;
    END IF;
END IF;
另外还要代码负责把cnt1K输送到计算机上,此处略去。

我认为:这样cnt1K会在变成1001后立刻变成1,因此计算机只能读到从1到1000的数

然而,实际读到的却是1, 2, ..., 999, 1000, 1001, 1, 2, ....
请问为什么会多出个1001呢?
可木 发表于 2012-4-29 11:08 | 显示全部楼层
当然有1001了,当cnt1K=1000时还要执行一次+1
 楼主| 情场探花 发表于 2012-5-2 09:27 | 显示全部楼层
当然有1001了,当cnt1K=1000时还要执行一次+1
可木 发表于 2012-4-29 11:08

但是我在cnt1K累加到1001之后,马上就会把它变成1,这个动作应该是在下一个时钟周期之前就完成的
GoldSunMonkey 发表于 2012-5-2 23:38 | 显示全部楼层
但是我在cnt1K累加到1001之后,马上就会把它变成1,这个动作应该是在下一个时钟周期之前就完成的
情场探花 发表于 2012-5-2 09:27
因为他是上升沿触发,因此,必须等下个时钟才能变成1.
没有上升沿之前他不能变化。

可以改成cnt1K >= 1000
您需要登录后才可以回帖 登录 | 注册

本版积分规则

473

主题

1261

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部