打印

请教计数器问题

[复制链接]
1329|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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

1203

帖子

6

粉丝