Chương 4: Các FLIP FLOP thanh ghi, bộ đếm trong VHDL

Chia sẻ: Le Van Phong | Ngày: | Loại File: PDF | Số trang:25

0
423
lượt xem
212
download

Chương 4: Các FLIP FLOP thanh ghi, bộ đếm trong VHDL

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Các FLIP FLOP thanh ghi, bộ đếm trong VHDL

Chủ đề:
Lưu

Nội dung Text: Chương 4: Các FLIP FLOP thanh ghi, bộ đếm trong VHDL

  1. Chöông 4 CAÙC FLIP FLOP, THANH GHI, BOÄ ÑEÁM TRONG VHDL GIÔÙI THIEÄU THIEÁT KEÁ CAÙC LOAÏI FLIP FLOP THIEÁT KEÁ FLIP FLOP JK THIEÁT KEÁ FLIP FLOP D COÙ ENABLE THIEÁT KEÁ THANH GHI DÒCH THIEÁT KEÁ THANH GHI DÒCH 4 BIT THIEÁT KEÁ THANH GHI DÒCH 8 BIT THIEÁT KEÁ MAÏCH ÑEÁM JOHNSON 8 BIT THIEÁT KEÁ MAÏCH ÑEÁM VOØNG 8 BIT THIEÁT KEÁ MAÏCH ÑIEÀU KHIEÅN 8 LED SAÙNG DAÀN – TAÉT DAÀN THIEÁT KEÁ MAÏCH ÑEÁM THIEÁT KEÁ MAÏCH ÑEÁM NHÒ PHAÂN 4 BIT – ÑEÁM LEÂN THIEÁT KEÁ MAÏCH BCD – ÑEÁM LEÂN THIEÁT KEÁ MAÏCH ÑEÁM BCD VAØ GIAÛI MAÕ HIEÅN THÒ LED 7 ÑOAÏN THIEÁT KEÁ MAÏCH ÑEÁM BCD TÖØ 00 ÑEÁN 59 – HIEÅN THÒ TREÂN 2 LED 7 ÑOAÏN THIEÁT KEÁ MAÏCH ÑEÁM BCD TÖØ 000 ÑEÁN 999 – HIEÅN THÒ TREÂN 3 LED 7 ÑOAÏN CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP
  2. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Hình 4-1. Sô ñoà khoái FLIP FLIP JK. Hình 4-2. Sô ñoà khoái FLIP FLIP D coù enable. Hình 4-3. Sô ñoà khoái thanh ghi 4 bit. Hình 4-4. Sô ñoà khoái thanh ghi 4 bit, naïp song song. Hình 4-5. Sô ñoà khoái thanh ghi 8 bit. Hình 4-6. Sô ñoà khoái maïch ñeám voøng Johnson 8 bit. Hình 4-7. Sô ñoà khoái maïch ñeám voøng 8 bit. Hình 4-8. Sô ñoà khoái maïch ñieàu khieån 8 led saùng taét daàn. Hình 4-9. Sô ñoà khoái maïch ñeám nhò phaân 4 bit. Hình 4-10. Sô ñoà khoái maïch ñeám BCD. Hình 4-11. Sô ñoà khoái maïch ñeám BCD coù giaûi maõ 7 ñoaïn anode chung. Hình 4-12. Sô ñoà khoái maïch ñeám töø 00 ñeán 59 coù hieån thò. Hình 4-13. Sô ñoà khoái maïch ñeám töø 000 ñeán 999. Baûng 4-1. BTT FLIP FLIP JK. Baûng 4-2. BTT FLIP FLIP D coù enable. Baûng 4-3. BTT maïch thanh ghi dòch 4 bit. Baûng 4-4. BTT maïch thanh ghi dòch 4 bit, naïp song song. Baûng 4-5. BTT thanh ghi dòch 8 bit. Baûng 4-6. BTT maïch ñeám JOHNSON 8 bit. Baûng 4-7. BTT maïch maïch ñeám voøng 8bit. Baûng 4-8. BTT maïch ñieàu khieån 8 led saùng taét daàn. Baûng 4-9. BTT maïch ñeám nhò phaân 4 bit. Baûng 4-10. BTT maïch ñeám BCD. Baûng 4-11. BTT maïch ñeám BCD coù giaûi maõ 7 ñoaïn. 142 Kyõ thuaät PLD vaø ASIC
  3. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù I. GIÔÙI THIEÄU: Trong phaàn naøy seõ thieát keá caùc maïch flip flop, thanh ghi vaø maïch ñeám duøng ngoân ngöõ VHDL vaø söû duïng thieát bò laäp trình. Caùc maïch flip flop bao goàm flip flop JK, flip flop T, flip flop D. Thanh ghi dòch bao goàm thanh ghi dòch noái tieáp sang noái tieáp, noái tieáp sang song song, maïch ñeám voøng, maïch ñeám JohnSon. Maïch ñeám nhò phaân, maïch ñeám leân ñeám xuoáng, maïch ñeám BCD, maïch ñeám ñaët tröôùc soá ñeám, maïch ñeám coù giaûi maõ sang led 7 ñoaïn, maïch ñeám giaây, ñeám phuùt giaây,… Caùc thieát bò laäp trình coù theå duøng CPLD XC9572, XC 95144, Coolrunner XC2C256. II. THIEÁT KEÁ CAÙC LOAÏI FLIP FLOP 1. THIEÁT KEÁ FLIP FLOP JK: Baøi 4-1: Thieát keá flip flop JK goàm coù caùc ngoõ vaøo J, K, CLK, PRE, CLR vaø caùc ngoõ ra goàm Q vaø Q : Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-1. Sô ñoà khoái FF JK. Böôùc 2: Baûng traïng thaùi: NGOÕ VAØO NGOÕ RA Haøng PRE CLR CLK J K Q QD 1 0 0 X X X 1 1 2 0 1 X X X 1 0 3 1 0 X X X 0 1 4 1 1 0 X X Q0 QD0 5 1 1 ↓ 0 0 Q0 QD0 6 1 1 ↓ 0 1 0 1 7 1 1 ↓ 1 0 1 0 8 1 1 ↓ 1 1 NOT Q0 NOT QD0 Baûng 4-1. BTT FF JK. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; Kyõ thuaät PLD vaø ASIC 143
  4. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù 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
  5. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Baøi 4-2: Thieát keá flip flop D goàm coù caùc ngoõ vaøo D, CLK, Enable vaø ngoõ ra goàm Q vaø Q : Böôùc 1: Veõ sô ñoà khoái cuûa maïch: D Q CLK E Q Hình 4-2. Sô ñoà khoái FF D coù enable. Böôùc 2: Baûng traïng thaùi: NGOÕ VAØO NGOÕ RA E clk D Q QD 0 x x Q0 QD0 1 0 0 Q0 QD0 1 ↓ 0 0 1 1 ↓ 1 1 0 Baûng 4-2. BTT FF D coù enable. Böôùc 3: Vieát chöông trình: 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
  6. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù END PROCESS; Q
  7. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù 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
  8. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù 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
  9. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù 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
  10. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù NGOÕ VAØO NGOÕ RA clr clk Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 0 X 0 0 0 0 0 0 0 0 1 ↑ 0 0 0 0 0 0 0 1 1 ↑ 0 0 0 0 0 0 1 1 1 ↑ 0 0 0 0 0 1 1 1 1 ↑ 0 0 0 0 1 1 1 1 1 ↑ 0 0 0 1 1 1 1 1 1 ↑ 0 0 1 1 1 1 1 1 1 ↑ 0 1 1 1 1 1 1 1 1 ↑ 1 1 1 1 1 1 1 1 1 ↑ 1 1 1 1 1 1 1 0 1 ↑ 1 1 1 1 1 1 0 0 1 ↑ 1 1 1 1 1 0 0 0 1 ↑ 1 1 1 1 0 0 0 0 1 ↑ 1 1 1 0 0 0 0 0 1 ↑ 1 1 0 0 0 0 0 0 1 ↑ 1 0 0 0 0 0 0 0 1 ↑ 0 0 0 0 0 0 0 0 Baûng 4-6. BTT maïch ñeám JOHNSON 8 bit. Böôùc 3: Vieát chöông trình: 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
  11. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù QT
  12. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù 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
  13. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù END PROCESS; end Behavioral; 5. THIEÁT KEÁ MAÏCH ÑIEÀU KHIEÅN 8 LED SAÙNG DAÀN – TAÉT DAÀN: Baøi 4-8: Thieát keá maïch ñieàu khieån 8 led saùng daàn, taét daàn töø traùi sang phaûi vaø töø phaûi sang traùi theo xung clock. Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Q0 Q1 CLK Q2 CLR Q3 Q4 Q5 Q6 Q7 Hình 4-8. Sô ñoà khoái maïch ñieàu khieån 8 led saùng taét daàn. Böôùc 2: Laäp baûng traïng thaùi: NGOÕ VAØO NGOÕ RA clr clk Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 THAÄP PHAÂN 0 X 0 0 0 0 0 0 0 0 0 1 ↑ 0 0 0 0 0 0 0 1 1 1 ↑ 0 0 0 0 0 0 1 1 2 1 ↑ 0 0 0 0 0 1 1 1 3 1 ↑ 0 0 0 0 1 1 1 1 4 1 ↑ 0 0 0 1 1 1 1 1 5 1 ↑ 0 0 1 1 1 1 1 1 6 1 ↑ 0 1 1 1 1 1 1 1 7 1 ↑ 1 1 1 1 1 1 1 1 8 1 ↑ 1 1 1 1 1 1 1 0 9 1 ↑ 1 1 1 1 1 1 0 0 10 1 ↑ 1 1 1 1 1 0 0 0 11 1 ↑ 1 1 1 1 0 0 0 0 12 1 ↑ 1 1 1 0 0 0 0 0 13 1 ↑ 1 1 0 0 0 0 0 0 14 1 ↑ 1 0 0 0 0 0 0 0 15 1 ↑ 0 0 0 0 0 0 0 0 16 1 ↑ 1 0 0 0 0 0 0 0 17 1 ↑ 1 1 0 0 0 0 0 0 18 1 ↑ 1 1 1 0 0 0 0 0 19 1 ↑ 1 1 1 1 0 0 0 0 20 1 ↑ 1 1 1 1 1 0 0 0 21 1 ↑ 1 1 1 1 1 1 0 0 22 1 ↑ 1 1 1 1 1 1 1 0 23 1 ↑ 1 1 1 1 1 1 1 1 24 1 ↑ 0 1 1 1 1 1 1 1 25 1 ↑ 0 0 1 1 1 1 1 1 26 Kyõ thuaät PLD vaø ASIC 153
  14. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù 1 ↑ 0 0 0 1 1 1 1 1 27 1 ↑ 0 0 0 0 1 1 1 1 28 1 ↑ 0 0 0 0 0 1 1 1 29 1 ↑ 0 0 0 0 0 0 1 1 30 1 ↑ 0 0 0 0 0 0 0 1 31 1 ↑ 0 0 0 0 0 0 0 0 32 Baûng 4-8. BTT maïch ñieàu khieån 8 led saùng taét daàn. Caùc traïng thaùi saùng daàn taét daàn töø phaûi sang traùi caàn 16 xung clock vaø traïng thaùi ngöôïc laïi cuõng caàn 16 xung clock. Böôùc 3: Vieát chöông trình: 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
  15. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Trong chöông trình bieán DEM coù chöùc naêng laøm bieán ñeám ñeå thöïc hieän laàn löôït caùc traïng thaùi. IV. THIEÁT KEÁ MAÏCH ÑEÁM 1. THIEÁT KEÁ MAÏCH ÑEÁM NHÒ PHAÂN 4 BIT – ÑEÁM LEÂN Baøi 4-9: Thieát keá maïch ñeám nhò phaân 4 bit. Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Q0 CLK Q1 CLR Q2 Q3 Hình 4-9. Sô ñoà khoái maïch ñeám nhò phaân 4 bit. Böôùc 2: Laäp baûng traïng thaùi: NGOÕ VAØO NGOÕ RA Ghi chuù clr clk Q3 Q2 Q1 Q0 0 x 0 0 0 0 Reset 1 ↑ 0 0 0 1 1 ↑ 0 0 1 0 1 ↑ 0 0 1 1 … . .. .. 1 ↑ 1 1 1 1 1 ↑ 0 0 0 0 Baûng 4-9. BTT maïch ñeám nhò phaân 4 bit. Böôùc 3: Vieát chöông trình: 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); Kyõ thuaät PLD vaø ASIC 155
  16. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù BEGIN IF CLR ='0' THEN QT:= "0000"; ELSIF CLK='1' AND CLK'EVENT THEN QT:= QT +1; END IF; Q
  17. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù 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
  18. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù 4 1 ↑ 0 1 0 0 1 0 0 1 1 0 0 1 99 5 1 ↑ 0 1 0 1 1 0 0 1 0 0 1 0 92 6 1 ↑ 0 1 1 0 1 0 0 0 0 0 1 0 82 7 1 ↑ 0 1 1 1 1 1 1 1 1 0 0 0 F8 8 1 ↑ 1 0 0 0 1 0 0 0 0 0 0 0 80 9 1 ↑ 1 0 0 1 1 0 0 1 0 0 0 0 90 Baûng 4-11. BTT maïch ñeám BCD coù giaûi maõ 7 ñoaïn. Böôùc 3: Vieát chöông trình: 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 158 Kyõ thuaät PLD vaø ASIC
  19. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù 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
  20. Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù 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

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản