[RTLLM-p039] Miscellaneous/Frequency divider/freq_div
多輸出時脈除頻器
請設計一個名為 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
設計要求
- 模組名稱必須為
freq_div。 CLK_in的輸入頻率為 100 MHz。CLK_50的輸出頻率必須為 50 MHz。CLK_10的輸出頻率必須為 10 MHz。CLK_1的輸出頻率必須為 1 MHz。RST為高電位有效的非同步 Reset。- Reset 時所有輸出與計數器必須清除為 0。
- 時序邏輯必須使用 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
評論