跳转至内容

微处理器设计/浮点运算单元

来自维基教科书,开放世界中的开放书籍

与算术逻辑单元 (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 设计中。

进一步阅读

[编辑 | 编辑源代码]
华夏公益教科书