You are on page 1of 24

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.

HỒ CHÍ MINH
KHOA ĐIỆN - ĐIỆN TỬ

BÁO CÁO
THỰC TẬP THIẾT KẾ HỆ THỐNG VÀ
VI MẠCH TÍCH HỢP

BÁO CÁO GIỮA KÌ

GVHD: Trương Ngọc Sơn


SVTH : Nguyễn Đức Thịnh – 20119085

HỌC KỲ II : 2022 - 2023

TP. HỒ CHÍ MINH – THÁNG 4 NĂM 2023


1
MỤC LỤC

CHƯƠNG I . THIẾT KẾ HỆ THỐNG TẠO SỐ NGẪU NHIÊN .................................................... 3


1. MÔ TẢ ĐỀ TÀI ............................................................................................................. 3
1.1 Yêu cầu đề bài ......................................................................................................................... 3
1.2 Kỹ thuật sử dụng ..................................................................................................................... 3
2. MÔ PHỎNG MẠCH TRÊN ISE XILINX.............................................................................. 4
2.1 Code thiết kế ...................................................................................................................... 4
2.2 Sơ đồ hệ thống của mạch .................................................................................................. 7
2.3 Testbench kiểm tra hoạt động của hệ thống ................................................................. 10
3. KẾT LUẬN .............................................................................................................................. 14
CHƯƠNG 2. THIẾT KẾ MẠCH ĐIỀU KHIỂN ĐỘNG CƠ ......................................................... 15
1. MÔ TẢ ĐỀ TÀI ...................................................................................................................... 15
2. MÔ PHỎNG HỆ THỐNG TRÊN MÁY ............................................................................... 15
2.1 Code Verilog trên xilinx ....................................................................................................... 15
2.2 Sơ đồ của mạch...................................................................................................................... 18
2.3 Testbench kiểm tra hệ thống ................................................................................................ 21
3. KẾT LUẬN .............................................................................................................................. 24

2
CHƯƠNG I . THIẾT KẾ HỆ THỐNG TẠO SỐ NGẪU NHIÊN
ĐỀ BÀI: Thiết kế hệ thống tạo ra số ngẫu nhiên có giá trị từ 0 đến 99 hiển thị
trên 2 led 7 đoạn Anode chung. Hệ thống sử dụng nguồn xung có tần số 50 Mhz
- Nhấn nút Start, hệ thống sẽ tạo ra một số ngẫu nhiên hiển thị trên 2 led 7 đoạn
sau khi nút nhấn
Start được thả ra.
- Nhấn nút Reset, xoá bộ đếm hiển thị trên 2 led 7 đoạn về 00.
1. MÔ TẢ ĐỀ TÀI
1.1 Yêu cầu đề bài
Để thiết kế hệ thống hiển số ngẫu nhiên từ 0 đến 99 hiển thị trên 2 led 7 đoạn
Anode chung ta cần quan tâm.
Hệ thống có 2 nút nhấn là Start để khởi tạo quá trình hiển thị ngẫu nhiên và
Reset để khởi tạo lại giá trị 00. Khi nhấn Start thì hiện ngẫu nhiên 1 số bất kì từ
0 đến 99. Nhấn Reset thì 2 led bảy đoạn sẽ hiện số 00, quay lại giá trị ban đầu.
Ta sử dụng ngôn ngữ lập trình phần cứng Verilog để thiết kế hệ thống điều
khiển và mô phỏng hoạt động của mạch.

1.2 Kỹ thuật sử dụng

Để thiết kế mạch ta sử dụng một Linear Feedback Shift Register (LFSR) để tạo
số ngẫu nhiên trong Verilog.
Trong một LFSR 32 – bit, số ngẫu nhiên được sử dụng bằng một seed( tương tự
như một giá trị ban đầu) để khởi tạo được chuỗi giá trị mới. Sau đó, mỗi giá trị
được tạo sẽ được lấy giá trị của seed và thực hiện một phép toán bất kì nào đó.
Các giá trị số ngẫu nhiên được tạo ra bằng cách lấy 8 bit thấp của seed ở thời
điểm hiện tại, sau đó các giá trị này được hiển thị trên led 7 đoạn Anode chung.
Chúng ta sử dụng một bộ đếm để chờ thời gian ngắn từ lúc nhấn nút Start đến
lúc hiển thị số trên led 7 đoạn. Khi nút Reset được nhấn, chúng ta đặt bộ đếm và
led 7 đoạn được trả về giá trị ban đầu.

3
2. MÔ PHỎNG MẠCH TRÊN ISE XILINX
2.1Code thiết kế
module NGUYENDUCTHINH( // Khai báo module tên NGUYENDUCTHINH

input clk, // Tín hiệu đầu vào clk


input rst, // Tín hiều đầu vào rst
input start, // Tín hiệu đầu vào start
output reg [3:0] seg_dp, // Tín hiệu ra (dấu thập phân)
output reg [6:0] seg_A, // Tín hiệu ngõ ra led 7 đoạn thứ nhất
output reg [6:0] seg_B // Tín hiệu ngõ ra led 7 đoạn thứ hai
);

reg [7:0] rand_num; // Khai báo biến lưu giá trị số ngẫu nhiên
reg [3:0] state; // Khai báo biến lưu trạng thái của Mô-đun
reg [3:0] count; // Biến đếm để tạo delay khi nhấn nút
reg [31:0] seed; // Biến lưu giá trị để sinh số ngẫu nhiên

// Linear Feedback Shift Register (LFSR) implementation


function [31:0] lfsr; // Khai báo hàm lfsr
input [31:0] seed; // Khai báo giá trị biến seed
begin // Bắt đầu khối định nghĩa lfsr
lfsr = seed; // Lưu giá trị của seed vào lfsr
lfsr = {lfsr[30:0], lfsr[0]^lfsr[1]^lfsr[3]^lfsr[31]};
// Tính toán giá trị mới cho biến lfsr theo thuật toán LFSR
End // Kết thúc khối định nghĩa lfsr
endfunction

initial begin // Khởi tạo giá trị ban đầu ngẫu nhiên cho sedd
seed = 32'h4D59535F; // Gán giá trị ban đầu cho seed

4
end

