[RTLLM-p017] Arithmetic/Other Units/fixed_point_adder


提交解答


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

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

參數化定點數加法器

題目說明

請設計一個名為 fixed_point_adder 的參數化 Verilog 模組,用於計算兩個具有相同精度的定點數之和。

本題的定點數使用符號-數值表示法(Sign-Magnitude Representation)

  • 最高位元 N-1 為符號位元。
  • 符號位元為 0 時表示非負數。
  • 符號位元為 1 時表示負數。
  • 其餘 N-1 個位元表示數值的絕對值。
  • 絕對值欄位的低 Q 個位元為小數部分。
  • 兩個輸入與輸出皆使用相同的小數精度。

例如,當 N = 8Q = 4 時:

0_0011010

表示正數,而:

1_0011010

表示具有相同絕對值的負數。

由於兩個輸入具有相同的小數位數,因此相加時不需要進行小數點對齊。


模組參數

參數 說明
Q 小數部分的位元數
N 定點數總位元數,包含符號位元

參數必須滿足:

N >= 2
0 <= Q <= N-1

模組介面

方向 位元寬度 說明
a input N 第一個符號-數值格式定點數
b input N 第二個符號-數值格式定點數
c output N 定點數加法結果

運算規則

1. 相同符號

ab 的符號相同時,將兩者的絕對值相加。

結果的符號與輸入符號相同。

(+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
  • 必須支援參數 QN
  • 使用組合邏輯完成設計。
  • 輸入與輸出採用符號-數值表示法。
  • 不可輸出負零。
  • 結果為零時,所有輸出位元皆必須為 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

評論

目前沒有評論。