Bai05 Nhom10 TNDT2 Thu5

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 11

Bài 05: Chương trình VHDL cho Flip-Flop, thanh ghi dịch

5.1 Chương trình VHDL cho flip flop JK gồm có các ngõ vào J, K, CLK,
̅.
PRE, CLR và các ngõ ra Q, 𝐐
5.1.1 Sơ đồ khối

PRL
J Q

CLK

K ̅
Q
CLR

5.1.2 Bảng trạng thái

NGÕ VÀO NGÕ RA


Hàng PRE CLR CLK J K Q QD
1 0 0 X X X 1 1
2 0 1 X X X 1 0
3 1 0 X X X 0 1
4 1 1 0 X X Q0 QD0
5 1 1 ↓ 0 0 Q0 QD0
6 1 1 ↓ 0 1 0 1
7 1 1 ↓ 1 0 1 0
8 1 1 ↓ 1 1 NOT 𝑄0 NOT QD0

5.1.3 Code

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

1
SVTH: Đàm Văn Kiên
Bài 05: Chương trình VHDL cho Flip-Flop, thanh ghi dịch

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity JKFF is

Port(

J : in STD_LOGIC;

K : in STD_LOGIC;

CLK : in STD_LOGIC;

PRE : in STD_LOGIC;

CLR : in STD_LOGIC;

Q : out STD_LOGIC;

QD : out STD_LOGIC

);

end JKFF;

architecture Behavioral of JKFF 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';

elsif (PRE='0') and (CLR='1') then QT <= '1'; QDT <= '0';

elsif (PRE='1') and (CLR='0') then QT <= '0'; QDT <= '1';

elsif (PRE='1') and (CLR='1') then

2
SVTH: Đàm Văn Kiên
Bài 05: Chương trình VHDL cho Flip-Flop, thanh ghi dịch

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;

end case;

end if;

end if;

end process;

Q <= QT;

QD <= QDT;

end Behavioral;

3
SVTH: Đàm Văn Kiên
Bài 05: Chương trình VHDL cho Flip-Flop, thanh ghi dịch

5.1.4 Kết quả mô phỏng

5.2 Chương trình VHDL cho D Flip-flop có các ngõ vào D, CLK, Enable
̅.
và các ngõ ra Q, 𝐐
5.2.1 Sơ đồ khối

4
SVTH: Đàm Văn Kiên
Bài 05: Chương trình VHDL cho Flip-Flop, thanh ghi dịch

D Q

CLK

E ̅
Q

5.2.2 Bảng trạng thái

NGÕ VÀO NGÕ RA


E CLK D Q QD
0 X X Q0 QD0
1 0 0 Q0 QD0
1 ↓ 0 0 1
1 ↓ 1 1 0

5.2.3 Code

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
);
end ff_de;

architecture Behavioral of ff_de is


SIGNAL QT : STD_LOGIC;
begin
process( D, E, CLK)

5
SVTH: Đàm Văn Kiên
Bài 05: Chương trình VHDL cho Flip-Flop, thanh ghi dịch

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;

5.2.4 Kết quả mô phỏng

6
SVTH: Đàm Văn Kiên
Bài 05: Chương trình VHDL cho Flip-Flop, thanh ghi dịch

5.3 Viết chương trình VHDL cho thanh ghi dịch 4 bit như hình vẽ sau

5.3.1 Sơ đồ khối

D Q0

Q1
CLK
Q2

CLR Q3

5.3.2. Bảng trạng thái

NGÕ VÀO NGÕ RA


CLR CLK D Q3 Q2 Q1 Q0
0 X X 0 0 0 0
1 0 X Q 3D Q 2D Q1D Q 0D
1 ↑ D Q 2D Q1D Q 0D D

5.3.3 Code

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity thanhghidich4bit is
Port(
D : in STD_LOGIC;
CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR(3 downto 0)
);
end thanhghidich4bit;

7
SVTH: Đàm Văn Kiên
Bài 05: Chương trình VHDL cho Flip-Flop, thanh ghi dịch

architecture Behavioral of thanhghidich4bit is

begin
process(D, CLK, CLR)
variable QT : STD_LOGIC_VECTOR(3 downto 0);
begin
if CLR='0' then QT:="0000";
elsif CLK='1' and CLK'event then
QT(3 downto 0):= QT(2 downto 0)&D;
end if;
Q <= QT;
end process;

end Behavioral;

5.3.4 Kết quả mô phỏng

8
SVTH: Đàm Văn Kiên
Bài 05: Chương trình VHDL cho Flip-Flop, thanh ghi dịch

5.4 Ứng dụng kết quả bài 5.3 viết chương trình VHDL cho thanh ghi dịch
8 bit.
5.4.1 Sơ đồ khối

D Q0

Q1
CLK
Q2

CLR Q3

Q4

Q5

Q6

Q7

5.4.2 Bảng trạng thái

9
SVTH: Đàm Văn Kiên
Bài 05: Chương trình VHDL cho Flip-Flop, thanh ghi dịch

NGÕ VÀO NGÕ RA


CLR CLK D Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0 X X 0 0 0 0 0 0 0 0
1 0 X Q 7D Q 6D Q 5D Q 4D Q 3D Q 2D Q1D Q 0D
1 ↑ D Q 7D Q 6D Q 5D Q 4D Q 2D Q1D Q 0D D

5.4.3 Code

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity thanhghidich8bit is
Port(
D : in STD_LOGIC;
CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR(7 downto 0)
);
end thanhghidich8bit;

architecture Behavioral of thanhghidich8bit is

begin
process(D, CLK, CLR)
variable QT : STD_LOGIC_VECTOR(7 downto 0);
begin
if CLR='0' then QT:="00000000";
elsif CLK='1' and CLK'event then
QT(7 downto 0):= QT(6 downto 0)&D;
end if;
Q <= QT;
end process;

end Behavioral;

10
SVTH: Đàm Văn Kiên
Bài 05: Chương trình VHDL cho Flip-Flop, thanh ghi dịch

5.4.4 Kết quả mô phỏng

11
SVTH: Đàm Văn Kiên

You might also like