统计输入的8位位矢中含’1’ 个数的程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNTC IS
PORT (DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ;
CNTH : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END CNTC;
ARCHITECTURE BHV OF CNTC IS
BEGIN
PROCESS(DIN)
VARIABLE Q : STD_LOGIC_VECTOR(3 DOWNTO 0) ;--信号赋值用 "<=",变量的赋值用 ":="
BEGIN
Q := "0000";
FOR n IN 0 TO 7 LOOP --n是LOOP的循环变量
IF (DIN(n)='1') THEN Q:=Q+1;
END IF;
END LOOP;
CNTH <= Q;
END PROCESS ;
END BHV;
注意:
1、信号赋值用 <=
,变量的赋值用 :=
;
2、变量VARIABLE 和 信号SIGNAL一样,都属于数据对象
;
3、若是定义a为变量,对其赋值可以写a:='1'
。
与信号不同,变量的功能主要用于数据的暂存,而且只能在进程中定义变量,所以
变量无法将数据直接传递出进程。
需要借助语句CNTH<=Q
,可以帮助变量Q将数据传出去。
4、顺序语句必须放在PROCESS中;
5、变量的赋值会立刻发生,而信号不行,需要传输;
6、除了变量,所有的赋值都是在END PROCESS
之后进行的。