跳轉至內容

微處理器設計/浮點運算單元

來自華夏公益教科書

與算術邏輯單元 (ALU) 相似的是浮點運算單元 (FPU)。FPU 對浮點數執行算術運算。

FPU 的設計很複雜,儘管 IEEE 754 標準有助於回答有關實現的一些具體問題。設計 FPU 時並非總是需要遵循 IEEE 標準,但它確實很有幫助。

浮點數

[編輯 | 編輯原始碼]

本節只是簡單地回顧一下浮點數。有關更多資訊,請參閱浮點書。

浮點數由兩部分指定:指數 (e) 和尾數 (m)。浮點數的值 v 通常計算如下

IEEE 754 格式的數字計算如下

尾數 m 在此標準中是“規範化”的,因此它介於 1.0 和 2.0 之間。

浮點乘法

[編輯 | 編輯原始碼]

兩個浮點數的相乘如下所示

同樣,除法可以透過以下方式執行

因此,要執行浮點乘法,我們可以遵循以下步驟

  1. 將尾數與指數分離
  2. 將尾數部分相乘(或相除)
  3. 將指數相加(或相減)
  4. 將這兩個結果組合成新值
  5. 規範化結果值(可選)。

浮點加法

[編輯 | 編輯原始碼]

浮點加法——以及擴充套件後的減法——比乘法更難。浮點數只能在它們的指數相同時相加。這意味著當我們將兩個數字相加時,首先需要對數字進行縮放,使它們具有相同的指數。以下是演算法

  1. 將每個數字的尾數與指數分離
  2. 比較兩個指數,並確定它們之間的差異。
  3. 將差異加到較小的指數中,以使兩個指數相同。
  4. 將具有較小指數的數字的尾數邏輯右移一個等於差異的位數。
  5. 將兩個尾數相加
  6. 規範化結果值(可選)。

浮點運算單元設計

[編輯 | 編輯原始碼]

正如我們在上面兩個演算法中看到的,FPU 需要以下元件

對於加法/減法
  • 一個比較器(減法器)來確定指數之間的差異,以及確定兩個指數中較小的一個。
  • 一個加法器單元,將該差異加到較小的指數中。
  • 一個移位單元,將尾數移位指定的位數。
  • 一個加法器,將尾數相加
對於乘法/除法
  • 一個用於尾數部分的乘法器(或除法器)
  • 一個用於指數部分的加法器。

兩種運算型別都需要一個複雜的控制單元。

兩種演算法都需要某種用於指數部分的加法/減法單元,因此似乎可以使用一個元件來執行這兩個任務(因為加法和乘法不會在同一個單元中同時發生)。由於指數通常比尾數字段小,因此我們將其稱為“小 ALU”。我們還需要一個 ALU 和一個乘法器單元來處理尾數上的運算。如果將兩者結合起來,我們可以稱這個單元為“大 ALU”。我們還可以將用於尾數的快速移位器整合到大 ALU 中。

一旦我們設計了一個整數 ALU,我們就可以將這些元件幾乎直接複製到我們的 FPU 設計中。

進一步閱讀

[編輯 | 編輯原始碼]
華夏公益教科書