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

Tài liệu Chương 4: Các FLIP FLOP thanh ghi, bộ đếm trong VHDL pptx

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 (518.88 KB, 25 trang )

Chương 4
CÁC FLIP FLOP, THANH GHI, BỘ ĐẾM
TRONG VHDL

GIỚI THIỆU
THIẾT KẾ CÁC LOẠI FLIP FLOP
THIẾT KẾ FLIP FLOP JK
THIẾT KẾ FLIP FLOP D CÓ ENABLE
THIẾT KẾ THANH GHI DỊCH
THIẾT KẾ THANH GHI DỊCH 4 BIT
THIẾT KẾ THANH GHI DỊCH 8 BIT
THIẾT KẾ MẠCH ĐẾM JOHNSON 8 BIT
THIẾT KẾ MẠCH ĐẾM VÒNG 8 BIT
THIẾT KẾ MẠCH ĐIỀU KHIỂN 8 LED SÁNG DẦN – TẮT DẦN
THIẾT KẾ MẠCH ĐẾM
THIẾT KẾ MẠCH ĐẾM NHỊ PHÂN 4 BIT – ĐẾM LÊN
THIẾT KẾ MẠCH BCD – ĐẾM LÊN
THIẾT KẾ MẠCH ĐẾM BCD VÀ GIẢI MÃ HIỂN THỊ LED 7 ĐOẠN
THIẾT KẾ MẠCH ĐẾM BCD TỪ 00 ĐẾN 59 – HIỂN THỊ TRÊN 2 LED 7 ĐOẠN
THIẾT KẾ MẠCH ĐẾM BCD TỪ 000 ĐẾN 999 – HIỂN THỊ TRÊN 3 LED 7 ĐOẠN
CÂU HỎI ÔN TẬP VÀ BÀI TẬP

Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
142 Kỹ thuật PLD và ASIC
Hình 4-1. Sơ đồ khối FLIP FLIP JK.
Hình 4-2. Sơ đồ khối FLIP FLIP D có enable.
Hình 4-3. Sơ đồ khối thanh ghi 4 bit.
Hình 4-4. Sơ đồ khối thanh ghi 4 bit, nạp song song.
Hình 4-5. Sơ đồ khối thanh ghi 8 bit.
Hình 4-6. Sơ đồ khối mạch đếm vòng Johnson 8 bit.
Hình 4-7. Sơ đồ khối mạch đếm vòng 8 bit.


Hình 4-8. Sơ đồ khối mạch điều khiển 8 led sáng tắt dần.
Hình 4-9. Sơ đồ khối mạch đếm nhò phân 4 bit.
Hình 4-10. Sơ đồ khối mạch đếm BCD.
Hình 4-11. Sơ đồ khối mạch đếm BCD có giải mã 7 đoạn anode chung.
Hình 4-12. Sơ đồ khối mạch đếm từ 00 đến 59 có hiển thò.
Hình 4-13. Sơ đồ khối mạch đếm từ 000 đến 999.


Bảng 4-1. BTT FLIP FLIP JK.
Bảng 4-2. BTT FLIP FLIP D có enable.
Bảng 4-3. BTT mạch thanh ghi dòch 4 bit.
Bảng 4-4. BTT mạch thanh ghi dòch 4 bit, nạp song song.
Bảng 4-5. BTT thanh ghi dòch 8 bit.
Bảng 4-6. BTT mạch đếm JOHNSON 8 bit.
Bảng 4-7. BTT mạch mạch đếm vòng 8bit.
Bảng 4-8. BTT mạch điều khiển 8 led sáng tắt dần.
Bảng 4-9. BTT mạch đếm nhò phân 4 bit.
Bảng 4-10. BTT mạch đếm BCD.
Bảng 4-11. BTT mạch đếm BCD có giải mã 7 đoạn.

Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 143

I. GIỚI THIỆU:
Trong phần này sẽ thiết kế các mạch flip flop, thanh ghi và mạch đếm dùng ngôn ngữ VHDL
và sử dụng thiết bò lập trình.
Các mạch flip flop bao gồm flip flop JK, flip flop T, flip flop D.
Thanh ghi dòch bao gồm thanh ghi dòch nối tiếp sang nối tiếp, nối tiếp sang song song, mạch
đếm vòng, mạch đếm JohnSon.
Mạch đếm nhò phân, mạch đếm lên đếm xuống, mạch đếm BCD, mạch đếm đặt trước số

