打印

并行语句和顺序语句的问题

[复制链接]
2372|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sioca|  楼主 | 2009-3-3 11:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是个10进制计数器的简单例子
书上写PROCESS里的语句是顺序执行的,并且下面程序中的CQI是变量而不是信号,关于CQI的值应该是顺序实时的才对,08行中,如果CQI = 9,则CQI= 0,这时应该产生进位信号,那么为什么程序中第12行产生进位信号的时候判断条件是IF CQI = 9 而不是 CQI = 0 呢?难道变量也要等下一个时钟周期才能完成赋值?自己想不通,烦请释疑

01  PROCESS(CLK,RST,EN)
02    VARIABLE CQI :STD_LOGIC_VECTOR(3 DOWNTO 0);
03  BEGIN
04    IF RST = '1' THEN CQI := (OTHERS=>'0');
05    ELSIF CLK'EVENT AND CLK = '1' THEN
06      IF EN = '1' THEN
07        IF CQI < 9 THEN CQI := CQI + 1;
08          ELSE CQI := (OTHERS=>'0');
09        END IF;
10      END IF;
11    END IF;
12    IF CQI = 9 THEN COUT <= '1';
13      ELSE COUT <= '0';
14    END IF;
15    CQ <= CQI;
16  END PROCESS;

相关帖子

沙发
zxypds| | 2009-3-3 17:46 | 只看该作者

看不懂

使用特权

评论回复
板凳
McuPlayer| | 2009-3-4 16:28 | 只看该作者

咋就这么舍不得用else呢

使用特权

评论回复
地板
liuweixing| | 2009-3-4 22:22 | 只看该作者

这个设计是正确的

这个设计是正确的,如果CQI是信号的,设计应该将一面这句:
12   IF CQI = 9 THEN COUT <= '1';
13      ELSE COUT <= '0';
14    END IF;
改为:
12   IF CQI = 8 THEN COUT <= '1';
13      ELSE COUT <= '0';
14    END IF;
这样,计数器的值才会是0到9,并当计数器的值为9的同时,输出进位脉冲。

使用特权

评论回复
5
sioca|  楼主 | 2009-3-5 11:36 | 只看该作者

谢谢

TO3楼: 感觉qinxg解释的很有道理

TO5楼: 计数器为9时输出进位脉冲好像不太合理,因为此时并没有进位

使用特权

评论回复
6
worrior_1| | 2009-3-5 14:58 | 只看该作者

并行语句和顺序语句的问题

不明白5楼为什么说如果CQI定义成信号,然后IF CQI = 8 THEN COUT <= '1';
如果这样改了之后不就成了计数从0-8然后在8不就进位了么?那你CQI要是到9了这个程序要怎么走?上面的判断是CQI<9时候+1啊,
关于定义成variable我感觉是正确的,正如3楼所说的,那时候他已经相当于singnal类型了,如果一开始就定义成singnal,由于singnal是全局变量,可能对下面的仿真产生影响,我感觉是这样

使用特权

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

本版积分规则

122

主题

419

帖子

1

粉丝