1. TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM
Môn : TT Thiết kế hệ thống và vi mạch tích hợp
Thành viên: Đặng Thanh Hưng - 18119018
Nguyễn Văn Lượng - 18119094
2. Gồm 5 phần
chính
NỘI DUNG
Hệ Thống điều khiên đèn giao thông Thực tâp thiết kế vi mạch và
3. 1-GIỚI THIỆU
Yêu cầu thực hiện:
a. Thời gian dừng tại mỗi trạng thái đèn có thể cấu
hình được trước khi biên dịch RTL code.
b. Tần số điều khiển đèn là 1 Hz, tương ứng với chu
kỳ 1s
a. Mỗi đường sẽ có 3 tín hiệu điều khiển đèn tương
ứng với 3 màu Green/Yellow/Red>Trạng thái khởi
động là trạng thái đèn trên cả STREET A và STREET
B đều đỏ (Red), trạng thái khởi động là trạng thái
đèn trên cả STREET A và STREET B đều đỏ (Red).
Hệ Thống điều khiển đèn giao thông Thực tâp thiết kế vi mạch và
4. STREETA STREET B
GREEN RED
YELLOW RED
RED RED
RED GREEN
RED YELLOW
RED RED
BẢNG CHUYỂN TRẠNG THÁI ĐÈN
Hệ Thống điều khiển đèn giao thông Thực tâp thiết kế vi mạch và
1.1 PHÂN TÍCH TỔNG QUAN
5. Hệ Thống điều khiển đèn giao thông Thực tâp thiết kế vi mạch và
Từ yêu cầu bài ta có được
thiết kế sơ đồ tín hiệu như
sau:
STREETA STREET
B
Street_a[2:0] Street_a[2:0]
GREEN RED 100 001
YELLOW RED 010 001
RED RED 001 001
RED GREEN 001 100
RED YELLOW 001 010
RED RED 001 001
Bảng giá trị ngõ ra
TRAFFIC_LIGHT_CONTROLLER
Clk
rst_n
Street_b[2:0]
Street_a[2:0]
2-SƠ ĐỒ KHỐI HỆ THỐNG
6. state Street_a
[2:0]
Street_b
[2:0]
fsm_g fsm_r fsm_y
AG_BR 100 001 1 0 0
AY_BR 010 001 0 1 0
AR_BR1 001 001 0 0 1
AR_BG 001 100 1 0 0
AR_BY 001 010 0 1 0
AR_BR2 001 001 0 0 1
Bảng giá trị ngõ ra
Lưu đồ giải thuật
Hệ Thống điều khiên đèn giao thông Thực tâp thiết kế vi mạch và
2-SƠ ĐỒ KHỐI HỆ THỐNG
8. Hệ Thống điều khiên đèn giao thông Thực tâp thiết kế vi mạch và
2.1-SƠ ĐỒ NGUYÊN LÝ CỦA FSM
AG_BR
AY_BR
AR_BR1
AR_BG
AR_BY
AR_BR2
AG_BR
AY_BR
AR_BG
AR_BY
AG_BR
/AR_BG
AY_BR
/AR_BY
AR_BR1
/AR_BR2
fsm_g
fsm_r
fsm_y
rst_n
clk
Street_a[2:0]
Street_b[2:0]
Current_state[2:0]
Current_state2:0]
Current_state2:0]
g_end
Current_state2:0]
Current_state2:0]
y_end
Current_state2:0]
r_end
Current_state2:0]
khác
khác
khác
khác
khác
y_end
g_end
r_end
AY_BR
AR_BR1
AR_BG
AR_BY
AR_BR2
AG_BR
Next_state[
2:0]
Current_state2:0]
100
010
001
100
010
001
1
0
1
0
1
0
NEXT_STATE OUT_FSM
9. Hệ Thống điều khiên đèn giao thông Thực tâp thiết kế vi mạch và
2.1-SƠ ĐỒ NGUYÊN LÝ CỦA KHỐI TIME_COUNTER
fsm_g
fsm_r
fsm_y
rst_n
clk
Clk_counter[7:0]
0
+1
0
1
Clr_cnt
GREEN_TIME
YELLOW_TIME
RED_TIME
10. 3.1CODE RTL_FSM
Hệ Thống điều khiên đèn giao thông Thực tâp thiết kế vi mạch và
module fsm(
// Outputs
street_a, street_b, fsm_g, fsm_y, fsm_r,
// Inputs
clk, rst_n, g_end, y_end, r_end
);
//
//interface
input clk;
input rst_n;
input g_end;
input y_end;
input r_end;
output reg [2:0] street_a;
output reg [2:0] street_b;
output wire fsm_g;
output wire fsm_y;
output wire fsm_r;
//Internal signals
//
reg [2:0] current_state, next_state;
//STATE code
localparam AG_BR = 3'd0;
localparam AY_BR = 3'd1;
localparam AR_BR1 = 3'd2;
localparam AR_BG = 3'd3;
localparam AR_BY = 3'd4;
localparam AR_BR2 = 3'd5;
//
initial begin
street_a[2:0] = 3'b001;
street_b[2:0] = 3'b001;
end
11. Hệ Thống điều khiên đèn giao thông Thực tâp thiết kế vi mạch và
//Next state logic
always @ (*) begin
case (current_state [2:0])
AG_BR: begin
if (g_end) next_state [2:0] = AY_BR;
else next_state[2:0] = current_state[2:0];
end
AY_BR: begin
if (y_end) next_state [2:0] = AR_BR1;
else next_state [2:0] = current_state[2:0];
end
AR_BR1: begin
if (r_end) next_state [2:0] = AR_BG;
else next_state [2:0 ] = current_state[2:0];
end
AR_BG: begin
if (g_end) next_state [2:0] = AR_BY;
else next_state [2:0] = current_state [2:0];
end
AR_BY: begin
if (y_end) next_state [2:0] = AR_BR2;
else next_state [2:0] = current_state [2:0];
end
AR_BR2: begin
if (r_end) next_state[2:0] = AG_BR;
else next_state [2:0] = current_state [2:0];
end
default: next_state [2:0] = current_state [2:0];
endcase
end
3-CODE RTL_FSM
12. Hệ Thống điều khiên đèn giao thông Thực tâp thiết kế vi mạch và
//STATE MEMORY
always @ (posedge clk, posedge rst_n) begin
if (~rst_n) current_state [2:0] <= AR_BR1;
else current_state [2:0] <= next_state[2:0];
end
//Output logic
always @ (*) begin
case (current_state [2:0] )
AG_BR: street_a [2:0] = 3'b100;
AY_BR: street_a [2:0] = 3'b010;
default: street_a [2:0] = 3'b001;
endcase
end
always @ (*) begin
case (current_state [2:0])
AR_BG: street_b [2:0] = 3'b100;
AR_BY: street_b [2:0] = 3'b010;
default: street_b [2:0] = 3'b001;
endcase
end
assign fsm_g = (current_state [2:0] ==
AG_BR) | (current_state [2:0] == AR_BG);
assign fsm_y = (current_state [2:0] ==
AY_BR) | (current_state [2:0] == AR_BY);
assign fsm_r = (current_state [2:0] ==
AR_BR1) | (current_state [2:0] ==
AR_BR2);
endmodule
3-CODE RTL_FSM
13. Hệ Thống điều khiên đèn giao thông Thực tâp thiết kế vi mạch và
3.2 CODE RTL-TIME_COUNTER
14. 3-CODE RTL
Hệ Thống điều khiên đèn giao thông Thực tâp thiết kế vi mạch và
module controller(
// Outputs
street_b, street_a,
// Inputs
rst_n, clk
);
input clk; // To cnt of time_counter.v,
input rst_n; // To cnt of time_counter.v
output [2:0] street_a; // From fsm of fsm.v
output [2:0] street_b; // From fsm of fsm.v
wire fsm_g; // From fsm of fsm.v
wire fsm_r; // From fsm of fsm.v
wire fsm_y; // From fsm of fsm.v
wire g_end; // From cnt of counter.v
wire r_end; // From cnt of counter.v
wire y_end; // From cnt of counter.v
15. 4-TEST BENCH
module tb;
// Inputs
reg rst_n;
reg clk;
// Outputs
wire [2:0] street_b;
wire [2:0] street_a;
// Instantiate the Unit Under Test (UUT)
controller uut (
.street_b(street_b),
.street_a(street_a),
.rst_n(rst_n),
.clk(clk)
);
initial begin
clk = 0;
forever #0.5 clk =~clk;
end
initial begin
rst_n = 0;#10;
rst_n = 1;#500;
end
endmodule
Hệ Thống điều khiên đèn giao thông Thực tâp thiết kế vi mạch và