[RTLLM-p044] Miscellaneous/Others/traffic_light


提交解答


分數: 5
時間限制: 2.0s
記憶體限制: 256M

作者:
題目代碼
題目類型
允許的語言
Verilog

行人請求交通號誌控制器

請設計一個名為 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

設計要求

  1. 模組名稱必須為 traffic_light
  2. rst_n 為低電位有效的非同步 Reset。
  3. Reset 時進入 idle 狀態。
  4. 紅燈持續 10 個時脈週期。
  5. 綠燈持續 60 個時脈週期。
  6. 黃燈持續 5 個時脈週期。
  7. 狀態順序為紅燈、綠燈、黃燈。
  8. clock 顯示目前狀態的剩餘時間。
  9. 綠燈期間收到請求時,若剩餘時間大於 10,將其縮短為 10。
  10. 紅燈、黃燈與綠燈不可同時亮起。
  11. 時序邏輯必須使用 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

評論

目前沒有評論。