Top module traffic_light

Một phần của tài liệu Thiết kế hệ thống điều khiển tín hiệu đèn giao thông sử dụng FPGA (Trang 40)

4.2 Kết quả mô phỏng chức năng

Tất cả các chức năng và trường hợp xảy ra được mô phỏng kết quả với các tín hiệu đầu vào là tín hiệu switch, clock và reset. Module traffic_ligh sẽ được mô phỏng chức năng tại 3 trường hợp: Hoạt động bình thường (Switch khơng tích cực và reset khơng tích cực), hoạt động khi reset tích cực và hoạt động khi Switch tích cực.

Để có thể kiểm tra tất cả các chức năng và trường hợp của module đèn giao thông, người thực hiện đề tài sẽ phải giảm tốc độ xung clock thấp nhất để có thể dễ dàng quan sát.

30

Bảng 4.1: Thông số lựa chọn các trường hợp đặc biệt

Trường hợp rst_n (Reset) C (Switch)

Bình thường 1 1

Reset tích cực 0 X

Switch tích cực 1 0

4.2.1 Kiểm tra trường hợp bình thường

Kiểm tra trường hợp tín hiệu đèn tự động chuyển trạng thái theo thời gian đã được thiết đặt mặc định. Kết quả mô phỏng được biểu diễn qua Hình 4.2. Các trạng thái từ S0 đến S5 lần lượt được thực hiện đúng theo sơ đồ trạng thái được nêu trên phần thiết kế.

Hình 4.2: Kết quả mơ phỏng trường hợp reset và switch khơng tích cực 4.2.2 Kiểm tra trường hợp Reset tích cực

Kiểm tra trường hợp tín hiệu đèn đang tự động chuyển trạng thái thì tín hiệu reset tích cực. Kết quả mơ phỏng được biểu diễn qua Hình 4.3. Khi đèn đang ở trạng thái S1 (đèn chính: 001 và đèn cắt ngang: 100) thì tín hiệu reset tích cực, làm cho đèn chuyển về trạng thái ban đầu S0 (đèn chính: 001 và đèn cắt ngang: 001). Kết quả được reset theo đúng như thiết kế.

31

4.2.3 Kiểm tra trường hợp Switch tích cực

Kiểm tra trường hợp tín hiệu đèn đang tự động chuyển trạng thái thì tín hiệu switch tích cực. Kết quả mơ phỏng được biểu diễn qua Hình 4.4. Khi đèn đang ở trạng thái S2 (đèn chính: 001 và đèn cắt ngang: 010) thì tín hiệu switch tích cực, làm cho đèn đang ở trạng thái S2 sẽ được giữ lại. Sau khi tín hiệu switch hết tích cực, đèn sẽ tiếp tục hoạt động lại bình thường theo trạng thái trước đó.

Hình 4.4: Kết quả mơ phỏng trường hợp switch tích cực

4.3 Kết quả mơ phỏng trên Xilinx Spartan 3E Stater Kit

Dưới đây là kết quả bằng việc mô phỏng trên Kit FPGA Spartan 3E. Các trạng thái được thể hiện trên Kit đúng với yêu cầu thiết kế.

Hình 4.5: FSM ở trạng thái MG_CR Hình 4.6: FSM ở trạng thái MY_CR

32

33

KẾT LUẬN VÀ KIẾN NGHỊ 5.1 Kết luận

Mục tiêu ban đầu của đề tài là thiết kế được bộ điều khiển tín hiệu đèn giao thơng tại ngã tư. Với những kết quả đạt được qua q trình thiết kế, có thể kết luận kết quả của đề tài đã đáp ứng được như mục tiêu đề ra và phù hợp với lý thuyết ban đầu.

Cụ thể, đề tài đã đạt được những kết quả như sau:

 Thiết kế được hoàn chỉnh một bộ điều khiển tín hiệu đèn giao thơng tại ngã tư với đầy đủ chức năng yêu cầu.

 Sử dụng ngơn ngữ Verilog để tạo ra bộ điều khiển tín hiệu đèn giao thông như thiết kế trên giấy.

Bên cạnh những thành quả đạt được sau quá trình nghiên cứu, đề tài cũng có những hạn chế cần phải giải quyết như sau:

 Thiết kế chưa phải là tối ưu nhất về phần cứng.

 Chưa có chức năng có thể lựa chọn từng trạng thái tín hiệu đèn.

5.2 Kiến nghị

Đề tài nhóm đã có thể sử dụng thực tế cho một tuyến đường thực tế nhưng chỉ nên vận hành ở tuyến đường nhỏ với lưu lượng giao thơng trung bình. Để được sử dụng ở tuyến đường lớn hơn, nhóm kiến nghị thêm những chức năng nhóm đã đề xuất ở trên để hỗ trợ tốt nhất cho việc kiểm sốt lưu lượng giao thơng lớn hơn.

34

TÀI LIỆU THAM KHẢO

[1] Nguyễn Bảo Ngọc, “Tại sao lại sử dụng FPGA ? Cấu trúc FPGA như thế nào” , 2019 [online]. Available

https://semiconvn.com/home/hoc-thiet-ke-vi-mach/bai-hc-vi-mch/12559-ti-sao-li-s- dng-fpga--cu-truc-fpga-nh-th-nao-.html

