+++ - , :+~++ +, : - :+ . .y-+ ++ +. 142 y :+.~: .~ / H|nh 4-. 5c dc khc| FL|P FL|P JK. H|nh 4-2. 5c dc khc| FL|P FL|P D cc enob|e. H|nh 4-3. 5c dc khc| thonh gh| 4 b|t. H|nh 4-4. 5c dc khc| thonh gh| 4 b|t, nop scng scng. H|nh 4-5. 5c dc khc| thonh gh| 8 b|t. H|nh 4-6. 5c dc khc| moch dem vcng Jchnscn 8 b|t. H|nh 4-7. 5c dc khc| moch dem vcng 8 b|t. H|nh 4-8. 5c dc khc| moch d|eu kh|en 8 |ed song tot don. H|nh 4-. 5c dc khc| moch dem nh| phon 4 b|t. H|nh 4-0. 5c dc khc| moch dem 8CD. H|nh 4-. 5c dc khc| moch dem 8CD cc g|o| mo 7 dcon oncde chung. H|nh 4-2. 5c dc khc| moch dem tu 00 den 5 cc h|en th|. H|nh 4-3. 5c dc khc| moch dem tu 000 den .
8ong 4-. 811 FL|P FL|P JK. 8ong 4-2. 811 FL|P FL|P D cc enob|e. 8ong 4-3. 811 moch thonh gh| d|ch 4 b|t. 8ong 4-4. 811 moch thonh gh| d|ch 4 b|t, nop scng scng. 8ong 4-5. 811 thonh gh| d|ch 8 b|t. 8ong 4-6. 811 moch dem J0HN50N 8 b|t. 8ong 4-7. 811 moch moch dem vcng 8b|t. 8ong 4-8. 811 moch d|eu kh|en 8 |ed song tot don. 8ong 4-. 811 moch dem nh| phon 4 b|t. 8ong 4-0. 811 moch dem 8CD. 8ong 4-. 811 moch dem 8CD cc g|o| mo 7 dcon.
|. C|0| 1H|EU: Trong phan nay se thiet ke cac mach flip flop, thanh ghi va mach em dung ngon ng VHDL va s dung thiet b lap trnh. Cac mach flip flop bao gom flip flop JK, flip flop T, flip flop D. Thanh ghi dch bao gom thanh ghi dch noi tiep sang noi tiep, noi tiep sang song song, mach em vong, mach em JohnSon. Mach em nh phan, mach em len em xuong, mach em BCD, mach em at trc so em, mach em co giai ma sang led 7 oan, mach em giay, em phut giay, Cac thiet b lap trnh co the dung CPLD XC9572, XC 95144, Coolrunner XC2C256. ||. 1H|E1 KE CAC L0A| FL|P FL0P ' } Bai 4-1: Thiet ke flip flop JK gom co cac ngo vao J, K, CLK, PRE, CLR va cac ngo ra gom Q va Q: 8ucc : Ve s o khoi cua mach:
H|nh 4-. 5c dc khc| FF JK. 8ucc 2: Bang trang thai:
NC0 VA0 NC0 kA Hong PkE CLk CLK J K Q QD 0 0 X X X 2 0 X X X 0 3 0 X X X 0 4 0 X X Q 0 QD 0
5
0 0 Q 0 QD 0
6
0 0 7
0 0 8
N01 Q 0 N01 QD 0
8ong 4-. 811 FF JK. 8ucc 3: Viet chng trnh: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; +++ - , :+~++ +, : - :+ . .y-+ ++ +. 144 y :+.~: .~ / use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ffjk is Port ( J : in STD_LOGIC; K : in STD_LOGIC; CLK : in STD_LOGIC; PRE : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC; QD : out STD_LOGIC); end ffjk; architecture Behav_ffjk of ffjk is SIGNAL QT,QDT: STD_LOGIC; SIGNAL JK : STD_LOGIC_VECTOR(1 DOWNTO 0); begin PROCESS(J,K,CLK,PRE,CLR) BEGIN IF (PRE='0') AND (CLR='0') THEN QT <='1'; QDT <='1'; -- hang 1 btt ELSIF (PRE='0') AND (CLR='1') THEN QT <='1'; QDT <='0'; -- hang 2 btt ELSIF (PRE='1') AND (CLR='0') THEN QT <='0'; QDT <='1'; -- hang 3 btt ELSIF (PRE='1') AND (CLR='1') THEN IF CLK='0' AND CLK'EVENT THEN JK <=J & K; CASE JK IS WHEN "11" => QT <=NOT QT; QDT <=NOT QDT; WHEN "10" => QT <='1'; QDT <='0'; WHEN "01" => QT <='0'; QDT <='1'; WHEN OTHERS => NULL; -- khong doi TT END CASE; END IF; -- cua lenh kiem tra xung clock END IF; END PROCESS; Q <= QT; QD <= QDT; end Behav_ffjk; / +++ - , :+~++ +, : - :+ . .y-+ ++ +. y :+.~: .~ / 145 Bai 4-2: Thiet ke flip flop D gom co cac ngo vao D, CLK, Enable va ngo ra gom Q va Q: 8ucc : Ve s o khoi cua mach: D E CLK Q Q
H|nh 4-2. 5c dc khc| FF D cc enob|e. 8ucc 2: Bang trang thai: NC0 VA0 NC0 kA E c|k D Q QD 0 x x Q 0 QD 0
0 0 Q 0 QD 0
0 0
0 8ong 4-2. 811 FF D cc enob|e. 8ucc 3: Viet chng trnh: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ff_de is Port ( D : in STD_LOGIC; E : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC; QD : out STD_LOGIC); end ff_de; architecture Behavioral of ff_de is SIGNAL QT: STD_LOGIC; begin PROCESS(D,E,CLK) BEGIN IF E='1' THEN IF CLK='0' AND CLK'EVENT THEN QT <= D; END IF; END IF; +++ - , :+~++ +, : - :+ . .y-+ ++ +. 146 y :+.~: .~ / END PROCESS; Q <= QT; QD <= NOT QT; end Behavioral; |||. 1H|E1 KE 1HANH CH| D[CH ' / 3 , - Bai 4-3: Thiet ke thanh ghi dch 4 bit vao noi tiep ra noi tiep. 8ucc : Ve s o khoi cua mach: D CLK CLR Q0 Q1 Q2 Q3
H|nh 4-3. 5c dc khc| thonh gh| 4 b|t. 8ucc 2: Lap bang trang thai: NC0 VA0 NC0 kA Ch| chu c|r c|k D Q3 Q2 Q Q0 0 x x 0 0 0 0 keset 0 x Q3 0 Q2 0 Q 0 Q0 0 Khcng cc xung c|k
d Q2 0 Q 0 Q0 0 d D|ch du ||eu voc 8ong 4-3. 811 thonh gh| 4 b|t. 8ucc 3: Viet chng trnh: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity reg4b is Port ( D : in STD_LOGIC; CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0)); end reg4b; architecture Behavioral of reg4b is begin process(D,CLK,CLR) variable QT: std_logic_vector(3 downto 0); +++ - , :+~++ +, : - :+ . .y-+ ++ +. y :+.~: .~ / 147 begin if CLR ='0' then QT :="0000"; elsif CLK='1' and CLK'event then QT(3 downto 0) := QT(2 downto 0) & D; end if; Q <= QT; end process; end Behavioral; Bai 4-4: Thiet ke thanh ghi dch 4 bit vao noi tiep, song song, ra noi tiep song song. 8ucc : Ve s o khoi cua mach: Q0 Q1 Q2 Q3 P0 P1 P2 P3 PL CLR CLK D
H|nh 4-4. 5c dc khc| thonh gh| 4 b|t, nop scng scng, nc| t|ep. 8ucc 2: Lap bang trang thai: NC0 VA0 NC0 kA Ch| chu CLk CLK D PL P3 P2 P P0 Q3 Q2 Q Q0 0 x x x x x x x 0 0 0 0 keset x x 0 P3 P2 P P0 P3 P2 P P0 Lcod 0 x x x x x Q3 0 Q2 0 Q 0 Q0 0 Khcng cc xung c|k
d x x x X Q2 0 Q 0 Q0 0 d D|ch du ||eu voc 8ong 4-4. 811 moch thonh gh| d|ch 4 b|t, nop scng scng, nc| t|ep. 8ucc 3: Viet chng trnh: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity tghi4b_ntss is Port ( D : in STD_LOGIC; CLR : in STD_LOGIC; CLK : in STD_LOGIC; +++ - , :+~++ +, : - :+ . .y-+ ++ +. 148 y :+.~: .~ / P : in STD_LOGIC_VECTOR (3 downto 0); Q : out STD_LOGIC_VECTOR (3 downto 0); PL : in STD_LOGIC); end tghi4b_ntss; architecture Behavioral of tghi4b_ntss is begin PROCESS(D,CLR,CLK,P,LOAD) VARIABLE QT: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR='0' THEN QT:= "0000"; ELSIF PL='0' THEN QT:= P; ELSIF CLK='1' AND CLK'EVENT THEN QT:= QT(2 DOWNTO 0) & D; END IF; Q <= QT; END PROCESS; end Behavioral; / 3 , ` Bai 4-5: Thiet ke thanh ghi dch 8 bit vao noi tiep, ra noi tiep song song. 8ucc : Ve s o khoi cua mach: CLK CLR Q0 Q1 Q2 Q3 D Q4 Q5 Q6 Q7
H|nh 4-5. 5c dc khc| thonh gh| 8 b|t. 8ucc 2: Lap bang trang thai: NC0 VA0 NC0 kA Ch| chu c|r c|k D Q7 Q6 Q5 Q4 Q3 Q2 Q Q0 0 x x 0 0 0 0 0 0 0 0 keset 0 x Q7 0 Q6 0 Q5 0 Q4 0 Q3 0 Q2 0 Q 0 Q0 0 Khcng cc xung c|k
d Q6 0 Q5 0 Q4 0 Q3 0 Q2 0 Q 0 Q0 0 d D|ch du ||eu voc 8ong 4-5. 811 thonh gh| d|ch 8 b|t. 8ucc 3: Viet chng trnh: +++ - , :+~++ +, : - :+ . .y-+ ++ +. y :+.~: .~ / 149 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity TGHI8BIT is Port ( CLK : in STD_LOGIC; CLR,D : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0)); end TGHI8BIT; architecture Behavioral of TGHI8BIT is SIGNAL QT: STD_LOGIC_VECTOR (7 downto 0); begin PROCESS (CLK,CLR) BEGIN IF CLR = '0' THEN QT <= "00000000"; ELSIF CLK='1' AND CLK'EVENT THEN QT <= QT(6 DOWNTO 0) & D; END IF; END PROCESS; Q <= QT; end Behavioral; \/ \ } ` Bai 4-6: Thiet ke mach em vong JONHSON 8 bit. 8ucc : Ve s o khoi cua mach: CLK CLR Q0 Q1 Q2 Q3 8 BIT JOHNSON COUNTER D Q4 Q5 Q6 Q7
H|nh 4-6. 5c dc khc| moch dem vcng Jchnscn 8 b|t. Chu y: D a c ket noi vi ngo ra 7 Q va nam ben trong mach ien. 8ucc 2: Lap bang trang thai: +++ - , :+~++ +, : - :+ . .y-+ ++ +. 150 y :+.~: .~ / NC0 VA0 NC0 kA c|r c|k Q7 Q6 Q5 Q4 Q3 Q2 Q Q0 0 X 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0
0 0 0 0
0 0 0
0 0
0
0
0 0
0 0 0
0 0 0 0
0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 8ong 4-6. 811 moch dem J0HN50N 8 b|t. 8ucc 3: Viet chng trnh: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity johnson8bit is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0)); end johnson8bit; architecture Behavioral of johnson8bit is begin PROCESS (CLK,CLR) VARIABLE QT: STD_LOGIC_VECTOR (7 downto 0); VARIABLE D : STD_LOGIC; BEGIN IF CLR = '0' THEN QT <= "00000000"; ELSIF CLK='1' AND CLK'EVENT THEN D <= NOT QT(7); +++ - , :+~++ +, : - :+ . .y-+ ++ +. y :+.~: .~ / 151 QT <= QT(6 DOWNTO 0) & D; END IF; Q <= QT; END PROCESS; end Behavioral; - \/ \ .3 ` Bai 4-7: Thiet ke mach em vong 8 bit. 8ucc : Ve s o khoi cua mach: CLK CLR Q0 Q1 Q2 Q3 8 BIT RING COUNTER D Q4 Q5 Q6 Q7
H|nh 4-7. 5c dc khc| moch dem vcng 8 b|t. 8ucc 2: Lap bang trang thai: NC0 VA0 NC0 kA c|r c|k Q7 Q6 Q5 Q4 Q3 Q2 Q Q0 0 X 0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0 8ong 4-7. 811 moch dem vcng 8b|t. 8ucc 3: Viet chng trnh: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ringcounter8 is Port ( CLK : in STD_LOGIC; +++ - , :+~++ +, : - :+ . .y-+ ++ +. 152 y :+.~: .~ / CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR(7 downto 0)); end ringcounter8; architecture Behavioral of ringcounter8 is SIGNAL QT: STD_LOGIC_VECTOR(7 downto 0):=00000001; begin PROCESS (CLK,CLR) BEGIN IF CLR = '0' THEN QT <="00000001"; ELSIF CLK='1' AND CLK'EVENT THEN QT <= QT(6 DOWNTO 0) & QT(7); END IF; END PROCESS; Q <= QT; end Behavioral; Chu y: Chng trnh sau s dung bien thay v tn hieu nh cac chng trnh tren: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ringcounter8 is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0)); end ringcounter8; architecture Behavioral of ringcounter8 is begin PROCESS (CLK,CLR) VARIABLE QT: STD_LOGIC_VECTOR (7 downto 0); BEGIN IF CLR = '0' THEN QT:="00000001"; ELSIF CLK='0' AND CLK'EVENT THEN QT := QT(6 DOWNTO 0) & QT(7); END IF; Q <= QT; +++ - , :+~++ +, : - :+ . .y-+ ++ +. y :+.~: .~ / 153 END PROCESS; end Behavioral; \/ ` /3 / / / Bai 4-8: Thiet ke mach ieu khien 8 led sang dan, tat dan t trai sang phai va t phai sang trai theo xung clock. 8ucc : Ve s o khoi cua mach: CLK CLR Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7
H|nh 4-8. 5c dc khc| moch d|eu kh|en 8 |ed song tot don. 8ucc 2: Lap bang trang thai: NC0 VA0 NC0 kA c|r c|k Q7 Q6 Q5 Q4 Q3 Q2 Q Q0 1HAP PHAN 0 X 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 32 8ong 4-8. 811 moch d|eu kh|en 8 |ed song tot don. Cac trang thai sang dan tat dan t phai sang trai can 16 xung clock va trang thai ngc lai cung can 16 xung clock. 8ucc 3: Viet chng trnh: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity sangtatdan_tppt is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0)); end sangtatdan_tppt; architecture Behavioral of sangtatdan_tppt is SIGNAL QT: STD_LOGIC_VECTOR (7 downto 0); begin PROCESS(CLK,CLR) VARIABLE DEM: INTEGER RANGE 0 TO 32; BEGIN IF CLR ='0' THEN QT <= "00000000"; ELSIF CLK='1' AND CLK'EVENT THEN IF DEM <16 THEN QT <= QT(6 DOWNTO 0) & NOT QT(7); ELSE QT <= NOT QT(0) & QT(7 DOWNTO 1); END IF; DEM:= DEM +1; IF DEM = 32 THEN DEM:=0; END IF; END IF; END PROCESS; Q <= QT; end Behavioral; +++ - , :+~++ +, : - :+ . .y-+ ++ +. y :+.~: .~ / 155 Trong chng trnh bien DEM co chc nang lam bien em e thc hien lan lt cac trang thai. |V. 1H|E1 KE MACH EM ' \/ \ , / - \ Bai 4-9: Thiet ke mach em nh phan 4 bit. 8ucc : Ve s o khoi cua mach: CLK CLR Q0 Q1 Q2 Q3
H|nh 4-. 5c dc khc| moch dem nh| phon 4 b|t. 8ucc 2: Lap bang trang thai: NC0 VA0 NC0 kA Ch| chu c|r c|k Q3 Q2 Q Q0 0 x 0 0 0 0 keset
0 0 0
0 0 0
0 0
. .. ..
0 0 0 0 8ong 4-. 811 moch dem nh| phon 4 b|t. 8ucc 3: Viet chng trnh: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity cout_4bit is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0)); end cout_4bit; architecture Behavioral of cout_4bit is begin PROCESS(CLK,CLR) VARIABLE QT: STD_LOGIC_VECTOR(3 DOWNTO 0); +++ - , :+~++ +, : - :+ . .y-+ ++ +. 156 y :+.~: .~ / BEGIN IF CLR ='0' THEN QT:= "0000"; ELSIF CLK='1' AND CLK'EVENT THEN QT:= QT +1; END IF; Q <= QT; END PROCESS; end Behavioral; \/ \ \ Bai 4-10: Thiet ke mach em bcd. 8ucc : Ve s o khoi cua mach: CLK CLR Q0 Q1 Q2 Q3
H|nh 4-0. 5c dc khc| moch dem 8CD. 8ucc 2: Lap bang trang thai: NC0 VA0 NC0 kA Ch| chu c|r c|k Q3 Q2 Q Q0 0 x 0 0 0 0
0 0 0
0 0 0
0 0
0 0 0
0 0
0 0
0
0 0 0
0 0
0 0 0 0 8ong 4-0. 811 moch dem 8CD. 8ucc 3: Viet chng trnh: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity bcdcounter is +++ - , :+~++ +, : - :+ . .y-+ ++ +. y :+.~: .~ / 157 Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0)); end bcdcounter; architecture Behavioral of bcdcounter is begin PROCESS(CLK,CLR) VARIABLE QT: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR ='0' THEN QT:= "0000"; ELSIF CLK='1' AND CLK'EVENT THEN QT:= QT +1; IF QT = "1010" THEN QT := 0000 ; END IF; END IF; Q <= QT; END PROCESS; end Behavioral; \/ \ ./ 3/ \/ , 7 / Bai 4-11: Thiet ke mach em bcd hien th tren led 7 oan. 8ucc : Ve s o khoi cua mach: I0 I1 DECODE a b c d e f g I2 I3 SEGMENT CLK CLR Q0 COUNTER Q1 Q2 Q3 BCD LED
H|nh 4-. 5c dc khc| moch dem 8CD cc g|o| mo 7 dcon oncde chung. 8ucc 2: Lap bang trang thai: NC0 VA0 NGO RA tp c|r c|k Q3 Q2 Q Q0 dp g f e d c b a hex 0 0 x 0 0 0 0 1 1 0 0 0 0 0 0 C0
0 0 1 0 0 1 0 0 0 0 0 8ong 4-. 811 moch dem 8CD cc g|o| mo 7 dcon. 8ucc 3: Viet chng trnh: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity count_bcd_gma is Port ( CLR : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0); L7D : out STD_LOGIC_VECTOR (6 downto 0)); end count_bcd_gma; architecture Behavioral of count_bcd_gma is begin PROCESS (CLR,CLK) VARIABLE QTAM: STD_LOGIC_VECTOR (3 downto 0); VARIABLE YTAM: STD_LOGIC_VECTOR (6 downto 0); BEGIN IF CLR='0' THEN QTAM :="0000"; ELSIF CLK='1' AND CLK'EVENT THEN QTAM:= QTAM +1; IF QTAM = "1010" THEN QTAM:="0000"; END IF; END IF; CASE QTAM IS when "0000" => YTAM := x"C0"; -- so 0 when "0001" => YTAM := x"F9"; -- so 1 when "0010" => YTAM := x"A4"; -- so 2 when "0011" => YTAM := x"B0"; -- so 3 when "0100" => YTAM := x"99"; -- so 4 when "0101" => YTAM := x"92"; -- so 5 +++ - , :+~++ +, : - :+ . .y-+ ++ +. y :+.~: .~ / 159 when "0110" => YTAM := x"82"; -- so 6 when "0111" => YTAM := x"F8"; -- so 7 when "1000" => YTAM := x"80"; -- so 8 when "1001" => YTAM := x"90"; -- so 9 when others => YTAM := x"FF"; -- tat END CASE; Q <= QTAM; L7D <= YTAM; END PROCESS; end Behavioral; - \/ \ 3 , 7 / Bai 4-12: Thiet ke mach em bcd t 00 en 59 hien th tren 2 led 7 oan ket noi theo phng phap quet. S dung nguon xung clock co tan so 1,8432MHz tren bo th nghiem dung e quet va lam xung tang gia tr em. 8ucc : Ve s o khoi cua mach: CLK CLR OSC 1,8432MHz a b c d e f g anod0 anod1 Vcc
H|nh 4-2. 5c dc khc| moch dem tu 00 den 5 cc h|en th|. 8ucc 2: Viet chng trnh: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity DEM0099 is Port ( CLR : in std_logic; CLK : in std_logic; anod : out std_logic_vector(3 downto 0); ma7d : out std_logic_vector( 7 downto 0)); +++ - , :+~++ +, : - :+ . .y-+ ++ +. 160 y :+.~: .~ / end DEM0099;
architecture Behavioral of DEM0099 is signal F: std_logic_vector(18 downto 0); signal mabl: std_logic_vector(7 downto 0); signal mabh: std_logic_vector(7 downto 0);
function giai_ma(x1: in std_logic_vector(3 downto 0)) return std_logic_vector is variable z1: std_logic_vector(7 downto 0); begin case x1 is when "0000" => z1 := "11000000"; -- so 0 when "0001" => z1 := "11111001"; -- so 1 when "0010" => z1 := "10100100"; -- so 2 when "0011" => z1 := "10110000"; -- so 3
when "0100" => z1 := "10011001"; -- so 4 when "0101" => z1 := "10010010"; -- so 5 when "0110" => z1 := "10000010"; -- so 6 when "0111" => z1 := "11111000"; -- so 7
when "1000" => z1 := "10000000"; -- so 8 when "1001" => z1 := "10010000"; -- so 9 when others =>z1 := "11111111"; -- so end case; return z1; end giai_ma; begin process (CLR,CLK,F,mabl,mabh) variable bcd1: std_logic_vector(3 downto 0); variable bcd2: std_logic_vector(3 downto 0); begin if CLR = '1' then bcd1:="0000"; bcd2:="0000"; F <= "0000000000000000000"; elsif RISING_EDGE(CLK) then F <= F + 1; +++ - , :+~++ +, : - :+ . .y-+ ++ +. y :+.~: .~ / 161 if F = "1111111111111111111" then bcd1:=bcd1+1; if bcd1 = "1010" then bcd1:="0000"; bcd2:= bcd2+1; if bcd2 = "0110" then bcd2:="0000"; end if; end if; end if; end if; QB <= bcd2 & bcd1 ; -- hien thi 8 led don mabh <= giai_ma(bcd2); mabl <= giai_ma(bcd1); case F (10 downto 9) is when "00" => ma7d <= mabh; anod <="0010"; when "10" => ma7d <= mabl; anod <="0001"; when others => null; end case; END PROCESS; end Behavioral; \/ \ 333 , 7 / Bai 4-13: Thiet ke mach em bcd t 000 en 999 hien th tren 3 led 7 oan ket noi theo phng phap bnh thng. S dung nguon xung clock tuy y. 8ucc : Ve s o khoi cua mach: CLOCK CLR TRM CHC N V a b c d e f g a b c d e f g a b c d e f g
H|nh 4-3. 5c dc khc| moch dem tu 000 den . 8ucc 2: Viet chng trnh: library IEEE; use IEEE.STD_LOGIC_1164.ALL; +++ - , :+~++ +, : - :+ . .y-+ ++ +. 162 y :+.~: .~ / use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity DEM_999000 is Port ( CLR : in STD_LOGIC; CLK : in STD_LOGIC; QDVI : out STD_LOGIC_VECTOR (6 downto 0); QCHU : out STD_LOGIC_VECTOR (6 downto 0); QTRA : out STD_LOGIC_VECTOR (6 downto 0)); end DEM_999000;
architecture Behavioral of DEM_999000 is function giai_ma(x1: in std_logic_vector(3 downto 0)) return std_logic_vector is variable z1: std_logic_vector(6 downto 0); begin case x1 is when "0000" => z1 := "1000000"; -- so 0 when "0001" => z1 := "1111001"; -- so 1 when "0010" => z1 := "0100100"; -- so 2 when "0011" => z1 := "0110000"; -- so 3 when "0100" => z1 := "0011001"; -- so 4 when "0101" => z1 := "0010010"; -- so 5 when "0110" => z1 := "0000010"; -- so 6 when "0111" => z1 := "1111000"; -- so 7 when "1000" => z1 := "0000000"; -- so 8 when "1001" => z1 := "0010000"; -- so 9 when others =>z1 := "1111111"; -- TATLED end case; return z1; end giai_ma; begin process (CLR,CLK) variable BCD_DVI: std_logic_vector(3 downto 0); variable BCD_CHU: std_logic_vector(3 downto 0); variable BCD_TRA: std_logic_vector(3 downto 0); begin +++ - , :+~++ +, : - :+ . .y-+ ++ +. y :+.~: .~ / 163 if CLR = '1' then BCD_DVI:="0000"; BCD_CHU:="0000"; BCD_TRA:="0000";
Elsif CLK= '1' and CLK'event then BCD_DVI:=BCD_DVI+1; if BCD_DVI= "1010" then BCD_DVI:="0000"; BCD_CHU:= BCD_CHU+1; if BCD_CHU= "1010" then BCD_CHU:="0000"; BCD_TRA:= BCD_TRA+1; if BCD_TRA= "1010" then BCD_TRA:="0000"; end if; end if; end if; end if; QDVI <= giai_ma(BCD_DVI); QCHU <= giai_ma(BCD_CHU); QTRA <= giai_ma(BCD_TRA); END PROCESS; end Behavioral; V. CAU H0| 0N 1AP VA 8A| 1AP Bai tap 4-1: Thiet ke flip flop RS. Bai tap 4-2: Thiet ke mach chot D. Bai tap 4-3: Thiet ke flip flop D. Bai tap 4-4: Thiet ke flip flop T. Bai tap 4-5: Thiet ke 4 flip flop D gom 4 ngo vao D, 4 ngo ra Q va 4 ngo ra QD, dung chung 1 CLK. Bai tap 4-6: Thiet ke 8 flip flop T gom 8 ngo vao T, 8 ngo ra Q va 8 ngo ra QD, dung chung CLK. Bai tap 4-7: Thiet ke thanh ghi dch giong nh IC 74164. Bai tap 4-8: Thiet ke thanh ghi dch giong nh IC 74194. +++ - , :+~++ +, : - :+ . .y-+ ++ +. 164 y :+.~: .~ / Bai tap 4-9: Thiet ke mach ieu khien en giao thong vi xanh_1, vang_1, o_1, xanh_2, vang_2, o_2. Cho xanh sang 15 giay, vang sang 5 giay va o sang 20 giay. Bai tap 4-10: Thiet ke mach ieu khien en 8 led n vi yeu cau nh sau: iem sang chay t phai sang trai va t trai sang phai theo xung clock va co 1 chan cho phep E tch cc mc 0. Bai tap 4-11: Thiet ke mach co chc nang giong nh IC 4017. Bai tap 4-12: Thiet ke mach co chc nang giong nh IC 4017 nhng gom co 20 ngo ra. Bai tap 4-13: Thiet ke mach co chc nang giong nh IC 4017 nhng gom 2 con: mot con em hang n v va mot con em hang chuc. Bai tap 4-14: Thiet ke mach em nh phan 4 bit em xuong. Bai tap 4-15: Thiet ke mach em nh phan 4 bit em len, em xuong c ieu khien bang tn hieu UD (UD = 0 th em len, UD = 1 th em xuong), co mot tn hieu CLK, mot tn hieu CLR. Bai tap 4-16: Thiet ke mach em nh phan 4 bit em len, em xuong c ieu khien bang tn hieu UD (UD = 0 th em len, UD = 1 th em xuong), co mot tn hieu CLK, mot tn hieu CLR. Co them chc nang at trc so em nh IC 74193. Bai tap 4-17: Thiet ke mach em nh phan 4 bit em len, em xuong c ieu khien bang tn hieu UD (UD = 0 th em len, UD = 1 th em xuong), co mot tn hieu CLK, mot tn hieu CLR, co giai ma hien th ra 1 led 7 oan t 0 en F tng ng vi so thap luc phan. Bai tap 4-18: Thiet ke mach em BCD em len, em xuong c ieu khien bang tn hieu UD (UD = 0 th em len, UD = 1 th em xuong), co mot tn hieu CLK, mot tn hieu CLR, co giai ma hien th ra 1 led 7 oan. Bai tap 4-19: Thiet ke mach em BCD t 00 en 99 em len, em xuong c ieu khien bang tn hieu UD (UD = 0 th em len, UD = 1 th em xuong), co mot tn hieu CLK, mot tn hieu CLR, co giai ma hien th ra 2 led 7 oan khong dung quet. Bai tap 4-20: Thiet ke mach em BCD t 000 en 999 em len, em xuong c ieu khien bang tn hieu UD (UD = 0 th em len, UD = 1 th em xuong), co mot tn hieu CLK, mot tn hieu CLR, co giai ma hien th ra 3 led 7 oan dung quet. Bai tap 4-21: Thiet ke mach gom co 3 led 7 oan, ban phm gom 10 phm so t 0 en 9. Ban au th 3 led hien th so 000, khi nhan phm nao th phm o c dch vao t ben phai. (giong nh may tnh calculator). Bai tap 4-22: Thiet ke mach nh thi: gom co 2 led 7 oan e hien th so giay t 00 en 99, ban phm gom 10 phm so t 0 en 0 va phm chc nang nh clear, enter, test, mot ngo ra ieu khien relay. Ban au th 2 led hien th so 00, khi nhan phm nao th phm o c dch vao t ben phai. Sau khi nhan xong th nhan enter qua trnh em xuong se bat au cho en khi gia tr em bang 00 th relay se tac ong. He thong ngng.
Bai tap 4-23: Dung PLD ket noi vi IC em BCD 74LS90, hay viet chng trnh ieu khien IC 74LS90 em vi trnh t nh sau: em t 0 en 9, sau o em t 0 en 8, tng t em t 0 en 7 roi lap lai. +++ - , :+~++ +, : - :+ . .y-+ ++ +. y :+.~: .~ / 165 Bai tap 4-24: Mo ta mach em nh phan 4 bit co the em vi 4 cap tan so f , 2 f , 4 f , 8 f , cac cap tan so co the chon bang 2 switch S0 va S1, cho tan so cung cap cho mach la f . Bai tap 4-25: Mo ta mach co the tao ra dang song vi yeu cau nh sau: Mach tao ra 5 xung co tan so 1Hz roi ngng 5 xung co tan so 1 hz, cho xung vao co tan so 10hz. Co 1 ngo vao reset Bai tap 4-26: Mo ta mach co 3 nut nhan A, B va C: khi nhan nut A th ma ch tao ra 5 xung roi ngng, khi nhan nut B th mach tao ra 10 xung roi ngng, khi nhan nut C th mach tao ra 15 xung roi ngng. Cho xung clock ngo vao co tan so bang 1Hz. Bai tap 4-27: Thiet ke mach so sanh 2 so nh phan 3 bit A va B va 1 mach em nh 4 bit: neu so nh phan A ln hn B th mach em len, neu A bang B th mach em xuong, neu A nho hn B th mach em. Bai tap 4-28: Thiet ke 1 mach em nh phan 4 bit va 1 mach em Johnson 4 bit co cung clr va enable nhng xung clock khac nhau . Bai tap 4-29: Thiet ke 1 mach em nh phan 4 bit co clr, clk co the la chon em nh phan chan hoac le. Bai tap 4-30: Thiet ke 1 mach em nh phan 5 bit co clr, clk, enable, vi trnh t em: em len t cc tieu len cc ai theo so theo so thap phan chan roi quay lai theo so thap phan le, c the lap lai. Bai tap 4-31: Thiet ke 1 mach co 8 ngo ra va cac ngo vao gom: 1 clk, 1 clr, 1 ngo vao S: S=0 th mach em Johnson, S=1 th mach em vong, 1 ngo vao pause bnh thng mc 1: khi nut pause th mach ang em se ngng em va sau 5 xung th mach se em tiep.