BAI 03v1
BAI 03v1
BAI 03v1
Xét một ví dụ có một tín hiệu ck có tần số là 16Hz muốn tạo ra tín hiệu có tần số
là 1Hz để có thể hiểu rõ hơn về cách hoạt động của mạch chia tần số. Để có tần số là
1Hz thì ta thực hiện chia 16, tức là chúng ta sử dụng mạch đếm 16 (mod-16) có ngõ ra
như hình dưới. Như vậy ngõ ra Q0 có tần số ck chia cho 2 hay f0=8Hz; ngõ ra Q1 có
tần số ck chia cho 4 hay f1=4Hz; ngõ ra Q2 có tần số ck chia cho 8 hay f2=2Hz; ngõ ra
Q3 có tần số ck chia cho 16 hay f1=1Hz. Vậy tín hiệu có tần số 1Hz là tín hiệu của ngõ
ra Q3 và đây là một xung đối xứng hay hệ số chu kỳ là 50%.
Nếu một tín hiệu ck có tần số là 10Hz muốn tạo ra tín hiệu có tần số là 1Hz thì
thực hiện chia 10 hay sử dụng mạch đếm mod-10, dạng sóng ngõ ra như hình vẽ. Với
mạch chia này thì tín hiệu có tần số 1Hz là tín hiệu của ngõ ra Q3 và đây là một xung
không đối xứng mà theo tỷ lệ là 80% và 20%. Nếu hệ thống yêu cầu tín hiệu có hệ số
chu kỳ là 50% thì ta không sử dụng được tín hiệu 1Hz này. Để tín hiệu tần số 1Hz có
dạng xung đối xứng thì sẽ sử dụng thêm một mạch so sánh. Chúng ta sẽ lấy giá trị sau
mạch đếm mod-10 so sánh với số 5, nếu như nhỏ hơn 5 thì tín hiệu ngõ ra bằng 1, ngược
lại nếu lớn hơn bằng 5 thì tín hiệu ngõ ra bằng 0.
NH 2023-2024 1
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
Tóm lại: nếu một tín hiệu có tần số là n, muốn chia và tạo ra tín hiệu có tần số là
1Hz với hệ số chu kỳ là 50% thì ta dùng mạch đến mod-n để đếm xung có tần số n. Lấy
kết quả mạch đến so sánh với hằng số n/2 nếu nhỏ hơn n/2 thì cho tín hiệu xung 1Hz
bằng 1, ngược lại thì tín hiệu xung 1Hz bằng 0.
- Chương trình VHDL mạch chia tần số 100MHz thành tín hiệu 1Hz:
library IEEE;
use IEEE.STD_logic_1164.All;
use IEEE.STD_logic_arith.all;
use IEEE.STD_logic_unsigned.all;
entity chia_1xung_1hz is
end chia_1xung_1hz;
NH 2023-2024 2
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
constant N: integer:=100000000;
begin
begin
end if;
end if;
end process;
end beh;
Để tiện quan sát trên KIT ta gán xung 1Hz là một đèn LED đơn với chương trình gán
chân như sau:
## LEDs
NH 2023-2024 3
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
- Chương trình mạch chia tần số 100MHz thành tín hiệu 10Hz:
library IEEE;
use IEEE.STD_logic_1164.All;
use IEEE.STD_logic_arith.all;
use IEEE.STD_logic_unsigned.all;
entity chia_1xung_10hz is
end chia_1xung_10hz;
constant N: integer:=100000000;
begin
begin
end if;
end if;
end process;
NH 2023-2024 4
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
end beh;
- Chương trình mạch chia tần số 100MHz thành tín hiệu 10Hz:
library IEEE;
use IEEE.STD_logic_1164.All;
use IEEE.STD_logic_arith.all;
use IEEE.STD_logic_unsigned.all;
entity chia_2xung is
end chia_2xung;
constant N: integer:=100000000;
begin
process (clock_100MHz)
begin
end if;
NH 2023-2024 5
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
end if;
end if;
end if;
end process;
end beh;
Ở mục 4.1 chúng ta đã tạo ra những tín hiệu có tần số khác nhau 1Hz, 10Hz hoặc
có thể tạo ra một tín hiệu có tần số bất kì bằng mạch chia tần số 100MHz. Các tín hiệu
này đều có hệ số chu kỳ là 50%. Ở phần này chúng ta cũng tạo ra những tín hiệu cho
phép có tần số là 1Hz, 10Hz nhưng hệ số chu kỳ không phải là 50%. Ví dụ như tín hiệu
Enable 1Hz thì có chu kỳ là 1s nhưng thời gian mà tín hiệu bằng 1 đúng bằng 1 chu kỳ
của tín hiệu có tần số 100MHz. Tức là tất cả những tín hiệu Enable này có đặc điểm là
chỉ bằng 1 đúng 1 chu kỳ của tín hiệu xung clock ngõ vào 100MHz, thời điểm bắt đầu
bằng 1 là lúc mạch đếm mod-n đếm tới vị trí n/2. Chức năng của các tín hiệu Enable này
dùng để cho phép các mạch đếm hoạt động đồng bộ theo xung đồng hồ hệ thống
(100MHz).
NH 2023-2024 6
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
use IEEE.STD_logic_1164.All;
use IEEE.STD_logic_arith.all;
use IEEE.STD_logic_unsigned.all;
entity CHIA_XUNG_E1HZ is
end CHIA_XUNG_E1HZ;
constant N: integer:=100000000;
begin
begin
NH 2023-2024 7
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
ELSE clock_TAM<='0';
end if;
end if;
END IF;
end process;
end beh;
- Chương trình chia xung 100MHz thành 2 xung Enable 1Hz và 1kHz:
library IEEE;
use IEEE.STD_logic_1164.All;
use IEEE.STD_logic_arith.all;
use IEEE.STD_logic_unsigned.all;
entity CHIA_2XUNG_E1HZ_E1KHZ is
end CHIA_2XUNG_E1HZ_E1KHZ;
constant N: integer:=100000000;
NH 2023-2024 8
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
begin
process (clock_100MHz)
begin
ELSE clock_TAM1<='0';
end if;
end if;
END IF;
ELSE clock_TAM2<='0';
end if;
end if;
END IF;
end process;
end beh;
Mạch đếm vòng hay Ring counter là mạch được lập ra bằng thanh ghi dịch với
phản hồi ngõ ra trở về ngõ vào FlipFlop D đầu tiên. Mạch đếm vòng có thể lập với số
NH 2023-2024 9
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
flip-flop không hạn chế. Còn mạch đếm Johnson (mạch đếm vòng xoắn) cũng là mạch
đếm vòng nhưng ở chỗ ngõ ra đảo tầng cuối được đưa về ngõ vào tầng đầu. Với n tầng
FF thì đếm vòng xoắn cho ra 2n số đếm do đó nó còn được coi là mạch đếm mod 2n
(đếm nhị phân cho phép đếm với chu kỳ đếm đến 2n). Johnson counter là mạch đếm
thường dùng, đặc biệt là để phát mã Gray, là mã mà hai trạng thái liền kề chỉ khác nhau
nội dung của 1 bit.
Thiết kế mạch điều khiển 8LED sáng dần rồi tắt dần từ phải sang trái. (còn gọi là
mạch đếm Johnson)
- Sơ đồ khối:
NH 2023-2024 10
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity johnson8bit is
CLR : in STD_LOGIC;
end johnson8bit;
begin
PROCESS (CLK,CLR)
VARIABLE D : STD_LOGIC;
NH 2023-2024 11
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
BEGIN
D := NOT QT(7);
END IF;
Q <= QT;
END PROCESS;
end Behavioral;
Để có thể quan sát được trên KIT FPGA thì chúng ta sử dụng mạch chia xung
1Hz như đã trình bày ở trên để làm tín hiệu xung clock cho khối mạch đếm Johnson,
hoặc có thể sử dụng tín hiệu xung clock Enable 1Hz để làm tín hiệu cho phép và vẫn sử
dụng xung Clock 100MHz của KIT FPGA .
Chương trình VHDL kết nối hai khối chia xung 1Hz và đếm Johnson 8 bit
điều khiển 8 LED đơn trên KIT FPGA:
library IEEE;
NH 2023-2024 12
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity johnson8bit_main is
CLR : in STD_LOGIC;
end johnson8bit_main;
begin
Q => Q);
end Behavioral;
## Clock signal
##Switches
## LEDs
NH 2023-2024 13
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
NH 2023-2024 14
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity TGHI8BIT is
CLR,D : in STD_LOGIC;
end TGHI8BIT;
begin
PROCESS (CLK,CLR)
BEGIN
END IF;
END PROCESS;
Q <= QT;
end Behavioral;
Kết nối với KIT FPGA tương tự như mạch đếm Johnson 8 bit.
4.1. Mạch đếm nhị phân hiển thị trên LED đơn
NH 2023-2024 15
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
Thiết kế mạch đếm nhị phân 4 bit, đếm lên đồng bộ theo xung Clock 100MHz
của KIT FPGA có các chân điều khiển RST để reset, Enable là tín hiệu xung Enable
1Hz ở mạch mục 4.2.
- Sơ đồ khối:
- Chương trình VHDL của mạch đếm lên nhị phân 4 bit:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity COUNTER_4BIT_E1HZ is
E_1HZ: in STD_LOGIC;
CLR : in STD_LOGIC;
PAUSE: in STD_LOGIC;
end COUNTER_4BIT_E1HZ;
NH 2023-2024 16
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
begin
PROCESS (CLK,CLR,PAUSE,E_1HZ)
BEGIN
IF E_1HZ='1' THEN
QT:=QT+1;
END IF;
END IF;
END IF;
Q<=QT;
END PROCESS;
end Behavioral;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity COUNTER_4BIT_E1HZ_MAIN is
SW1 : in STD_LOGIC;
SW2: in STD_LOGIC;
NH 2023-2024 17
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
end COUNTER_4BIT_E1HZ_MAIN;
begin
Q => Q);
end Behavioral;
NH 2023-2024 18
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
## Clock signal
##Switches
## LEDs
NH 2023-2024 19
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
Thiết kế mạch đếm BCD 4 bit, đếm lên đồng bộ theo xung Clock 100MHz của
KIT FPGA có các chân điều khiển RST để reset, Enable là tín hiệu xung Enable 1Hz ở
mạch mục 4.2. Vì chương trình VHDL tạo ra xung clock Enable Enable 1Hz đã có ở
mục 4.2 nên phần này chỉ trình bày chương trình VHDL của khối đếm một số BCD 0_9
(khối DEM_BCD_0_9) và chương trình chính của mạch đếm 1 số BCD hiển thị trên 4
LED đơn của KIT NEXYS 7.
- Sơ đồ khối:
- Chương trình VHDL của mạch đếm lên BCD từ 0-9 (khối DEM_BCD_0_9):
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
NH 2023-2024 20
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
entity COUNTER_1BCD_E1HZ is
E_1HZ: in STD_LOGIC;
CLR : in STD_LOGIC;
PAUSE: in STD_LOGIC;
end COUNTER_1BCD_E1HZ;
begin
PROCESS (CLK,CLR,PAUSE,E_1HZ)
BEGIN
IF E_1HZ='1' THEN
QT:=QT+1;
END IF;
END IF;
END IF;
END IF;
Q<=QT;
END PROCESS;
end Behavioral;
NH 2023-2024 21
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
- Chương trình VHDL của mạch chính mạch đếm một số BCD từ 0 đến 9 hiển
thị trên 4LED đơn:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity COUNTER_1BCD_E1HZ_MAIN is
SW1 : in STD_LOGIC;
SW2: in STD_LOGIC;
end COUNTER_1BCD_E1HZ_MAIN;
begin
Q => Q);
end Behavioral;
NH 2023-2024 22
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
## Clock signal
##Switches
## LEDs
NH 2023-2024 23
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)
Bài 1. Thiết kế bộ cộng Full Adder 4 bits, quan sát kiểm chứng kết quả qua mô phỏng
và trên KIT NEXYS A7.
Bài 5. Thiết kế mạch giải mã led 7 đoạn loại anode chung (sáng thì đoạn đó có mức
logic 0) hiển thị trên 8LED 7 đoạn của KIT NEXYS A7
BAI_XX_NHOM_XX
XX: số thứ tự bài hoặc số thứ tự nhóm, ví dụ nhóm 3 làm bài báo cáo buổi 1 thì
nộp file có tên: BAI_01_NHOM_03
NH 2023-2024 24