先上程序~
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呢?
求各路大神指教~~~先谢谢啦~~~
此帖出自
小平头技术问答
需要理解一个PROCESS 信号非阻塞赋值顺序执行含义!
另外,你说的第二点,我不太懂...是说CQI<9和CQI=9的判断是并行的吗?可不可以讲得稍微详细点呐?
像上面的
if A then
end if;
if B then
end if;
这里面两个if相对来说虽然在一个process里。但是他们也是并行的。 if里面的东西你可以理解为顺序的。 不同的process也是并行的。
一周热门 更多>