You are on page 1of 10

Bài 8: Mạch đếm (tt) _ ROM

Bài 8 MẠCH ĐẾM (tt) _ ROM


Bài 8.1 : Thiết kế chương trình VHDL cho mạch đếm lên
từ 0 đến 999 hiển thị trên 3 LED 7 đoạn mắc anode chung,
có ngõ vào CLR, CLK, bằng cách tạo package:

Sơ đồ khối :

Code:
1. Package : pkg_led7doan
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
package pkg_led7doan is
function dem7seg (X1: in STD_LOGIC_VECTOR (3 downto 0 )) return
STD_LOGIC_VECTOR;
end pkg_led7doan;
package body pkg_led7doan is
function dem7seg (X1: in STD_LOGIC_VECTOR (3 downto 0 )) return
STD_LOGIC_VECTOR is
variable Z1: STD_LOGIC_VECTOR ( 6 downto 0 );
begin

SVTH: Nguyễn Khắc Vinh 3115500071


Trần Văn Điền 3115500013
1
Bài 8: Mạch đếm (tt) _ ROM

case X1 is
when "0000"=>Z1:="1000000";
when "0001"=>Z1:="1111001";
when "0010"=>Z1:="0100100";
when "0011"=>Z1:="0110000";
when "0100"=>Z1:="0011001";
when "0101"=>Z1:="0010010";
when "0110"=>Z1:="0000010";
when "0111"=>Z1:="1111000";
when "1000"=>Z1:="0000000";
when "1001"=>Z1:="0010000";
when others=>Z1:="1111111";
end case;
return Z1;
end dem7seg;
END pkg_led7doan;

2. Code chương trình chính :


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_arith.ALL;
use IEEE.STD_LOGIC_unsigned.ALL;
library work;
use work.pkg_led7doan.all;
entity demlen_7seg is
Port ( CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
seg1 : out STD_LOGIC_VECTOR (6 downto 0 ) ;
seg2 : out STD_LOGIC_VECTOR (6 downto 0 ) ;
seg3 : out STD_LOGIC_VECTOR (6 downto 0 ) );
end demlen_7seg;
architecture Behavioral of demlen_7segis
begin
PROCESS(CLK,CLR)
variable QT_CH: STD_LOGIC_VECTOR (3 downto 0);
variable QT_DV: STD_LOGIC_VECTOR (3 downto 0);
variable QT_TR: STD_LOGIC_VECTOR (3 downto 0);
BEGIN
IF CLR='0' THEN QT_CH:= "0000"; QT_DV:= "0000";QT_TR := "0000";
ELSIF CLK='1' AND CLK'EVENT THEN QT_DV:=QT_DV + 1 ;

SVTH: Nguyễn Khắc Vinh 3115500071


Trần Văn Điền 3115500013
2
Bài 8: Mạch đếm (tt) _ ROM

IF QT_DV = "1010" then QT_DV:="0000"; QT_CH:= QT_CH +1;


end IF;
IF QT_CH = "1010" then QT_CH:="0000";QT_TR := QT_TR +1 ;
end if;
if QT_TR = "1010" then QT_TR:= "0000";
END IF;
END IF;
seg1 <= dem7seg(QT_DV);
seg2 <= dem7seg(QT_CH);
seg3 <= dem7seg (QT_TR);
end process;
end Behavioral;

Check syntax:

SVTH: Nguyễn Khắc Vinh 3115500071


Trần Văn Điền 3115500013
3
Bài 8: Mạch đếm (tt) _ ROM

Chạy mô phỏng:

SVTH: Nguyễn Khắc Vinh 3115500071


Trần Văn Điền 3115500013
4
Bài 8: Mạch đếm (tt) _ ROM

8.2. Thiết kế chương trình VHDL cho bộ nhớ ROM


16x8bit:
Sơ đồ khối:

SVTH: Nguyễn Khắc Vinh 3115500071


Trần Văn Điền 3115500013
5
Bài 8: Mạch đếm (tt) _ ROM

Bảng trạng thái:

Input Output
CS RE Address Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0 0 x x x x x x x x x x x x
1 1 x x x x 0 0 0 0 1 1 1 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 1 0 0 0 1 1 0 1 0
1 1 0 0 1 0 0 0 1 0 1 1 1 1
1 1 0 0 1 1 0 0 1 0 0 0 0 1
1 1 0 1 0 0 0 1 0 1 0 0 0 0
1 1 0 1 0 1 1 1 1 1 1 1 1 1
1 1 0 1 1 0 0 0 0 1 0 0 0 1
1 1 0 1 1 1 0 0 0 0 0 0 0 1
1 1 1 0 0 0 0 0 0 1 0 1 0 1
1 1 1 0 0 1 0 0 0 0 0 0 0 1
1 1 1 0 1 0 0 0 0 1 0 0 0 0
1 1 1 0 1 1 0 0 0 1 0 1 1 1
1 1 1 1 0 0 0 1 0 1 0 0 0 0
1 1 1 1 0 1 1 0 0 0 0 0 0 0
1 1 1 1 1 0 1 1 1 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 0 0 0 0

Code:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity rom16x8bit is
port (
cs :in std_logic;
re :in std_logic;
address :in std_logic_vector (3 downto 0);
data :out std_logic_vector (7 downto 0)
);
end entity;
architecture behavioral of rom16x8bit is

SVTH: Nguyễn Khắc Vinh 3115500071


Trần Văn Điền 3115500013
6
Bài 8: Mạch đếm (tt) _ ROM

begin
process (re, cs, address) begin
if re = '1' and cs = '1' then
case (address) is
when x"0" => data <= x"5f";
when x"1" => data <= x"a3";
when x"2" => data <= x"c5";
when x"3" => data <= x"c6";
when x"4" => data <= x"1c";
when x"5" => data <= x"3b";
when x"6" => data <= x"8d";
when x"7" => data <= x"4b";
when x"8" => data <= x"11";
when x"9" => data <= x"4f";
when x"A" => data <= x"99";
when x"B" => data <= x"55";
when x"C" => data <= x"15";
when x"D" => data <= x"d5";
when x"E" => data <= x"3c";
when x"F" => data <= x"44";
when others => data <= x"ff";
end case; end if;
end process;
end architecture;

SVTH: Nguyễn Khắc Vinh 3115500071


Trần Văn Điền 3115500013
7
Bài 8: Mạch đếm (tt) _ ROM

Check syntax:

SVTH: Nguyễn Khắc Vinh 3115500071


Trần Văn Điền 3115500013
8
Bài 8: Mạch đếm (tt) _ ROM

Chạy mô phỏng:

SVTH: Nguyễn Khắc Vinh 3115500071


Trần Văn Điền 3115500013
9
Bài 8: Mạch đếm (tt) _ ROM

SVTH: Nguyễn Khắc Vinh 3115500071


Trần Văn Điền 3115500013
10

You might also like