50
BÁO CÁO GIỮA KỲ MÔN THỰC HÀNH PLD VÀ ASIC BÀI 2: HƯỚNG DẪN SỬ DỤNG MÔ PHỎNG THIẾT KẾ PLD BẰNG ISE WEBPACK Bài 201: mạch giải mã 2 sang 4 đường Code: entity GIAIMA_24 is Port ( I : in STD_LOGIC_VECTOR (1 downto 0); Q : OUT STD_LOGIC_VECTOR (3 downto 0)); end GIAIMA_24; architecture Behavioral of GIAIMA_24 is begin PROCESS(I) BEGIN CASE I IS WHEN "00" => Q <= "0001"; WHEN "01" => Q <= "0010"; WHEN "10" => Q <= "0100"; WHEN "11" => Q <= "1000"; WHEN OTHERS => NULL; END CASE; END PROCESS; end GIANG; Mô phỏng:

BAO CAO PLD

Embed Size (px)

Citation preview

Page 1: BAO CAO PLD

BÁO CÁO GIỮA KỲ MÔN THỰC HÀNH PLD VÀ ASIC

BÀI 2: HƯỚNG DẪN SỬ DỤNG MÔ PHỎNG THIẾT KẾ PLD BẰNG ISE WEBPACK

Bài 201: mạch giải mã 2 sang 4 đườngCode:

entity GIAIMA_24 is Port ( I : in STD_LOGIC_VECTOR (1 downto 0); Q : OUT STD_LOGIC_VECTOR (3 downto 0));end GIAIMA_24;

architecture Behavioral of GIAIMA_24 isbegin

PROCESS(I)BEGIN

CASE I ISWHEN "00" => Q <= "0001";WHEN "01" => Q <= "0010";WHEN "10" => Q <= "0100";WHEN "11" => Q <= "1000";WHEN OTHERS => NULL;

END CASE;END PROCESS;

end GIANG;

Mô phỏng:

Page 2: BAO CAO PLD

Bài 202: mạch đếm nhị phân 4 bitCode:

entity COUNT_4BIT is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (03 downto 0));end COUNT_4BIT;

architecture GIANG of COUNT_4BIT isbegin

PROCESS (CLK,CLR)VARIABLE QTAM: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN

IF CLR='0' THEN QTAM:="0000";ELSIF CLK='1' AND CLK'EVENT THEN

QTAM:=QTAM+1;END IF;Q <= QTAM;

END PROCESS;end GIANG;

Mô phỏng:

Page 3: BAO CAO PLD

BÀI 4: CHƯƠNG TRÌNH VHDL CHO CÁC MẠCH TỔ HỢP

PHẦN 1: MẠCH GIẢI MÃ

Bài 401:viết chương trình mô tả mạch giải mã 2 đường sang 4 đường ngõ ra tích cực mức thấp, có them 1 chân E cho phép giải mã khi ở mức 1Code:

entity GIAIMA_24E is Port ( E : in STD_LOGIC; I : in STD_LOGIC_VECTOR (1 downto 0); Q : out STD_LOGIC_VECTOR (3 downto 0));end GIAIMA_24E;

architecture GIANG of GIAIMA_24E isbegin

PROCESS (E,I)BEGIN

IF E ='0' THEN Q<= "0000";ELSE

CASE I ISWHEN "00" => Q <= "0001";WHEN "01" => Q <= "0010";WHEN "10" => Q <= "0100";WHEN OTHERS=> Q <= "1000";

END CASE;END IF;

END PROCESS;end GIANG;

Mô phỏng:

Bài 402: mạch giải mã 2 đường sang 4 đường ngõ ra tích cực mức thấp, có chân E cho phép giải mã khi ở mức 1 và chân S cho phép chọn mức tích cực ngõ ra: nếu S=0 thì ngõ ra tích cực mức thấp, S=1 thì ngõ ra tích cực mức 1Code: entity GIAIMA_24ES is

Page 4: BAO CAO PLD

Port ( I : in STD_LOGIC_VECTOR (01 downto 0); E : in STD_LOGIC; S : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (03 downto 0));end GIAIMA_24ES;

architecture GIANG of GIAIMA_24ES isbegin

PROCESS (E,S,I)VARIABLE QTAM: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN

IF E='0' THEN QTAM:="1111";ELSE

CASE I ISWHEN "00" => QTAM:="1110";WHEN "01" => QTAM:="1101";WHEN "10" => QTAM:="1011";WHEN OTHERS=> QTAM:="0111";

END CASE;END IF;IF S='0' THEN Q<= QTAM;ELSE Q<= NOT(QTAM);END IF;

END PROCESS;end GIANG;

mô phỏng:

Bài 403:chương trình mô tả mạch giải mã 3 đường sang 8 đường ngõ ra tích cực mức thấp có thêm chân E cho phép giải mã khi mức 1Code:entity GIAIMA_38E is Port ( E : in STD_LOGIC; I : in STD_LOGIC_VECTOR (02 downto 0); Q : out STD_LOGIC_VECTOR (07 downto 0));

Page 5: BAO CAO PLD

end GIAIMA_38E;

architecture GIANG of GIAIMA_38E isbegin

PROCESS (E,I)BEGIN

IF E ='0' THEN Q <= "00000000";ELSE

CASE I ISWHEN "000" => Q <= "00000001";WHEN "001" => Q <= "00000010";WHEN "010" => Q <= "00000100";WHEN "011" => Q <= "00001000";WHEN "100" => Q <= "00010000";WHEN "101" => Q <= "00100000";WHEN "110" => Q <= "01000000";WHEN OTHERS => Q <= "10000000";

END CASE;END IF;

END PROCESS;end GIANG;

Mô phỏng:

Bài 404:chương trình giải mã 3 sang 8 ngõ ra tích cực mức cao. Có chân E cho phép giải mã khi ở mức 1, và chân S cho phép lựa chọn mức tích cực ngõ ra: S=0 ngõ ra tích cực mức thấp ,S=1 ngõ ra mức caoCode:entity GIAIMA_38ES is Port ( S : in STD_LOGIC; E : in STD_LOGIC; I : in STD_LOGIC_VECTOR (02 downto 0); Q : out STD_LOGIC_VECTOR (07 downto 0));end GIAIMA_38ES;

Page 6: BAO CAO PLD

architecture GIANG of GIAIMA_38ES isbegin

PROCESS(E,S,I)VARIABLE QTAM: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN

IF E='1' THEN Q <= "11111111";ELSE

CASE I ISWHEN "000" => QTAM:="11111110";WHEN "001" => QTAM:="11111101";WHEN "010" => QTAM:="11111011";WHEN "011" => QTAM:="11110111";WHEN "100" => QTAM:="11101111";WHEN "101" => QTAM:="11011111";WHEN "110" => QTAM:="10111111";WHEN OTHERS=> QTAM:="01111111";END CASE;

END IF;

IF S='0' THEN Q <= QTAM;ELSE Q <= NOT(QTAM);END IF;

END PROCESS;end GIANG;Mô phỏng:

Bài 405:mạch giải mã mô tả IC 74138 (hình 4-3 sách thực hành trang 59)Code:entity IC74138 is Port ( I : in STD_LOGIC_VECTOR (02 downto 0); G : in STD_LOGIC_VECTOR (02 downto 0); Q : OUT STD_LOGIC_VECTOR (07 downto 0));end IC74138;

Page 7: BAO CAO PLD

architecture GIANG of IC74138 isbegin

PROCESS(I,G)VARIABLE QT: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN

IF ( G(0) ='0' OR G(1) ='0' OR G(2) ='0' )THEN QT:= "11111111";ELSIF G = "111" THEN

CASE I ISWHEN "000" => QT:= "11111110";WHEN "001" => QT:= "11111101";WHEN "010" => QT:= "11111011";WHEN "011" => QT:= "11110111";WHEN "100" => QT:= "11101111";WHEN "101" => QT:= "11011111";WHEN "110" => QT:= "10111111";WHEN OTHERS=> QT:= "01111111";

END CASE;END IF;Q <= QT;

END PROCESS;end GIANG;Mô phỏng:

PHẦN 2: MẠCH TỔ HỢP

Bài 406:chương trình mô tả mạch giải mã giống IC 74139 (hình 4-4 trang 60)Code:entity IC74139 iS Port ( EA : in STD_LOGIC;

EB : in STD_LOGIC; A : in STD_LOGIC_VECTOR (01 downto 0);

B : in STD_LOGIC_VECTOR (01 downto 0);

Page 8: BAO CAO PLD

Q : out STD_LOGIC_VECTOR (07 downto 0));end IC74139;

architecture GIANG of IC74139 isSIGNAL QTA : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL QTB : STD_LOGIC_VECTOR(3 DOWNTO 0);

beginPROCESS (EA,A)BEGIN

IF EA='0' THEN QTA <="0000";ELSE

CASE A ISWHEN "00" => QTA <="0001";WHEN "01" => QTA <="0010";WHEN "10" => QTA <="0100";WHEN OTHERS=> QTA <="1000";

END CASE;END IF;

END PROCESS;

PROCESS (EB,B)BEGIN

IF EB='0' THEN QTB <="0000";ELSE

CASE B ISWHEN "00" => QTB <="0001";WHEN "01" => QTB <="0010";WHEN "10" => QTB <="0100";WHEN OTHERS=> QTB <="1000";

END CASE;END IF;

END PROCESS;Q <= QTA & QTB;

end GIANG;

Mô phỏng:

Page 9: BAO CAO PLD

Bài 407:chương trình mô tả mạch mã hóa 8 sang 3 ngõ ra tích cực mức thấpCode:entity MAHOA_83 is Port ( I : in STD_LOGIC_VECTOR (07 downto 0); Q : out STD_LOGIC_VECTOR (02 downto 0));end MAHOA_83;

architecture GIANG of MAHOA_83 isbegin

PROCESS (I)VARIABLE QTAM: STD_LOGIC_VECTOR(2 DOWNTO 0);

BEGINCASE I IS

WHEN "11111110" => QTAM:= "000";WHEN "11111101" => QTAM:= "001";WHEN "11111011" => QTAM:= "010";WHEN "11110111" => QTAM:= "011";WHEN "11101111" => QTAM:= "100";WHEN "11011111" => QTAM:= "101";WHEN "10111111" => QTAM:= "110";WHEN "01111111" => QTAM:= "111";WHEN OTHERS => NULL;

END CASE;Q <= QTAM;END PROCESS;

end GIANG;

Mô phỏng:

Page 10: BAO CAO PLD

Bài 408: chương trình mã hóa 8 sang 3 với ngõ ra tích cực mức thấp, có chân E cho phép mã hóa khi ở mức 1Code:entity MAHOA_83E is Port ( E : in STD_LOGIC; I : in STD_LOGIC_VECTOR (07 downto 0); Q : out STD_LOGIC_VECTOR (02 downto 0));end MAHOA_83E;

architecture GIANG of MAHOA_83E isbegin

PROCESS (E,I)VARIABLE QTAM: STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN

IF E='0' THEN QTAM:= "000";ELSE

CASE I ISWHEN "11111110" => QTAM:="000";WHEN "11111101" => QTAM:="001";WHEN "11111011" => QTAM:="010";WHEN "11110111" => QTAM:="011";WHEN "11101111" => QTAM:="100";WHEN "11011111" => QTAM:="101";WHEN "10111111" => QTAM:="110";WHEN "01111111" => QTAM:="111";WHEN OTHERS => NULL;

END CASE;END IF;

Q <= QTAM;END PROCESS;

end GIANG;

Mô phỏng:

Page 11: BAO CAO PLD

PHẦN 3: MẠCH ĐA HỢP

Bài 409: mạch đa hợp 4 vào 1 ra, 2 selectCode:entity DAHOP_41_2S is Port ( S : in STD_LOGIC_VECTOR (01 downto 0); I : in STD_LOGIC_VECTOR (03 downto 0); Q : out STD_LOGIC);end DAHOP_41_2S;

