[RTLLM-p017] Arithmetic/Other Units/fixed_point_adder
參數化定點數加法器
題目說明
請設計一個名為 fixed_point_adder 的參數化 Verilog 模組,用於計算兩個具有相同精度的定點數之和。
本題的定點數使用符號-數值表示法(Sign-Magnitude Representation):
- 最高位元
N-1為符號位元。 - 符號位元為
0時表示非負數。 - 符號位元為
1時表示負數。 - 其餘
N-1個位元表示數值的絕對值。 - 絕對值欄位的低
Q個位元為小數部分。 - 兩個輸入與輸出皆使用相同的小數精度。
例如,當 N = 8、Q = 4 時:
0_0011010
表示正數,而:
1_0011010
表示具有相同絕對值的負數。
由於兩個輸入具有相同的小數位數,因此相加時不需要進行小數點對齊。
模組參數
| 參數 | 說明 |
|---|---|
Q |
小數部分的位元數 |
N |
定點數總位元數,包含符號位元 |
參數必須滿足:
N >= 2
0 <= Q <= N-1
模組介面
| 埠 | 方向 | 位元寬度 | 說明 |
|---|---|---|---|
a |
input | N |
第一個符號-數值格式定點數 |
b |
input | N |
第二個符號-數值格式定點數 |
c |
output | N |
定點數加法結果 |
運算規則
1. 相同符號
當 a 與 b 的符號相同時,將兩者的絕對值相加。
結果的符號與輸入符號相同。
(+A) + (+B) = +(A+B)
(-A) + (-B) = -(A+B)
2. 不同符號
當兩個輸入的符號不同時,應以較大的絕對值減去較小的絕對值。
結果符號由絕對值較大的輸入決定。
(+A) + (-B)
(-A) + (+B)
若兩者絕對值相同,結果必須輸出正零:
c = {N{1'b0}}
溢位處理
當相同符號的兩個輸入相加,且絕對值結果超過 N-1 個位元可表示的範圍時,本題只保留結果的低 N-1 個位元。
模組不需要輸出額外的 overflow 訊號。
設計要求
- 模組名稱必須為
fixed_point_adder。 - 必須支援參數
Q與N。 - 使用組合邏輯完成設計。
- 輸入與輸出採用符號-數值表示法。
- 不可輸出負零。
- 結果為零時,所有輸出位元皆必須為
0。 Q僅決定二進位小數點位置,不改變加法器的位元運算方式。
程式設計模板
module fixed_point_adder #(
parameter Q = 15,
parameter N = 32
) (
input [N-1:0] a,
input [N-1:0] b,
output [N-1:0] c
);
// Write your code here
endmodule
評論