always @(posedge clk) begin // Bắt đầu khối, kích cạnh lên xung clock
if (rst) begin // Nếu tín hiệu Reset được kích hoạt
seg_dp <= 4'b0000; // Giá trị về 0
seg_A <= 7'b0000000; // Giá trị led 1 là 0
seg_B <= 7'b0000000; // Giá trị led 2 là 0
rand_num <= 8'b00000000; // Giá trị số ngẫu nhiên được trả về 0
state <= 4'b0000; // Giá trị 0
count <= 4'b0000; // Biến đếm mang giá trị 0
end
else begin // Trường hợp không nhấn nút Reset
case(state) // Gán các giá trị trạng thái cho Mô – đun
4'b0000: begin // Giá trị ban đầu là 0
if (start) begin // Nếu nút Start được kích hoạt
state <= 4'b0001; // Trạng thái chuyển sang giá trị 1
// Giá trị ngẫu nhiên được tạo và được lưu trong biến rand_num
end
end
4'b0001: begin
count <= count + 1; // Biến count ghi lại dòng lập mỗi lần
chuyển trạng thái
if (count == 4'hF) begin // Biến đếm đạt đến giá trị 15
count <= 4'h0;
seed = lfsr(seed);
// Seed được đưa vào lfsr tạo giá trị random mới
rand_num <= seed[7:0]; // Biến ran_num được gán cho giá
trị ngẫu nhiên vừa được tạo ở biến seed phía trên
end

5
if (start == 0) begin // Tín hiệu Start bị vô hiệu hóa
seg_A <= rand_num & 7; // 3 bit cao được lưu trong đèn 1
seg_B <= rand_num >> 3; // 3 bit thấp lưu trong đèn 2
state <= 4'b0010; // Biến trạng thái ở 0010
end // Kết thúc
end
4'b0010: begin // Bắt đầu trạng thái 0010
if (start == 0) begin // Nếu Start bị vô hiệu hóa
seg_A <= {7{1'b1}} ^ (1 << seg_A); // Lưu trữ 4 bit thấp
seg_B <= {7{1'b1}} ^ (1 << seg_B); // Lưu trữ 4 bit cao
seg_dp <= 4'b0000;
state <= 4'b0001;
// Quay lại trạng thái ban đầu và chờ được start
end
end
default: begin
state <= 4'b0000;
end
endcase
end
end

endmodule

6
2.2Sơ đồ hệ thống của mạch

Hình 1. Khối được thiết kế


Khối hệ thống được thiết kế với 3 đầu vào là ‘clk’ tạo xung clock, ‘start’ để kích
hoạt quá trình tạo số ngẫu nhiên và cuối cùng là ‘rst’ khi được kích hoạt sẽ khởi
tạo lại quá trình ban đầu là 00 trên led 7 đoạn.
Ngõ ra gồm ‘seg_A’ tín hiệu hiển thị trên led 7 đoạn thứ nhất, ‘seg_B’ tín hiệu
hiển thị trên led 7 đoạn thứ 2. ‘seg_dp’ chỉ cần cung cấp 1 bit nhưng ở đây ta
cung cấp 4 bit cho đúng với yêu cầu thiết kế cả Verilog.
 Các khối chi tiết của hệ thống

Hình 2. Khối bộ đếm dùng để đếm sau mỗi lần nhấn

7
# Code của khối COUNTER
begin
count <= count + 1; // Biến count ghi lại dòng lập mỗi lần
chuyển trạng thái
if (count == 4'hF) begin // Biến đếm đạt đến giá trị 15
count <= 4'h0;
seed = lfsr(seed);

Hình 4. Khối lưu trữ số ngẫu nhiên ran_num


# Code của khối số ngẫu nhiên
1. Biến ran_num nhận giá trị là 00 khi có tín hiệu Reset được kích hoạt.
if (rst) begin // Nếu tín hiệu Reset được kích hoạt
rand_num <= 8'b00000000; // Giá trị số ngẫu nhiên được trả về 0
2. Biến ran_num nhận giá trị vừa được gán theo công thứ LFSR.
rand_num <= seed[7:0]; // Generate random number
end
if (start == 0) begin
seg_A <= rand_num & 7;
seg_B <= rand_num >> 3;
state <= 4'b0010;

8
Hình 5. Khối tạo số ngẫu nhiên Seed
# Code khối tạo số ngẫu nhiên
seed = lfsr(seed); // Shift seed
rand_num <= seed[7:0]; // Generate random number
Biến seed nhận giá trí của biến seed sau khi thực hiện phép tính lfsr rồi được
gán vào biến ran_num để xuất ra số ngẫu nhiên ra led 7 đoạn.

Hình 6. Khối tạo số ngẫu nhiên xuất ra led 7 đoạn


# Code khối xuất số ngẫu nhiên
if (start == 0) begin
seg_A <= rand_num & 7;
seg_B <= rand_num >> 3;
state <= 4'b0010;

9
end
end
4'b0010: begin // Display number
if (start == 0) begin
seg_A <= {7{1'b1}} ^ (1 << seg_A);
seg_B <= {7{1'b1}} ^ (1 << seg_B);
Khi start chưa được kích hoạt, led 1 và 2 ( A và B) lần lượt xuất 3 bit cao của
led 1 và 3 bit thấp của led 2. Khi strart được kích hoạt, khối seed sẽ thực hiện
phép tính lfsr rồi trả kết quả ra cho khối xuất số ngẫu nhiên.
2.3 Testbench kiểm tra hoạt động của hệ thống
# Code testbench
module NGUYENDUCTHINH_tb;

reg clk; // Khai báo xung vào clk


reg rst; // Khai báo rst là tín hiệu vào
reg start; // Khai báo start là tín hiệu vào
wire [3:0] seg_dp; // Khai báo tín hiệu thập phân ngõ ra
wire [6:0] seg_A; // Khai báo tín hiệu vào led 1
wire [6:0] seg_B; // Khai báo tín hiệu led 2

NGUYENDUCTHINH dut (
.clk(clk),
.rst(rst),
.start(start),
.seg_dp(seg_dp),
.seg_A(seg_A),
.seg_B(seg_B)
);

10
initial begin // Bắt đầu việc cấp nguồng cho hệ thống
clk = 0; // Xung clock khởi tạo bằng 0
rst = 1; // Cho reset bằng 1 để hệ thống ở trạng thái ban đầu (0)
start = 0; // Start bằng 0 hệ thống bị vô hiệu hóa
#10 rst = 0; // Sau 10ns rst được trả về 0
#10 start = 1; // Sau 10ns nữa start mang giá trị 1 sau khi nhấn
#100 start = 0; // 100ns sau khi nhấn và thả start ra , ta được tín hiệu ngẫu
nhiên
#100 $finish;
end

always #5 clk = ~clk; // Sau 5s xung clock kích cạnh lên khởi tạo tín hiệu

endmodule
 Mô phỏng dạng sóng

Hình 7. Dạng sóng ngõ ra khi được tác động

11
Start = 1 sau khi
Reset = 1 nhấn nút

Hình 8. Tín hiệu sóng ngõ ra


Khi tín hiệu Reset bằng 1,tín hiệu trả ra ở led 7 đoạn là 00, do khi reset
bằng 1, tín hiệu ngõ ra mặc định sẽ được trả về trạng thái đầu là 00, hoàn
toàn không phụ thược vào tín hiệu start.
Khi nhấn giữ start tín hiệu start lên 1 nhưng chưa làm thay đổi tín hiệu
ngõ ra ở led 1 và 2 (seg_A và seg_B).
Tín hiệu xung clock với chu kì 10ns để tạo tín hiệu ngõ ra cho hệ thống

Ngõ ra ghi nhận


tín hiệu Start = 0 sau khi
thả nút nhấn

Hình 9. Dạng sóng ngõ ra


Sau khi nút nhấn start được thả ra tín hiệu start trả về 0 nhưng hệ thống
đã được kích hoạt và ngõ ra đã ghi nhận tín hiệu khi không có cản trở của
Reset = 1.

12
Hình 10. Tín hiệu ngõ ra
Ở thời điểm 135ns với sự tác động khi thả nút nhấn và và cạnh lênh xung
clock kích thích tạo nên tín hiệu ngõ ra ở hai led 7 đoạn.

Hình 11. Tín hiệu ngõ ra

Hình 12. Tín hiệu ngõ ra


Khi chịu tác động của xung clock trong một chu kì tín hiệu ngõ ra ở hai led sẽ
nhận là 3 bit đầu của seg_A và 3 bit đầu của seg_B. Trong trường hợp này là 3
bit 111 và 3 bit 111.

13
Hiển thị trên 2 led là 111111 chuyển qua hệ DEC là 63. Sau đó ở chu kì tới với
tác dụng xung clock 2 tín hiệu ngõ ra là 00. Cuối cùng chạy hết chu kì và kết
thúc quá trình làm việc.
3. KẾT LUẬN
Hệ thống hoạt động đúng với yêu cầu lí thuyết, tạo ra tín hiệu ngõ ra ở hai
led 7 đoạn với việc kích thích tín hiệu đầu vào start và reset để điều khiển tín
hiệu dựa trên xung cạnh lên của tín hiệu clock. Tạo được số ngẫu nhiên từ 0
đến 99.

14
CHƯƠNG 2. THIẾT KẾ MẠCH ĐIỀU KHIỂN ĐỘNG CƠ
ĐỀ BÀI: Thiết kế mạch điều khiển động cơ như sau:
- Động cơ được điều khiển thông qua mạch cầu H với 2 tín hiệu điều khiển M1,
M0 (00: dừng, 01chạy thuận, 10 chạy nghịch)
- 1 Led 7 đoạn anode chung hiển thị giá trị 0 khi động cơ dừng, 1 khi chạy
thuận và 2 khi chạy nghịch.
- 1 nút nhấn được đặt tên Run: khi nhấn thì lần lượt chuyển trạng thái của động
cơ từ dừng, chạy thuận, chạy nghịch, dừng …
- Sử dụng máy trạng thái (FSM) để thiết kế, không cần thiết kế mạch chống dội
phím nhấn, giả sử mỗi lần nhấn phím sẽ tạo được xung vuông có độ rộng 10 ms.
1. MÔ TẢ ĐỀ TÀI
Tạo một hệ thống điều khiển với một nút nhấn được đặt tên là Run, mỗi lần
nhấn sẽ tạo ra một trạng thái khác nhau là dừng, chạy thuận và chạy nghịch. Các
trạng thái được điều khiển bằng 2 tín hiệu thông qua mạch cầu H là M1 và M2
với các trạng thái 00 là mạch dừng, 01 mạch sẽ chạy thuận và 10 mạch sẽ chạy
nghịch.
Hệ thống còn có thêm 1 led 7 đoạn hiển thị mỗi lần thay đổi trạng thái của bộ
điều khiển. Khi led hiện số 0 thì hệ thống dừng không hoạt động, khi hiện số 1
hệ thống chạy thuận và khi hiện số 2 hệ thống vẫn hoạt động nhưng chạy
nghịch.
2. MÔ PHỎNG HỆ THỐNG TRÊN MÁY
2.1 Code Verilog trên xilinx
module NGUYENDUCTHINH( // Khai báo module làm việc
input clk, // Tín hiệu ngõ vào clk (clock)
input reset, // Tín hiệu ngõ vào reset
input run, // Tín hiệu vào điều khiển run
output reg [6:0] seg, // Tín hiệu ra
output reg enA, // Tín hiệu ngõ ra enA (trường hợp 1)
output reg enB // Tín hiệu ngõ ra enB (trường hợp 2)

15
);

reg [1:0] motor_state = 2'b00; // Biến điều khiển 2bit với giá trị ban đầu là 0
reg [3:0] debounce_count = 4'b0000; // Biến đếm 4bit với giá trị đầu là 0
reg [3:0] debounce_limit = 4'b1010; // Biến giới hạn 4bit giá trị đầu là 0

parameter FORWARD_VAL = 7'b0000001; // Khai báo tham số giá trị 1


parameter STOP_VAL = 7'b0000000; // Khai báo tham số giá trị 0
parameter REVERSE_VAL = 7'b0000010; // Khai báo tham số giá trị 2

always @(posedge clk) begin // Bắt đầu chương trình với kích thích xung clock
if (reset) begin // Nếu reset được kích hoạt
seg <= STOP_VAL; // Gán giá trị ban đầu cho tín hiệu dừng lại
enA <= 0; // Trạng thái tín hiệu 1 là 0
enB <= 0; // Trạng thái tín hiệu 2 là 0
motor_state <= 2'b00; // Led hiển thị 00 trên màn hình
debounce_count <= 4'b0000; // Biến đếm trạng thái 00
end else begin
if (run) begin // Khi nút run được kích hoạt
if (debounce_count == debounce_limit) // Biến đếm khi đạt giới hạn
begin
if (motor_state == 2'b00) begin // Đèn hiện giá trị 00
motor_state <= 2'b01; // Đèn chuyển trạng thái hiện 01
seg <= STOP_VAL + 1'b1; // Giá trị dừng 0 cộng lên 1
enA <= 1; // seg được cộng 1bit làm giá trị thay đổi lên 1 bit
enB <= 0; // Giá trị B vẫn được giữ nguyên, tạo lên tín hiệu 01
(chạy thuận)
end else if (motor_state == 2'b01) begin
motor_state <= 2'b10; // Tín hiệu được gán cho 10

16
seg <= STOP_VAL + 2'b10; // Stop 00 cộng 2bit 10
enA <= 0; // Giá trị A giữ nguyên
enB <= 1; // Giá trị B lên 1, tạo tín hiệu 10 ( Chạy nghịch)
end else if (motor_state == 2'b10) begin
motor_state <= 2'b01;
seg <= STOP_VAL + 1'b1;
enA <= 1;
enB <= 0;
end
debounce_count <= 4'b0000;
end else begin
debounce_count <= debounce_count + 1; // Mỗi lần thay đổi trạng
thái, biến đếm được cộng lên 1 để tạo delay tín hiệu
end
end else begin
seg <= STOP_VAL;// Ngược lại thì dừng tín hiệu và quay lại trạng thái
dừng
enA <= 0;
enB <= 0;
motor_state <= 2'b00; // Tín hiệu được gán lại là 00
debounce_count <= 4'b0000;
end
end
end

endmodule

17
2.2 Sơ đồ của mạch

Hình 13. Khối mạch hệ thống được tạo


Khối được tạo với tín hiệu vào là clk (Clock) dùng để kích thích hoạt
động của tín hiệu, tín hiệu reset dùng để trả trạng thái ban đầu của hệ
thống là 00 làm cho dừng hệ thống. Nút nhấn run với 3 trạng thái và thay
đổi sau mỗi lần nhấn là 00: dừng hệ thống, 01: Hệ thống chạy thuận, 10:
Hệ thống chạy ngược.
Tương đương với các tín hiệu ngõ vào là các tín hiệu ngõ ra với enA và
enB thể hiện trạng thái hệ thống với các giá trị bit 00, 01 và 10.
 Các khối làm việc của hệ thống

Hình 14. Khối đếm


Khối đếm có chức năng đếm số lần thay đổi trạng thái của mạch khi nhấn
nút run để tạo delay hợp lí cho mạch.

18
# Code của khối đếm
debounce_count <= 4'b0000; // Biến đếm trạng thái 00
Biến đếm được khởi tạo với giá trị ban đầu là 00.

Hình 14. Khối tạo tín hiệu ngõ ra 00, 01, 10


Tín hiệu ngõ ra được hiển thị trên led 7 đoạn với 3 trạng thái 00: dừng hệ thống,
01: hệ thống chạy thuận, 10: hệ thống chạy nghịch.
# Code của khối hiện led
if (reset) begin // Nếu reset được kích hoạt
seg <= STOP_VAL; // Gán giá trị ban đầu cho tín hiệu dừng lại
enA <= 0; // Trạng thái tín hiệu 1 là 0
enB <= 0; // Trạng thái tín hiệu 2 là 0
motor_state <= 2'b00; // Led hiển thị 00 trên màn hình
debounce_count <= 4'b0000; // Biến đếm trạng thái 00
end else begin
if (run) begin // Khi nút run được kích hoạt
if (debounce_count == debounce_limit) // Biến đếm khi đạt giới hạn
begin
if (motor_state == 2'b00) begin // Đèn hiện giá trị 00
motor_state <= 2'b01; // Đèn chuyển trạng thái hiện 01
seg <= STOP_VAL + 1'b1; // Giá trị dừng 0 cộng lên 1

19
enA <= 1; // seg được cộng 1bit làm giá trị thay đổi lên 1 bit
enB <= 0; // Giá trị B vẫn được giữ nguyên, tạo lên tín hiệu 01
(chạy thuận)
end else if (motor_state == 2'b01) begin
motor_state <= 2'b10; // Tín hiệu được gán cho 10
seg <= STOP_VAL + 2'b10; // Stop 00 cộng 2bit 10
enA <= 0; // Giá trị A giữ nguyên
enB <= 1; // Giá trị B lên 1, tạo tín hiệu 10 ( Chạy nghịch)
end else if (motor_state == 2'b10) begin
motor_state <= 2'b01;
seg <= STOP_VAL + 1'b1;
enA <= 1;
enB <= 0;
end
Led 7 đoạn với hai tín hiệu enA và enB với đại diện cho 2bit hiển thị 0 và 1 với
các giá trị 00, 01 và 10.

Hình 15. Khối làm việc tổng quan của bộ điều khiển

20
2.3 Testbench kiểm tra hệ thống
* Code testbench
module NGUYENDUCTHINH_tb; // Tên module

reg clk; // Tín hiệu vào clk


reg reset; // Tín hiệu vào reset
reg run; // Tín hiệu vào run

wire [6:0] seg; // Tín hiệu biến đếm


wire enA; // Tín hiệu ngõ ra
wire enB; // Tín hiệu ngõ ra

NGUYENDUCTHINH dut (
.clk(clk),
.reset(reset),
.run(run),
.seg(seg),
.enA(enA),
.enB(enB)
);

initial begin
clk = 0;
reset = 0;
run = 0;
// Khởi tạo trạng thái đầu của clk, reset và run đều có giá trị 0

21
#10 reset = 1; // Kích hoạt reset sau 10ns
#10 reset = 0; // Tắt reset sau 10ns
#10 run = 1; // Nhấn run sau 10ns
#20 run =0; // Nhấn run lần nửa để tắt sau 20ns
#40 run =1; // Run kích hoạt sau 40ns
#220 run =0 ; // Run tắt sau 220ns
#300 run = 1; // Run bật sau 300ns
end
always #5 clk = ~clk; // Xung cloclk đảo cứ sau mỗi 5ns

endmodule

Tín hiệu ra nhận giá trị 00 khi


chịu reset và nhấn đầu tiên

Hình 16. Dạng sóng ngõ ra của tín hiệu


Khi reset tác động và không có run, tín hiệu ra ở enA và enB lần lượt đều bằng
0, dẫn đến bit hiễn thị trên led bảy đoạn là 00, 7’b0000000.

22
Hình 17. Dạng sóng ngõ ra tín hiệu
Khi nhấn nút Run lần nữa (Nút nhận mức 1) và hệ thống ở trạng thái đầu tiên là
trạng thái chạy thuận, enA nhận mức 1 và enB nhận mức 0, tín hiệu 1 được xác
lập, 7b’0000001 . Trên led 7 đoạn hiện số 1.

enA=1

enB=0
Run=1

Hình 18. Dạng sóng khi enA=1, enB=0

23
Hình 19. Dạng sóng enA=enB=0
Khi Run=0, enA=enB = 0, giá trị ngõ ra 00, led hiện 00 và hệ thống dừng
7’0000000

enA
enB

Hình 20. Dạng sóng khi enA và enB thay đổi


Khi nhấn Run tín hiệu enA và enB lần lượt thay đổi từ 01 và 10, led 7 đoạn hiển
thị số 1 và 2 tương đương với hệ thống chạy thuận và chạy nghịch.
3. KẾT LUẬN
Hệ thống thực hiện hoạt động đúng với lí thuyết đề ra khi kích hoạt restet hệ
thống trả giá trị ban đầu của tất cả các biến là 00 (hệ thống không hoạt
động). Khi kích hoạt run (run=1) tín hiệu enA và enB lần lượt thay đổi tạo ra
2bit 01 và 10, hệ thống theo đó hoạt động theo chiều thuận và theo chiều
nghịch tương ứng, trên led 7 đoạn hiển thi số 1( chiều thuận) và 2 (chiều
nghịch).

24

You might also like