Câu 1. Thiết kế bộ đếm tiến thập phân, kết quả hiển thị LED 7 thanh bằng phương pháp máy trạng thái. Câu 2. Thiết kế bộ đếm lùi thập phân, kết quả hiển thị LED 7 thanh bằng cách sử dụng nhiều process. Câu 3. Thiết kế bộ đếm cho phép chọn đếm tiến hoặc đếm lùi theo mã thập phân, hiển thị trên LED 7 thanh. Câu 4. Thiết kế bộ đếm tiến nhị phân Kđ = 255, kết quả hiển thị led đơn. Câu 5: Thiết kế bộ đếm lùi nhị phân Kđ = 255, kết quả hiển thị LED đơn Câu 6: Thiết kế bộ đếm cho phép chọn đếm tiến hoặc đếm lùi theo mã nhị phân Kđ=128, kết quả hiển thị LED đơn Câu 7: Thiết kế mạch đếm theo mã vòng 16 bit , kết quả hiển thị LED đơn Câu 8: Thiết kế mạch đếm theo mã Johnson 8 bit , kết quả hiển thị LED đơn Câu 9: Thiết kế bộ đếm tiến các số chẵn từ 0 → 100 theo mã nhị phân, kết quả hiển thị LED đơn Câu 10: Thiết kế bộ đếm lùi các số lẻ từ 99 → 1 theo mã nhị phân, kết quả hiển thị LED đơn Câu 11: Thiết kế bộ đếm tiến, thập phân cho phép chọn đếm chẵn hoặc đếm lẻ, kếtquả hiển thị LED 7 thanh Câu 12: Thiết kế mạch quét LED 7 thanh để hiển thị số 1234 trên kit Câu 13: Thiết kế mạch kiểm tra chuỗi dữ liệu vào nối tiếp. Đầu ra bằng 1 khi có 3 bit 1 vào liên tiếp. Đầu ra bằng 0 trong các trường hợp còn lại. Câu 14: Thiết kế mạch điều khiển 16 LED đơn sáng lan từ giữa sang 2 bên Câu 15: Thiết kế mạch điều khiển 16 LED đơn sáng lan từ 2 bên về giữa theo phương pháp máy trạng thái Câu 16: Thiết kế bộ đếm theo mã Gray 4 bit, kết quả hiển thị LED đơn Câu 17: Thiết kế mạch điều khiển đèn giao thông. Yêu cầu đèn đỏ sáng 10s, đèn xanh sáng 7s, đèn vàng sáng 3s, số giây được đếm ngược về 0 và hiển thị trên LED 7 thanh. Câu 18: Thiết kế thanh ghi dịch vào nối tiếp, ra song song 8 bít bằng phương pháp sử dụng proccess. Câu 19. Thiết kế mạch cộng 2 số nhị phân 2 bít, kết quả hiển thị LED 7 thanh Câu 20: Thiết kế mạch trừ 2 số nhị phân 3 bít, kết quả hiển thị LED 7 thanh Câu 21: Thiết kế và mô phỏng mạch cộng đầy đủ 3 bit sử dụng component là bộ cộng đầy đủ 1 bit. Kết quả hiển thị dạng nhị phân trên LED đơn. Câu 22: Cho hai số đầu vào A, B (3 bit). Thiết kế mạch điện thực hiện một trong các chức năng: A+B; A+1; B+1 tùy theo giá trị của đầu vào lựa chọn chức năng . Kết quả hiển thị trên LED đơn và LED 7 thanh. Câu 23: Thiết kế và mô phỏng mạch cộng đầy đủ 3 bit sử dụng nhiều Process (mỗi proces là bộ cộng đầy đủ 1 bit). Kết quả hiển thị dạng nhị phân trên LED đơn và trên LED 7 thanh. Câu 24: Hãy thiết kế bộ đếm tiến BCD và quả hiển thị dạng nhị phân trên LED đơn và dạng thập phân trên LED 7 thanh. Mạch thiết kế theo máy trạng thái và được thực thi trên KIT BASYS 3 Câu 26: Thiết kế bộ đếm tiến các số chẵn từ 0 --> 20 theo mã nhị phân bằng phương pháp máy trạng thái. Kết quả đếm hiển thị trên LED đơn Câu 27: Thiết kế DFF. Sử dụng DFF như component để thiết kế thanh ghi dịch vào nối tiếp, ra song song Câu 28: Thiết kế JKFF. Sử dụng JKFF như component để thiết kế bộ đếm tiến nhị phân 4 bít Câu 29: Thiết kế mạch điều khiển máy pha café tự động: chờ khởi động( 1đèn xanh sáng) → trộn café và sữa trong 2s ( 2 đèn xanh sáng) → hòa tan café+ sữa+ nước trong 5s (3 đèn xanh sáng) → kết thúc (đèn đỏ sáng 1s) Câu 30: Thiết kế mạch điều khiển máy giặt quần áo tự động : chờ khởi động → bơm nước trong 5 phút (1 đèn xanh sáng) → giặt trong 7 phút (2 đèn xanh sáng) → tháo nước trong 2 phút ( 1đèn vàng sáng) → bơm nước trong 5 phút (1 đèn xanh sáng) → xả trong 10 phút (3 đèn xanh sáng) → tháo nước trong 2 phút (1 vàng sáng) → vắt trong 5 phút (2 đèn vàng sáng) → kết thúc (1 đèn đỏ sáng trong 1 phút)
Trang 1Sơ đồ chân kit basys 3
Câu 1 Thiết kế bộ đếm tiến thập phân, kết quả hiển thị LED 7 thanh bằng phương pháp máy trạng thái
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; entity main is
Port ( clock : in STD_LOGIC; rst : in STD_LOGIC;
q : out STD_LOGIC_VECTOR (7 downto 0)); end main;
Trang 2architecture Behavioral of main is
type state is (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9); signal s: state;
signal clk: std_logic; begin
chia tan - process(clock,rst)
variable dem2: integer range 0 to 50000000; variable b: std_logic;
begin
if rst='1' then dem2:=0;
elsif clock'event and clock='1' then if dem2=25000000 then
dem2:=0; b:=not b; else
dem2:= dem2+1; end if;
end if; clk <= b; end process;
-dem - process(clk,rst)
begin
if rst='1' then
Trang 3s<= s0;
elsif clk'event and clk='1' then case s is
when s0 => s <= s1; when s1 => s <= s2; when s2 => s <= s3; when s3 => s <= s4; when s4 => s <= s5; when s5 => s <= s6; when s6 => s <= s7; when s7 => s <= s8; when s8 => s <= s9; when others => s <= s0; end case;
end if; end process;
-giai ma - process(s)
begin case s is
when s0 => q <= x"c0"; when s1 => q <= x"f9"; when s2 => q <= x"a4"; when s3 => q <= x"b0"; when s4 => q <= x"99"; when s5 => q <= x"92";
Trang 4when s6 => q <= x"82"; when s7 => q <= x"f8"; when s8 => q <= x"80"; when others => q <= x"90"; end case;
end process; end Behavioral;
Câu 2 Thiết kế bộ đếm lùi thập phân, kết quả hiển thị LED 7 thanh bằng cách sử dụng nhiều process
begin
-chia tan - process(clock,rst)
variable dem2: integer range 0 to 50000000;
Trang 5variable b: std_logic; begin
if rst='1' then dem2:=0;
elsif clock'event and clock='1' then if dem2=25000000 then
dem2:=0; b:=not b; else
dem2:=dem2+1; end if;
end if; clk<=b; end process;
-dem - process(clk,rst)
variable d_tam: integer range 0 to 9; begin
if rst='1' then d_tam:=0;
elsif clk'event and clk='1' then if d_tam=0 then
d_tam:=9; else
d_tam:=d_tam-1; end if;
end if;
Trang 6d <= d_tam; end process;
-mahoa - process(d)
begin case d is
when 0 => q <= x"c0"; when 1 => q <= x"f9"; when 2 => q <= x"a4"; when 3 => q <= x"b0"; when 4 => q <= x"99"; when 5 => q <= x"92"; when 6 => q <= x"82"; when 7 => q <= x"f8"; when 8 => q <= x"80"; when others => q <= x"90"; end case;
end process; end Behavioral;
Câu 3 Thiết kế bộ đếm cho phép chọn đếm tiến hoặc đếm lùi theo mã thập phân, hiển thị trên LED 7 thanh
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity main is
Trang 7Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; A : in STD_LOGIC;
q : out STD_LOGIC_VECTOR (7 downto 0)); end main;
architecture Behavioral of main is signal d:integer range 0 to 9; begin
-dem - dem: process(clk,rst,A)
variable d_tam: integer range 0 to 9; begin
if rst='1' then d_tam:=0;
elsif clk'event and clk='1' then if A='1' then -dem tien if d_tam=9 then d_tam:=0; else d_tam:=d_tam+1; end if;
else -dem lui - if d_tam=0 then d_tam:=9; else d_tam:=d_tam - 1; end if;
end if; end if;
d <= d_tam;
Trang 8end process;
-ma hoa - mahoa:process(d)
begin case d is
when 0 => q <= x"c0"; when 1 => q <= x"f9"; when 2 => q <= x"a4"; when 3 => q <= x"b0"; when 4 => q <= x"99"; when 5 => q <= x"92"; when 6 => q <= x"82"; when 7 => q <= x"f8"; when 8 => q <= x"80"; when others => q <= x"90"; end case;
end process; end Behavioral;
Câu 4 Thiết kế bộ đếm tiến nhị phân Kđ = 255, kết quả hiển thị led đơn
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_arith.ALL; use IEEE.STD_LOGIC_unsigned.ALL; entity main is
Port ( clk : in STD_LOGIC;
Trang 9variable dem2:integer range 0 to 50000000; variable b:std_logic;
begin
if rst='1' then dem2:=0;
elsif clk'event and clk='1' then if dem2=25000000 then dem2:=0;
b:= not b; else
dem2:=dem2+1; end if;
end if; clock <= b;
end process;
-dem - process(clock,rst)
Trang 10variable d_tam :integer range 0 to 254:=0; begin
if rst='1' then d_tam:=0; else
if clock'event and clock='1' then if d_tam=254 then
d_tam:=0; else
d_tam:=d_tam+1; end if;
end if; end if;
leddon <= conv_std_logic_vector(d_tam,8); end process;
end Behavioral;
Câu 5: Thiết kế bộ đếm lùi nhị phân Kđ = 255, kết quả hiển thị LED đơn
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_arith.ALL; use IEEE.STD_LOGIC_unsigned.ALL; entity main is
Port ( clock : in STD_LOGIC; rst : in STD_LOGIC;
Trang 11q : out STD_LOGIC_VECTOR (7 downto 0)); end main;
architecture Behavioral of main is signal clk: std_logic;
begin
-chia tan - process(clock,rst)
variable dem2: integer range 0 to 50000000; variable b: std_logic;
begin
if rst='1' then dem2:=0;
elsif clock'event and clock='1' then if dem2=25000000 then
dem2:=0; b:= not b; else
dem2:= dem2+1; end if;
end if; clk <= b; end process;
-dem - process(clk,rst)
variable dem: integer range 0 to 154:=0;
Trang 12begin
if rst='1' then dem:=0;
elsif clk'event and clk='1' then if dem=0 then
dem:=254; else
dem:=dem-1; end if;
end if;
q <= conv_std_logic_vector(dem,8); end process;
Port ( clock : in STD_LOGIC; rst : in STD_LOGIC; A : in STD_LOGIC;
q : out STD_LOGIC_VECTOR (6 downto 0)); end main;
Trang 13architecture Behavioral of main is signal clk: std_logic;
begin
-chia tan - process(clock,rst)
variable dem2: integer range 0 to 50000000; variable b: std_logic;
begin
if rst='1' then dem2:=0;
elsif clock'event and clock='1' then if dem2=25000000 then
dem2:=0; b:=not b; else
dem2:=dem2+1; end if;
end if; clk<=b; end process;
-dem - process(clk,rst,A)
variable dem:integer range 0 to 128:=0; begin
if rst='1' then dem:=0;
elsif clk'event and clk='1' then
Trang 14if A='1' then if dem=128 then dem:=0; else
dem:=dem+1; end if;
else
if dem=0 then dem:=128; else
dem:=dem-1; end if;
end if; end if;
q <= conv_std_logic_vector(dem,7); end process;
end Behavioral;
Câu 7: Thiết kế mạch đếm theo mã vòng 16 bit , kết quả hiển thị LED đơn
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_arith.ALL; use IEEE.STD_LOGIC_unsigned.ALL;
entity main is
Port ( clock : in STD_LOGIC;
Trang 15variable dem2: integer range 0 to 50000000; variable b: std_logic;
begin
if rst='1' then dem2:=0;
elsif clock'event and clock='1' then if dem2=25000000 then
dem2:=0; b:= not b; else
dem2:=dem2+1; end if;
end if; clk <= b; end process;
-dem - process(clk,rst)
Trang 16variable dem:integer range 0 to 15; begin
if rst='1' then dem:=0;
elsif clk'event and clk='1' then if dem=15 then
dem:=0; else
dem:=dem+1; end if;
end if; d<= dem; end process;
-ma hoa - process(d)
begin case d is
when 0 => q <= "0000000000000001"; when 1 => q <= "0000000000000010"; when 2 => q <= "0000000000000010"; when 3 => q <= "0000000000000100"; when 4 => q <= "0000000000001000"; when 5 => q <= "0000000000010000"; when 6 => q <= "0000000000100000"; when 7 => q <= "0000000001000000"; when 8 => q <= "0000000010000000"; when 9 => q <= "0000000100000000";
Trang 17when 10 => q <= "0000010000000000"; when 11 => q <= "0000100000000000"; when 12 => q <= "0001000000000000"; when 13 => q <= "0010000000000000"; when 14 => q <= "0100000000000000";
when others => q <= "1000000000000000"; end case;
end process; end Behavioral;
Câu 8: Thiết kế mạch đếm theo mã Johnson 8 bit , kết quả hiển thị LED đơn
Trang 18variable dem2: integer range 0 to 500000000; variable b: std_logic;
begin
if rst='1' then dem2:=0;
elsif clock'event and clock='1' then if dem2=25000000 then
dem2:=0; b:= not b; else
dem2:=dem2+1; end if;
end if; clk <= b; end process;
-dem - process(clk,rst)
variable dem: integer range 0 to 15; begin
if rst='1' then dem:=0;
elsif clk'event and clk='1' then if dem=15 then
dem:=0; else
dem:=dem+1; end if;
Trang 19end if; d<= dem; end process;
-ma hoa - process(d)
begin case d is
when 0 => q <= "00000000"; when 1 => q <= "00000001"; when 2 => q <= "00000011"; when 3 => q <= "00000111"; when 4 => q <= "00001111"; when 5 => q <= "00011111"; when 6 => q <= "00111111"; when 7 => q <= "01111111"; when 8 => q <= "11111111"; when 9 => q <= "11111110"; when 10 => q <= "11111100"; when 11 => q <= "11111000"; when 12 => q <= "11110000"; when 13 => q <= "11100000"; when 14 => q <= "11000000"; when others => q <= "10000000"; end case;
end process; end Behavioral;
Trang 20Câu 9: Thiết kế bộ đếm tiến các số chẵn từ 0 → 100 theo mã nhị phân, kết quả hiển thị LED đơn
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_arith.ALL; use IEEE.STD_LOGIC_unsigned.ALL; entity main is
Port ( clock : in STD_LOGIC; rst : in STD_LOGIC;
q : out STD_LOGIC_VECTOR (6 downto 0)); end main;
architecture Behavioral of main is signal clk:std_logic;
begin
-chia tan - process(clock,rst)
variable dem2: integer range 0 to 50000000; variable b: std_logic;
begin
if rst='1' then dem2:=0;
elsif clock'event and clock ='1' then if dem2=25000000 then
dem2:=0; b:=not b; else
Trang 21dem2:=dem2+1; end if;
end if; clk <= b; end process;
-dem - process(clk,rst)
variable dem:integer range 0 to 100; begin
if rst='1' then dem:=0;
elsif clk'event and clk='1' then if dem=100 then
dem:=0; else
dem:= dem+2; end if;
end if;
q <= conv_std_logic_vector(dem,7); end process;
Trang 22use IEEE.STD_LOGIC_arith.ALL; use IEEE.STD_LOGIC_unsigned.ALL;
variable dem2: integer range 0 to 50000000; variable b: std_logic;
begin
if rst='1' then dem2:=0;
elsif clock'event and clock='1' then if dem2=25000000 then
dem2:=0; b:= not b; else
dem2:= dem2+1; end if;
end if;
Trang 23clk <= b; end process;
-dem - process(clk,rst)
variable dem: integer range 1 to 99; begin
if rst='1' then dem:=99;
elsif clk'event and clk='1' then if dem=0 then
dem:=99; else
dem:= dem-2; end if;
end if;
q <= conv_std_logic_vector(dem,7); end process;
entity main is
Trang 24Port ( clock : in STD_LOGIC; rst : in STD_LOGIC; A : in STD_LOGIC;
q : out STD_LOGIC_VECTOR (7 downto 0)); end main;
architecture Behavioral of main is signal clk: std_logic;
signal d: integer range 0 to 9; begin
-chia tan - process(clock,rst)
variable dem2: integer range 0 to 50000000; variable b: std_logic;
begin
if rst='1' then dem2:=0;
elsif clock'event and clock='1' then if dem2=25000000 then
dem2:=0; b:=not b; else
dem2:=dem2+1; end if;
end if; clk <= b; end process;
Trang 25-dem - process(clk,rst,A)
variable dem: integer range 0 to 9; begin
if rst='1' then dem:=0;
elsif clk'event and clk='1' then if A='1' then
if dem rem 2=0 then if dem=8 then dem:=0; else
dem:=dem+2; end if;
else
dem:=dem+1; end if;
else
if dem rem 2 /=0 then if dem=9 then dem:=1; else
dem:=dem+2; end if;
else
dem:=dem+1; end if;
Trang 26end if; end if; d <= dem; end process;
-ma hoa - process(d)
begin case d is
when 0 => q <= x"c0"; when 1 => q <= x"f9"; when 2 => q <= x"a4"; when 3 => q <= x"b0"; when 4 => q <= x"99"; when 5 => q <= x"92"; when 6 => q <= x"82"; when 7 => q <= x"f8"; when 8 => q <= x"80"; when others => q <= x"90"; end case;
end process; end Behavioral;
Câu 12: Thiết kế mạch quét LED 7 thanh để hiển thị số 1234 trên kit
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
Trang 27architecture machine_state of main is type state is (s0,s1,s2,s3);
signal s: state; signal clk: std_logic; begin
-chia tan - process(clock,rst)
variable dem2: integer range 0 to 50000000; variable b: std_logic;
begin
if rst='1' then dem2:=0;
elsif clock'event and clock='1' then if dem2=25000000 then
dem2:=0; b:= not b; else
dem2:=dem2+1; end if;
end if;
Trang 28clk <= b; end process;
-hien thi - process(clk,s)
begin
if clk'event and clk='1' then case s is
when s0 => s <= s1; led7 <= x"a4"; q <= "1011"; when s1 => s <= s2; led7 <= x"b0"; q <= "1101"; when s2 => s <= s3; led7 <= x"99"; q <= "1110"; when s3 => s <= s0; led7 <= x"f9"; q <= "0111"; end case;
end if; end process;
end machine_state;
Trang 29Câu 13: Thiết kế mạch kiểm tra chuỗi dữ liệu vào nối tiếp Đầu ra bằng 1 khi có 3 bit 1 vào liên tiếp Đầu ra bằng 0 trong các trường hợp còn lại
architecture Behavioral of main is type state is (zero,one,two,three); signal pr_state, nx_state: state; signal clk: std_logic;
begin
-chia tan - process(clock,rst)
variable dem2: integer range 0 to 50000000;
Trang 30variable b: std_logic; begin
if rst='1' then dem2:=0;
elsif clock'event and clock='1' then if dem2=25000000 then
dem2:=0; b:= not b; else
dem2:=dem2+1; end if;
end if; clk <= b; end process;
-lower section - process(clk,rst)
begin
if rst='1' then pr_state <= zero; else
pr_state <= nx_state; end if;
end process;
-upper section - process(d,pr_state)
begin
case pr_state is
Trang 31when zero => q <= '0'; if d='1' then nx_state <= one; else
nx_state <= zero; end if;
when one => q <= '0'; if d='1' then nx_state <= two; else
nx_state <= zero; end if;
when two => q <= '0'; if d='1' then nx_state <= three; else
nx_state <= zero; end if;
when three => q <= '1'; if d='1' then
nx_state <= three; else
nx_state <= zero; end if;
end case; end process; end Behavioral;
Trang 32Câu 14: Thiết kế mạch điều khiển 16 LED đơn sáng lan từ giữa sang 2 bên
variable dem2: integer range 0 to 50000000; variable b: std_logic;
begin
if rst='1' then dem2:=0;
elsif clock'event and clock='1' then if dem2=25000000 then
dem2:=0; b:= not b;
Trang 33else
dem2:=dem2+1; end if;
end if; clk <= b; end process;
-dem xung clock - process(clk,rst)
variable dem:integer range 0 to 8; begin
if rst='1' then dem:=0;
elsif clk'event and clk='1' then if dem=8 then
dem:=0; else
dem:= dem+1; end if;
end if; d <= dem; end process;
-sang lan - process(d)
begin case d is
when 0 => q <= "0000000000000000"; when 1 => q <= "0000000110000000";
Trang 34when 2 => q <= "0000001111000000"; when 3 => q <= "0000011111100000"; when 4 => q <= "0000111111110000"; when 5 => q <= "0001111111111000"; when 6 => q <= "0011111111111100"; when 7 => q <= "0111111111111110"; when 8 => q <= "1111111111111111"; end case;
end process; end Behavioral;
Câu 15: Thiết kế mạch điều khiển 16 LED đơn sáng lan từ 2 bên về giữa theo phương pháp máy trạng thái
signal clk: std_logic; begin
Trang 35-chia tan - process(clock,rst)
variable dem2: integer range 0 to 50000000; variable b: std_logic;
begin
if rst='1' then dem2:=0;
elsif clock'event and clock='1' then if dem2=25000000 then
dem2:=0; b:= not b; else
dem2:=dem2+1; end if;
end if; clk <= b; end process;
-doi trang thai - process(clk,rst)
begin
if rst='1' then s <= s0;
elsif clk'event and clk='1' then case s is
when s0 => s <= s1; when s1 => s <= s2; when s2 => s <= s3;