[RTLLM-p033] Miscellaneous/RISC-V/clkgenerator
可參數化時脈產生器
題目說明
請設計一個名為 clkgenerator 的時脈產生器。
此模組具有一個參數 PERIOD,用來設定輸出時脈 clk 的完整週期。模組必須先將 clk 初始化為低電位,接著每經過半個週期便將 clk 反相一次,持續產生週期性的方波訊號。
當預設參數為:
PERIOD = 10
時,clk 每隔:
PERIOD / 2 = 5
個時間單位翻轉一次。
因此輸出序列如下:
時間 0:clk = 0
時間 5:clk = 1
時間 10:clk = 0
時間 15:clk = 1
時間 20:clk = 0
...
完整時脈週期為 10 個時間單位,高電位與低電位各維持 5 個時間單位。
模組介面
參數
| 參數名稱 | 預設值 | 說明 |
|---|---|---|
PERIOD |
10 | 輸出時脈的完整週期 |
輸出埠
| 埠名稱 | 方向 | 位元寬度 | 說明 |
|---|---|---|---|
clk |
output reg | 1 | 模組產生的週期性時脈訊號 |
初始行為
模擬開始時,輸出必須初始化為:
clk = 0
可使用:
initial begin
clk = 1'b0;
end
時脈翻轉行為
clk 每經過半個週期便反相一次:
#(PERIOD / 2) clk = ~clk;
此操作必須持續執行,因此可使用:
forever begin
#(PERIOD / 2) clk = ~clk;
end
也可以使用較精簡的寫法:
always #(PERIOD / 2) clk = ~clk;
預設參數範例
當:
PERIOD = 10
時:
半週期 = 5
完整週期 = 10
輸出波形為:
clk ____-----_____-----_____-----
0 5 10 15 20 25
參數修改範例
若實例化時指定:
clkgenerator #(
.PERIOD(20)
) clock_inst (
.clk(clk)
);
則:
clk 每 10 個時間單位翻轉一次
完整週期為 20 個時間單位
設計要求
- 模組名稱必須為
clkgenerator。 - 模組必須包含參數
PERIOD。 PERIOD的預設值必須為 10。- 模組只有一個輸出埠
clk。 clk必須能在程序區塊中被賦值。- 模擬開始時,
clk必須初始化為 0。 clk必須每隔PERIOD / 2個時間單位反相。- 輸出必須持續週期性切換。
- 當
PERIOD = 10時,輸出每 5 個時間單位翻轉一次。
程式設計模板
module clkgenerator #(
parameter PERIOD = 10
) (
output reg clk
);
// Write your code here
endmodule
評論