[RTLLM-p040] Miscellaneous/Frequency divider/freq_divbyeven


提交解答


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

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

偶數除頻器

請設計一個名為 freq_diveven 的偶數除頻器。

此模組根據參數 NUM_DIV 對輸入時脈 clk 進行除頻。NUM_DIV 必須為偶數,輸出時脈 clk_div 每經過 NUM_DIV / 2 個輸入時脈週期反相一次,因此完整輸出週期包含 NUM_DIV 個輸入時脈週期。

本題預設:

NUM_DIV = 6

因此輸出頻率為:

clk_div 頻率 = clk 頻率 ÷ 6

模組名稱

freq_diveven

參數

參數名稱 預設值 說明
NUM_DIV 6 時脈除頻比例,必須為偶數

輸入埠

埠名稱 位元寬度 說明
clk 1 輸入時脈訊號
rst_n 1 低電位有效的非同步 Reset

輸出埠

埠名稱 位元寬度 說明
clk_div 1 除頻後的輸出時脈

功能說明

Reset

當:

rst_n = 0

時,計數器與輸出時脈必須立即清除:

cnt     = 0
clk_div = 0
計數操作

rst_n = 1 時,計數器在每個 clk 上升沿進行計數。

如果:

cnt < NUM_DIV / 2 - 1

則計數器加 1:

cnt <= cnt + 1'b1;

當計數器到達:

NUM_DIV / 2 - 1

時,執行:

cnt     <= 0;
clk_div <= ~clk_div;
除頻範例

當:

NUM_DIV = 6

時,計數器依序變化:

0 → 1 → 2 → 0 → 1 → 2 → 0

每經過 3 個輸入時脈週期,clk_div 反相一次。

因此完整輸出週期需要 6 個輸入時脈週期:

輸出頻率 = 輸入頻率 ÷ 6

設計要求

  1. 模組名稱必須為 freq_diveven
  2. NUM_DIV 必須為偶數。
  3. 預設除頻比例為 6。
  4. 使用 4 位元計數器 cnt
  5. rst_n 為低電位有效的非同步 Reset。
  6. Reset 時將 cntclk_div 清除為 0。
  7. 每經過 NUM_DIV / 2 個輸入時脈週期反相一次輸出。
  8. 時序邏輯必須使用 nonblocking assignment。

程式模板

module freq_diveven #(
    parameter NUM_DIV = 6
) (
    input      clk,
    input      rst_n,
    output reg clk_div
);

    reg [3:0] cnt;

    // Write your code here

endmodule

評論

目前沒有評論。