[RTLLM-p018] Arithmetic/Other Units/fixed_point_subtractor


提交解答


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

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

參數化定點數減法器

題目說明

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

c = a - b

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

  • 最高位元 N-1 為符號位元。
  • 符號位元為 0 時表示非負數。
  • 符號位元為 1 時表示負數。
  • 其餘 N-1 個位元表示數值的絕對值。
  • 絕對值欄位中的低 Q 個位元為小數部分。
  • abc 使用相同的定點數精度。

由於兩個輸入使用相同的 Q,它們的二進位小數點位置相同,因此不需要額外進行位元對齊。


模組參數

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

參數必須滿足:

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

模組介面

方向 位元寬度 說明
a input N 被減數,採用符號-數值格式
b input N 減數,採用符號-數值格式
c output N a - b 的定點數結果

運算規則

1. 相同符號

ab 的符號相同時,減法等價於兩個絕對值相減。

例如:

(+A) - (+B)
(-A) - (-B)

此時必須比較兩個輸入的絕對值。

|a| > |b|

  • 結果絕對值為 |a| - |b|
  • 結果符號為 a 的符號。

|b| > |a|

  • 結果絕對值為 |b| - |a|
  • 結果符號為 a 符號的反相。

|a| == |b|

  • 結果為正零。

2. 不同符號

ab 的符號不同時,減法等價於將兩個絕對值相加。

例如:

(+A) - (-B) = +(A+B)
(-A) - (+B) = -(A+B)

結果符號與 a 的符號相同。


零的處理

符號-數值格式可以同時表示正零與負零:

0_000...000
1_000...000

本題要求所有零結果都正規化為正零:

c = {N{1'b0}}

不可輸出負零。


溢位處理

當不同符號的兩個輸入進行絕對值相加,且結果超過 N-1 個 magnitude bits 可表示的範圍時,只保留低 N-1 個位元。

本題不需要額外輸出 overflow 訊號。

若截斷後的 magnitude 為零,輸出必須正規化為正零。


設計要求

  • 模組名稱必須為 fixed_point_subtractor
  • 必須支援參數 QN
  • 使用組合邏輯完成設計。
  • 輸入與輸出皆採用符號-數值表示法。
  • 正確實作 c = a - b
  • 不可輸出負零。
  • Q 只決定二進位小數點的位置,不改變加減法的位元運算方式。

程式設計模板

module fixed_point_subtractor #(
    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

評論

目前沒有評論。