BAI 03v1

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

BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (tt)


4.1. Mạch chia tần số (mạch chia xung)

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;

----chia xung 100MHz sang 1Hz----

entity chia_1xung_1hz is

PORT ( clock_100MHz : in STD_logic;

clock_1Hz : out std_logic);

end chia_1xung_1hz;

architecture beh of chia_1xung_1hz is

NH 2023-2024 2
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

constant N: integer:=100000000;

signal CHIA : INTEGER RANGE 0 to (N/2-1) := 0;

signal clock_TAM: STD_logic := '0';

begin

process (clock_100MHz, CHIA, clock_TAM)

begin

if (clock_100MHz = '1' and clock_100MHz'event) then

if CHIA = (N/2-1) then CHIA <= 0;

clock_TAM <= NOT clock_TAM;

else CHIA <= CHIA +1;

end if;

end if;

clock_1Hz <= clock_TAM;

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:

- Chương trình gán chân:


## Clock signal

set_property -dict { PACKAGE_PIN E3 IOSTANDARD LVCMOS33 }


[get_ports { clock_100MHz }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz

## LEDs

NH 2023-2024 3
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS33 }


[get_ports { clock_1Hz }]; #IO_L18P_T2_A24_15 Sch=led[0]

- 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;

----chia xung 100MHz sang 10Hz----

entity chia_1xung_10hz is

PORT ( clock_100MHz : in STD_logic;

clock_10Hz : out std_logic);

end chia_1xung_10hz;

architecture beh of chia_1xung_10hz is

constant N: integer:=100000000;

signal CHIA : INTEGER RANGE 0 to (N/20-1) := 0;

signal clock_TAM: STD_logic := '0';

begin

process (clock_100MHz, CHIA, clock_TAM)

begin

if (clock_100MHz = '1' and clock_100MHz'event) then

if CHIA = (N/20-1) then CHIA <= 0;

clock_TAM <= NOT clock_TAM;

else CHIA <= CHIA +1;

end if;

end if;

clock_10Hz <= clock_TAM;

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;

----chia xung 100MHz sang 1Hz, 10Hz----

entity chia_2xung is

PORT ( clock_100MHz : in STD_logic;

clock_1Hz : out std_logic;

clock_10Hz : out std_logic);

end chia_2xung;

architecture beh of chia_2xung is

constant N: integer:=100000000;

signal CHIA1 : INTEGER RANGE 0 to (N/2-1) := 0;

signal clock_TAM1 : STD_logic := '0';

signal CHIA2 : INTEGER RANGE 0 to (N/20-1) := 0;

signal clock_TAM2 : STD_logic := '0';

begin

process (clock_100MHz)

begin

if (clock_100MHz = '1' and clock_100MHz'event) then

if CHIA1 = (N/2-1) then CHIA1 <= 0;

clock_TAM1 <= NOT clock_TAM1;

else CHIA1 <= CHIA1 +1;

end if;

NH 2023-2024 5
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

end if;

clock_1Hz <= clock_TAM1;

if (clock_100MHz = '1' and clock_100MHz'event) then

if CHIA2 = (N/20-1) then CHIA2 <= 0;

clock_TAM2 <= NOT clock_TAM2;

else CHIA2 <= CHIA2 +1;

end if;

end if;

clock_10Hz <= clock_TAM2;

end process;

end beh;

4.2. Mạch chia xung làm tín hiệu Enable

Ở 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)

- Chương trình chia xung 100MHz thành 1 xung Enable 1Hz:


library IEEE;

use IEEE.STD_logic_1164.All;

use IEEE.STD_logic_arith.all;

use IEEE.STD_logic_unsigned.all;

----chia xung 100MHz sang EN_10Hz----

entity CHIA_XUNG_E1HZ is

PORT ( clock_100MHz : in STD_logic;

E_1Hz : out std_logic);

end CHIA_XUNG_E1HZ;

architecture beh of CHIA_XUNG_E1HZ is

constant N: integer:=100000000;

signal clock_TAM: STD_logic;

signal CHIA : INTEGER RANGE 0 to N+1 := 0;

begin

process (clock_100MHz, CHIA, clock_TAM)

begin

if (clock_100MHz = '1' and clock_100MHz'event) then

CHIA <= CHIA +1;

NH 2023-2024 7
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

IF CHIA = (N/2-1) THEN clock_TAM<='1';

ELSE clock_TAM<='0';

if CHIA = N then CHIA <= 0;

end if;

end if;

END IF;

E_1Hz <= clock_TAM;

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;

----chia xung 100MHz sang Enable 1Hz, Enable 1KHz----

entity CHIA_2XUNG_E1HZ_E1KHZ is

PORT ( clock_100MHz : in STD_logic;

E_1HZ : out std_logic;

E_1KHZ : out std_logic);

end CHIA_2XUNG_E1HZ_E1KHZ;

architecture beh of CHIA_2XUNG_E1HZ_E1KHZ is

constant N: integer:=100000000;

signal CHIA1 : INTEGER RANGE 0 to (N+1) := 0;

signal clock_TAM1 : STD_logic;

signal CHIA2 : INTEGER RANGE 0 to (N/1000+1) := 0;

signal clock_TAM2 : STD_logic;

NH 2023-2024 8
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

begin

process (clock_100MHz)

begin

if (clock_100MHz = '1' and clock_100MHz'event) then

CHIA1 <= CHIA1 +1;

IF CHIA1 = (N/2-1) THEN clock_TAM1<='1';

ELSE clock_TAM1<='0';

if CHIA1 = N then CHIA1 <= 0;

end if;

end if;

END IF;

E_1Hz <= clock_TAM1;

if (clock_100MHz = '1' and clock_100MHz'event) then

CHIA2 <= CHIA2 +1;

IF CHIA2 = (N/2000-1) THEN clock_TAM2<='1';

ELSE clock_TAM2<='0';

if CHIA2 = N then CHIA2 <= 0;

end if;

end if;

END IF;

E_1KHZ <= clock_TAM2;

end process;

end beh;

4.3. Mạch đếm Johnson, thanh ghi dịch

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.

4.3.1. Mạch đếm Johnson

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:

- Bảng trạng thái:

NH 2023-2024 10
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

- Code VHDL cho mạch đếm Johnson


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;

NH 2023-2024 11
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

BEGIN

IF CLR = '0' THEN QT:= "00000000";

ELSIF CLK='1' AND CLK'EVENT THEN

D := NOT QT(7);

QT:= QT(6 DOWNTO 0) & D;

END IF;

Q <= QT;

END PROCESS;

end Behavioral;

- Kết nối với KIT FPGA:

Để 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:

--------chuong trinh chinh mach dem Johnson 8bit--------

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

Port ( CLK : in STD_LOGIC;

CLR : in STD_LOGIC;

Q : out STD_LOGIC_VECTOR (7 downto 0));

end johnson8bit_main;

architecture Behavioral of johnson8bit_main is

SIGNAL CLK_1HZ: STD_LOGIC;

begin

chia_xung_1hz: entity work.chia_1xung_1hz

port map ( clock_100MHz => CLK,

clock_1Hz => CLK_1HZ);

mach_dem_johnson: entity work.johnson8bit

port map ( CLK => CLK_1HZ,

CLR => CLR,

Q => Q);

end Behavioral;

Chương trình gán chân:

## Clock signal

set_property -dict { PACKAGE_PIN E3 IOSTANDARD LVCMOS33 }


[get_ports { CLK }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz

##Switches

set_property -dict { PACKAGE_PIN J15 IOSTANDARD LVCMOS33 }


[get_ports { CLR }]; #IO_L24N_T3_RS0_15 Sch=sw[0]

## LEDs

NH 2023-2024 13
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS33 }


[get_ports { Q[0] }]; #IO_L18P_T2_A24_15 Sch=led[0]

set_property -dict { PACKAGE_PIN K15 IOSTANDARD LVCMOS33 }


[get_ports { Q[1] }]; #IO_L24P_T3_RS1_15 Sch=led[1]

set_property -dict { PACKAGE_PIN J13 IOSTANDARD LVCMOS33 }


[get_ports { Q[2] }]; #IO_L17N_T2_A25_15 Sch=led[2]

set_property -dict { PACKAGE_PIN N14 IOSTANDARD LVCMOS33 }


[get_ports { Q[3] }]; #IO_L8P_T1_D11_14 Sch=led[3]

set_property -dict { PACKAGE_PIN R18 IOSTANDARD LVCMOS33 }


[get_ports { LED[4] }]; #IO_L7P_T1_D09_14 Sch=led[4]

set_property -dict { PACKAGE_PIN V17 IOSTANDARD LVCMOS33 }


[get_ports { Q[5] }]; #IO_L18N_T2_A11_D27_14 Sch=led[5]

set_property -dict { PACKAGE_PIN U17 IOSTANDARD LVCMOS33 }


[get_ports { Q[6] }]; #IO_L17P_T2_A14_D30_14 Sch=led[6]

set_property -dict { PACKAGE_PIN U16 IOSTANDARD LVCMOS33 }


[get_ports { Q[7] }]; #IO_L18P_T2_A12_D28_14 Sch=led[7]

4.3.2. Thanh ghi dịch 8 bit


- Sơ đồ khối:

- Bảng trạng thái:

NH 2023-2024 14
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

- Code VHDL cho mạch thanh ghi dịch 8bit:


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;

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

Port ( CLK : in STD_LOGIC;

E_1HZ: in STD_LOGIC;

CLR : in STD_LOGIC;

PAUSE: in STD_LOGIC;

Q : out STD_LOGIC_VECTOR (3 downto 0));

end COUNTER_4BIT_E1HZ;

NH 2023-2024 16
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

architecture Behavioral of COUNTER_4BIT_E1HZ is

begin

PROCESS (CLK,CLR,PAUSE,E_1HZ)

VARIABLE QT: STD_LOGIC_VECTOR (3 downto 0);

BEGIN

IF CLR = '0' THEN QT:= "0000";

ELSIF CLK='1' AND CLK'EVENT THEN

IF E_1HZ='1' THEN

IF PAUSE ='1' THEN

QT:=QT+1;

END IF;

END IF;

END IF;

Q<=QT;

END PROCESS;

end Behavioral;

- Chương trình VHDL của mạch chính:


library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity COUNTER_4BIT_E1HZ_MAIN is

Port ( CLK : in STD_LOGIC;

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)

Q : out STD_LOGIC_VECTOR (3 downto 0));

end COUNTER_4BIT_E1HZ_MAIN;

architecture Behavioral of COUNTER_4BIT_E1HZ_MAIN is

SIGNAL E_1HZ, CLR, PAUSE: STD_LOGIC;

begin

chia_1xung_1hz: entity work.chia_1xung_1hz

port map (clock_100MHz => CLK,

clock_1Hz => E_1HZ);

COUNTER_4BIT_E1HZ: ENTITY WORK.COUNTER_4BIT_E1HZ

port map (CLK => CLK,

E_1HZ => E_1HZ,

CLR => SW1,

PAUSE => SW2,

Q => Q);

end Behavioral;

- Kết nối với KIT FPGA:


Tiến hành biên dịch để kiểm tra cho hết lỗi, sau đó chạy file gán chân để tạo ra
file bitstream và nạp code vào KIT, quan sát kết quả.

NH 2023-2024 18
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

Chương trình gán chân:

## Clock signal

set_property -dict { PACKAGE_PIN E3 IOSTANDARD LVCMOS33 }


[get_ports { CLK }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz

##Switches

set_property -dict { PACKAGE_PIN J15 IOSTANDARD LVCMOS33 }


[get_ports { SW1 }]; #IO_L24N_T3_RS0_15 Sch=sw[0]

set_property -dict { PACKAGE_PIN L16 IOSTANDARD LVCMOS33 }


[get_ports { SW2 }]; #IO_L3N_T0_DQS_EMCCLK_14 Sch=sw[1]

## LEDs

set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS33 }


[get_ports { Q[0] }]; #IO_L18P_T2_A24_15 Sch=led[0]

set_property -dict { PACKAGE_PIN K15 IOSTANDARD LVCMOS33 }


[get_ports { Q[1] }]; #IO_L24P_T3_RS1_15 Sch=led[1]

set_property -dict { PACKAGE_PIN J13 IOSTANDARD LVCMOS33 }


[get_ports { Q[2] }]; #IO_L17N_T2_A25_15 Sch=led[2]

NH 2023-2024 19
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

set_property -dict { PACKAGE_PIN N14 IOSTANDARD LVCMOS33 }


[get_ports { Q[3] }]; #IO_L8P_T1_D11_14 Sch=led[3]

4.2. Mạch đếm BCD

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

Port ( CLK : in STD_LOGIC;

E_1HZ: in STD_LOGIC;

CLR : in STD_LOGIC;

PAUSE: in STD_LOGIC;

Q : out STD_LOGIC_VECTOR (3 downto 0));

end COUNTER_1BCD_E1HZ;

architecture Behavioral of COUNTER_1BCD_E1HZ is

begin

PROCESS (CLK,CLR,PAUSE,E_1HZ)

VARIABLE QT: STD_LOGIC_VECTOR (3 downto 0);

BEGIN

IF CLR = '0' THEN QT:= "0000";

ELSIF CLK='1' AND CLK'EVENT THEN

IF E_1HZ='1' THEN

IF PAUSE ='1' THEN

QT:=QT+1;

IF QT ="1010" THEN QT:="0000";

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

Port ( CLK : in STD_LOGIC;

SW1 : in STD_LOGIC;

SW2: in STD_LOGIC;

Q : out STD_LOGIC_VECTOR (3 downto 0));

end COUNTER_1BCD_E1HZ_MAIN;

architecture Behavioral of COUNTER_1BCD_E1HZ_MAIN is

SIGNAL E_1HZ, CLR, PAUSE: STD_LOGIC;

begin

chia_1xung_1hz: entity work.chia_1xung_1hz

port map (clock_100MHz => CLK,

clock_1Hz => E_1HZ);

COUNTER_1BCD_E1HZ: ENTITY WORK.COUNTER_1BCD_E1HZ

port map (CLK => CLK,

E_1HZ => E_1HZ,

CLR => SW1,

PAUSE => SW2,

Q => Q);

end Behavioral;

NH 2023-2024 22
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

- Kết nối với KIT FPGA:


Tiến hành biên dịch để kiểm tra cho hết lỗi, sau đó chạy file gán chân để tạo ra
file bitstream và nạp code vào KIT, quan sát kết quả.

Chương trình gán chân:

## Clock signal

set_property -dict { PACKAGE_PIN E3 IOSTANDARD LVCMOS33 }


[get_ports { CLK }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz

##Switches

set_property -dict { PACKAGE_PIN J15 IOSTANDARD LVCMOS33 }


[get_ports { SW1 }]; #IO_L24N_T3_RS0_15 Sch=sw[0]

set_property -dict { PACKAGE_PIN L16 IOSTANDARD LVCMOS33 }


[get_ports { SW2 }]; #IO_L3N_T0_DQS_EMCCLK_14 Sch=sw[1]

## LEDs

set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS33 }


[get_ports { Q[0] }]; #IO_L18P_T2_A24_15 Sch=led[0]

set_property -dict { PACKAGE_PIN K15 IOSTANDARD LVCMOS33 }


[get_ports { Q[1] }]; #IO_L24P_T3_RS1_15 Sch=led[1]

set_property -dict { PACKAGE_PIN J13 IOSTANDARD LVCMOS33 }


[get_ports { Q[2] }]; #IO_L17N_T2_A25_15 Sch=led[2]

set_property -dict { PACKAGE_PIN N14 IOSTANDARD LVCMOS33 }


[get_ports { Q[3] }]; #IO_L8P_T1_D11_14 Sch=led[3]

NH 2023-2024 23
BÀI 3: THIẾT KẾ MỘT SỐ MẠCH TỔ HỢP (TT)

BÀI TẬP THỰC HÀNH:

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

CÁCH ĐẶT TÊN FILE BÁO CÁO:

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

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy