[RTLLM-p044] Miscellaneous/Others/traffic_light
行人請求交通號誌控制器
請設計一個名為 traffic_light 的交通號誌控制器。
交通號誌包含紅燈、黃燈與綠燈三種狀態,正常運作時間如下:
| 狀態 | 持續時間 |
|---|---|
| 綠燈 | 60 個時脈週期 |
| 黃燈 | 5 個時脈週期 |
| 紅燈 | 10 個時脈週期 |
狀態循環順序為:
紅燈 → 綠燈 → 黃燈 → 紅燈
輸出 clock 顯示目前燈號的剩餘時脈週期數。
當綠燈亮起且收到行人請求 pass_request 時:
- 若綠燈剩餘時間大於 10,將剩餘時間縮短為 10。
- 若綠燈剩餘時間小於或等於 10,則保持原本剩餘時間。
- 行人請求不影響紅燈與黃燈。
模組名稱
traffic_light
輸入埠
| 埠名稱 | 位元寬度 | 說明 |
|---|---|---|
clk |
1 | 時脈輸入 |
rst_n |
1 | 低電位有效的非同步 Reset |
pass_request |
1 | 行人通行請求訊號 |
輸出埠
| 埠名稱 | 位元寬度 | 說明 |
|---|---|---|
clock |
8 | 目前燈號的剩餘時間 |
red |
1 | 紅燈輸出 |
yellow |
1 | 黃燈輸出 |
green |
1 | 綠燈輸出 |
狀態定義
parameter idle = 2'b00;
parameter s1_red = 2'b01;
parameter s2_yellow = 2'b10;
parameter s3_green = 2'b11;
idle
Reset 後的初始狀態,所有燈號關閉。下一個時脈週期進入紅燈狀態。
s1_red
紅燈亮起,持續 10 個時脈週期。計數結束後進入綠燈狀態。
s3_green
綠燈亮起,正常持續 60 個時脈週期。計數結束後進入黃燈狀態。
若收到行人請求且剩餘時間大於 10,剩餘時間改為 10。
s2_yellow
黃燈亮起,持續 5 個時脈週期。計數結束後進入紅燈狀態。
狀態轉移
Reset
│
▼
idle
│
▼
s1_red
│
▼
s3_green
│
▼
s2_yellow
│
└────────► s1_red
設計要求
- 模組名稱必須為
traffic_light。 rst_n為低電位有效的非同步 Reset。- Reset 時進入
idle狀態。 - 紅燈持續 10 個時脈週期。
- 綠燈持續 60 個時脈週期。
- 黃燈持續 5 個時脈週期。
- 狀態順序為紅燈、綠燈、黃燈。
clock顯示目前狀態的剩餘時間。- 綠燈期間收到請求時,若剩餘時間大於 10,將其縮短為 10。
- 紅燈、黃燈與綠燈不可同時亮起。
- 時序邏輯必須使用 nonblocking assignment。
程式模板
module traffic_light (
input clk,
input rst_n,
input pass_request,
output [7:0] clock,
output reg red,
output reg yellow,
output reg green
);
// Write your code here
endmodule
評論