[RTLLM-p043] Miscellaneous/Others/calendar


提交解答


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

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

中文題目

萬年曆時鐘

請設計一個名為 calendar 的數位時鐘模組,用來記錄目前的時、分、秒。

初始時間為:

Hours = 0
Mins  = 0
Secs  = 0

每一個 CLK 上升沿代表經過一秒。

  • Secs 的範圍為 0 到 59。
  • Mins 的範圍為 0 到 59。
  • Hours 的範圍為 0 到 23。
  • Secs = 59 時,下一個時脈週期將 Secs 歸零,並將 Mins 加 1。
  • Mins = 59Secs = 59 時,下一個時脈週期將 MinsSecs 歸零,並將 Hours 加 1。
  • 當時間為 23:59:59 時,下一個時脈週期回到 00:00:00
  • RST = 1 時,時間立即重設為 00:00:00

模組名稱

calendar

輸入埠

埠名稱 位元寬度 說明
CLK 1 時脈輸入,每個上升沿代表一秒
RST 1 高電位有效的非同步 Reset

輸出埠

埠名稱 位元寬度 說明
Hours 6 目前的小時,範圍為 0 到 23
Mins 6 目前的分鐘,範圍為 0 到 59
Secs 6 目前的秒數,範圍為 0 到 59

功能說明

秒數更新

RST = 1 時:

Secs = 0

RST = 0 時:

Secs = 59:下一個週期變成 0
其他情況:Secs 加 1
分鐘更新

RST = 1 時:

Mins = 0

Secs = 59 時,分鐘才會更新:

Mins = 59:下一個週期變成 0
其他情況:Mins 加 1

其餘時間 Mins 保持不變。

小時更新

RST = 1 時:

Hours = 0

只有當:

Mins = 59 且 Secs = 59

時,小時才會更新:

Hours = 23:下一個週期變成 0
其他情況:Hours 加 1

其餘時間 Hours 保持不變。


時間變化範例

00:00:58
00:00:59
00:01:00
00:01:01
00:59:58
00:59:59
01:00:00
23:59:58
23:59:59
00:00:00

設計要求

  1. 模組名稱必須為 calendar
  2. 使用高電位有效的非同步 Reset。
  3. Reset 時將時、分、秒全部清除為 0。
  4. Secs 必須在 0 到 59 之間循環。
  5. Mins 必須在 0 到 59 之間循環。
  6. Hours 必須在 0 到 23 之間循環。
  7. 每個 CLK 上升沿將時間增加一秒。
  8. 使用三個獨立的時序 always 區塊。
  9. 時序邏輯必須使用 nonblocking assignment。

程式模板

module calendar (
    input            CLK,
    input            RST,
    output reg [5:0] Hours,
    output reg [5:0] Mins,
    output reg [5:0] Secs
);

    // Write your code here

endmodule

評論

目前沒有評論。