architecture GIANG of DAHOP_41_2S isbegin

PROCESS (I,S)VARIABLE QTAM: STD_LOGIC;BEGIN

IF ( S(1)='0' OR S(0)='0' ) THEN QTAM:='0';ELSIF S="11" THEN

CASE I ISWHEN "0001" => QTAM:=I(0);WHEN "0010" => QTAM:=I(1);WHEN "0100" => QTAM:=I(2);WHEN "1000" => QTAM:=I(3);WHEN OTHERS => NULL;

END CASE;END IF;

Q <= QTAM;END PROCESS;

end GIANG;

Mô phỏng:

Page 12: BAO CAO PLD

Bài 410: đa hợp 8 vào 2 ra, 3 selectCode:entity DAHOP_81_3S is Port ( S : in STD_LOGIC_VECTOR (02 downto 0); I : in STD_LOGIC_VECTOR (07 downto 0); Q : out STD_LOGIC);end DAHOP_81_3S;

architecture GIANG of DAHOP_81_3S isbegin

PROCESS (S,I)VARIABLE QTAM: STD_LOGIC;BEGIN

IF S(0)='0' OR S(1)='0' OR S(2)='0' THEN QTAM:='0';ELSIF S="111" THEN

CASE I ISWHEN "00000001" => QTAM:=I(0);WHEN "00000010" => QTAM:=I(1);WHEN "00000100" => QTAM:=I(2);WHEN "00001000" => QTAM:=I(3);WHEN "00010000" => QTAM:=I(4);WHEN "00100000" => QTAM:=I(5);WHEN "01000000" => QTAM:=I(6);WHEN "10000000" => QTAM:=I(7);WHEN OTHERS => NULL;

END CASE;END IF;

Q <= QTAM;END PROCESS;

end GIANG;

Page 13: BAO CAO PLD

Mô phỏng:

Bài 411: mạch đa hợp giống như 74151 (hình 4-5 trang 61)Code:entity IC74151 is Port ( G : in STD_LOGIC; S : in STD_LOGIC_VECTOR(2 DOWNTO 0); I : in STD_LOGIC_VECTOR(7 DOWNTO 0); Q : out STD_LOGIC; QD: out STD_LOGIC);end IC74151;

architecture GIANG of IC74151 isbegin

PROCESS (G,S,I)VARIABLE QT : STD_LOGIC;BEGIN

IF G='0' THEN QT :='0';ELSE

CASE S ISWHEN "000" => QT:=I(0);WHEN "001" => QT:=I(1);WHEN "010" => QT:=I(2);WHEN "011" => QT:=I(3);WHEN "100" => QT:=I(4);WHEN "101" => QT:=I(5);WHEN "110" => QT:=I(6);WHEN "111" => QT:=I(7);WHEN OTHERS=> NULL;

END CASE;END IF;

Q <= QT;QD <= NOT(QT);END PROCESS;

end GIANG;

Page 14: BAO CAO PLD

Mô phỏng:

PHẦN 4: MẠCH GIẢI ĐA HỢP

Bài 412: mạch giải đa hợp 1 vào 4 ra, 2 selectCode:entity GIAIDAHOP_14 is Port ( S : in STD_LOGIC_VECTOR (01 downto 0); I : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (03 downto 0));end GIAIDAHOP_14;

architecture GIANG of GIAIDAHOP_14 isbegin

PROCESS (S,I)VARIABLE QTAM: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN

CASE S ISWHEN "00" => QTAM(0):=I;WHEN "01" => QTAM(1):=I;WHEN "10" => QTAM(2):=I;WHEN OTHERS => QTAM(3):=I;

END CASE;Q <= QTAM;END PROCESS;

end GIANG;

Page 15: BAO CAO PLD

Mô phỏng:

Bài 413: mạch giải đa hợp 1 vào 8 ra, 3 select

Code:entity GIAIDAHOP_18 is Port ( S : in STD_LOGIC_VECTOR (02 downto 0); I : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (07 downto 0));end GIAIDAHOP_18;

architecture GIANG of GIAIDAHOP_18 isbegin

PROCESS (I,S)VARIABLE QTAM: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN

CASE S ISWHEN "000" => QTAM(0):=I;WHEN "001" => QTAM(1):=I;WHEN "010" => QTAM(2):=I;WHEN "011" => QTAM(3):=I;WHEN "100" => QTAM(4):=I;WHEN "101" => QTAM(5):=I;WHEN "110" => QTAM(6):=I;WHEN OTHERS => QTAM(7):=I;

END CASE;Q <= QTAM;END PROCESS;

end GIANG;

Mô phỏng:

Page 16: BAO CAO PLD

Bài 414: mạch giải đa hợp 1 vào 16 ra, 4 selectCode:entity GIAIDAHOP_116 is Port ( S : in STD_LOGIC_VECTOR (03 downto 0); I : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (015 downto 0));end GIAIDAHOP_116;

architecture GIANG of GIAIDAHOP_116 isbegin

PROCESS (S,I)VARIABLE QTAM: STD_LOGIC_VECTOR(15 DOWNTO 0);BEGIN

CASE S ISWHEN "0000" => QTAM(0):=I;WHEN "0001" => QTAM(1):=I;WHEN "0010" => QTAM(2):=I;WHEN "0011" => QTAM(3):=I;WHEN "0100" => QTAM(4):=I;WHEN "0101" => QTAM(5):=I;WHEN "0110" => QTAM(6):=I;WHEN "0111" => QTAM(7):=I;WHEN "1000" => QTAM(8):=I;WHEN "1001" => QTAM(9):=I;WHEN "1010" => QTAM(10):=I;WHEN "1011" => QTAM(11):=I;WHEN "1100" => QTAM(12):=I;WHEN "1101" => QTAM(13):=I;WHEN "1110" => QTAM(14):=I;WHEN OTHERS => QTAM(15):=I;

END CASE;Q <= QTAM;END PROCESS;

