[RTLLM-p043] Miscellaneous/Others/calendar
中文題目
萬年曆時鐘
請設計一個名為 calendar 的數位時鐘模組,用來記錄目前的時、分、秒。
初始時間為:
Hours = 0
Mins = 0
Secs = 0
每一個 CLK 上升沿代表經過一秒。
Secs的範圍為 0 到 59。Mins的範圍為 0 到 59。Hours的範圍為 0 到 23。- 當
Secs = 59時,下一個時脈週期將Secs歸零,並將Mins加 1。 - 當
Mins = 59且Secs = 59時,下一個時脈週期將Mins與Secs歸零,並將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
設計要求
- 模組名稱必須為
calendar。 - 使用高電位有效的非同步 Reset。
- Reset 時將時、分、秒全部清除為 0。
Secs必須在 0 到 59 之間循環。Mins必須在 0 到 59 之間循環。Hours必須在 0 到 23 之間循環。- 每個
CLK上升沿將時間增加一秒。 - 使用三個獨立的時序
always區塊。 - 時序邏輯必須使用 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
評論