1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

báo cáo thiết kế điều khiển đèn giao thông bằng ngôn ngữ verilog (có code )

14 1,8K 16

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 14
Dung lượng 597,33 KB

Nội dung

1.Đề tài32.Sơ đồ tổng quát43.Sơ đồ khối53.1TIME_COUNTER63.2FSM64.Phân tích khối FSM65.Phân tích khối TIME_COUNTER76.Mã hóa trạng thái97.Mô phỏng108.Phụ luc (hình ảnh, bảng biểu và code)11

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ-VIỄN THÔNG BÁO CÁO GIỮA KỲ 20171 THIẾT KẾ VÀ TỔNG HỢP IC SỐ Đề tài: ĐIỀU KHIỂN ĐÈN GIAO THÔNG Nhóm 20 Đỗ Văn Hưng mssv 20121857 Nguyễn Minh Tuân 20179501 Phạm Minh Hoàng 20179556 Mục lục Giảng viên hướng dẫn TS.Võ Lê Cường BT traffic light Nhóm 20 Tài liệu tham khảo: Jr.Charles H.Roth - Digital Systems Design Usin R BT traffic light Nhóm 20 Y R Đề tài Y Y G Y G G R R 1.1 Giả sử STREET A có mức độ ưu tiên STREET B, rst_n tích cực mức thấp đèn STREET A xanh trước 1.2 Mỗi đường có tín hiệu điều khiển đèn tương ứng với màu G Red/Yellow/Green Left (màu xanh) để rẽ trái viết tắt R/Y/G/L 1.3 Đèn hoạt động bình thường chuyển trạng thái đỏ >> xanh >> vàng >> rẽ trái từ sáng đến hết 12 đêm Sau 12 đêm đến sáng đèn đường G màu vàng (nếu ko có tín hiệu rst_n/rst_nA/rst_nB) 1.4 Trạng thái khởi động trạng thái đèn STREET A STREET B đỏ (AR-BR1 AR-BR2) 1.5 Bảng chuyển trạng thái BT traffic light Nhóm 20 Street A Y R G Y RL R R R Street B Y R R R R G Y RL Bảng bảng chuyển trạng thái Sơ đồ tổng quát clk street_a[3:0] rst_n rst_nA Traffic_light_controller street_b[3:0] rst_nB Hình Sơ đồ tổng quát Trong đó: - clk xung clock rst_n tín hiệu dùng để khởi động điều khiển đến trạng thái ban đầu Red-Red tích cực mức thấp, STREET A ưu tiên trước rst_n ưu tiên - so với rst_nA rst_nA tín hiệu dùng để khởi động điều khiển đến trạng thái ban đầu Red- - giống với rst_n ưu tiên so với rst_nB rst_nB tín hiệu dùng để khởi động điều khiển đến trạng thái ban đầu Red- - Red tích cực mức thấp, STREET B ưu tiên trước street_a[3:0] tín hiệu điều khiển đèn đường STREET A Thứ tự bit từ đến - tương ứng với trạng thái R/Y/G/L, tích cực mức street_b[3:0] tương tự street_a[3:0] đường STREET B STREET - A Red tích cực mức thấp, STREET A ưu tiên trước.rst_nA gần BT traffic light Nhóm 20 Bảng mã hóa giá trị ngõ tương ứng với trạng thái đèn sau: Street A Y R G Y RL R R R Street B Y R R R R G Y RL Street_a[2:0] 0100 1000 0010 0100 1001 1000 1000 1000 Street_b[20] 0100 1000 1000 1000 1000 0010 0100 1001 Bảng Bảng giá trị ngõ điều khiển tương ứng với trạng thái đèn Sơ đồ khối yy_end rr_end g_end clk rst_n rst_nA rst_nB street_a[3:0] y_end l_end Time_counter fsm_l fsm_y FSM Traffic_light street_b[3:0] fsm_g fsm_rr fsm_yy Hình Sơ đồ khối điều khiển đèn giao thông 3.1 TIME_COUNTER: dùng để đếm xunh clock xác định thời gian trì trạng thái đèn Đây thời gian cấu hình trước biên dịch yêu cầu đặt Năm tín hiệu g_end, rr_end, y_end, yy_end l_end báo thời điểm kết thúc trạng thái GREEN, RED_RED, YELLOW, YELLOW_YELLOW RED_LEFT Năm tín hiệu fsm_g, fsm_rr, fsm_y , fsm_yy fsm_l báo trạng thái GREEN, REG_RED, BT traffic light Nhóm 20 YELLOW, YELLOW_YELLOW RED_LEFT để đếm hoạt động theo giá trị cấu hình phù hợp 3.2 FSM: máy trạng thái tạo ngõ street_a, street_b fsm_g, fsm_rr, fsm_y, fsm_yy fsm_l s po Y pos_ Phân tích khối FSM _Y po s_ Y po s_Y pos_Y Hình FSM điều khiển đèn giao thơng Trong đó, ký hiệu A B ứng với STREET A STREET B G GREEN, R RED Y YELLOW Ví dụ, AG_BR nghĩa trạng thái STREET A GREEN, STREET B RED Sau reset hai đèn phải RED-RED nên ta chọn trạng thái AR-BR1 AR-BR2 tùy vào yêu cầu ưu tiên BT traffic light Nhóm 20 Việc tự động chuyển trạng thái xảy tín hiệu báo độ trễ tương ứng trạng thái tích cực Ví dụ, đèn STREET A STREET B xanh g_end phải tích cực chuyển sang trạng thái state AY-BY AR-BR1 AG-BR AY-BR ARL-BR AR-BG AR-BY AR-BRL AR-BR2 Street_a [3:0] 0100 1000 0010 0100 1001 1000 1000 1000 1000 Street_b [3:0] 0100 1000 1000 1000 1000 0010 0100 1001 1000 fsm_g fsm_y fsm_rr fsm_yy fsm_l 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 Bảng Bảng giá trị đầu FSM Phân tích khối TIME_COUNTER Chọn giá trị: l_end fsm_l - GREEN_TIME = 59 Đèn xanh sáng 60s YELLOW_TIME = Thời gian đèn vàng sáng 5s RED_TIME = Thời gian đèn đỏ đường sáng 2s YELLOW_YELLOW_TIME = 17999 (5 đồng hồ) LEFT_TIME = 24; thời gian rẽ trái 25s START_YY_TIME = 68399; // from 5h:00 to 24h:59 DAY_TIME = 86399; =?? BT traffic light Nhóm 20 clr_counter_yy clk_counter_yy[17:0] +11 rst_n DAY_TIME Hình Sơ đồ nguyên lý khối TIME_COUNTER clk pos_Y START_YY_TIME =?? =?? Hình Bộ đếm xung Bộ đếm xung có output n+1 bit, cho phép người dùng điều chỉnh linh hoạt giá trị RED_RED_TIME, GREEN_TIME, YELLOW_TIME, YELLOW_YELLOW_TIME RED_LEFT_TIME tùy ý Trong có YELLOW_YELLOW_TIME = 200 nên cần sử dụng n=7 nhóm định sử dụng n=14 để phù hợp vợi với thực tế YELLOW_YELLOW_TIME = 18000s (từ đến sáng) Giả sử current_state = AG-BR | AR-BG, fsm_g=1, fsm_y=0, fsm_rr=0, fsm_l=0 fsm_yy=0 Như clk_counter[n:0] đưa vào so sánh với BT traffic light Nhóm 20 GREEN_TIME Khi clk_counter[n:0] != 14’d29 g_end =0 =>> clr_counter = =>> đếm tăng lên đơn vị clk_counter[n:0] = 14’d29 đầu so sánh =>> g_end = Khi g_end = làm cho clr_counter =1 =>> đếm thiết lập lại, nghĩa clk_counter[n:0] =14’d0, đồng thời tác động lên khối FSM chuyển sang next_state tương ứng Với clk_counter_yy[17:0] đếm từ lúc có tín hiệu rst_n = đến clk_counter_yy[17:0]=17’d1000 (với ngày hoàn chỉnh đếm đến 17’d86400) Mã hóa trạng thái State AY-BY AR-BR1 AG-BR AY-BR ARL-BR AR-BG AR-BY AR-BR2 AR-BRL Mã hóa bit nhị phân 4’d1 4’d2 4’d3 4’d4 4’d5 4’d6 4’d7 4’d8 4’d9 Bảng Mã hóa trạng thái BT traffic light Nhóm 20 Mơ Hình Thời điểm ban đầu có tín hiệu rst_n = Hình Thời điểm có pos_Y = 10 BT traffic light Nhóm 20 Phụ luc (hình ảnh, bảng biểu code) Hình Hình Hình Hình Hình Hình Hình Hình Đèn giao thơng ngã tư ( street B rẽ trái ) Sơ đồ tổng quát Sơ đồ khối điều khiển đèn giao thông FSM điều khiển đèn giao thông Sơ đồ nguyên lý khối TIME_COUNTER Bộ đếm xung Thời điểm ban đầu có tín hiệu rst_n = Thời điểm có pos_Y = //CODE /*FSM**************************/ module fsm ( // Outputs street_a, street_b, fsm_g, fsm_y, fsm_rr,fsm_yy, fsm_l, // Inputs clk,rst_n, rst_nA,rst_nB,pos_Y, g_end, y_end, rr_end,yy_end,l_end ); // input clk; input rst_n; input rst_nA; input rst_nB; output pos_Y; input g_end; input y_end; input rr_end; input yy_end; input l_end; output reg [3:0] street_a; output reg [3:0] street_b; output wire fsm_g; output wire fsm_y; output wire fsm_rr; output wire fsm_yy; output wire fsm_l; // reg [3:0] current_state, next_state; //STATE code localparam AY_BY = 4'd0; localparam AR_BR1 = 4'd1; localparam AG_BR = 4'd2; localparam AY_BR = 4'd3; localparam ARL_BR = 4'd4; localparam AR_BG = 4'd5; localparam AR_BY = 4'd6; localparam AR_BR2 = 4'd7; localparam AR_BRL = 4'd8; //Next state logic always @ (*) begin case (current_state[3:0]) AY_BY: begin if (yy_end) next_state[3:0] = AR_BR1; else next_state[3:0] = current_state[3:0]; end AR_BR1: begin if (rr_end) next_state[3:0] = AG_BR; else if (pos_Y) next_state[3:0] = AY_BY; else next_state[3:0] = current_state[3:0]; end AG_BR: begin if (g_end) next_state[3:0] = AY_BR; 11 BT traffic light Nhóm 20 else if (pos_Y) next_state[3:0] = AY_BY; else next_state[3:0] = current_state[3:0]; end AY_BR: begin if (y_end) next_state[3:0] = ARL_BR; else if (pos_Y) next_state[3:0] = AY_BY; else next_state[3:0] = current_state[3:0]; end ARL_BR: begin if (l_end) next_state[3:0] = AR_BG; else if (pos_Y) next_state[3:0] = AY_BY; else next_state[3:0] = current_state[3:0]; end AR_BG: begin if (g_end) next_state[3:0] = AR_BY; else if (pos_Y) next_state[3:0] = AY_BY; else next_state[3:0] = current_state[3:0]; end AR_BY: begin if (y_end) next_state[3:0] = AR_BRL; else if (pos_Y) next_state[3:0] = AY_BY; else next_state[3:0] = current_state[3:0]; end AR_BRL: begin if (l_end) next_state[3:0] = AG_BR; else if (pos_Y) next_state[3:0] = AY_BY; else next_state[3:0] = current_state[3:0]; end AR_BR2: begin if (rr_end) next_state[3:0] = AR_BG; else if (pos_Y) next_state[3:0] = AY_BY; else next_state[3:0] = current_state[3:0]; end default: next_state[3:0] = current_state[3:0]; endcase end //STATE MEMORY always @ (posedge clk) begin if (~rst_n|~rst_nA) current_state[3:0]

Ngày đăng: 21/12/2017, 01:06

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w