end GIANG;

Page 17: BAO CAO PLD

Mô phỏng:

PHẦN 5: MẠCH GIẢI MÃ LED 7 ĐOẠN

Bài 415: mạch giải mã Led 7 đoạn anode chung từ 0 đến 9Code:entity GIAIMA_LED7DOAN_ANODE_09 is Port ( I : in STD_LOGIC_VECTOR (03 downto 0); Q : out STD_LOGIC_VECTOR (07 downto 0));end GIAIMA_LED7DOAN_ANODE_09;

architecture GIANG of GIAIMA_LED7DOAN_ANODE_09 isbeginPROCESS (I)

VARIABLE QTAM: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN

CASE I ISWHEN "0000" => QTAM:=X"C0";WHEN "0001" => QTAM:=X"F9";WHEN "0010" => QTAM:=X"A4";WHEN "0011" => QTAM:=X"B0";WHEN "0100" => QTAM:=X"99";WHEN "0101" => QTAM:=X"92";WHEN "0110" => QTAM:=X"82";WHEN "0111" => QTAM:=X"F8";WHEN "1000" => QTAM:=X"80";WHEN "1001" => QTAM:=X"90";WHEN OTHERS => QTAM:=X"FF";

END CASE;Q <= QTAM;

Page 18: BAO CAO PLD

END PROCESS;end GIANG;Mô phỏng:

Bài 416: giải mã Led 7 đoạn anode chung từ 0 đến FCode:entity GIAIMA_LED7DOAN_ANODE_0F is Port ( I : in STD_LOGIC_VECTOR (03 downto 0); Q : out STD_LOGIC_VECTOR (07 downto 0));end GIAIMA_LED7DOAN_ANODE_0F;

architecture GIANG of GIAIMA_LED7DOAN_ANODE_0F isbegin

PROCESS (I)VARIABLE QTAM: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN

CASE I ISWHEN "0000" => QTAM:=X"C0";WHEN "0001" => QTAM:=X"F9";WHEN "0010" => QTAM:=X"A4";WHEN "0011" => QTAM:=X"B0";WHEN "0100" => QTAM:=X"99";WHEN "0101" => QTAM:=X"92";WHEN "0110" => QTAM:=X"82";WHEN "0111" => QTAM:=X"F8";WHEN "1000" => QTAM:=X"80";WHEN "1001" => QTAM:=X"90";WHEN "1010" => QTAM:=X"88";WHEN "1011" => QTAM:=X"83";WHEN "1100" => QTAM:=X"C6";WHEN "1101" => QTAM:=X"A1";WHEN "1110" => QTAM:=X"86";WHEN OTHERS => QTAM:=X"8E";

END CASE;

Page 19: BAO CAO PLD

Q <= QTAM;END PROCESS;

end GIANG;

Mô phỏng:

Bài 417: giải mã led 7 đoạn có chân S lựa chọn: S=0 thì giải mã anode chung, S=1 thì giải mã cathode chungCode:entity GIAIMA_LED7DOAN_S is Port ( S : in STD_LOGIC; I : in STD_LOGIC_VECTOR (03 downto 0); Q : out STD_LOGIC_VECTOR (07 downto 0));end GIAIMA_LED7DOAN_S;

architecture GIANG of GIAIMA_LED7DOAN_S isbegin

PROCESS (I,S)VARIABLE QTAM: STD_LOGIC_VECTOR (7 DOWNTO 0);BEGIN

CASE I ISWHEN "0000" => QTAM:=X"C0";WHEN "0001" => QTAM:=X"F9";WHEN "0010" => QTAM:=X"A4";WHEN "0011" => QTAM:=X"B0";WHEN "0100" => QTAM:=X"99";WHEN "0101" => QTAM:=X"92";WHEN "0110" => QTAM:=X"82";WHEN "0111" => QTAM:=X"F8";WHEN "1000" => QTAM:=X"80";WHEN "1001" => QTAM:=X"90";WHEN OTHERS => QTAM:=X"FF";

END CASE;IF S='0' THEN Q <= QTAM;

Page 20: BAO CAO PLD

ELSE Q <= NOT(QTAM);END IF;

END PROCESS;end GIANG;

Mô phỏng:

PHẦN 6: CHUYỂN ĐỔI SỐ HEX (NHỊ PHẦN) SANG SỐ BCD

Bài 418: chuyển đổi số nhị phân 8 bit sang số BCDCode:entity HEXTOBCD_8BIT is Port ( I : in STD_LOGIC_VECTOR (7 downto 0); Q : out STD_LOGIC_VECTOR (11 downto 0));end HEXTOBCD_8BIT;

architecture GIANG of HEXTOBCD_8BIT isbegin

PROCESS (I)VARIABLE BCD:STD_LOGIC_VECTOR(11 DOWNTO 0);VARIABLE HEX:STD_LOGIC_VECTOR(7 DOWNTO 0);VARIABLE DEM: INTEGER RANGE 0 TO 10;BEGIN

HEX:=I;DEM:=8;BCD:="000000000000";WHILE DEM>1 LOOP

BCD:=BCD(10 DOWNTO 0) & HEX(7);HEX:=HEX(6 DOWNTO 0) & '0';DEM:= DEM-1;IF (BCD(3 DOWNTO 0) >= "0101") THEN BCD(3

DOWNTO 0):= BCD(3 DOWNTO 0) + "0011";END IF;

Page 21: BAO CAO PLD

IF (BCD(7 DOWNTO 4) >= "0101")THEN BCD(7 DOWNTO 4):= BCD(7 DOWNTO 4) + "0011";

END IF;END LOOP;

BCD:=BCD(10 DOWNTO 0)&HEX(7);Q <= BCD;END PROCESS;

end GIANG;

Mô phỏng:

Bài 419: chuyển đổi số nhị phân 10 bit sang số BCDCode:entity HEXTOBCD_10BIT is Port ( I : in STD_LOGIC_VECTOR (9 downto 0); Q : out STD_LOGIC_VECTOR (15 downto 0));end HEXTOBCD_10BIT;

