asdadas
Trang 1BÁO CÁO GIỮA KỲ MÔN THỰC HÀNH
Port ( I : in STD_LOGIC_VECTOR (1 downto 0);
Q : OUT STD_LOGIC_VECTOR (3 downto 0));
Trang 2Bài 202: mạch đếm nhị phân 4 bit
Trang 3BÀ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 1
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 1
Code:
entity GIAIMA_24ES is
Trang 4Port ( I : in STD_LOGIC_VECTOR (01 downto 0);
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 1
Trang 5END 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 cao
Trang 6architecture GIANG of GIAIMA_38ES is
Trang 7architecture GIANG of IC74138 is
Trang 8Q : out STD_LOGIC_VECTOR (07 downto 0));
end IC74139;
architecture GIANG of IC74139 is
SIGNAL QTA : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL QTB : STD_LOGIC_VECTOR(3 DOWNTO 0);begin
Trang 9Bà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ấp
Code:
entity MAHOA_83 is
Port ( I : in STD_LOGIC_VECTOR (07 downto 0);
Q : out STD_LOGIC_VECTOR (02 downto 0));
Trang 10Bà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
Trang 11CASE I IS
WHEN"0001" => QTAM:=I(0);WHEN"0010" => QTAM:=I(1);WHEN"0100" => QTAM:=I(2);WHEN"1000" => QTAM:=I(3);WHENOTHERS => NULL;END CASE;
Trang 12Bài 410: đa hợp 8 vào 2 ra, 3 select
CASE I IS
WHEN"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);WHENOTHERS => NULL;END CASE;
END IF;
Q <= QTAM;
END PROCESS;
end GIANG;
Trang 16Bài 414: mạch giải đa hợp 1 vào 16 ra, 4 select
Trang 17Mô 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 9
Code:
entity GIAIMA_LED7DOAN_ANODE_09 is
Port ( I : in STD_LOGIC_VECTOR (03 downto 0);
Q : out STD_LOGIC_VECTOR (07 downto 0));
Q <= QTAM;
Trang 18Port ( I : in STD_LOGIC_VECTOR (03 downto 0);
Q : out STD_LOGIC_VECTOR (07 downto 0));
Trang 20PHẦ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ố BCD
Code:
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 is
begin
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;
Trang 21IF (BCD(7 DOWNTO 4) >= "0101") THEN BCD(7 DOWNTO 4):= BCD(7 DOWNTO 4) + "0011";
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 is
begin
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;
Trang 22WHILE DEM>1 LOOP
Trang 23Bài 420: chuyển đổi số nhị phân 16 bit sang số BCD
Code:
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
begin
PROCESS (I)
VARIABLE HEX: STD_LOGIC_VECTOR(15 DOWNTO 0);
VARIABLE BCD: STD_LOGIC_VECTOR(19 DOWNTO 0);
VARIABLE DEM: INTEGER RANGE 0 TO 16;
Trang 24Mô phỏng:
Trang 25BÀI 5: CHƯƠNG TRÌNH VHDL CHO CÁC MẠCH TUẦN TỰ
Trang 27PROCESS (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);
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ái
VARIABLE QTAM: STD_LOGIC_VECTOR(7 DOWNTO 0);
VARIABLE DEM: INTEGER :=0;
VARIABLE D:STD_LOGIC;
BEGIN
IF CLR='0' THEN QTAM:=X"00";
Trang 28ELSIF CLK='1' AND CLK'EVENT THENDEM:=DEM+1;
Trang 29ELSIF 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;
Trang 30ELSIF CLK='1' AND CLK'EVENT AND P='1' THEN
QTAM(7 DOWNTO 0):=QTAM(0)&QTAM(7 DOWNTO 1);END IF;
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;
Trang 31Bà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ại
VARIABLE QTAM:STD_LOGIC_VECTOR(7 DOWNTO 0);
VARIABLE DEM: INTEGER RANGE 0 TO 70;
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' &
Trang 32PHẦ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, pause
Trang 33Bài 511: mạch đếm BCD – đếm lên có clk, reset, pause
Trang 34Bài 512: mạch đếm BCD hiển thị trên led đơn từ 0000.0000 đến 1001.1001 có clk, clr,
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;
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
Code:
Trang 35ELSIF 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;
Trang 36Bài 518: đếm BCD từ 000 – 999 giải mã 3 led 7 đoạn anode chung
Code:
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 is
FUNCTION GIAIMA(X:INTEGER ) RETURN STD_LOGIC_VECTOR IS
VARIABLE MA7D: STD_LOGIC_VECTOR(7 DOWNTO 0 );BEGIN
CASE X IS WHEN 0 => MA7D:=X"C0";
VARIABLE DVI: INTEGER RANGE 0 TO 200:=0;
VARIABLE CHC: INTEGER RANGE 0 TO 200:=0;
VARIABLE TRM: INTEGER RANGE 0 TO 200:=0;
Trang 37END 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;
Trang 38PHẦ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 chung
package body PK_GIAIMA7SEG is
FUNCTION GIAIMA7SEG (BCD_IN: IN INTEGER) RETURN STD_LOGIC_VECTOR IS
VARIABLE MA7SEG: STD_LOGIC_VECTOR(7 DOWNTO 0);
Trang 39Bà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 package
Uncomment the following library declaration if instantiating
any Xilinx primitives in this code
Trang 40QCH : out STD_LOGIC_VECTOR (7 downto 0);
QTR : out STD_LOGIC_VECTOR (7 downto 0));
end CHUONG_TRINH;
architecture Behavioral of CHUONG_TRINH is
SIGNAL F: STD_LOGIC_VECTOR (11 DOWNTO 0);
begin
PROCESS(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;
BEGIN
IF 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
PHẦN 6: HIỂN THỊ TRÊN LED 7 ĐOẠN QUÉT
Bài 526: đếm hiển thị đơn vị chục
Code:
Trang 41Mô phỏng:
Bài 527: đếm hiển thị giờ phút giây
Code:
Mô phỏng: