[RTLLM-p033] Miscellaneous/RISC-V/clkgenerator


提交解答


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

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

可參數化時脈產生器

題目說明

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

評論

目前沒有評論。