architecture GIANG of HEXTOBCD_10BIT isbegin

PROCESS (I)VARIABLE BCD: STD_LOGIC_VECTOR(15 DOWNTO 0);VARIABLE HEX: STD_LOGIC_VECTOR(9 DOWNTO 0);VARIABLE DEM: INTEGER RANGE 0 TO 10;BEGIN

HEX:=I;BCD:=X"0000";DEM:=10;

Page 22: BAO CAO PLD

WHILE DEM>1 LOOPBCD:=BCD(14 DOWNTO 0)&HEX(9);HEX:=HEX(8 DOWNTO 0)&'0';DEM:=DEM-1;

IF BCD(3 DOWNTO 0)>="0101" THEN BCD(3 DOWNTO 0):=BCD(3 DOWNTO 0)+"0011";

END IF;

IF BCD(7 DOWNTO 4)>="0101" THEN BCD(7 DOWNTO 4):=BCD(7 DOWNTO 4)+"0011";

END IF;

IF BCD(11 DOWNTO 8)>="0101" THEN BCD(11 DOWNTO 8):=BCD(11 DOWNTO 8)+"0011";

END IF;

END LOOP;BCD:=BCD(14 DOWNTO 0)&HEX(9);Q <= BCD;END PROCESS;

end GIANG;

Mô phỏng:

Page 23: BAO CAO PLD

Bài 420: chuyển đổi số nhị phân 16 bit sang số BCDCode:entity HEXTOBCD_16BIT is Port ( I : in STD_LOGIC_VECTOR (15 downto 0); Q : out STD_LOGIC_VECTOR (19 downto 0));end HEXTOBCD_16BIT;

architecture GIANG of HEXTOBCD_16BIT is

beginPROCESS (I)VARIABLE HEX: STD_LOGIC_VECTOR(15 DOWNTO 0);VARIABLE BCD: STD_LOGIC_VECTOR(19 DOWNTO 0);VARIABLE DEM: INTEGER RANGE 0 TO 16;

BEGINHEX:=I;BCD:=X"00000";DEM:=16;

WHILE DEM>1 LOOPBCD:=BCD(18 DOWNTO 0)&HEX(15);HEX:=HEX(14 DOWNTO 0)&'0';DEM:=DEM-1;

IF BCD(3 DOWNTO 0)>="0101" THEN BCD(3 DOWNTO 0):=BCD(3 DOWNTO 0)+"0011";

END IF;

IF BCD(7 DOWNTO 0)>="0011" THEN BCD(7 DOWNTO 4):=BCD(7 DOWNTO 4)+"0011";

END IF;

IF BCD(11 DOWNTO 8)>="0101" THEN BCD(11 DOWNTO 8):=BCD(11 DOWNTO 8)+"0011";

END IF;

IF BCD(15 DOWNTO 12)>="0101" THEN BCD(15 DOWNTO 12):=BCD(15 DOWNTO 12)+"0011";

END IF;END LOOP;

BCD:= BCD(18 DOWNTO 0)&HEX(15);Q <= BCD;END PROCESS;

end GIANG;

Page 24: BAO CAO PLD

Mô phỏng:

Page 25: BAO CAO PLD

BÀI 5: CHƯƠNG TRÌNH VHDL CHO CÁC MẠCH TUẦN TỰ

PHẦN 1: THANH GHI DỊCH

Bài 501: thanh ghi dịch 8 bit có chân clr, clk, dCode:entity DICH_8BIT is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; I : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0));end DICH_8BIT;

architecture GIANG of DICH_8BIT isbeginPROCESS (CLR,CLK)VARIABLE QTAM: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN

IF CLR='0' THEN QTAM:=X"00";ELSIF CLK='1' AND CLK'EVENT THEN QTAM:=QTAM(6 DOWNTO 0)&I;

END IF;Q <=QTAM;END PROCESS;

end GIANG;

Mô phỏng:

Bài 502: thanh ghi dịch 8 bit giống 74164 (hình 5-3 trang 74)Code:entity DICH_8BIT_IC74164 is Port ( MR : in STD_LOGIC; CLK : in STD_LOGIC; DS : in STD_LOGIC_VECTOR(2 DOWNTO 1);

Page 26: BAO CAO PLD

Q : out STD_LOGIC_VECTOR (7 downto 0));end DICH_8BIT_IC74164;

architecture GIANG of DICH_8BIT_IC74164 isbeginPROCESS (MR,CLK,DS)VARIABLE QTAM: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN

IF MR='1' THEN QTAM:=X"00";ELSIF CLK='1' AND CLK'EVENT THEN

CASE DS ISWHEN "00" => QTAM:=QTAM(7 DOWNTO 1)&'0';WHEN "01" => QTAM:=QTAM(7 DOWNTO 1)&'0';WHEN "10" => QTAM:=QTAM(7 DOWNTO 1)&'0';WHEN "11" => QTAM:=QTAM(7 DOWNTO 1)&'1';WHEN OTHERS => NULL;

END CASE;END IF;

Q <= QTAM;END PROCESS;end GIANG;Mô phỏng:

Bài 503: 8 led sáng dần lên và tắt hết từ trái sang phảiCode:

entity DK_8LED_SANGDAN_TATHET_PT is Port ( CLR : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0));end DK_8LED_SANGDAN_TATHET_PT;

architecture GIANG of DK_8LED_SANGDAN_TATHET_PT is

Page 27: BAO CAO PLD

beginPROCESS (CLR,CLK)VARIABLE QTAM:STD_LOGIC_VECTOR(7 DOWNTO 0);VARIABLE DEM: INTEGER :=0;BEGIN

IF CLR='0' THEN QTAM:=X"00";ELSIF CLK='1' AND CLK'EVENT THEN

QTAM:= '1' & QTAM(7 DOWNTO 1);DEM:=DEM+1;

IF DEM=9 THEN QTAM:=X"00";END IF;

END IF;Q <= QTAM;END PROCESS;

end GIANG;

Mô phỏng:

