1、2009年EDA考试程序汇总(终极版) 信息工程学院2009年EDA考试 程序汇总(终极版) 制作人:柳阳 2009年6月23日 说明 1. 所有程序均来自上课及实验,无压题之意; 2. 所有程序均通过编译,波形仿真请自己完成; 3. 文字部分由于时间较紧,可能会有错误,望见谅; 4. 特别感谢王敏聪同学在程序方面给予的指导和帮助。 1.组合逻辑电路: (1)半加器与全加器(原理图以及VHDL语言) A.半加器 输入:2个二进制1位 输出:和输出S,进位Co 真值表
2、 A B S Co 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY HALFADD IS PORT( A,B: IN STD_LOGIC; S,Co: OUT STD_LOGIC ); END HALFADD; ARCHITECTURE RTL OF HALFADD IS BEGIN S <= A XOR B; Co <= A AND B; END RTL; 原理图: B.全加器 输入:2个二
3、进制1位,一个进位输入Ci 输出:和输出S,进位Co 真值表: A B Ci S Co 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY FULLADD IS PORT( A,B,Ci: IN STD_LOGIC; S,Co: OUT STD_LOGIC ); END
4、FULLADD; ARCHITECTURE RTL OF FULLADD IS COMPONENT HALFADD PORT(A: IN STD_LOGIC; B: IN STD_LOGIC; S: OUT STD_LOGIC; Co: OUT STD_LOGIC); END COMPONENT; SIGNAL T1,T2,T3: STD_LOGIC; BEGIN U1: HALFADD PORT MAP( A=>A,B=>B,S=>T1,CO=>T2); U2: HALFADD PORT MAP( A=>CI,B=>T1,S=>S,CO=>T3); Co <= T2
5、OR T3; END RTL; 原理图: A.分层开发 B.单层开发(课本P114) (2)全减器(原理图以及VHDL语言) 输入:2个二进制1位,一个借位输入Ci 输出:差输出S,借位Co 真值表: A B Ci S Co 0 0 0 0 0 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 1 1 0 0 0 1 1 1 1 1 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
6、 ENTITY FULL_SUBB IS PORT( A,B,CI:IN STD_LOGIC; S,CO:OUT STD_LOGIC ); END FULL_SUBB; ARCHITECTURE RTL OF FULL_SUBB IS SIGNAL NA:STD_LOGIC; BEGIN NA<=NOT A; S<=A XOR B XOR CI; CO<=(NA AND CI) OR (B AND CI) OR (NA AND B); END RTL; 原理图: (3) 译码器 (以下程序均非译码器程序,具体译码器程序可参照数字钟4-7译码
7、器程序) A.2-4译码器 输入端口:2个二进制输入端a、b 输入端口:1个使能控制信号en 输出端口:4个译码输出端y0 — y3 真值表: 输入 输出 EN A B Y3 Y2 Y1 Y0 0 × × Z Z Z Z 1 0 0 0 0 0 1 1 0 1 0 0 1 0 1 1 0 0 1 0 0 1 1 1 1 0 0 0 程序:(程序为四选一选择器,真值表及原理图为2-4译码器) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY
8、MUX4 IS PORT( Y0,Y1,Y2,Y3,A,B,EN:IN STD_LOGIC; Q:OUT STD_LOGIC ); END MUX4; ARCHITECTURE RTL OF MUX4 IS SIGNAL SEL:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN SEL<=A & B; PROCESS(SEL) BEGIN IF EN='0' THEN Q<='Z'; ELSE IF SEL="00" THEN Q<=Y0; ELSIF SEL="01" THEN Q<=Y1; EL
9、SIF SEL="10" THEN Q<=Y2; ELSIF SEL="11" THEN Q<=Y3; END IF; END IF; END PROCESS; END RTL; 原理图: B.3-8译码器(程序为八选一选择器,真值表及原理图为3-8译码器) 输入端口:3个二进制输入端T0,T1,T2 输入端口:1个使能控制信号EN 输出端口:4个译码输出端A0 — A7 真值表: 输入 输出 EN T2 T1 T0 A7 A6 A5 A4 A3 A2 A1 A0 0 × × × Z Z Z Z Z Z
10、 Z Z 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 程序:
11、LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MUX8 IS PORT( A0,A1,A2,A3,A4,A5,A6,A7:IN STD_LOGIC_VECTOR(7 DOWNTO 0); T0,T1,T2,EN:IN STD_LOGIC; Y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END MUX8; ARCHITECTURE RTL OF MUX8 IS SIGNAL SEL:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN SEL<=T2&T1&T0; PROC
12、ESS(SEL) BEGIN IF EN='0' THEN Y <= "ZZZZZZZZ"; ELSE IF SEL="000" THEN Y<=A0; ELSIF SEL="001" THEN Y<=A1; ELSIF SEL="010" THEN Y<=A2; ELSIF SEL="011" THEN Y<=A3; ELSIF SEL="100" THEN Y<=A4; ELSIF SEL="101" THEN Y<=A5; ELSIF SEL="110" THEN Y<=A6; ELSIF SEL="111" THEN Y<
13、A7; END IF; END IF; END PROCESS; END RTL; (4)编码器 A.优先编码器(8-3) 真值表: 输入 输出 S D0 D1 D2 D3 D4 D5 D6 D7 Q2 Q1 Q0 Gs E0 1 × × × × × × × × 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 × × × × × × × 0 0 0 0 0 1 0 × × × × × × 0 1 0 0
14、 1 0 1 0 × × × × × 0 1 1 0 1 0 0 1 0 × × × × 0 1 1 1 0 1 1 0 1 0 × × × 0 1 1 1 1 1 0 0 0 1 0 × × 0 1 1 1 1 1 1 0 1 0 1 0 × 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 程序:(真值表为优先编码器真值表,程序为普通编码器程序) LIBRARY
15、IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY i_encoder IS PORT( D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); S: IN STD_LOGIC; Gs,E0: OUT STD_LOGIC; Q: OUT STD_LOGIC_VECTOR(2 DOWNTO 0) ); END i_encoder ; ARCHITECTURE RTL OF i_encoder IS BEGIN PROCESS(S,D) BEGIN IF (
16、S='1') THEN q <= "111";Gs <= '1';E0<= '1'; ELSIF (S='0') THEN IF ( d = "11111111") THEN q <= "111";Gs <= '1';E0 <= '0'; ELSIF ( d(7) = '0') THEN q <= "000";Gs <= '0';E0 <= '1'; ELSIF ( d(6) = '0') THEN q <= "001";Gs <= '0';E0 <= '1'; ELSIF ( d(5) = '0') THEN q <= "010";Gs <= '0
17、';E0 <= '1'; ELSIF ( d(4) = '0') THEN q <= "011";Gs <= '0';E0 <= '1'; ELSIF ( d(3) = '0') THEN q <= "100";Gs <= '0';E0 <= '1'; ELSIF ( d(2) = '0') THEN q <= "101";Gs <= '0';E0 <= '1'; ELSIF ( d(1) = '0') THEN q <= "110";Gs <= '0';e0 <= '1'; ELSIF ( d(1) = '0') THEN q <= "111
18、";Gs <= '0';e0 <= '1'; END IF; END IF; END PROCESS; END RTL; B.普通编码器(4-2) 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ENCODE42 IS PORT( EN:IN STD_LOGIC; I:IN STD_LOGIC_VECTOR(3 DOWNTO 0); A,B:OUT STD_LOGIC); END ENCODE42; ARCHITECTURE RTL OF ENCODE42 IS BEGIN PROCESS(EN,
19、I) BEGIN IF(EN='0') THEN A<='0';B<='0'; ELSE IF(I(0)='0') THEN A<='0';B<='0'; ELSIF(I(1)='0') THEN A<='0';B<='1'; ELSIF(I(2)='0') THEN A<='1';B<='0'; ELSIF(I(3)='0') THEN A<='1';B<='1'; END IF; END IF; END PROCESS; END RTL; (5)四选一选择器 输入端:4路输入,2bit选择信号, 输出端:1路输出 程序:
20、 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CHOSE IS PORT( S:IN STD_LOGIC_VECTOR(1 DOWNTO 0); A,B,C,D: IN STD_LOGIC; Q: OUT STD_LOGIC ); END CHOSE; ARCHITECTURE RTL OF CHOSE IS BEGIN PROCESS(S,A,B,C,D) BEGIN CASE S IS WHEN "00" => Q <= A;
21、WHEN "01" => Q <= B; WHEN "10" => Q <= C; WHEN "11" => Q <= D; WHEN OTHERS => NULL; END CASE; END PROCESS; END RTL; (6)三态门(原理图以及VHDL语言) 数据输入din,控制输入en 数据输出dout 真值表: 数据输入 控制输入 数据输出 X 0 Z 0 1 0 1 1 1 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARI
22、TH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY TAI3 IS PORT( DIN,EN: IN STD_LOGIC; DOUT: OUT STD_LOGIC ); END TAI3; ARCHITECTURE RTL OF TAI3 IS BEGIN PROCESS(DIN,EN) BEGIN IF EN='1' THEN DOUT <= DIN; ELSE DOUT <= 'Z'; END IF; END PROCESS; END RTL; 状态图: (7)单向总线缓冲器 输入:A_
23、IN,使能端EN 输出:A_OUT 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY TRI_GATE8 IS PORT( A_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); EN:IN STD_LOGIC; A_OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END TRI_GATE8 ; ARCHITECTURE RTL OF TRI_GATE8 IS BEGIN PROCESS(EN,A_IN) BEGIN IF EN='0' THEN
24、 A_OUT <= "ZZZZZZZZ"; ELSE A_OUT <= A_IN; END IF; END PROCESS; END RTL; (8)双向总线缓冲器 双向端口:A B(inout) 使能端EN, 方向控制端DR 真值表: EN DR 功能 1 0 A<=B 1 1 B<=A 0 X 高阻 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY BITRIBUS IS PORT( DR,EN:IN STD_LOGIC; A,B:INOUT STD_LOGIC_VE
25、CTOR(7 DOWNTO 0)); END BITRIBUS; ARCHITECTURE RTL OF BITRIBUS IS BEGIN PROCESS(EN,DR,A,B) BEGIN IF(EN='0') THEN A<="ZZZZZZZZ"; ELSE IF(DR='0') THEN A<=B; ELSE A<="ZZZZZZZZ"; END IF; END IF; END PROCESS; PROCESS(EN,DR,A,B) BEGIN IF(EN='0') THEN B<="ZZZZZZZZ"; ELSE IF(DR='1')
26、THEN B<=A; ELSE B<="ZZZZZZZZ"; END IF; END IF; END PROCESS; END RTL; 原理图: (9)三人表决器 真值表: 输入 输出 A B C Q 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 原理图: (10)火灾报警系统,烟感、温感、紫外光感,两种以上探测器发出信号,系统产生报警(与(9)类似) 2.时序逻辑电路: (1)D触发
27、器 真值表: 数据输入D 时钟输入CLK 数据输出Q × 0 不变 × 1 不变 0 ↑ 0 1 ↑ 1 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DFF IS PORT( CLK,D:IN STD_LOGIC; Q:OUT STD_LOGIC ); END DFF; ARCHITECTURE RTL OF DFF IS BEGI
28、N PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN Q <= D; END IF; END PROCESS; END RTL; (2)非同步复位的D锁存器 真值表: 数据D 时钟CLK 复位CLR 输出Q × × 0 0 × 0/1 1 不变 0 ↑ 1 0 1 ↑ 1 0 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UN
29、SIGNED.ALL; ENTITY DFF IS PORT( CLK,CLR,D:IN STD_LOGIC; Q:OUT STD_LOGIC ); END DFF; ARCHITECTURE RTL OF DFF IS BEGIN PROCESS(CLK,CLR) BEGIN IF CLR='0' THEN Q<='0'; ELSE IF CLK'EVENT AND CLK='1' THEN Q <= D; END IF; END IF; END PROCESS; END RTL; (3)同步复位的D锁存器
30、 真值表: 数据D 时钟CLK 复位CLR 输出Q × ↑ 0 0 × 0/1 1 不变 0 ↑ 1 0 1 ↑ 1 0 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DFF IS PORT( CLK,CLR,D:IN STD_LOGIC; Q:OUT STD_LOGIC ); END DFF; ARCHITECTURE RTL
31、 OF DFF IS BEGIN PROCESS(CLK,CLR) BEGIN IF CLK'EVENT AND CLK='1' THEN IF CLR='0' THEN Q<='0'; ELSE Q <= D; END IF; END IF; END PROCESS; END RTL; (4)异步复位/同步置位的D触发器 真值表: 输入 输出 数据D 时钟CLK 置位PSET 复位CLR Q × × × 0 0 × ↑ 0 1 1 × 0/1 1 1 不变 0 ↑ 1 1 0 1
32、 ↑ 1 1 1 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF_CLR IS PORT( CLK,CLR,PSET,D:IN STD_LOGIC; Q:OUT STD_LOGIC); END DFF_CLR; ARCHITECTURE RTL OF DFF_CLR IS BEGIN PROCESS(CLK,CLR) BEGIN IF(CLR='0') THEN Q<='0'; ELSIF(CLK'EVENT AND CLK='1') THEN IF(PSET='0') THEN Q<='
33、1'; ELSE Q<=D; END IF; END IF; END PROCESS; END RTL; (5)JK触发器 真值表: 数据输入D J K 时钟输入CLK 数据输出Q 0 0 0 ↑ 0 1 0 0 ↑ 1 0/1 0 1 ↑ 0 0/1 1 0 ↑ 1 0 1 1 ↑ 1 1 1 1 ↑ 0 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UN
34、SIGNED.ALL; ENTITY DFF IS PORT( CLK,J,K,D:IN STD_LOGIC; Q:OUT STD_LOGIC ); END DFF; ARCHITECTURE RTL OF DFF IS BEGIN PROCESS(CLK,J,K) BEGIN IF CLK'EVENT AND CLK='1' THEN IF J='0' AND K='0' THEN Q <= D; ELSIF J='0' AND K='1' THEN Q <= '0'; ELSIF J='1' AND K='0' THEN Q
35、<= '1'; ELSIF J='1' AND K='1' THEN Q <= NOT D; END IF; END IF; END PROCESS; END RTL; (6)串行输入、串行输出寄存器 输入端:串行数据,时钟 输出端:数据 8位串行移位寄存器:在时钟信号的作用下,前级的数据向后级移动 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CRCC I
36、S PORT( CLK,D:IN STD_LOGIC; Q:OUT STD_LOGIC ); END CRCC; ARCHITECTURE RTL OF CRCC IS SIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN TEMP(7)<=D; TEMP(6 DOWNTO 0)<=TEMP(7 DOWNTO 1); Q<=TEMP(0); END IF; END PROCESS; END RTL;
37、 (7)双向移位寄存器 真值表: 输入 输出 CLR DIR LOAD CLK Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 0 × × × 0 0 0 0 0 0 0 0 1 × 0 ↑ D7 D6 D5 D4 D3 D2 D1 D0 1 0 1 ↑ 左移一位 SL 1 1 1 ↑ SH 右移一位 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LO
38、GIC_UNSIGNED.ALL; ENTITY ly1 IS PORT( CLR,CLK,LOAD,DIR:IN STD_LOGIC; SR,SL:IN STD_LOGIC; D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END ly1; ARCHITECTURE RTL OF ly1 IS SIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN PROCESS(CLK,CLR) BEGIN
39、IF CLR='0' THEN TEMP<="00000000"; ELSIF CLK'EVENT AND CLK='1' THEN IF LOAD='0' THEN TEMP<=D; ELSE IF DIR='0' THEN --LEFT SHIFT FOR I IN 0 TO 6 LOOP TEMP(I+1)<=TEMP(I); END LOOP; TEMP(0)<=SL; ELSE --RIGHT SHIFT FOR I IN 0 TO 6 LOOP TEMP(I)<=TE
40、MP(I+1); END LOOP; TEMP(7)<=SR; END IF; END IF; END IF; END PROCESS; Q<=TEMP; END RTL; (8)循环移位寄存器 真值表: 输入 输出 S2 S1 S0 LOAD CLK Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 × × × 0 ↑ D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 1 ↑ 不循环,保持原值 0 0 1 1 ↑ 循环左移1位 0 1 0 1
41、 ↑ 循环左移2位 0 1 1 1 ↑ 循环左移3位 1 0 0 1 ↑ 循环左移4位 1 0 1 1 ↑ 循环左移5位 1 1 0 1 ↑ 循环左移6位 1 1 1 1 ↑ 循环左移7位 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ly2 IS PORT( CLK,LOAD:IN STD_LOGIC; SNUM
42、IN STD_LOGIC_VECTOR(2 DOWNTO 0); DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END ly2; ARCHITECTURE RTL OF ly2 IS SIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN PROCESS(CLK,SNUM) BEGIN IF(LOAD='0') THEN TEMP<=DIN; ELSIF( CLK'EVENT AND CLK='1') T
43、HEN CASE SNUM IS WHEN "000"=>DOUT <= TEMP; WHEN "001"=>DOUT(7 DOWNTO 1) <= TEMP(6 DOWNTO 0); DOUT(0)<=TEMP(7); WHEN "010"=>DOUT(7 DOWNTO 2) <= TEMP(5 DOWNTO 0); DOUT(1 DOWNTO 0)<=TEMP(7 DOWNTO 6); WHEN "011"=>DOUT(7 DOWNTO 3) <= TEMP(4 DOWNTO 0); DOUT(2 DOWNTO 0)<=TEMP(7 DOWNTO 5); WHEN "10
44、0"=>DOUT(7 DOWNTO 4) <= TEMP(3 DOWNTO 0); DOUT(3 DOWNTO 0)<=TEMP(7 DOWNTO 4); WHEN "101"=>DOUT(7 DOWNTO 5) <= TEMP(2 DOWNTO 0); DOUT(4 DOWNTO 0)<=TEMP(7 DOWNTO 3); WHEN "110"=>DOUT(7 DOWNTO 6) <= TEMP(1 DOWNTO 0); DOUT(5 DOWNTO 0)<=TEMP(7 DOWNTO 2); WHEN "111"=>DOUT(7) <= TEMP( 0); DOUT(6 DOW
45、NTO 0)<=TEMP(7 DOWNTO 1); WHEN OTHERS => DOUT<=TEMP; END CASE; END IF; END PROCESS; END RTL; (9)带允许端的十二进制计数器 真值表: 输入 输出 CLR EN CLK Qd Qc Qb Qa 1 × × 0 0 0 0 0 0 × 不变 0 1 ↑ 计数值加1 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.
46、STD_LOGIC_UNSIGNED.ALL; ENTITY COUNT12 IS PORT( CLR,CLK,EN:IN STD_LOGIC; QD,QC,QB,QA:OUT STD_LOGIC ); END COUNT12 ; ARCHITECTURE RTL OF COUNT12 IS SIGNAL CNT: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN QD<=CNT(3);QC<=CNT(2);QB<=CNT(1);QA<=CNT(0); PROCESS(CLK) BEGIN IF CLR='1' THEN
47、 CNT<="0000"; ELSIF CLK'EVENT AND CLK='1' THEN IF EN='1' THEN IF CNT="1011" THEN CNT<="0000"; ELSE CNT<=CNT+'1'; END IF; END IF; END IF; END PROCESS; END RTL; (10)6位二进制可逆计数器 真值表: 输入 输出 CLR UPDN CLK Qf Qe Qd Qc Qb Qa 1 × × 0 0 0 0 0 0 0 1 ↑
48、计数加1 0 0 ↑ 计数减1 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ly3 IS PORT( CLR,CLK,UPDN:IN STD_LOGIC; QF,QE,QD,QC,QB,QA:OUT STD_LOGIC ); END ly3; ARCHITECTURE RTL OF ly3 IS SIGNAL CNT: STD_LOGIC_VECTOR
49、5 DOWNTO 0); BEGIN QF<=CNT(5);QE<=CNT(4);QD<=CNT(3); QC<=CNT(2);QB<=CNT(1);QA<=CNT(0); PROCESS(CLK) BEGIN IF CLR='1' THEN CNT<="000000"; ELSIF CLK'EVENT AND CLK='1' THEN IF UPDN='1' THEN CNT<=CNT+'1'; ELSE CNT<=CNT-'1'; END IF; END IF; END PROCESS; END RTL; (11)模十二分频器 程序: LIBRARY
50、 IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ly4 IS PORT( CLK:IN STD_LOGIC; Y:OUT STD_LOGIC ); END ly4; ARCHITECTURE behav OF ly4 IS SIGNAL Q:INTEGER RANGE 0 TO 11; SIGNAL f:STD_LOGIC; BEGIN PROCESS(clk) BEGIN






