[RTLLM-p039] Miscellaneous/Frequency divider/freq_div


提交解答


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

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

多輸出時脈除頻器

請設計一個名為 freq_div 的時脈除頻器。輸入時脈 CLK_in 的頻率為 100 MHz,模組需要產生以下三個輸出時脈:

輸出訊號 輸出頻率 除頻比例
CLK_50 50 MHz 2
CLK_10 10 MHz 10
CLK_1 1 MHz 100

模組使用高電位有效的非同步 Reset。當 RST 為 1 時,所有輸出時脈與內部計數器都必須清除為 0。


模組名稱

freq_div

輸入埠

埠名稱 位元寬度 說明
CLK_in 1 100 MHz 輸入時脈
RST 1 高電位有效的非同步 Reset

輸出埠

埠名稱 位元寬度 說明
CLK_50 1 50 MHz 輸出時脈
CLK_10 1 10 MHz 輸出時脈
CLK_1 1 1 MHz 輸出時脈

功能說明

50 MHz 輸出

CLK_50 在每一個 CLK_in 上升沿反相一次:

CLK_50 <= ~CLK_50;

完整週期需要兩個輸入時脈週期,因此輸出頻率為:

100 MHz ÷ 2 = 50 MHz
10 MHz 輸出

CLK_10 每經過 5 個輸入時脈週期反相一次。

cnt_10 計數到 4 時:

CLK_10 <= ~CLK_10;
cnt_10 <= 0;

完整週期需要兩次反相,因此共需要 10 個輸入時脈週期:

100 MHz ÷ 10 = 10 MHz
1 MHz 輸出

CLK_1 每經過 50 個輸入時脈週期反相一次。

cnt_100 計數到 49 時:

CLK_1   <= ~CLK_1;
cnt_100 <= 0;

完整週期需要 100 個輸入時脈週期:

100 MHz ÷ 100 = 1 MHz

設計要求

  1. 模組名稱必須為 freq_div
  2. CLK_in 的輸入頻率為 100 MHz。
  3. CLK_50 的輸出頻率必須為 50 MHz。
  4. CLK_10 的輸出頻率必須為 10 MHz。
  5. CLK_1 的輸出頻率必須為 1 MHz。
  6. RST 為高電位有效的非同步 Reset。
  7. Reset 時所有輸出與計數器必須清除為 0。
  8. 時序邏輯必須使用 nonblocking assignment。

程式模板

module freq_div (
    input      CLK_in,
    input      RST,
    output reg CLK_50,
    output reg CLK_10,
    output reg CLK_1
);

    // Write your code here

endmodule

評論

目前沒有評論。