Bài 504: 8 led sáng dần lên và tắt dần 2 chiều lựa chọn bằng 1 ngõ vào S: S=0 thì từ trái sang phải, S=1 thì từ phải sang tráiCode:

entity DK_8LED_SANGDAN_TATDAN_S is Port ( CLR : in STD_LOGIC; CLK : in STD_LOGIC; S : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0));end DK_8LED_SANGDAN_TATDAN_S;

architecture GIANG of DK_8LED_SANGDAN_TATDAN_S isbegin

PROCESS (CLR,CLK,S)VARIABLE QTAM: STD_LOGIC_VECTOR(7 DOWNTO 0);VARIABLE DEM: INTEGER :=0;VARIABLE D:STD_LOGIC;BEGIN

Page 28: BAO CAO PLD

IF CLR='0' THEN QTAM:=X"00";ELSIF CLK='1' AND CLK'EVENT THEN

DEM:=DEM+1;

IF DEM<9 THEN D:='1';ELSIF DEM<17 THEN D:='0';END IF;

IF S='1' THEN QTAM:=D&QTAM(7 DOWNTO 1);ELSE QTAM:=QTAM(6 DOWNTO 0)&D;

IF DEM=17 THEN DEM:=0;END IF;

END IF;END IF;Q <=QTAM;

END PROCESS;end GIANG;

Mô phỏng:

Bài 505: 8 led sáng dần lên và tắt dần 2 chiều từ trái sang phải và sau đó từ phải sang tráiCode:

entity DK_8LED_SANGDAN_TATDAN_2CHIEU is Port ( CLR : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0));end DK_8LED_SANGDAN_TATDAN_2CHIEU;

architecture GIANG of DK_8LED_SANGDAN_TATDAN_2CHIEU isbeginPROCESS (CLR,CLK)

VARIABLE QTAM:STD_LOGIC_VECTOR(7 DOWNTO 0);VARIABLE DEM:INTEGER:=0;

BEGIN

Page 29: BAO CAO PLD

IF CLR='0' THEN QTAM:=X"00";ELSIF CLK='1' AND CLK'EVENT THEN DEM:=DEM+1;IF DEM<9 THEN QTAM:='1'&QTAM(7 DOWNTO 1);

ELSIF DEM<17 THEN QTAM:='0'&QTAM(7 DOWNTO 1);ELSIF DEM<25 THEN QTAM:=QTAM(6 DOWNTO 0)&'1';ELSIF DEM<33 THEN QTAM:=QTAM(6 DOWNTO 0)&'0';

DEM:=0;END IF;END IF;

Q <=QTAM;END PROCESS;

end GIANG;

Mô phỏng:

Bài 506: thanh ghi dịch 4 bit giống như 74194 (hình 5-4 trang 75)Code:

Mô phỏng:

Bài 507: mạch đếm vòng 8 bit có reset và pauseCode:

entity DEMVONG_8BIT_RP is Port ( R : in STD_LOGIC; P : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0));end DEMVONG_8BIT_RP;

architecture GIANG of DEMVONG_8BIT_RP isbegin

PROCESS (R,P,CLK)VARIABLE QTAM:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN

Page 30: BAO CAO PLD

IF R='0' THEN QTAM:="00000001";ELSIF CLK='1' AND CLK'EVENT AND P='1' THEN

QTAM(7 DOWNTO 0):=QTAM(0)&QTAM(7 DOWNTO 1);END IF;

Q <= QTAM;END PROCESS;

end GIANG;

Mô phỏng:

Bài 508: 1 điểm sáng dịch chuyển từ phải sang trái, sau đó từ trái sang phảiCode:

entity DIEMSANG_DICHCHUYEN is Port ( CLR : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0));end DIEMSANG_DICHCHUYEN;

architecture GIANG of DIEMSANG_DICHCHUYEN isbeginPROCESS(CLR,CLK)

VARIABLE QTAM:STD_LOGIC_VECTOR(7 DOWNTO 0):="00000001";VARIABLE DEM: INTEGER RANGE 0 TO 16;

BEGINIF CLR='0' THEN QTAM:="00000001";ELSIF CLK='1' AND CLK'EVENT THEN DEM:=DEM+1;IF DEM<8 THEN QTAM:=QTAM(6 DOWNTO 0)& QTAM(7);ELSIF DEM<15 THEN QTAM:=QTAM(0)& QTAM(7 DOWNTO 1);

ELSIF DEM=15 THEN DEM:=0;END IF;

END IF;Q <= QTAM;END PROCESS;

end GIANG;

Page 31: BAO CAO PLD

Mô phỏng:

Bài 509: 1 điểm sáng chạy từ phải sang trái, sau đó chạy từ trái sang phải, sáng dần lên và tắt dần từ trái sang phải, sáng dần lên và tắt dần từ phải sang trái, sáng dần và tắt dần từ ngoài vào trong, từ trong ra ngoài rồi lặp lạiCode:

entity DICH_TONGHOP is Port ( CLR : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0));end DICH_TONGHOP;

architecture GIANG of DICH_TONGHOP isbeginPROCESS (CLR,CLK)

VARIABLE QTAM:STD_LOGIC_VECTOR(7 DOWNTO 0);VARIABLE DEM: INTEGER RANGE 0 TO 70;

BEGINIF CLR='0' THEN QTAM:="00000001";ELSIF CLK='1' AND CLK'EVENT THEN

DEM:=DEM+1;IF DEM<8 THEN QTAM:=QTAM(6 DOWNTO 0)&QTAM(7);ELSIF DEM<16 THEN QTAM:=QTAM(0)&QTAM(7 DOWNTO 1);ELSIF DEM<24 THEN QTAM:='1'&QTAM(7 DOWNTO 1);ELSIF DEM<32 THEN QTAM:='0'&QTAM(7 DOWNTO 1);ELSIF DEM<40 THEN QTAM:=QTAM(6 DOWNTO 0)&'1';ELSIF DEM<48 THEN QTAM:=QTAM(6 DOWNTO 0)&'0';ELSIF DEM<52 THEN QTAM:='1'&QTAM(7 DOWNTO 5) & QTAM(2

DOWNTO 0)&'1';ELSIF DEM<56 THEN QTAM:='0'&QTAM(7 DOWNTO 5) & QTAM(2

DOWNTO 0)&'0';ELSIF DEM<60 THEN QTAM:=QTAM(6 DOWNTO 4)&'1' &