đếm, mạch đếm có giải mã sang led 7 đoạn, mạch đếm giây, đếm phút giây,…
Các thiết bò lập trình có thể dùng CPLD XC9572, XC 95144, Coolrunner XC2C256.
II. THIẾT KẾ CÁC LOẠI FLIP FLOP
1. THIẾT KẾ FLIP FLOP JK:
Bài 4-1: Thiết kế flip flop JK gồm có các ngõ vào J, K, CLK, PRE, CLR và các ngõ ra gồm Q

Q
:
Bước 1: Vẽ sơ đồ khối của mạch:

Hình 4-1. Sơ đồ khối FF JK.
Bước 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 Q
0
QD
0

5 1 1

0 0 Q
0
QD
0


6 1 1

0 1 0 1
7 1 1

1 0 1 0
8 1 1

1 1 NOT Q
0
NOT QD
0

Bảng 4-1. BTT FF JK.
Bước 3: Viết chương trình:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
144 Kỹ thuật PLD và ASIC
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;
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;
QD <= QDT;
end Behav_ffjk;
2. THIẾT KẾ FLIP FLOP D CÓ ENABLE:
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 145
Bài 4-2: Thiết kế flip flop D gồm có các ngõ vào D, CLK, Enable và ngõ ra gồm Q và
Q
:

Bước 1: Vẽ sơ đồ khối của mạch:
D
E
CLK
Q
Q

Hình 4-2. Sơ đồ khối FF D có enable.
Bước 2: Bảng trạng thái:
NGÕ VÀO NGÕ RA
E clk D Q QD
0 x x Q
0
QD
0

1 0 0 Q
0
QD
0

1

0 0 1
1

1 1 0
Bảng 4-2. BTT FF D có enable.
Bước 3: 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);
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;
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
146 Kỹ thuật PLD và ASIC
END PROCESS;
Q <= QT;
QD <= NOT QT;
end Behavioral;
III. THIẾT KẾ THANH GHI DỊCH
1. THIẾT KẾ THANH GHI DỊCH 4 BIT:
Bài 4-3: Thiết kế thanh ghi dòch 4 bit vào nối tiếp ra nối tiếp.
Bước 1: Vẽ sơ đồ khối của mạch:
D

CLK
CLR
Q0
Q1
Q2
Q3

Hình 4-3. Sơ đồ khối thanh ghi 4 bit.
Bước 2: Lập bảng trạng thái:
NGÕ VÀO NGÕ RA Ghi chú
clr clk D Q3 Q2 Q1 Q0
0 x x 0 0 0 0 Reset
1 0 x Q3
0
Q2
0
Q1
0
Q0
0
Không có xung clk
1

d Q2
0
Q1
0
Q0
0
d Dòch dữ liệu vào

Bảng 4-3. BTT thanh ghi 4 bit.
Bước 3: 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 reg4b is
Port ( D : in STD_LOGIC;
CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR (3 downto 0));
end reg4b;
architecture Behavioral of reg4b is
begin
process(D,CLK,CLR)
variable QT: std_logic_vector(3 downto 0);
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 147
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;
Bài 4-4: Thiết kế thanh ghi dòch 4 bit vào nối tiếp, song song, ra nối tiếp song song.
Bước 1: Vẽ sơ đồ khối của mạch:
Q0
Q1

Q2
Q3
P0
P1
P2
P3
PL
CLR
CLK
D

Hình 4-4. Sơ đồ khối thanh ghi 4 bit, nạp song song, nối tiếp.
Bước 2: Lập bảng trạng thái:
NGÕ VÀO NGÕ RA Ghi chú
CLR CLK D PL P3 P2 P1 P0 Q3 Q2 Q1 Q0
0 x x x x x x x 0 0 0 0 Reset
1 x x 0 P3 P2 P1 P0 P3 P2 P1 P0 Load
1 0 x 1 x x x x Q3
0
Q2
0
Q1
0
Q0
0
Không có xung clk
1

d 1 x x x X Q2
0

Q1
0
Q0
0
d Dòch dữ liệu vào
Bảng 4-4. BTT mạch thanh ghi dòch 4 bit, nạp song song, nối tiếp.
Bước 3: 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 tghi4b_ntss is
Port ( D : in STD_LOGIC;
CLR : in STD_LOGIC;
CLK : in STD_LOGIC;
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
148 Kỹ thuật PLD và ASIC
P : in STD_LOGIC_VECTOR (3 downto 0);
Q : out STD_LOGIC_VECTOR (3 downto 0);
PL : in STD_LOGIC);
end tghi4b_ntss;
architecture Behavioral of tghi4b_ntss is
begin
PROCESS(D,CLR,CLK,P,LOAD)
VARIABLE QT: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF CLR='0' THEN QT:= "0000";
ELSIF PL='0' THEN QT:= P;
ELSIF CLK='1' AND CLK'EVENT THEN QT:= QT(2 DOWNTO 0) & D;
END IF;

Q <= QT;
END PROCESS;
end Behavioral;
2. THIẾT KẾ THANH GHI DỊCH 8 BIT:
Bài 4-5: Thiết kế thanh ghi dòch 8 bit vào nối tiếp, ra nối tiếp song song.
Bước 1: Vẽ sơ đồ khối của mạch:
CLK
CLR
Q0
Q1
Q2
Q3
D
Q4
Q5
Q6
Q7

Hình 4-5. Sơ đồ khối thanh ghi 8 bit.
Bước 2: Lập bảng trạng thái:
NGÕ VÀO NGÕ RA Ghi chú
clr clk D Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0 x x 0 0 0 0 0 0 0 0 Reset
1 0 x Q7
O
Q6
O
Q5
O
Q4

O
Q3
O
Q2
O
Q1
O
Q0
O
Không có xung clk
1

d Q6
O
Q5
O
Q4
O
Q3
O
Q2
O
Q1
O
Q0
O
d Dòch dữ liệu vào
Bảng 4-5. BTT thanh ghi dòch 8 bit.
Bước 3: Viết chương trình:
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú

Kỹ thuật PLD và ASIC 149
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity TGHI8BIT is
Port ( CLK : in STD_LOGIC;
CLR,D : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR (7 downto 0));
end TGHI8BIT;
architecture Behavioral of TGHI8BIT is
SIGNAL QT: STD_LOGIC_VECTOR (7 downto 0);
begin
PROCESS (CLK,CLR)
BEGIN
IF CLR = '0' THEN QT <= "00000000";
ELSIF CLK='1' AND CLK'EVENT THEN
QT <= QT(6 DOWNTO 0) & D;
END IF;
END PROCESS;
Q <= QT;
end Behavioral;
3. THIẾT KẾ MẠCH ĐẾM JOHNSON 8 BIT:
Bài 4-6: Thiết kế mạch đếm vòng JONHSON 8 bit.
Bước 1: Vẽ sơ đồ khối của mạch:
CLK
CLR
Q0
Q1
Q2

Q3
8 BIT JOHNSON COUNTER
D
Q4
Q5
Q6
Q7

Hình 4-6. Sơ đồ khối mạch đếm vòng Johnson 8 bit.
Chú ý: D đã được kết nối với ngõ ra
7Q
và nằm bên trong mạch điện.
Bước 2: Lập bảng trạng thái:
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
150 Kỹ thuật PLD và ASIC
NGÕ VÀO NGÕ RA
clr clk Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0 X 0 0 0 0 0 0 0 0
1

0 0 0 0 0 0 0 1
1

0 0 0 0 0 0 1 1
1

0 0 0 0 0 1 1 1
1

0 0 0 0 1 1 1 1

1

0 0 0 1 1 1 1 1
1

0 0 1 1 1 1 1 1
1

0 1 1 1 1 1 1 1
1

1 1 1 1 1 1 1 1
1

1 1 1 1 1 1 1 0
1

1 1 1 1 1 1 0 0
1

1 1 1 1 1 0 0 0
1

1 1 1 1 0 0 0 0
1

1 1 1 0 0 0 0 0
1

1 1 0 0 0 0 0 0

1

1 0 0 0 0 0 0 0
1

0 0 0 0 0 0 0 0
Bảng 4-6. BTT mạch đếm JOHNSON 8 bit.
Bước 3: 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 johnson8bit is
Port ( CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR (7 downto 0));
end johnson8bit;
architecture Behavioral of johnson8bit is
begin
PROCESS (CLK,CLR)
VARIABLE QT: STD_LOGIC_VECTOR (7 downto 0);
VARIABLE D : STD_LOGIC;
BEGIN
IF CLR = '0' THEN QT <= "00000000";
ELSIF CLK='1' AND CLK'EVENT THEN
D <= NOT QT(7);

×