THIẾT KẾ MẠCH GIẢI MÃ
Bài 1: Thiết kế mạch giải mã 2 đường sang 4 đường với đầu ra tích cực ở
mức cao
sơ đồ khối của mạch:
Lập bảng trạng thái:
Viế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 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)
Dung VP
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 Behavioral;
Bài 2: Thiết kế mạch giải mã 3 đường sang 8 đường với đầu ra tích cực ở
thấp và 1 đầu cho phép E.
Vẽ sơ đồ khối của mạch:
Lập bảng trạng thái:
Viết chương trình:
Dung VP
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity giaima_38 is
Port ( I : in STD_LOGIC_VECTOR (2 downto 0);
Q : out STD_LOGIC_VECTOR (7 downto 0);
E : in STD_LOGIC);
end giaima_38;
architecture Behavioral of giaima_38 is
BEGIN
PROCESS (I,E)
BEGIN
IF E = '0' THEN Q <= "11111111";
ELSE
CASE I IS
WHEN "000" => Q <= "11111110";
WHEN "001" => Q <= "11111101";
WHEN "010" => Q <= "11111011";
WHEN "011" => Q <= "11110111";
WHEN "100" => Q <= "11101111";
WHEN "101" => Q <= "11011111";
WHEN "110" => Q <= "10111111";
WHEN "111" => Q <= "01111111";
WHEN OTHERS => NULL;
Dung VP
END CASE;
END IF;
END PROCESS;
end Behavioral;
Mạch đa hợp - mạch giải đa hợp
Thiết kế mạch đa hợp
Bài 1: Thiết kế mạch đa hợp 4 đầu vào, 1 đầu ra, 2 đầu lựa chọn
Vẽ sơ đồ khối của mạch:
Lập bảng trạng thái:
Viế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 GMA is
Port ( I : in STD_LOGIC_VECTOR (3 downto 0);
Dung VP
S : in STD_LOGIC_VECTOR (1 downto 0);
Q : out STD_LOGIC);
end GMA;
architecture Behavioral of GMA is
begin
PROCESS(I,S)
BEGIN
CASE S IS
WHEN "00" => Q <= I(0);
WHEN "01" => Q <= I(1);
WHEN "10" => Q <= I(2);
WHEN "11" => Q <= I(3);
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
end Behavioral;
Thiết kế mạch giải đa hợp
Bài 1: Thiết kế mạch giải đa hợp 1 đầu vào, 4 đầu ra, 2 đầu lựa chọn
Vẽ sơ đồ khối của mạch:
Lập bảng trạng thái:
Dung VP
Viế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 GDH is
Port ( I : in STD_LOGIC;
S : in STD_LOGIC_VECTOR (1 downto 0);
Q : out STD_LOGIC_VECTOR (3 downto 0));
end GDH;
architecture Behavioral of GDH is
begin
PROCESS(I,S)
BEGIN
CASE S IS
WHEN "00" => Q(0) <= I;
WHEN "01" => Q(1) <= I;
WHEN "10" => Q(2) <= I;
WHEN "11" => Q(3) <= I;
WHEN OTHERS => NULL;
END CASE;
Dung VP
END PROCESS;
end Behavioral;
Mã gray
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity gray3 is
Port ( I : in STD_LOGIC_vector (3 downto 0);
Q : out STD_LOGIC_VECTOR (3 downto 0));
end gray3;
architecture Behavioral of gray3 is
begin
process(I)
begin
case I is
when "0000" => Q <= "0011";
when "0001" => Q <= "0100";
when "0010" => Q <= "0101";
when "0011" => Q <= "0110";
when "0100" => Q <= "0111";
when "0101" => Q <= "1000";
when "0110" => Q <= "1001";
when "0111" => Q <= "1010";
Dung VP
when "1000" => Q <= "1010";
when "1001" => Q <= "1100";
when others => null;
end case;
end process;
end behavioral;
BÀI TẬP CHƯƠNG 4
Bài 4-1: Mã hóa 8 đường sang 3 đường tích cực ở mức thấp
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity mahoa83 is
Port ( I : in STD_LOGIC_VECTOR (7 downto 0);
Q : out STD_LOGIC_VECTOR (2 downto 0));
end mahoa83;
architecture Behavioral of mahoa83 is
begin
PROCESS(I)
BEGIN
CASE I IS
WHEN "11111110" => Q <= "111";
WHEN "11111101" => Q <= "110";
Dung VP
WHEN "11111011" => Q <= "101";
WHEN "11110111" => Q <= "100";
WHEN "11101111" => Q <= "011";
WHEN "11011111" => Q <= "010";
WHEN "10111111" => Q <= "001";
WHEN "01111111" => Q <= "000";
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
end Behavioral;
Bài 4-2: 8 đường sang 3 đường tích cực ở mức cao:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity mahoa83 is
Port ( I : in STD_LOGIC_VECTOR (7 downto 0);
Q : out STD_LOGIC_VECTOR (2 downto 0));
end mahoa83;
architecture Behavioral of mahoa83 is
begin
PROCESS(I)
BEGIN
CASE I IS
Dung VP
WHEN "00000001" => Q <= "000";
WHEN "00000010" => Q <= "001";
WHEN "00000100" => Q <= "010";
WHEN "00001000" => Q <= "011";
WHEN "00010000" => Q <= "100";
WHEN "00100000" => Q <= "101";
WHEN "01000000" => Q <= "110";
WHEN "10000000" => Q <= "111";
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
end Behavioral;
Bài 4-3: Mạch giải mã bên trong có 4 mạch giải mã 2 đường sàn 4
đường, đầu ra tích cực ở mức thấp
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity giaima42 is
Port ( I : in STD_LOGIC_VECTOR (1 downto 0);
Q1,Q2,Q3,Q4 : out STD_LOGIC_VECTOR (3 downto 0));
end giaima42;
architecture Behavioral of giaima42 is
begin
PROCESS (I)
Dung VP
BEGIN
CASE I IS
WHEN "11" => Q1 <= "1110";
WHEN "10" => Q2 <= "1101";
WHEN "01" => Q3 <= "1011";
WHEN "00" => Q4 <= "0111";
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
end Behavioral;
Bài 4-4: Mạch giải mã LED 7 đoạn Cathode chung
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity led7 is
Port ( I : in STD_LOGIC_VECTOR (3 downto 0);
Y : out STD_LOGIC_VECTOR (6 downto 0));
end led7;
architecture Behavioral of led7 is
begin
PROCESS (I)
BEGIN
CASE I IS
Dung VP
when "0000" => Y <= "0111111"; so 0
when "0001" => Y <= "0000110"; so 1
when "0010" => Y <= "1011011"; so 2
when "0011" => Y <= "1001111"; so 3
when "0100" => Y <= "1100110"; so 4
when "0101" => Y <= "1101101"; so 5
when "0110" => Y <= "1111101"; so 6
when "0111" => Y <= "0000111"; so 7
when "1000" => Y <= "1111111"; so 8
when "1001" => Y <= "1101111"; so 9
when others => Y <= "0000000"; tat
END CASE;
END PROCESS;
end Behavioral;
Thiết kế mạch giải mã LED 7 đoạn loại Anode chung: (Cathode chung thì
ngược lại. Như bài trên)
Vẽ sơ đồ khối của mạch:
Lập bảng trạng thái:
Dung VP
Viết chương trình:
Để đơn giản nên trong chương trình thì đầu ra được đặt tên theo dạng vector và
tên là Y.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity giaima7doan is
Port ( I : in STD_LOGIC_VECTOR (3 downto 0);
Y : out STD_LOGIC_VECTOR (6 downto 0));
end giaima7doan;
architecture Behavioral of giaima7doan is
begin
PROCESS (I)
BEGIN
Dung VP
CASE I IS
when "0000" => Y <= "1000000"; so 0
when "0001" => Y <= "1111001"; so 1
when "0010" => Y <= "0100100"; so 2
when "0011" => Y <= "0110000"; so 3
when "0100" => Y <= "0011001"; so 4
when "0101" => Y <= "0010010"; so 5
when "0110" => Y <= "0000010"; so 6
when "0111" => Y <= "1111000"; so 7
when "1000" => Y <= "0000000"; so 8
when "1001" => Y <= "0010000"; so 9
when others => Y <= "1111111"; tat
END CASE;
END PROCESS;
end Behavioral;
Bài 4-5: Mạch giải mã đa hợp 1 đầu vào, 8 đầu ra, 3 đầu lựa chọn
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity GDH is
Port ( I : in STD_LOGIC;
S : in STD_LOGIC_VECTOR (2 downto 0);
Q : out STD_LOGIC_VECTOR (7 downto 0));
end GDH;
Dung VP
architecture Behavioral of GDH is
begin
PROCESS(I,S)
BEGIN
CASE S IS
WHEN "000" => Q(0) <= I;
WHEN "001" => Q(1) <= I;
WHEN "010" => Q(2) <= I;
WHEN "011" => Q(3) <= I;
WHEN "100" => Q(4) <= I;
WHEN "101" => Q(5) <= I;
WHEN "110" => Q(6) <= I;
WHEN "111" => Q(3) <= I;
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
end Behavioral;
Bài 4-6: Mạch giải mã đa hợp 1 đầu vào, 16 đầu ra, 4 đầu lựa chọn
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity GDH is
Port ( I : in STD_LOGIC;
Dung VP
S : in STD_LOGIC_VECTOR (3 downto 0);
Q : out STD_LOGIC_VECTOR (15 downto 0));
end GDH;
architecture Behavioral of GDH is
begin
PROCESS(I,S)
BEGIN
CASE S IS
WHEN "0000" => Q(0) <= I;
WHEN "0001" => Q(1) <= I;
WHEN "0010" => Q(2) <= I;
WHEN "0011" => Q(3) <= I;
WHEN "0100" => Q(4) <= I;
WHEN "0101" => Q(5) <= I;
WHEN "0110" => Q(6) <= I;
WHEN "0111" => Q(7) <= I;
WHEN "1000" => Q(8) <= I;
WHEN "1001" => Q(9) <= I;
WHEN "1010" => Q(10) <= I;
WHEN "1011" => Q(11) <= I;
WHEN "1100" => Q(12) <= I;
WHEN "1101" => Q(13) <= I;
WHEN "1110" => Q(14) <= I;
WHEN "1111" => Q(15) <= I;
Dung VP
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
end Behavioral;
Bài 4-7: Mạch chuyển đổi số nhị phân 8 bit thành số BCD
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity nhiphan8bit is
Port ( I : in STD_LOGIC_VECTOR (7 downto 0);
Y : out STD_LOGIC_VECTOR (3 downto 0));
end nhiphan8bit;
architecture Behavioral of nhiphan8bit is
begin
PROCESS (I)
BEGIN
CASE I IS
when "00000000" => Y <= "0000";
when "00000001" => Y <= "0001";
when "00000010" => Y <= "0010";
when "00000011" => Y <= "0011";
when "00000100" => Y <= "0100";
when "00000101" => Y <= "0101";
Dung VP
when "00000110" => Y <= "0110";
when "00000111" => Y <= "0111";
when "00001000" => Y <= "1000";
when "00001001" => Y <= "1000";
when others => NULL;
END CASE;
END PROCESS;
end Behavioral;
Bài 4-8: Mạch chuyển đổi 2 số BCD thành số nhị phân
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity BCD is
Port ( I : in STD_LOGIC_VECTOR (1 downto 0);
Y : out STD_LOGIC_VECTOR (3 downto 0));
end BCD;
architecture Behavioral of BCD is
begin
PROCESS (I)
BEGIN
CASE I IS
when "00" => Y <= "0000";
when "01" => Y <= "0001";
Dung VP
when "10" => Y <= "0010";
when "11" => Y <= "0011";
when others => NULL;
END CASE;
END PROCESS;
end Behavioral;
BÀI TẬP CHƯƠNG 5
Thiết kế FF-RS
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity FFRS is
Port ( R : in STD_LOGIC;
S : in STD_LOGIC;
CLK : in STD_LOGIC;
PRE : in STD_LOGIC;
CLR : in STD_LOGIC;
Q : out STD_LOGIC;
QD : out STD_LOGIC);
End FFRS;
architecture Behav_ffrs of ffrs is
SIGNAL QT,QDT: STD_LOGIC;
Dung VP
SIGNAL RS : STD_LOGIC_VECTOR(1 DOWNTO 0);
begin
PROCESS(R,S,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
RS <=R & S;
CASE RS IS
WHEN "11" => QT <='X'; QDT <='X';
WHEN "10" => QT <='1'; QDT <='1';
WHEN "01" => QT <='0'; QDT <='0';
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_ffrs;
Thiết kế FF-T
library IEEE;
Dung VP
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity FFT is
Port ( T : in STD_LOGIC;
CLK : in STD_LOGIC;
E: in STD_LOGIC;
Q : out STD_LOGIC;
QD : out STD_LOGIC);
end FFT;
architecture Behav_FFT of FFT is
SIGNAL QT : STD_LOGIC;
begin
PROCESS(T,E,CLK)
BEGIN
IF E='1' THEN
IF CLK='0' AND CLK'EVENT THEN
QT <= T;
END IF;
END IF;
END PROCESS;
Q <= NOT QT;
QD <= QT;
end Behav_FFT;
Dung VP
Thiết kế FF-JK
Vẽ sơ đồ khối của mạch:
Lập bảng trạng thái:
Viế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 ffjk is
Port ( J : in STD_LOGIC;
K : in STD_LOGIC;
CLK : in STD_LOGIC;
PRE : in STD_LOGIC;
CLR : in STD_LOGIC;
Dung VP
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;
Dung VP
QD <= QDT;
end Behav_ffjk;
Thiết kế flip-flop D có Enable
Vẽ sơ đồ khối của mạch:
Lập bảng trạng thái:
Viế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);
Dung VP
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;
END PROCESS;
Q <= QT;
QD <= NOT QT;
end Behavioral;
Bài 5-3: Thiết kế 4 FF-D gồm 4 đầu vào D, 4 đầu ra Q, 4 đầu ra Q
đảo dung chung 1 xung CLK
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity FF4D is
Port ( D1,D2,D3,D4 : in STD_LOGIC;
E : in STD_LOGIC;
CLK : in STD_LOGIC;
Q1,Q2,Q3,Q4 : out STD_LOGIC;
Dung VP