'1'&QTAM(3 DOWNTO 1);ELSIF DEM<64 THEN QTAM:=QTAM(6 DOWNTO 4)&'0' &

'0'&QTAM(3 DOWNTO 1);

Page 32: BAO CAO PLD

ELSIF DEM=64 THEN DEM:=0;QTAM:="00000001";END IF;

END IF;Q <= QTAM;

END PROCESS;end GIANG;

Mô phỏng:

PHẦN 2: MẠCH ĐẾM HIỂN THỊ TRÊN LED ĐƠN

Bài 510: mạch đếm nhị phân 4 bit – đếm xuống có clk, reset, pauseCode:

entity DEM_NHIPHAN_4BIT is Port ( R : in STD_LOGIC; P : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0));end DEM_NHIPHAN_4BIT;

architecture GIANG of DEM_NHIPHAN_4BIT isbegin

PROCESS (CLK,R,P)VARIABLE QTAM: STD_LOGIC_VECTOR(3 DOWNTO 0):="1111";BEGIN

IF R='0' THEN QTAM:="0000";ELSIF CLK='1' AND CLK'EVENT AND P='1' THEN

QTAM:=QTAM-1;END IF;

Q <= QTAM;END PROCESS;

end GIANG;

Mô phỏng:

Page 33: BAO CAO PLD

Bài 511: mạch đếm BCD – đếm lên có clk, reset, pauseCode:

entity DEM_BCD is Port ( R : in STD_LOGIC; P : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0));end DEM_BCD;

architecture GIANG of DEM_BCD isbegin

PROCESS (R,P,CLK)VARIABLE QTAM:STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";BEGIN

IF R='0' THEN QTAM:="0000";ELSIF CLK='1' AND CLK'EVENT AND P='1' THEN

QTAM:=QTAM+1;IF QTAM=10 THEN QTAM:="0000";END IF;

END IF;Q <= QTAM;END PROCESS;

end GIANG;

Mô phỏng:

Page 34: BAO CAO PLD

Bài 512: mạch đếm BCD hiển thị trên led đơn từ 0000.0000 đến 1001.1001 có clk, clr, pauseCode:

entity DEM_2BCD_HIENTHI_LEDDON is Port ( R : in STD_LOGIC; P : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0));end DEM_2BCD_HIENTHI_LEDDON;

architecture GIANG of DEM_2BCD_HIENTHI_LEDDON isbeginPROCESS (R,P,CLK)

VARIABLE QTAM:STD_LOGIC_VECTOR(7 DOWNTO 0):=X"00";BEGIN

IF R='0' THEN QTAM:=X"00";ELSIF CLK='1' AND CLK'EVENT AND P='1' THEN

QTAM(3 DOWNTO 0):=QTAM(3 DOWNTO 0)+1;IF QTAM(3 DOWNTO 0)=10 THEN

QTAM(7 DOWNTO 4):= QTAM(7 DOWNTO 4)+1;QTAM(3 DOWNTO 0):=X"0";

IF QTAM(7 DOWNTO 4)=10 THEN QTAM(7 DOWNTO 4):=X"0";END IF;

END IF;END IF;

Q <= QTAM;END PROCESS;end GIANG;

Mô phỏng:

PHẦN 3: MẠCH ĐẾM HIỂN THỊ LED 7 ĐOẠN

Bài 513: mạch đếm BCD hiển thị trên led 7 đoạn anode chung – đếm lên có clk, clr, pause

Page 35: BAO CAO PLD

Code:

entity DEM_2BCD_HIENTHI_LEDDON is Port ( R : in STD_LOGIC; P : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0));end DEM_2BCD_HIENTHI_LEDDON;

architecture GIANG of DEM_2BCD_HIENTHI_LEDDON isbeginPROCESS (R,P,CLK)

VARIABLE QTAM:STD_LOGIC_VECTOR(7 DOWNTO 0):=X"00";BEGIN

IF R='0' THEN QTAM:=X"00";ELSIF CLK='1' AND CLK'EVENT AND P='1' THEN

QTAM(3 DOWNTO 0):=QTAM(3 DOWNTO 0)+1;IF QTAM(3 DOWNTO 0)=10 THEN

QTAM(7 DOWNTO 4):= QTAM(7 DOWNTO 4)+1;QTAM(3 DOWNTO 0):=X"0";

IF QTAM(7 DOWNTO 4)=10 THEN QTAM(7 DOWNTO 4):=X"0";

END IF;END IF;

END IF;Q <= QTAM;END PROCESS;end GIANG;

Mô phỏng:

PHẦN 4: MẠCH ĐẾM HIỂN THỊ LED 7 ĐOẠN- DÙNG FUNCTION

Page 36: BAO CAO PLD

Bài 518: đếm BCD từ 000 – 999 giải mã 3 led 7 đoạn anode chungCode:

entity CHUONG_TRINH is Port ( CK : in STD_LOGIC; CLR : in STD_LOGIC; QDV : out STD_LOGIC_VECTOR (7 downto 0); QCH : out STD_LOGIC_VECTOR (7 downto 0);

QTR: OUT STD_LOGIC_VECTOR (7 DOWNTO 0));end CHUONG_TRINH;

architecture Behavioral of CHUONG_TRINH isFUNCTION GIAIMA(X:INTEGER ) RETURN STD_LOGIC_VECTOR IS

