K康芯科技 EDA技术与VHDL 第7章 VHDL语句
EDA技术与VHDL 第7章 VHDL语句 KX 康芯科技
K康科技 7.1顺序语句 7.1.1赋值语句 信号赋值语句 变量赋值语句 7.1.2F语句 7.1.3CASE语句 选择值[|选择值] 单个普通数值,如6。 数值选择范围,如(2T04),表示取值为2、3或4。 并列数值,如35,表示取值为3或者5。 混合方式,以上三种方式的混合
KX 康芯科技 7.1 顺序语句 7.1.1 赋值语句 信号赋值语句 变量赋值语句 7.1.2 IF语句 7.1.3 CASE语句 选择值 [ |选择值 ] 单个普通数值,如6。 数值选择范围,如(2 TO 4),表示取值为2、3或4。 并列数值,如35,表示取值为3或者5。 混合方式,以上三种方式的混合
K康芯科技 【例7-1】 LIBRARY IEEE; USE IEEE.STD LOGIC 1164.ALL; ENTITY mux41 IS PORT (s4,s3,s2,s1 IN STD LOGIC; z4,z3,z2,z1 OUT STD LOGIC); END mux41; ARCHITECTURE activ OF mux41 IS SIGNAL sel:INTEGER RANGE 0 TO 15; BEGIN PROCESS (sel,s4,s3,s2,s1 BEGIN se1z1,z2z3<='1'; 当se1为2、4、5、6或7时选中 WHEN OTHERS =z4<=1; 当se1为8~15中任一值时选中 END CASE END PROCESS END activ
KX 康芯科技 【例7-1】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux41 IS PORT (s4,s3, s2,s1 : IN STD_LOGIC; z4,z3, z2,z1 : OUT STD_LOGIC); END mux41; ARCHITECTURE activ OF mux41 IS SIGNAL sel : INTEGER RANGE 0 TO 15; BEGIN PROCESS (sel ,s4,s3,s2,s1 ) BEGIN sel z1 z2 z3 z4<='1' ; - 当sel为8~15中任一值时选中 END CASE ; END PROCESS ; END activ ;
K康还科技 7.1顺序语句 7.1.3 CASE语句 【例7-2】 SIGNAL value INTEGER RANGE 0 TO 15; SIGNAL out1 STD LOGIC 。0 CASE value IS -缺少以WN引导的条件句 END CASE; 。· CASE value IS WHEN 0 =out1out1out1<='0'; END CASE:
KX 康芯科技 7.1 顺序语句 7.1.3 CASE语句 【例7-2】 SIGNAL value : INTEGER RANGE 0 TO 15; SIGNAL out1 : STD_LOGIC ; . CASE value IS - 缺少以WHEN引导的条件句 END CASE; . CASE value IS WHEN 0 => out1 out1 out1 out1<= '0'; END CASE;
【例7-3】 LIBRARY IEEE: USE IEEE.STD LOGIC 1164.ALL; USE IEEE.STD LOGIC UNSIGNED.ALL; ENTITY alu IS PORT a,b IN STD LOGIC VECTOR (7 DOWNTO 0); opcode:IN STD LOGIC VECTOR (1 DOWNTO 0); result:OUT STD LOGIC VECTOR (7 DOWNTO 0)); END alu; ARCHITECTURE behave OF alu IS CONSTANT plus STD LOGIC VECTOR (1 DOWNTO 0):=b"00"; CONSTANT minus STD LOGIC VECTOR (1 DOWNTO 0):=b"01"; CONSTANT equal STD LOGIC VECTOR (1 DOWNTO 0):=b"10"; CONSTANT not equal:STD_LOGIC_VECTOR (1 DOWNTO 0):=b"11"; BEGIN PROCESS (opcode,a,b) BEGIN CASE opcode IS EN plus=>result<=a+b;-a、b相加 WHEN minus =result <a -b; -a、b相减 WHEN equal = -a、b相等 IF (a =b)THEN result <x"01"; ELSE result <x"00"; END IF; WHEN not equal = -a、b不相等 IF (a /b)THEN result <x"01"; ELSE result <x"00"; END IF; END CASE; END PROCESS; END behave;
KX 【例7-3】 康芯科技 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY alu IS PORT( a, b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); opcode: IN STD_LOGIC_VECTOR (1 DOWNTO 0); result: OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END alu; ARCHITECTURE behave OF alu IS CONSTANT plus : STD_LOGIC_VECTOR (1 DOWNTO 0) := b"00"; CONSTANT minus : STD_LOGIC_VECTOR (1 DOWNTO 0) := b"01"; CONSTANT equal : STD_LOGIC_VECTOR (1 DOWNTO 0) := b"10"; CONSTANT not_equal: STD_LOGIC_VECTOR (1 DOWNTO 0) := b"11"; BEGIN PROCESS (opcode,a,b) BEGIN CASE opcode IS WHEN plus => result result - a、b相等 IF (a = b) THEN result - a、b不相等 IF (a /= b) THEN result <= x"01"; ELSE result <= x"00"; END IF; END CASE; END PROCESS; END behave;
K康还科技 7.1顺序语句 7.1.4L00P语句 (1)单个工O0P语句,其语法格式如下: [LOOP标号:]LOOP 顺序语句 END LOOP[LOOP标号]: L2:LOOP a:=a+l; EXIT L2 WHEN a >10; -当a大于10时跳出循环 END LOOPL2;
KX 康芯科技 7.1 顺序语句 7.1.4 LOOP语句 (1) 单个LOOP语句,其语法格式如下: [ LOOP标号:] LOOP 顺序语句 END LOOP [ LOOP标号 ]; . L2 : LOOP a := a+1; EXIT L2 WHEN a >10 ; - 当a大于10时跳出循环 END LOOPL2;
K能苏科技 7.1顺序语句 7.1.4L00P语句 (2)FOR LOOP语句,语法格式如下: [LOoP标号:]EOR循环变量,IN循环次数范围 LOOP 顺序语句 END LOOP[LOOP标号];
KX 康芯科技 7.1 顺序语句 7.1.4 LOOP语句 (2) FOR_LOOP语句,语法格式如下: [LOOP标号:] FOR 循环变量,IN 循环次数范围 LOOP 顺序语句 END LOOP [LOOP标号];
K康还科技 7.1顺序语句 7.1.4L00P语句 【例7-4】 LIBRARY IEEE; USE IEEE.STD LOGIC 1164.ALL; ENTITY p check IS PORT a:IN STD LOGIC VECTOR (7 DOWNTO 0); y:OUT STD LOGIC ) END p check; ARCHITECTURE opt OF p check IS SIGNAL tmp STD LOGIC BEGIN PROCESS(a) BEGIN tmp<='0'; FOR n IN 0 TO 7 LOOP tmp <tmp XoR a(n); END LOOP y <=tmp; END PROCESS; END opt;
KX 康芯科技 7.1 顺序语句 7.1.4 LOOP语句 【例7-4】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY p_check IS PORT ( a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); y : OUT STD_LOGIC ); END p_check; ARCHITECTURE opt OF p_check IS SIGNAL tmp :STD_LOGIC ; BEGIN PROCESS(a) BEGIN tmp <='0'; FOR n IN 0 TO 7 LOOP tmp <= tmp XOR a(n); END LOOP ; y <= tmp; END PROCESS; END opt;
K能苏科技 7.1顺序语句 7.1.4L00P语句 【例7-5】 SIGNAL a,b,c STD LOGIC VECTOR (1 TO 3); FOR n IN 1 To 3 LOOP a(n)<=b(n)AND c(n); END LOOP; 此段程序等效于顺序执行以下三个信号赋值操作: a(1)<=b(1)ANDc(1): a(2)<=b(2)ANDc(2); a(3)<=b(3)ANDc(3);
KX 康芯科技 7.1 顺序语句 7.1.4 LOOP语句 【例7-5】 SIGNAL a, b, c : STD_LOGIC_VECTOR (1 TO 3); . FOR n IN 1 To 3 LOOP a(n) <= b(n) AND c(n); END LOOP; 此段程序等效于顺序执行以下三个信号赋值操作: a(1)<=b(1) AND c(1); a(2)<=b(2) AND c(2); a(3)<=b(3) AND c(3);
K康还科技 7.1顺序语句 7.1.5NEXT语句 NEXT; 一第一种语句格式 NEXT LOOP标号; 一第二种语句格式 NEXT LOOP标号WHEN条件表达式; -第三种语句格式 【例7-6】 。 L1 FOR cnt value IN 1 TO 8 LOOP s1 a(cnt value):=0'; NEXT WHEN (b=c); s2 a(cnt value 8 )0'; END LOOP L1;
KX 康芯科技 7.1 顺序语句 7.1.5 NEXT语句 NEXT; - 第一种语句格式 NEXT LOOP标号; - 第二种语句格式 NEXT LOOP标号WHEN 条件表达式; - 第三种语句格式 【例7-6】 . L1 : FOR cnt_value IN 1 TO 8 LOOP s1 : a(cnt_value) := '0'; NEXT WHEN (b=c); s2 : a(cnt_value + 8 ):= '0'; END LOOP L1;