【小白求助】有关十进制加法计数器的问题~

2019-03-25 08:52发布

先上程序~

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT10 IS
     PORT(CLK,RST,EN:IN STD_LOGIC;
                             CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
                          COUT:OUT STD_LOGIC);
END CNT10;
ARCHITECTURE behav OF CNT10 IS
BEGIN
     PROCESS(CLK,RST,EN)
          VARIABLE CQI :STD_LOGIC_VECTOR(3 DOWNTO 0);
     BEGIN
          IF RST='1' THEN
                  CQI:=(OTHERS=>'0');
          ELSIF CLK'EVENT AND CLK='1' THEN
                  IF EN='1' THEN
                         IF CQI<9 THEN
                                CQI:=CQI+1;
                        ELSE
                                CQI:=(OTHERS=>'0');
                        END IF;
                  END IF;
           END IF;
           IF CQI=9 THEN
                  COUT<='1';
           ELSE
                  COUT<='0';
          END IF;
          CQ<=CQI;
     END PROCESS;
END behav;

我们这学期正在学EDA,这是课本上的一段程序,我仿真过了,都没有问题~

我不懂的地方:
1、              IF CQI<9 THEN
                                CQI:=CQI+1;
                    ELSE
                                CQI:=(OTHERS=>'0');
                    END IF;
执行这个语句时,不是应该当检测到CQI=9时,就把CQI归零了吗?那么为什么下面还有一个
           IF CQI=9 THEN
                  COUT<='1';
           ELSE
                  COUT<='0';
          END IF;

CQI怎么还会等于9呢?

2、为什么比较时,可以写CQI<9,而赋值时就不能直接写CQI:=9呢?

求各路大神指教~~~先谢谢啦~~~ 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
eeleader
1楼-- · 2019-03-25 12:51
< / CQI 是变量,所以只能:=

需要理解一个PROCESS 信号非阻塞赋值顺序执行含义!
blue_bm
2楼-- · 2019-03-25 16:12
嗯,可是, CQI 的定义是     VARIABLE CQI :STD_LOGIC_VECTOR(3 DOWNTO 0); 是一个4位二进制的变量呀,为什么可以让CQI直接跟十进制数9做比较,而不能直接用十进制整数给它赋值呢?~~~

另外,你说的第二点,我不太懂...是说CQI<9和CQI=9的判断是并行的吗?可不可以讲得稍微详细点呐?
abcd1369
3楼-- · 2019-03-25 21:52
 精彩回答 2  元偷偷看……
blue_bm
4楼-- · 2019-03-26 02:35
我晕头转向了...我查到的资料里说PROCESS里面的语句都是顺序执行的,为什么还会有并行执行呢...另外,并行是指每个IF语句之间的并行吗?...我刚刚学,真的很糊涂
abcd1369
5楼-- · 2019-03-26 05:01
书上说的PROCESS里的并行你理解错了吧。
像上面的
if  A  then
end if;
if  B then
end if;
这里面两个if相对来说虽然在一个process里。但是他们也是并行的。 if里面的东西你可以理解为顺序的。 不同的process也是并行的。
blue_bm
6楼-- · 2019-03-26 07:03
嗯,我的理解方式出了问题,还是拿软件语言的思路去理解的...今天查阅了书上相关的内容,大致意思是说,PROCESS里面的语句是顺序执行的,但是完成对信号的赋值是在END PROCESS这个语句时才发生的,各个赋值语句之间的延时非常短,可以看成是并行~  这样理解是对的吗?

一周热门 更多>