Nguyên lí hoạt động- Bộ giãi mã có tác dụng phiên dịch mã nhị phân từ A0, A1,A2 sang mã bát phân để từ đó kích hoạt chân Y theo vị trí được... TIẾN TRÌNH THỰC HÀNH I, Thiết kế bộ giải mã
Trang 1TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
KHOA ĐIỆN – ĐIỆN TỬ
BÁO CÁO THỰC HÀNH
THIẾT KẾ HỆ THỐNG SỐ 2
Sinh viên thực hiện : Nguyễn Thành Trung | 42200217
Hồ Anh Khoa | 42200154 Nguyễn Khánh Hưng | 42200200 Nguyễn Phương Nam | 42200208
GVHD : thầy Võ Phú Thoại
Chủ đề thực hành : Thiết kế bộ giãi mã Decoder
3x8 và viết code VHDL của bộ giãi mã
Sơ đồ bộ giãi mã Decoder 3x8
THÀNH PHỐ HỒ CHÍ MINH, NĂM 2024
Trang 2Nguyên lí hoạt động
- Bộ giãi mã có tác dụng phiên dịch mã nhị phân từ A0, A1,A2 sang mã bát phân để từ đó kích hoạt chân Y theo vị trí được
Trang 3VD : nếu input của đầu A là 1|0|1, khi phiên input từ mã nhị phân qua giá trị bát phân thì đèn ở vị trí số 5 hay D4 sẽ nhận được tín hiệu từ đầu vào
TIẾN TRÌNH THỰC HÀNH
I, Thiết kế bộ giải mã Decoder 3x8 và viết code cho
bộ giãi mã.
Bước 1 : Lập bảng sự thật.
Trang 4A B C D0 D1 D2 D3 D4 D5 D6 D7
Bước 2 : Sử dụng bìa Karnaugh
D0= A B C
1
AB
C
Trang 5 D1=
A B C
D2=
A B C
0
AB
C
0
0
1
1
AB
C
Trang 6 D3= A BC
D4=
A B C
0
1
0
1
AB
C
0
1
1
AB
C
Trang 7 D5= A B C
0
1
1
AB
C
0
1
0 1
AB
C
Trang 8 D6=
AB C
D7= ABC
0
1
1
0 AB
C
Trang 9Bước 3 : Vẽ sơ đồ của bộ cộng toàn phần 1 bit.
Trang 11Bước 4 : Viết code VHDL cho bộ giãi mã Decoder 3 x 8
Cách 1 : Sử dụng Case – When ( gán một giá trị lục phân tương ứng cho dãy nhị phân )
Library ieee;
Use ieee.std_logic_1164.all;
Entity decoder_3x8 is
Port ( a : in std_logic_vector (0 to 2 );
( d : out std_logic_vector( o to 7 );
End decoder _x8;
Trang 12Architecture decoder_arch of decocder_3x8 is
Begin
Process ( a)
Begin
Case a is // gán giá trị d ứng với từng mã nhị phân đầu vào bằng case
When “ 000” => d <= “00000001”
When “ 001” => d <= “00000010”;
When “ 010” => d <= “00000100”;
When “ 011” => d <= “00001000”;
When “ 100” => d <= “00010000”;
When “ 101” => d <= “00100000”;
When “ 110” => d <= “01000000”;
Trang 13When others => d <= “00000000”;
End case;
End process;
End decoder_arch;
Cách 2 : sử dụng If – Else ( Xét lần lượt trường hợp của từng ngõ vào A, B, C và tách Output thành từng ngõ ra riêng biệt )
library ieee;
Trang 14use ieee.std_logic_1164.all;
entity decoder is
port (
a, b, c : in std_logic; Các đầu vào a, b, c
d, e, f, g, h, i, j, k : out std_logic Các đầu ra d, e, f, g, h, i, j, k
);
end decoder;
architecture behavior of decoder is
begin
process(a, b, c)
Trang 15Mặc định tất cả các đầu ra ở mức 0
d <= '0';
e <= '0';
f <= '0';
g <= '0';
h <= '0';
i <= '0';
j <= '0';
k <= '0';
Lựa chọn đầu ra theo các tổ hợp đầu vào sử dụng lệnh if
if (a = '0' and b = '0' and c = '0') then
d <= '1'; Đầu vào 000, đầu ra d = 1
elsif (a = '0' and b = '0' and c = '1') then
Trang 16e <= '1'; Đầu vào 001, đầu ra e = 1 elsif (a = '0' and b = '1' and c = '0') then
f <= '1'; Đầu vào 010, đầu ra f = 1 elsif (a = '0' and b = '1' and c = '1') then
g <= '1'; Đầu vào 011, đầu ra g = 1 elsif (a = '1' and b = '0' and c = '0') then
h <= '1'; Đầu vào 100, đầu ra h = 1 elsif (a = '1' and b = '0' and c = '1') then
i <= '1'; Đầu vào 101, đầu ra i = 1 elsif (a = '1' and b = '1' and c = '0') then
j <= '1'; Đầu vào 110, đầu ra j = 1 elsif (a = '1' and b = '1' and c = '1') then
k <= '1'; Đầu vào 111, đầu ra k = 1
Trang 17end process;
end behavior;
Cách 3 : Sử dụng các cổng logic
library ieee;
use ieee.std_logic_1164.all;
entity duphong is
port (
a, b, c : in std_logic; Các đầu vào a, b, c
Trang 18d, e, f, g, h, i, j, k : out std_logic Các đầu ra d, e, f, g, h, i, j, k
);
end duphong;
architecture behavior of duphong is
begin
process(a, b, c)
begin
d <= (not a) and (not b) and(not c);
e <= (not a)and (not b)and c;
f <= (not a) and b and (not c);
Trang 19h <= a and (not b) and (not c);
i <= a and (not b) and c;
j <= a and b and (not c);
k <= a and b and c;
end process;
end behavior;