[2] Lâm Đức Khải, “Giáo trình Verilog HDL”, Bài báo khoa học, 2017. [3] Nguyễn Quân, “Máy trạng thái hữu hạn FSM”, 2017, [online]. Available

http://nguyenquanicd.blogspot.com/2017/08/verilogsystem-verilog-may-trang- thai.html

35

PHỤ LỤC A. Source code traffic_light_topModule

module traffic_light_topModule(

input clk,

input rst_n,//low active

input switch,//low active output [2:0] light_mainRoad, output [2:0] light_crossRoad );

wire g_end, r_end, y_end, state_g, state_r, state_y; wire inter_clk;

and a1 (inter_clk, clk, switch); delay_counter delay_module ( .clk(inter_clk), .rst_n(rst_n), .state_g(state_g), .state_r(state_r), .state_y(state_y), .g_end(g_end), .r_end(r_end), .y_end(y_end) ); traffic_light_fsm fsm_module ( .clk(inter_clk), .rst_n(rst_n), .g_end(g_end), .r_end(r_end), .y_end(y_end), .light_mainroad(light_mainRoad), .light_crossroad(light_crossRoad), .state_g(state_g), .state_r(state_r), .state_y(state_y) ); endmodule

B. Source code đơn vị traffic_light_fsm

module traffic_light_fsm(

input clk, input rst_n,

36

input g_end, input r_end, input y_end,

output reg [2:0] light_mainroad, output reg [2:0] light_crossroad, output wire state_g,

output wire state_r, output wire state_y );

//encode state

localparam MGRE_CRED = 3'b000;// mainroad green and

crossroad red

localparam MYEL_CRED = 3'b001;// mainroad yellow and

crossroad red

localparam MRED_CRED1 = 3'b010;// mainroad red and

crossroad red

localparam MRED_CGRE = 3'b011;// mainroad red and

crossroad green

localparam MRED_CYEL = 3'b100;// mainroad red and

crossroad yellow

localparam MRED_CRED2 = 3'b101;// mainroad red and

crossroad red

//signal declaration

reg [2:0] current_state, next_state;

//next state

always @ (*) begin

case (current_state[2:0])

MGRE_CRED: begin

if(g_end) next_state = MYEL_CRED; else next_state = current_state; end

MYEL_CRED: begin

if(y_end) next_state = MRED_CRED1; else next_state = current_state; end

MRED_CRED1: begin

if(r_end) next_state = MRED_CGRE; else next_state = current_state; end

MRED_CGRE: begin

if(g_end) next_state = MRED_CYEL; else next_state = current_state; end

MRED_CYEL: begin

if(y_end) next_state = MRED_CRED2; else next_state = current_state; end

37

if(r_end) next_state = MGRE_CRED; else next_state = current_state; end

default: next_state = current_state; //can chu

y truong hop nay

endcase end

//state register

always @ (posedge clk) //reset syn begin

if (~rst_n) current_state <= MRED_CRED1; else current_state <= next_state;

end always @ (*) begin case (current_state) MGRE_CRED: light_mainroad = 3'b100; MYEL_CRED: light_mainroad = 3'b010; default: light_mainroad = 3'b001; endcase end always @ (*) begin case (current_state) MRED_CGRE: light_crossroad = 3'b100; MRED_CYEL: light_crossroad = 3'b010; default: light_crossroad = 3'b001; endcase end

//output signal for counter

assign state_g = (current_state == MGRE_CRED) |

(current_state == MRED_CGRE);

assign state_y = (current_state == MYEL_CRED) |

(current_state == MRED_CYEL);

assign state_r = (current_state == MRED_CRED1) |

(current_state == MRED_CRED2);

endmodule

C. Source code đơn vị delay_counter

module delay_counter( input clk, input rst_n, input state_g, input state_r, input state_y, output wire g_end, output wire r_end, output wire y_end );

38 localparam GREEN_TIME = 3; localparam YELLOW_TIME = 1; localparam RED_TIME = 1; //signal declaration reg [7:0] clk_counter; wire clr_counter;

always @ (posedge clk) begin

if (~rst_n) clk_counter[7:0] <= 8'd0;

else if (clr_counter) clk_counter[7:0] <= 8'd0; else clk_counter[7:0] <= clk_counter[7:0] + 1'b1;

end

//Compare the end time

assign g_end = state_g & (clk_counter[7:0] == GREEN_TIME); assign y_end = state_y & (clk_counter[7:0] == YELLOW_TIME); assign r_end = state_r & (clk_counter[7:0] == RED_TIME);

//

assign clr_counter = g_end | y_end | r_end;

endmodule

D. Source code đơn vị chia xung 50MHz qua 1Hz

module pulse_1Hz #(parameter M = 50000000, N = 26) (input clk, reset, output q ); //signal declaration reg [N-1 : 0] r_reg; wire [N-1 : 0] r_next; //body, register

always @ (posedge clk, posedge reset) begin if (reset) r_reg <= 0; else r_reg <= r_next; end

//next state logic

assign r_next = (r_reg == M) ? 0 : r_reg + 1;

//ouput

assign q = (r_reg < M/2) ? 0 : 1;

Một phần của tài liệu Thiết kế hệ thống điều khiển tín hiệu đèn giao thông sử dụng FPGA (Trang 40)

Tải bản đầy đủ (PDF)

(50 trang)