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

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

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 hồ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 q 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 42)

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

(50 trang)