VARIABLE MA7D: STD_LOGIC_VECTOR(7 DOWNTO 0 );BEGINCASE X IS WHEN 0 => MA7D:=X"C0";WHEN 1 => MA7D:=X"F9";WHEN 2 => MA7D:=X"A4";WHEN 3 => MA7D:=X"B0";WHEN 4 => MA7D:=X"99";WHEN 5 => MA7D:=X"92";WHEN 6 => MA7D:=X"82";WHEN 7 => MA7D:=X"F8";WHEN 8 => MA7D:=X"80";WHEN 9 => MA7D:=X"90";WHEN OTHERS => NULL;END CASE;

RETURN MA7D;END GIAIMA;

beginPROCESS(CLR,CK)VARIABLE DVI: INTEGER RANGE 0 TO 200:=0;VARIABLE CHC: INTEGER RANGE 0 TO 200:=0;VARIABLE TRM: INTEGER RANGE 0 TO 200:=0;BEGIN

IF CLR='0' THENDVI:=0;CHC:=0;TRM:=0;ELSIF RISING_EDGE(CK) THENDVI := DVI +1;IF DVI =10 THEN

DVI:= 0 ;

Page 37: BAO CAO PLD

CHC:=CHC+1;END IF;IF CHC = 10 THEN

CHC:=0;DVI:=0;TRM:=TRM+1;

END IF;IF TRM=10 THEN

TRM:=0;CHC:=0;DVI:=0;

END IF;END IF;

QDV <= GIAIMA(DVI);QCH <= GIAIMA(CHC);QTR <= GIAIMA(TRM);END PROCESS;end GIANG;

Mô phỏng:

Bài 519:Code:

Mô phỏng:

Page 38: BAO CAO PLD

Bài 520:Code:

Mô phỏng:

Bài 521:Code:

Mô phỏng:

PHẦN 5: MẠCH ĐẾM HIỂN THỊ LED 7 ĐOẠN- DÙNG PACKAGE

Bài : chương trình package giải mã led 7 đoạn anode chungCode:

library IEEE;use IEEE.STD_LOGIC_1164.all;

package PK_GIAIMA7SEG isFUNCTION GIAIMA7SEG (BCD_IN: IN INTEGER) RETURN

STD_LOGIC_VECTOR;END PK_GIAIMA7SEG;

package body PK_GIAIMA7SEG isFUNCTION GIAIMA7SEG (BCD_IN: IN INTEGER) RETURN

STD_LOGIC_VECTOR IS VARIABLE MA7SEG: STD_LOGIC_VECTOR(7 DOWNTO 0);

begin

CASE BCD_IN ISWHEN 0 => MA7SEG :=X"C0";WHEN 1 => MA7SEG :=X"F9";WHEN 2 => MA7SEG :=X"A4";WHEN 3 => MA7SEG :=X"B0";WHEN 4 => MA7SEG :=X"99";WHEN 5 => MA7SEG :=X"92";

Page 39: BAO CAO PLD

WHEN 6 => MA7SEG :=X"82";WHEN 7 => MA7SEG :=X"F8";WHEN 8 => MA7SEG :=X"80";WHEN 9 => MA7SEG :=X"90";WHEN OTHERS => MA7SEG:=X"FF";

END CASE;RETURN MA7SEG;

END GIAIMA7SEG;END PK_GIAIMA7SEG;

Bài 522: đếm BCD từ 000 -999 giải mã 3 led 7 đoạn dùng packageCode:

Mô phỏng:

Bài 523: đếm BCD từ 000 – 123 giải mã led 7 đoạn dùng packageCode:

Mô phỏng:

Bài 524: đếm BCD hiển thị 3 led 7 đoạn: khi reset thì 3 led bằng 000, khi có xung clk thì led thứ nhất đếm từ 0 đến 9, tương tụ cho 3 led. Khi 3 led bằng 999 thì bắt đầu quay về 000 bắt đầu đếm lại – dùng packageCode:

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;USE WORK.PK_GIAIMA_7D.ALL;

---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;

entity CHUONG_TRINH is Port ( CLK : in STD_LOGIC; R : in STD_LOGIC;

Page 40: BAO CAO PLD

QDV : out STD_LOGIC_VECTOR (7 downto 0); QCH : out STD_LOGIC_VECTOR (7 downto 0); QTR : out STD_LOGIC_VECTOR (7 downto 0));end CHUONG_TRINH;

architecture Behavioral of CHUONG_TRINH isSIGNAL F: STD_LOGIC_VECTOR (11 DOWNTO 0);beginPROCESS(CLK,R,F)

VARIABLE DV: INTEGER RANGE 0 TO 10:=0;VARIABLE CH: INTEGER RANGE 0 TO 10:=0;VARIABLE TR: INTEGER RANGE 0 TO 10:=0;VARIABLE DEM: INTEGER RANGE 0 TO 200:=0;

BEGINIF R='1' THEN DV:=0;CH:=0;TR:=0;ELSIF RISING_EDGE(CLK) THEN F<=F+1;

IF F="111111111111" THEN DEM:=DEM+1;IF DEM>=0 AND DEM<9 THEN DV:=DV+1;

ELSIF DEM>9 AND DEM<=19 THEN DV:=9;CH:=CH+1;ELSIF DEM>19 AND DEM<=29 THEN

DV:=9;CH:=9;TR:=TR+1;ELSIF DEM>29 AND DEM<=39 THEN DV:=DV-

1;CH:=9;TR:=9;ELSIF DEM>39 AND DEM<=49 THEN DV:=0;CH:=CH-

1;TR:=9;ELSIF DEM>49 AND DEM<=59 THEN DV:=0;CH:=0;TR:=0;END IF;IF DEM=59 THEN DEM:=0;DV:=0;CH:=0;TR:=0;END IF;

END IF;END IF;

QDV<=GIAIMA7DOAN(DV);QCH<=GIAIMA7DOAN(CH);QTR<=GIAIMA7DOAN(TR);END PROCESS;end GIANG;

Mô phỏng:

PHẦN 6: HIỂN THỊ TRÊN LED 7 ĐOẠN QUÉT

Bài 526: đếm hiển thị đơn vị chụcCode:

Page 41: BAO CAO PLD

Mô phỏng:

Bài 527: đếm hiển thị giờ phút giâyCode:

Mô phỏng: