Bài tập 4-5:Thiết kế 4 flip flopD gồm 4 ngõ vào D, 4 ngõ ra Q và 4 ngõ ra QD, dùng chung
1 CLK.
Bài tập 4-6:Thiết kế 8 flip flop T gồm 8 ngõ vào T,8 ngõ ra Q và 8 ngõ ra QD, dùng chung
CLK.
Bài tập 4-7:Thiết kế thanh ghi dịch giống như IC 74164.
Bài tập 4-8:Thiết kế thanh ghi dịch giống như IC 47194.
Bài tập 4-9:Thiết kế mạch điều khiển đèn giao thông với xanh_1, vàng_1, Đỏ_1, xanh_2,
vàng_2, đỏ_2. Cho xanh sáng 15 giây, vàng sáng 5 giây và đỏ sáng 20 giây.
Bài tập 4-10:Thiết kế mạch điều khiển đèn 8 led đơn với yêu cầu như sau: điểm sáng chạy
từ phải sang trái và từ trái sang phải theo xung clock và có 1 chân cho phép E tích cực mức 0.
Bài tập 4-11:Thiết kế mạch có chức năng giống như IC 4017.
Bài tập 4-12:Thiết kế mạch có chức năng giống như IC 4017 nhưng gồm có 20 ngõ ra.
Bài tập 4-13:Thiết kế mạch có chức năng giống như IC 4017 nhưng gồm 2 con: một con đếm
hàng đơn vị và một con đếm hàng chục.
Bài tập 4-14:Thiết kế mạch đếm nhị phân 4 bit – đếm xuống.
Bài tập 4-15:Thiết kế mạch đếm nhị phân 4 bit – đếm lên, đếm xuống được điều khiển bằng
tín hiệu UD (UD = 0 thì đếm lên, UD = 1 thì đếm xuống), có một tín hiệu CLK, một tín hiệu CLR.
Bài tập 4-16:Thiết kế mạch đếm nhị phân 4 bit – đếm lên, đếm xuống được điều khiển bằng
tín hiệu UD (UD = 0 thì đếm lên, UD = 1 thì đếm xuống), có một tín hiệu CLK, một tín hiệu CLR.
Có thêm chức năng đặt trước số đếm như IC 74193.
Bài tập 4-17:Thiết kế mạch đếm nhị phân 4 bit – đếm lên, đếm xuống được điều khiển bằng
tín hiệu UD (UD = 0 thì đếm lên, UD = 1 thì đếm xuống), có một tín hiệu CLK, một tín hiệu CLR,
có giải mã hiển thị ra 1 led 7 đoạn từ 0 đến F tương ứng với số thập lục phân.
Bài tập 4-18:Thiết kế mạch đếm BCD – đếm lên, đếm xuống được điều khiển bằng tín hiệu
UD (UD = 0 thì đếm lên, UD = 1 thì đếm xuống), có mộttín hiệu CLK, một tín hiệu CLR, có giải
mã hiển thị ra 1 led 7 đoạn.
Bài tập 4-19:Thiết kế mạch đếm BCD từ 00 đến 99 – đếm lên, đếm xuống được điều khiển
bằng tín hiệu UD (UD = 0 thì đếmlên, UD = 1 thì đếm xuống), có mộttín hiệu CLK, một tín hiệu
CLR, có giải mã hiển thị ra 2 led 7 đoạn – không dùng quét.
173 trang |
Chia sẻ: aloso | Lượt xem: 3400 | Lượt tải: 5
Bạn đang xem trước 20 trang tài liệu Luận văn - Kỹ thuật PLD và ASIC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
nh con sự tự do
thay đổi các hoạt động bên trong của các chương trình con mà không ảnh hưởng đến bất kỳ thiết
kế nào sử dụng chương trình con đó. Ví dụ 2-69 khai báo chương trình con như sau:
Ví dụ 2-69:
PACKAGE cluspack IS
TYPE nineval IS (Z0, Z1, ZX, R0, R1, RX, F0, F1, FX);
TYPE t_cluster IS ARRAY (0 TO 15) OF nineval;
TYPE t_clus_vec IS ARRAY (natural range ) OF t_cluster;
FUNCTION resolve_cluster (s : t_clus_vec) RETURN t_cluster;
SUSTYPE t_wclus IS resolve_cluster t_cluster;
CONSTANT undriven: t_wclus;
END cluspack;
Simpo PDF Merge and Split Unregistered Version -
Chương 2. Ngôn ngữ lập trình VHDL SPKT – Nguyễn Đình Phú
124 Kỹ thuật PLD và ASIC
Khai báo chương trình con cho resolve_cluster chỉ định tên của chương trình con, các đối số
bất kỳ của chương trình con, các kiểu và các loại của các đối số và trả về kiểu nếu chương trình
con là một hàm. Khai báo này có thể được sử dụng để biên dịch bất kỳ mô hình nào dự định sử
dụng chương trình con mà chưa có thân chương trình con thực sự được chỉ định. Thân chương trình
con phải hiện hữu trước khi trình mô phỏng được xây dựng.
Thân của gói: Mục đích chính của thân của gói là định nghĩa các giá trị cho các hằng trì hoãn
và chỉ định các thân chương trình con cho bất kỳ khai báo chương trình con nào từ khai báo gói.
Tuy nhiên thân gói cũng có thể chứa các khai báo sau:
– Khai báo chương trình con.
– Thân chương trình con.
– Khai báo kiểu, kiểu con.
– Khai báo hằng, khai báo này điền vào giá trị của hằng trì hoãn.
– Khai báo tập tin.
– Khai báo bí danh.
– Mệnh đề USE.
Tất cả các khai báo trong thân của gói – ngoại trừ khai báo hằng mà chúng chỉ định giá trị
của hằng trì hoãn và khai báo thân chương trình con – là cục bộ đối với thân của gói. Chúng ta hãy
khảo sát thân của gói cho khai báo gói đã được đề cập ở phần trước.
Ví dụ 2-70:
PACKAGE BODY cluspack IS
CONSTANT undriven: t_wclus:=
(ZX, ZX, ZX, ZX,
ZX, ZX, ZX, ZX,
ZX, ZX, ZX, ZX,
ZX, ZX, ZX, ZX,);
FUNCTION resolve_cluster (s : t_clus_vec) RETURN t_cluster IS
VARIABLE result : t_cluster;
VARIABLE driver_count : integer;
BEGIN
IF S’LENGTH = 0 THEN RETURN undriven;
END IF;
FOR i IN S’RANGE LOOP
IF S(i) /= undriven THEN driver_count := driver_count + 1;
IF driver_count = 1 THEN result := s(i);
ELSE result := undriven;
ASSERT FALSE
REPORT “multiple drivers detected”
SEVERITY ERROR;
END IF;
END IF;
END LOOP ;
RETURN result;
END resolve_cluster ;
END cluspack;
Simpo PDF Merge and Split Unregistered Version -
Chương 2. Ngôn ngữ lập trình VHDL SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 125
Phát biểu thân của gói tương tự như khai báo gói ngoại trừ từ khóa BODY theo sau
PACKAGE. Tuy nhiên các nội dung của hai đơn vị thiết kế này rất khác nhau. Thân gói cho ví dụ
này chỉ chứa hai mục: giá trị hằng trì hoãn của hằng trì hoãn undriven và thân chương trình con
của chương trình con resolve_cluster. Ta hãy lưu ý đến cách thức mà đặc tả giá trị hằng trì hoãn
tương thích với khai báo hằng trì hoãn trong khai báo gói và thân chương trình con tương thích với
khai báo chương trình con trong khai báo gói. Thân chương trình con phải tương thích chính xác với
khai báo chương trình con về số thông số, kiểu của các thông số và kiểu trả về.
Thân của gói cũng có thể chứa các khai báo cục bộ chỉ được sử dụng bên trong thân của gói
để xây dựng các thân chương trình con khác hoặc các giá trị hằng trì hoãn. Các khai báo này
không được nhìn thấy từ bên ngoài thân của gói nhưng có thể rất có ích bên trong thân gói. Ví dụ
2-71 về một gói hoàn chỉnh sử dụng tính chất này như sau:
Ví dụ 2-71:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
PACKAGE math IS
TYPE st16 IS ARRAY (0 TO 15) OF std_logic;
FUNCTION add(a, b : IN st16) RETURN st16;
FUNCTION sub(a, b : IN st16) RETURN st16;
END math;
PACKAGE BODY math IS
FUNCTION vect_to_int (s : st16) RETURN INTEGER IS
VARIABLE result : INTEGER:=0;
BEGIN
FOR i IN 0 TO 7 LOOP
result := result * 2;
IF S(i) = ‘1’ THEN result := result +1;
END IF;
END LOOP ;
RETURN result;
END vect_to_int ;
FUNCTION in_to_st16 (s : INTEGER) RETURN st16 IS
VARIABLE result : st16;
VARIABLE digit: INTEGER := 2**15;
VARIABLE local : INTEGER;
BEGIN
Local:= s;
FOR i IN 15 DOWNTO 0 LOOP
IF local/digit >= 1 THEN result(i) := ‘1’;
Local:= Local - digit;
ELSE result(i) := ‘0’;
END IF;
digit := digit /2;
END LOOP ;
RETURN result;
END in_to_st16 ;
FUNCTION add (a,b : IN st16) RETURN st16 IS
VARIABLE result : INTEGER;
Simpo PDF Merge and Split Unregistered Version -
Chương 2. Ngôn ngữ lập trình VHDL SPKT – Nguyễn Đình Phú
126 Kỹ thuật PLD và ASIC
BEGIN
Result := vect_to_int(a) + vect_to_int(b) ;
RETURN int_to_st16 (result);
END add;
FUNCTION sub (a,b : IN st16) RETURN st16 IS
VARIABLE result : INTEGER;
BEGIN
Result := vect_to_int(a) - vect_to_int(b) ;
RETURN int_to_st16 (result);
END sub;
END math;
Khai báo gói ở trên là một khai báo kiểu st16 và hai hàm add và sub hoạt động theo kiểu nêu
trên. Thân gói có chứa thân các hàm cho các khai báo hàm add và sub và cũng chứa hai hàm chỉ
được sử dụng trong thân của gói đó là các hàm này là int_to_st16 và vec_to_int. Các hàm này
không được thấy từ bên ngoài thân của gói. Để làm cho các hàm này có thể nhìn thấy được, một
khai báo hàm cần phải thêm vào phần khai báo gói cho mỗi hàm.
Các hàm vec_to_int và int_to_st16 phải được khai báo trước hàm add để dịch chương trình
cho đúng. Tất cả các hàm phải được khai báo trước khi chúng được sử dụng.
X. CÂU HỎI ÔN TẬP VÀ BÀI TẬP
Câu 2-1. Hãy phân biệt sự khác nhau giữa biến và tín hiệu?
Câu 2-2. Hãy phân biệt sự khác nhau giữ khai báo BIT và STD_LOGIC ?
Câu 2-3. Hãy phân biệt sự khác nhau giữ khai báo BIT và BIT_VECTOR?
Câu 2-4. Hãy phân biệt sự khác nhau giữ khai báo BIT và STD_LOGIC ?
end
Simpo PDF Merge and Split Unregistered Version -
Chương 3
THIẾT KẾ MẠCH LOGIC TỔ HỢP BẰNG
VHDL
GIỚI THIỆU
THIẾT KẾ MẠCH GIẢI MÃ – MẠCH MÃ HOÁ
THIẾT KẾ MẠCH GIẢI MÃ
THIẾT KẾ MẠCH MÃ HOÁ
THIẾT KẾ MẠCH GIẢI MÃ LED 7 ĐOẠN LOẠI ANODE CHUNG
THIẾT KẾ MẠCH ĐA HỢP – MẠCH GIẢI ĐA HỢP
THIẾT KẾ MẠCH ĐA HỢP
THIẾT KẾ MẠCH GIẢI ĐA HỢP
CÂU HỎI ÔN TẬP VÀ BÀI TẬP
Simpo PDF Merge and Split Unregistered Version -
Chương 3. Thiết Kế mạch logic tổ hợp SPKT – Nguyễn Đình Phú
128 Kỹ thuật PLD và ASIC
CÁC HÌNH VẼ
Hình 3-1. Sơ đồ khối mạch GM 2 - 4.
Hình 3-2. Sơ đồ khối mạch GM 3 - 8.
Hình 3-3. Sơ đồ khối mạch MH 4 - 2.
Hình 3-4. Sơ đồ khối mạch GM led 7 đoạn loại anode chung.
Hình 3-5. Sơ đồ khối mạch ĐH 4 vào.
Hình 3-6. Sơ đồ khối mạch GĐH 4 ra.
CÁC BẢNG
Bảng 3-1. BTT mạch GM 2 - 4.
Bảng 3-2. BTT mạch GM 3 - 8.
Bảng 3-3. BTT mạch MH 4 - 2.
Bảng 3-4. BTT mạch GM led 7 đoạn anode chung.
Bảng 3-5. BTT mạch đa hợp 4 ngõ vào.
Bảng 3-6. BTT mạch GĐH 4 ra.
Simpo PDF Merge nd Split Unregistered Version -
Chương 3. Thiết Kế mạch logic tổ hợp SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 129
I. GIỚI THIỆU:
Trong phần này sẽ thiết kế các mạch logic tổ hợp dùng ngôn ngữ VHDL và sử dụng thiết
bị lập trình.
Các mạch logic tổ hợp bao gồm mạch giải mã n đường sang m đường, mạch mã hoá m
đường sang n đường, mạch dồn kênh và mạch phân kênh, mạch giải mã led 7 đoạn loại anode
chung và cathode chung.
Các thiết bị lập trình có thể dùng CPLD XC9572, XC 95144, Coolrunner XC2C256.
II. THIẾT KẾ MẠCH GIẢI MÃ – MẠCH MÃ HOÁ
1. THIẾT KẾ MẠCH GIẢI MÃ:
Bài 3-1: Thiết kế mạch giải mã 2 đường sang 4 đường với ngõ ra tích cực mức cao:
Bước 1: Vẽ sơ đồ khối của mạch:
I0
I1
DECODE
Q0
Q1
Q2
Q3
2 to 4
Hình 3-1. Sơ đồ khối mạch GM 2 - 4.
Bước 2: Lập bảng trạng thái:
Ngõ vào Ngõ ra
I1 I0 Q3 Q2 Q1 Q0
0 0 0 0 0 1
0 1 0 0 1 0
1 0 0 1 0 0
1 1 1 0 0 0
Bảng 3-1. BTT mạch GM 2 - 4.
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 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
Simpo PDF Merge nd Split Unregistered Version -
Chương 3. Thiết Kế mạch logic tổ hợp SPKT – Nguyễn Đình Phú
130 Kỹ thuật PLD và ASIC
begin
PROCESS (I)
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 3-2: Thiết kế mạch giải mã 3 đường sang 8 đường với ngõ ra tích cực mức thấp và 1
ngõ cho phép E:
Bước 1: Vẽ sơ đồ khối của mạch:
I0
I1
DECODE
Q0
Q1
Q2
Q3
3 to 8
Q4
Q5
Q6
Q7
I2
E
Hình 3-2. Sơ đồ khối mạch GM 3 - 8.
Bước 2: Lập bảng trạng thái:
Ngõ vào Ngõ ra
E I2 I1 I0 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0 × × × 1 1 1 1 1 1 1 1
1 0 0 0 1 1 1 1 1 1 1 0
1 0 0 1 1 1 1 1 1 1 0 1
1 0 1 0 1 1 1 1 1 0 1 1
1 0 1 1 1 1 1 1 0 1 1 1
1 1 0 0 1 1 1 0 1 1 1 1
1 1 0 1 1 1 0 1 1 1 1 1
1 1 1 0 1 0 1 1 1 1 1 1
1 1 1 1 0 1 1 1 1 1 1 1
Bảng 3-2. BTT mạch GM 3 - 8.
Bước 3: Viết chương trình:
Simpo PDF Merge nd Split Unregistered Version -
Chương 3. Thiết Kế mạch logic tổ hợp SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 131
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;
END CASE;
END IF;
END PROCESS;
end Behavioral;
2. THIẾT KẾ MẠCH MÃ HOÁ
Bài 3-3: Thiết kế mạch mã hoá 4 đường sang 2 đường với ngõ vào tích cực mức cao.
Bước 1: Vẽ sơ đồ khối của mạch:
Simpo PDF Merge nd Split Unregistered Version -
Chương 3. Thiết Kế mạch logic tổ hợp SPKT – Nguyễn Đình Phú
132 Kỹ thuật PLD và ASIC
Hình 3-3. Sơ đồ khối mạch MH 4 - 2.
Bước 2: Lập bảng trạng thái:
Ngõ vào Ngõ ra
I3 I2 I1 I0 Q1 Q0
0 0 0 1 0 0
0 0 1 0 0 1
0 1 0 0 1 0
1 0 0 0 1 1
Bảng 3-3. BTT mạch MH 4 - 2.
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 mahoa42 is
Port ( I : in STD_LOGIC_VECTOR (3 downto 0);
Q : out STD_LOGIC_VECTOR (1 downto 0));
end mahoa42;
architecture Behavioral of mahoa42 is
begin
PROCESS(I)
BEGIN
CASE I IS
WHEN "0001" => Q <= "00";
WHEN "0010" => Q <= "01";
WHEN "0100" => Q <= "10";
WHEN "1000" => Q <= "11";
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
end Behavioral;
3. THIẾT KẾ MẠCH GIẢI MÃ LED 7 ĐOẠN LOẠI ANODE CHUNG
Simpo PDF Merge nd Split Unregistered Version -
Chương 3. Thiết Kế mạch logic tổ hợp SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 133
Bài 3-4: Thiết kế mạch giải mã led 7 đoạn loại anode chung
Bước 1: Vẽ sơ đồ khối của mạch:
Hình 3-4. Sơ đồ khối mạch GM led 7 đoạn loại anode chung.
Bước 2: Lập bảng trạng thái:
Số Ngõ vào Ngõ ra Số
tp I3 I2 I1 I0 g f e d c b a hex
0 0 0 0 0 1 0 0 0 0 0 0 40
1 0 0 0 1 1 1 1 1 0 0 1 79
2 0 0 1 0 0 1 0 0 1 0 0 24
3 0 0 1 1 0 1 1 0 0 0 0 30
4 0 1 0 0 0 0 1 1 0 0 1 19
5 0 1 0 1 0 0 1 0 0 1 0 22
6 0 1 1 0 0 0 0 0 0 1 0 02
7 0 1 1 1 1 1 1 1 0 0 0 78
8 1 0 0 1 0 0 0 0 0 0 0 00
9 1 0 0 1 0 0 1 0 0 0 0 10
tắt 1 0 1 0 1 1 1 1 1 1 1 7F
tắt 1 0 1 1 1 1 1 1 1 1 1 7F
tắt 1 1 0 0 1 1 1 1 1 1 1 7F
tắt 1 1 0 1 1 1 1 1 1 1 1 7F
tắt 1 1 1 0 1 1 1 1 1 1 1 7F
tắt 1 1 1 1 1 1 1 1 1 1 1 7F
Bảng 3-4. BTT mạch GM led 7 đoạn anode chung.
Bước 3: Viết chương trình:
Để đơn giản nên trong chương trình thì ngõ 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;
Simpo PDF Merge nd Split Unregistered Version -
Chương 3. Thiết Kế mạch logic tổ hợp SPKT – Nguyễn Đình Phú
134 Kỹ thuật PLD và ASIC
architecture Behavioral of giaima7doan is
begin
PROCESS (I)
BEGIN
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;
III. THIẾT KẾ MẠCH ĐA HỢP – MẠCH GIẢI ĐA HỢP
1. THIẾT KẾ MẠCH ĐA HỢP:
Bài 3-5: Thiết kế mạch đa hợp 4 ngõ vào, 1 ngõ ra, 2 ngõ lựa chọn.
Bước 1: Vẽ sơ đồ khối của mạch:
Hình 3-5. Sơ đồ khối mạch ĐH 4 vào.
Simpo PDF Merge nd Split Unregistered Version -
Chương 3. Thiết Kế mạch logic tổ hợp SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 135
Bước 2: Lập bảng trạng thái:
Ngõ vào Ngõ ra
S1 S0 I3 I2 I1 I0 Q
0 0 x x x I0 I0
0 1 x X I1 X I1
1 0 X I2 x X I2
1 1 I3 x x X I3
Bảng 3-5. BTT mạch đa hợp 4 ngõ vào.
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 GMA is
Port ( I : in STD_LOGIC_VECTOR (3 downto 0);
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;
2. THIẾT KẾ MẠCH GIẢI ĐA HỢP
Bài 3-6: Thiết kế mạch giải đa hợp 1 ngõ vào, 4 ngõ ra, 2 ngõ lựa chọn.
Bước 1: Vẽ sơ đồ khối của mạch:
Simpo PDF Merge nd Split Unregistered Version -
Chương 3. Thiết Kế mạch logic tổ hợp SPKT – Nguyễn Đình Phú
136 Kỹ thuật PLD và ASIC
Hình 3-6. Sơ đồ khối mạch GĐH 4 ra.
Bước 2: Lập bảng trạng thái:
Ngõ vào Ngõ ra
I S1 S0 Y3 Y2 Y1 Y0
I 0 0 0 0 0 I
I 0 1 0 0 I 0
I 1 0 0 I 0 0
I 1 1 I 0 0 0
Bảng 3-6. BTT mạch GĐH 4 ra.
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 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;
Simpo PDF Merge nd Split Unregistered Version -
Chương 3. Thiết Kế mạch logic tổ hợp SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 137
END PROCESS;
end Behavioral;
IV. CÂU HỎI ÔN TẬP VÀ BÀI TẬP
Bài tập 3-1: Thiết kế mạch giải mã 2 đường sang 4 đường với ngõ ra tích cực mức thấp và
có một tín hiệu cho phép E tích cực mức cao.
Bài tập 3-2: Thiết kế mạch giải mã 2 đường sang 4 đường với ngõ ra tích cực mức thấp và
có một tín hiệu cho phép E1 tích cực mức cao, và một tín hiệu cho phép E2 tích cực mức thấp.
Bài tập 3-3: Thiết kế mạch giải mã bên trong có 4 mạch giải mã 2 đường sang 4 đường
với ngõ ra tích cực mức thấp.
Bài tập 3-4: Thiết kế mạch giải mã 3 đường sang 8 đường với ngõ ra tích cực mức thấp và
có một tín hiệu cho phép E1 tích cực mức cao, và một tín hiệu cho phép E2 tích cực mức thấp.
Bài tập 3-5: Thiết kế mạch mã hoá 8 đường sang 3 đường với các ngõ vào tích cực mức
thấp.
Bài tập 3-6: Thiết kế mạch mã hoá 8 đường sang 3 đường với các ngõ vào tích cực mức
cao.
Bài tập 3-7: Thiết kế mạch giải mã led 7 đoạn loại cathode chung.
Bài tập 3-8: Thiết kế mạch giải mã led 7 đoạn loại giống như IC 74247.
Bài tập 3-9: Thiết kế mạch giải mã led 7 đoạn loại giống như IC 4511.
Bài tập 3-10: Thiết kế mạch đa hợp 8 ngõ vào, 1 ngõ ra và 3 ngõ lựa chọn.
Bài tập 3-11: Thiết kế mạch đa hợp 16 ngõ vào, 1 ngõ ra và 4 ngõ lựa chọn.
Bài tập 3-12: Thiết kế mạch giải đa hợp 1 ngõ vào, 8 ngõ ra và 3 ngõ lựa chọn.
Bài tập 3-13: Thiết kế mạch giải đa hợp 1 ngõ vào, 16 ngõ ra và 4 ngõ lựa chọn.
Bài tập 3-14: Thiết kế mạch giải đa hợp giống như IC 74151.
Bài tập 3-15: Thiết kế mạch so sánh 2 số 8 bit A và B và có 3 led hiển thị LEDLH,
LEDBA, LEDNH. Nếu A>B thì LEDLH sáng, nếu A=B thì LEDBA sáng, nếu A<B thì LEDNH
sáng.
Bài tập 3-16: Thiết kế mạch chuyển đổi số nhị phân 8 bit thành số BCD.
Bài tập 3-17: Thiết kế mạch chuyển đổi số 2 số BCD thành số nhị phân.
Bài tập 3-18: Thiết kế mạch kiểm tra chẵn lẻ của một số nhị phân 8 bit, nếu là số chẵn thì
đèn chẵn sáng, nếu là số lẻ thì đèn lẻ sáng.
end
Simpo PDF Merge nd Split Unregistered Version -
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
Simpo PDF Merge and Split Unregistered Version -
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.
Simpo PDF Merge nd Split Unre istered Version -
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
và 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
Pre CLR CLK J K Q QD
0 0 X X X 1 1
0 1 X X X 1 0
1 0 X X X 0 1
1 1 0 X X Q0 QD0
1 1 ↓ 0 0 Q0 QD0
1 1 ↓ 0 1 0 1
1 1 ↓ 1 0 1 0
1 1 ↓ 1 1 NOT Q0 NOT QD0
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;
Simpo PDF Merge nd Split Unre istered Version -
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';
IF (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
IF CLK='0' AND CLK'EVENT THEN
JK <=J & K;
CASE T 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 Behav_ffjk;
2. THIẾT KẾ FLIP FLOP D CÓ ENABLE:
Simpo PDF Merge nd Split Unre istered Version -
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:
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 Q0 QD0
1 0 0 Q0 QD0
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;
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
146 Kỹ thuật PLD và ASIC
Q <= QT;
QD <= NOT QT;
END PROCESS;
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:
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 Q30 Q20 Q10 Q00 Không có xung clk
1 ↑ d Q20 Q10 Q00 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);
Simpo PDF Merge nd Split Unre istered Version -
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:
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 Q30 Q20 Q10 Q00 Không có xung clk
1 ↑ d 1 x x x X Q20 Q10 Q00 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;
Simpo PDF Merge nd Split Unre istered Version -
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 Q7O Q6O Q5O Q4O Q3O Q2O Q1O Q0O Không có xung clk
1 ↑ d Q6O Q5O Q4O Q3O Q2O Q1O Q0O 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:
Simpo PDF Merge nd Split Unre istered Version -
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:
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:
Simpo PDF Merge nd Split Unre istered Version -
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
SIGNAL QT: STD_LOGIC_VECTOR (7 downto 0);
SIGNAL D : STD_LOGIC;
begin
PROCESS (CLK,CLR)
BEGIN
IF CLR = '1' THEN QT <= "00000000";
ELSIF CLK='1' AND CLK'EVENT THEN
D <= NOT QT(7);
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 151
QT <= QT(6 DOWNTO 0) & D;
END IF;
END PROCESS;
Q <= QT;
end Behavioral;
4. THIẾT KẾ MẠCH ĐẾM VÒNG 8 BIT:
Bài 4-7: Thiết kế mạch đếm vòng 8 bit.
Bước 1: Vẽ sơ đồ khối của mạch:
CLK
CLR
Q0
Q1
Q2
Q3
8 BIT RING COUNTER
D
Q4
Q5
Q6
Q7
Hình 4-7. Sơ đồ khối mạch đếm vòng 8 bit.
Bước 2: Lập bảng trạng thái:
NGÕ VÀO NGÕ RA
clr clk Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0 X 0 0 0 0 0 0 0 1
1 ↑ 0 0 0 0 0 0 1 0
1 ↑ 0 0 0 0 0 1 0 0
1 ↑ 0 0 0 0 1 0 0 0
1 ↑ 0 0 0 1 0 0 0 0
1 ↑ 0 0 1 0 0 0 0 0
1 ↑ 0 1 0 0 0 0 0 0
1 ↑ 1 0 0 0 0 0 0 0
Bảng 4-7. BTT mạch đếm vòng 8bit.
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 ringcounter8 is
Port ( CLK : in STD_LOGIC;
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
152 Kỹ thuật PLD và ASIC
CLR : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR(7 downto 0));
end ringcounter8;
architecture Behavioral of ringcounter8 is
SIGNAL QT: STD_LOGIC_VECTOR(7 downto 0):=”00000001”;
begin
PROCESS (CLK,CLR)
BEGIN
IF CLR = '0' THEN QT <="00000001";
ELSIF CLK='1' AND CLK'EVENT THEN
QT <= QT(6 DOWNTO 0) & QT(7);
END IF;
END PROCESS;
Q <= QT;
end Behavioral;
Chú ý: Chương trình sau sử dụng biến thay vì tín hiệu như các chương trình trên:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ringcounter8 is
Port ( CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR (7 downto 0));
end ringcounter8;
architecture Behavioral of ringcounter8 is
begin
PROCESS (CLK,CLR)
VARIABLE QT: STD_LOGIC_VECTOR (7 downto 0);
BEGIN
IF CLR = '0' THEN QT:="00000001";
ELSIF CLK='0' AND CLK'EVENT THEN
QT := QT(6 DOWNTO 0) & QT(7);
END IF;
Q <= QT;
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 153
END PROCESS;
end Behavioral;
5. THIẾT KẾ MẠCH ĐIỀU KHIỂN 8 LED SÁNG DẦN – TẮT DẦN:
Bài 4-8: Thiết kế mạch điều khiển 8 led sáng dần, tắt dần từ trái sang phải và từ phải sang
trái theo xung clock.
Bước 1: Vẽ sơ đồ khối của mạch:
Hình 4-8. Sơ đồ khối mạch điều khiển 8 led sáng tắt dần.
Bước 2: Lập bảng trạng thái:
NGÕ VÀO NGÕ RA
clr clk Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 THẬP PHÂN
0 X 0 0 0 0 0 0 0 0 0
1 ↑ 0 0 0 0 0 0 0 1 1
1 ↑ 0 0 0 0 0 0 1 1 2
1 ↑ 0 0 0 0 0 1 1 1 3
1 ↑ 0 0 0 0 1 1 1 1 4
1 ↑ 0 0 0 1 1 1 1 1 5
1 ↑ 0 0 1 1 1 1 1 1 6
1 ↑ 0 1 1 1 1 1 1 1 7
1 ↑ 1 1 1 1 1 1 1 1 8
1 ↑ 1 1 1 1 1 1 1 0 9
1 ↑ 1 1 1 1 1 1 0 0 10
1 ↑ 1 1 1 1 1 0 0 0 11
1 ↑ 1 1 1 1 0 0 0 0 12
1 ↑ 1 1 1 0 0 0 0 0 13
1 ↑ 1 1 0 0 0 0 0 0 14
1 ↑ 1 0 0 0 0 0 0 0 15
1 ↑ 0 0 0 0 0 0 0 0 16
1 ↑ 1 0 0 0 0 0 0 0 17
1 ↑ 1 1 0 0 0 0 0 0 18
1 ↑ 1 1 1 0 0 0 0 0 19
1 ↑ 1 1 1 1 0 0 0 0 20
1 ↑ 1 1 1 1 1 0 0 0 21
1 ↑ 1 1 1 1 1 1 0 0 22
1 ↑ 1 1 1 1 1 1 1 0 23
1 ↑ 1 1 1 1 1 1 1 1 24
1 ↑ 0 1 1 1 1 1 1 1 25
1 ↑ 0 0 1 1 1 1 1 1 26
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
154 Kỹ thuật PLD và ASIC
1 ↑ 0 0 0 1 1 1 1 1 27
1 ↑ 0 0 0 0 1 1 1 1 28
1 ↑ 0 0 0 0 0 1 1 1 29
1 ↑ 0 0 0 0 0 0 1 1 30
1 ↑ 0 0 0 0 0 0 0 1 31
1 ↑ 0 0 0 0 0 0 0 0 32
Bảng 4-8. BTT mạch điều khiển 8 led sáng tắt dần.
Các trạng thái sáng dần tắt dần từ phải sang trái cần 16 xung clock và trạng thái ngược lại
cũng cần 16 xung clock.
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 sangtatdan_tppt is
Port ( CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR (7 downto 0));
end sangtatdan_tppt;
architecture Behavioral of sangtatdan_tppt is
SIGNAL QT: STD_LOGIC_VECTOR (7 downto 0);
begin
PROCESS(CLK,CLR)
VARIABLE DEM: INTEGER RANGE 0 TO 32;
BEGIN
IF CLR ='1' THEN QT <= "00000000";
ELSIF CLK='1' AND CLK'EVENT THEN
IF DEM <16 THEN
QT <= QT(6 DOWNTO 0) & NOT QT(7);
DEM:= DEM +1;
ELSE QT <= NOT QT(0) & QT(7 DOWNTO 1);
DEM:= DEM +1;
END IF;
IF DEM = 32 THEN DEM:=0;
END IF;
END IF;
END PROCESS;
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 155
Q <= QT;
end Behavioral;
Trong chương trình biến DEM có chức năng làm biến đếm để thực hiện lần lượt các trạng
thái.
IV. THIẾT KẾ MẠCH ĐẾM
1. THIẾT KẾ MẠCH ĐẾM NHỊ PHÂN 4 BIT – ĐẾM LÊN
Bài 4-9: Thiết kế mạch đếm nhị phân 4 bit.
Bước 1: Vẽ sơ đồ khối của mạch:
Hình 4-9. Sơ đồ khối mạch đếm nhị phân 4 bit.
Bước 2: Lập bảng trạng thái:
NGÕ VÀO NGÕ RA Ghi chú
clr clk Q3 Q2 Q1 Q0
0 x 0 0 0 0 Reset
1 ↑ 0 0 0 1
1 ↑ 0 0 1 0
1 ↑ 0 0 1 1
… . .. ..
1 ↑ 1 1 1 1
1 ↑ 0 0 0 0
Bảng 4-9. BTT mạch đếm nhị phân 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 cout_4bit is
Port ( CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR (3 downto 0));
end cout_4bit;
architecture Behavioral of cout_4bit is
begin
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
156 Kỹ thuật PLD và ASIC
PROCESS(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:= QT +1;
END IF;
Q <= QT;
END PROCESS;
end Behavioral;
2. THIẾT KẾ MẠCH ĐẾM BCD – ĐẾM LÊN:
Bài 4-10: Thiết kế mạch đếm bcd.
Bước 1: Vẽ sơ đồ khối của mạch:
Hình 4-10. Sơ đồ khối mạch đếm BCD.
Bước 2: Lập bảng trạng thái:
NGÕ VÀO NGÕ RA Ghi chú
clr clk Q3 Q2 Q1 Q0
0 x 0 0 0 0
1 ↑ 0 0 0 1
1 ↑ 0 0 1 0
1 ↑ 0 0 1 1
1 ↑ 0 1 0 0
1 ↑ 0 1 0 1
1 ↑ 0 1 1 0
1 ↑ 0 1 1 1
1 ↑ 1 0 0 0
1 ↑ 1 0 0 1
1 ↑ 0 0 0 0
Bảng 4-10. BTT mạch đếm BCD.
Bước 3: Viết chương trình:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 157
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity bcdcounter is
Port ( CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR (3 downto 0));
end bcdcounter;
architecture Behavioral of bcdcounter is
begin
PROCESS(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:= QT +1;
IF QT = "1010" THEN QT := “0000” ;
END IF;
END IF;
Q <= QT;
END PROCESS;
end Behavioral;
3. THIẾT KẾ MẠCH ĐẾM BCD VÀ GIẢI MÃ HIỂN THỊ LED 7 ĐOẠN
Bài 4-11: Thiết kế mạch đếm bcd hiển thị trên led 7 đoạn.
Bước 1: Vẽ sơ đồ khối của mạch:
I0
I1
DECODE
a
b
c
d
e
f
g
I2
I3
SEGMENT
CLK
CLR
Q0
COUNTER
Q1
Q2
Q3
BCD LED
Hình 4-11. Sơ đồ khối mạch đếm BCD có giải mã 7 đoạn anode chung.
Bước 2: Lập bảng trạng thái:
NGÕ VÀO NGÕ RA
tp clr clk Q3 Q2 Q1 Q0 dp g f e d c b a hex
0 0 x 0 0 0 0 1 1 0 0 0 0 0 0 C0
1 1 ↑ 0 0 0 1 1 1 1 1 1 0 0 1 F9
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
158 Kỹ thuật PLD và ASIC
2 1 ↑ 0 0 1 0 1 0 1 0 0 1 0 0 A4
3 1 ↑ 0 0 1 1 1 0 1 1 0 0 0 0 B0
4 1 ↑ 0 1 0 0 1 0 0 1 1 0 0 1 99
5 1 ↑ 0 1 0 1 1 0 0 1 0 0 1 0 92
6 1 ↑ 0 1 1 0 1 0 0 0 0 0 1 0 82
7 1 ↑ 0 1 1 1 1 1 1 1 1 0 0 0 F8
8 1 ↑ 1 0 0 0 1 0 0 0 0 0 0 0 80
9 1 ↑ 1 0 0 1 1 0 0 1 0 0 0 0 90
Bảng 4-11. BTT mạch đếm BCD có giải mã 7 đoạn.
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 count_bcd_gma is
Port ( CLR : in STD_LOGIC;
CLK : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR (3 downto 0);
L7D : out STD_LOGIC_VECTOR (6 downto 0));
end count_bcd_gma;
architecture Behavioral of count_bcd_gma is
begin
PROCESS (CLR,CLK)
VARIABLE QTAM: STD_LOGIC_VECTOR (3 downto 0);
VARIABLE YTAM: STD_LOGIC_VECTOR (6 downto 0);
BEGIN
IF CLR='0' THEN QTAM :="0000";
ELSIF CLK='1' AND CLK'EVENT THEN QTAM:= QTAM +1;
IF QTAM = "1010" THEN QTAM:="0000";
END IF;
END IF;
CASE QTAM IS
when "0000" => YTAM := x"C0"; -- so 0
when "0001" => YTAM := x"F9"; -- so 1
when "0010" => YTAM := x"A4"; -- so 2
when "0011" => YTAM := x"B0"; -- so 3
when "0100" => YTAM := x"99"; -- so 4
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 159
when "0101" => YTAM := x"92"; -- so 5
when "0110" => YTAM := x"82"; -- so 6
when "0111" => YTAM := x"F8"; -- so 7
when "1000" => YTAM := x"80"; -- so 8
when "1001" => YTAM := x"90"; -- so 9
when others => YTAM := x"FF"; -- tat
END CASE;
Q <= QTAM;
L7D <= YTAM;
END PROCESS;
end Behavioral;
4. THIẾT KẾ MẠCH ĐẾM BCD TỪ 00 ĐẾN 59 – HIỂN THỊ TRÊN 2 LED 7 ĐOẠN
Bài 4-12: Thiết kế mạch đếm bcd từ 00 đến 59 hiển thị trên 2 led 7 đoạn kết nối theo phương
pháp quét. Sử dụng nguồn xung clock có tần số 1,8432MHz trên bộ thí nghiệm dùng để quét và
làm xung tăng giá trị đếm.
Bước 1: Vẽ sơ đồ khối của mạch:
CLK
CLR
OSC
1,8432MHz
a
b
c
d
e
f
g
anod0
anod1
Vcc
Hình 4-12. Sơ đồ khối mạch đếm từ 00 đến 59 có hiển thị.
Bước 2: 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 DEM0099 is
Port ( CLR : in std_logic;
CLK : in std_logic;
anod : out std_logic_vector(3 downto 0);
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
160 Kỹ thuật PLD và ASIC
QB : out std_logic_vector( 7 downto 0);
ma7d : out std_logic_vector( 7 downto 0));
end DEM0099;
architecture Behavioral of DEM0099 is
signal F: std_logic_vector(18 downto 0);
signal mabl: std_logic_vector(7 downto 0);
signal mabh: std_logic_vector(7 downto 0);
function giai_ma(x1: in std_logic_vector(3 downto 0)) return std_logic_vector is
variable z1: std_logic_vector(7 downto 0);
begin
case x1 is
when "0000" => z1 := "11000000"; -- so 0
when "0001" => z1 := "11111001"; -- so 1
when "0010" => z1 := "10100100"; -- so 2
when "0011" => z1 := "10110000"; -- so 3
when "0100" => z1 := "10011001"; -- so 4
when "0101" => z1 := "10010010"; -- so 5
when "0110" => z1 := "10000010"; -- so 6
when "0111" => z1 := "11111000"; -- so 7
when "1000" => z1 := "10000000"; -- so 8
when "1001" => z1 := "10010000"; -- so 9
when others =>z1 := "11111111"; -- so
end case;
return z1;
end giai_ma;
begin
process (CLR,CLK,F,mabl,mabh)
variable bcd1: std_logic_vector(3 downto 0);
variable bcd2: std_logic_vector(3 downto 0);
begin
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 161
if CLR = '1' then bcd1:="0000"; bcd2:="0000";
F <= "0000000000000000000";
elsif RISING_EDGE(CLK) then F <= F + 1;
if F = "1111111111111111111" then bcd1:=bcd1+1;
if bcd1 = "1010" then bcd1:="0000";
bcd2:= bcd2+1;
if bcd2 = "0110" then bcd2:="0000";
end if;
end if;
nd if;
end if;
QB <= bcd2 & bcd1 ; -- hien thi 8 led don
mabh <= giai_ma(bcd2);
mabl <= giai_ma(bcd1);
case F (10 downto 9)is
when "00" => ma7d <= mabh;
anod <="0010";
when "10" => ma7d <= mabl;
anod <="0001";
when others => null;
end case;
END PROCESS;
end Behavioral;
5. THIẾT KẾ MẠCH ĐẾM BCD TỪ 000 ĐẾN 999 – HIỂN THỊ TRÊN 3 LED 7 ĐOẠN
Bài 4-13: Thiết kế mạch đếm bcd từ 000 đến 999 hiển thị trên 3 led 7 đoạn kết nối theo
phương pháp bình thường. Sử dụng nguồn xung clock tuỳ ý.
Bước 1: Vẽ sơ đồ khối của mạch:
a b c d e f g a b c d e f g a b c d e f g
Hình 4-13. Sơ đồ khối mạch đếm từ 000 đến 999.
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
162 Kỹ thuật PLD và ASIC
Bước 2: 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 DEM_999000 is
Port ( CLR : in STD_LOGIC;
CLK : in STD_LOGIC;
QDVI : out STD_LOGIC_VECTOR (6 downto 0);
QCHU : out STD_LOGIC_VECTOR (6 downto 0);
QTRA : out STD_LOGIC_VECTOR (6 downto 0));
end DEM_999000;
architecture Behavioral of DEM_999000 is
signal GMA_DVI: std_logic_vector(7 downto 0);
signal GMA_CHU: std_logic_vector(7 downto 0);
signal GMA_TRM: std_logic_vector(7 downto 0);
function giai_ma(x1: in std_logic_vector(3 downto 0)) return std_logic_vector is
variable z1: std_logic_vector(6 downto 0);
begin
case x1 is
when "0000" => z1 := "1000000"; -- so 0
when "0001" => z1 := "1111001"; -- so 1
when "0010" => z1 := "0100100"; -- so 2
when "0011" => z1 := "0110000"; -- so 3
when "0100" => z1 := "0011001"; -- so 4
when "0101" => z1 := "0010010"; -- so 5
when "0110" => z1 := "0000010"; -- so 6
when "0111" => z1 := "1111000"; -- so 7
when "1000" => z1 := "0000000"; -- so 8
when "1001" => z1 := "0010000"; -- so 9
when others =>z1 := "1111111"; -- TATLED
end case;
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 163
return z1;
end giai_ma;
begin
process (CLR,CLK)
variable BCD_DVI: std_logic_vector(3 downto 0);
variable BCD_CHU: std_logic_vector(3 downto 0);
variable BCD_TRA: std_logic_vector(3 downto 0);
begin
if CLR = '1' then BCD_DVI:="0000";
BCD_CHU:="0000";
BCD_TRA:="0000";
Elsif CLK= '1' and CLK'event then
BCD_DVI:=BCD_DVI+1;
if BCD_DVI= "1010" then
BCD_DVI:="0000";
BCD_CHU:= BCD_CHU+1;
if BCD_CHU= "1010" then
BCD_CHU:="0000";
BCD_TRA:= BCD_TRA+1;
if BCD_TRA= "1010" then
BCD_TRA:="0000";
end if;
end if;
end if;
end if;
QDVI <= giai_ma(BCD_DVI);
QCHU <= giai_ma(BCD_CHU);
QTRA <= giai_ma(BCD_TRA);
END PROCESS;
end Behavioral;
V. CÂU HỎI ÔN TẬP VÀ BÀI TẬP
Bài tập 4-1: Thiết kế flip flop RS.
Bài tập 4-2: Thiết kế mạch chốt D.
Bài tập 4-3: Thiết kế flip flop D.
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
164 Kỹ thuật PLD và ASIC
Bài tập 4-4: Thiết kế flip flop T.
Bài tập 4-5: Thiết kế 4 flip flop D gồm 4 ngõ vào D, 4 ngõ ra Q và 4 ngõ ra QD, dùng chung
1 CLK.
Bài tập 4-6: Thiết kế 8 flip flop T gồm 8 ngõ vào T, 8 ngõ ra Q và 8 ngõ ra QD, dùng chung
CLK.
Bài tập 4-7: Thiết kế thanh ghi dịch giống như IC 74164.
Bài tập 4-8: Thiết kế thanh ghi dịch giống như IC 47194.
Bài tập 4-9: Thiết kế mạch điều khiển đèn giao thông với xanh_1, vàng_1, Đỏ_1, xanh_2,
vàng_2, đỏ_2. Cho xanh sáng 15 giây, vàng sáng 5 giây và đỏ sáng 20 giây.
Bài tập 4-10: Thiết kế mạch điều khiển đèn 8 led đơn với yêu cầu như sau: điểm sáng chạy
từ phải sang trái và từ trái sang phải theo xung clock và có 1 chân cho phép E tích cực mức 0.
Bài tập 4-11: Thiết kế mạch có chức năng giống như IC 4017.
Bài tập 4-12: Thiết kế mạch có chức năng giống như IC 4017 nhưng gồm có 20 ngõ ra.
Bài tập 4-13: Thiết kế mạch có chức năng giống như IC 4017 nhưng gồm 2 con: một con đếm
hàng đơn vị và một con đếm hàng chục.
Bài tập 4-14: Thiết kế mạch đếm nhị phân 4 bit – đếm xuống.
Bài tập 4-15: Thiết kế mạch đếm nhị phân 4 bit – đếm lên, đếm xuống được điều khiển bằng
tín hiệu UD (UD = 0 thì đếm lên, UD = 1 thì đếm xuống), có một tín hiệu CLK, một tín hiệu CLR.
Bài tập 4-16: Thiết kế mạch đếm nhị phân 4 bit – đếm lên, đếm xuống được điều khiển bằng
tín hiệu UD (UD = 0 thì đếm lên, UD = 1 thì đếm xuống), có một tín hiệu CLK, một tín hiệu CLR.
Có thêm chức năng đặt trước số đếm như IC 74193.
Bài tập 4-17: Thiết kế mạch đếm nhị phân 4 bit – đếm lên, đếm xuống được điều khiển bằng
tín hiệu UD (UD = 0 thì đếm lên, UD = 1 thì đếm xuống), có một tín hiệu CLK, một tín hiệu CLR,
có giải mã hiển thị ra 1 led 7 đoạn từ 0 đến F tương ứng với số thập lục phân.
Bài tập 4-18: Thiết kế mạch đếm BCD – đếm lên, đếm xuống được điều khiển bằng tín hiệu
UD (UD = 0 thì đếm lên, UD = 1 thì đếm xuống), có một tín hiệu CLK, một tín hiệu CLR, có giải
mã hiển thị ra 1 led 7 đoạn.
Bài tập 4-19: Thiết kế mạch đếm BCD từ 00 đến 99 – đếm lên, đếm xuống được điều khiển
bằng tín hiệu UD (UD = 0 thì đếm lên, UD = 1 thì đếm xuống), có một tín hiệu CLK, một tín hiệu
CLR, có giải mã hiển thị ra 2 led 7 đoạn – không dùng quét.
Bài tập 4-20: Thiết kế mạch đếm BCD từ 000 đến 999 – đếm lên, đếm xuống được điều
khiển bằng tín hiệu UD (UD = 0 thì đếm lên, UD = 1 thì đếm xuống), có một tín hiệu CLK, một tín
hiệu CLR, có giải mã hiển thị ra 3 led 7 đoạn – dùng quét.
Bài tập 4-21: Thiết kế mạch gồm có 3 led 7 đoạn, bàn phím gồm 10 phím số từ “0” đến “9”.
Ban đầu thì 3 led hiển thị số “000”, khi nhấn phím nào thì phím đó được dịch vào từ bên phải.
(giống như máy tính calculator).
Bài tập 4-22: Thiết kế mạch định thời: gồm có 2 led 7 đoạn để hiển thị số giây từ 00 đến 99,
bàn phím gồm 10 phím số từ “0” đến “0” vàà phím chức năng như “clear”, “enter”, “test”, một ngõ
ra điều khiển relay. Ban đầu thì 2 led hiển thị số “00”, khi nhấn phím nào thì phím đó được dịch
Simpo PDF Merge nd Split Unre istered Version -
Chương 4. Flip flop, thanh ghi, bộ đếm trong VHDL SPKT – Nguyễn Đình Phú
Kỹ thuật PLD và ASIC 165
vào từ bên phải. Sau khi nhấn xong thì nhấn “enter” quá trình đếm xuống sẽ bắt đầu cho đến khi
giá trị đếm bằng 00 thì relay sẽ tác động. Hệ thống ngừng.
end
Simpo PDF Merge nd Split Unre istered Version -
TÀI LIỆU THAM KHẢO
[1]. “Digital Fundamental Experiments and Concepts with CPLDs” , Thomson
Delmar Learning_Chartrand, 2004
[2]. Mivhael.Dciletti, “ Starter’”, Pearson– Pretice Hall, 2004.
[3]. Wayne Wolf, “FPGA based System design ”, Prentice Hall, 2004
[4]. William Kleitz, “Digital Electronics with VHDL Quartus II version”,
Pearson– Pretice Hall, 2004.
[5]. Jong Ching Chuen, Chang Chip Hong, “Digital System Design Principle
and Practices”, Pearson Prentice Hall, 2007.
Simpo PDF Merge and Split Unregistered Version -
Các file đính kèm theo tài liệu này:
- Luận văn - Kỹ thuật PLD và ASIC.pdf