Tải bản đầy đủ (.pdf) (37 trang)

TRỌN BỘ Kèm Lời Giải - Môn Thiết Kế Số Dùng Ngôn Ngữ Mô Tả

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (192.8 KB, 37 trang )

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

×