微处理器设计/浮点运算单元
外观
< 微处理器设计
与算术逻辑单元 (ALU) 相似的是浮点运算单元 (FPU)。FPU 对浮点数执行算术运算。
FPU 的设计很复杂,尽管 IEEE 754 标准有助于回答有关实现的一些具体问题。设计 FPU 时并非总是需要遵循 IEEE 标准,但它确实很有帮助。
本节只是简单地回顾一下浮点数。有关更多信息,请参阅浮点书。
浮点数由两部分指定:指数 (e) 和尾数 (m)。浮点数的值 v 通常计算如下
IEEE 754 格式的数字计算如下
尾数 m 在此标准中是“规范化”的,因此它介于 1.0 和 2.0 之间。
两个浮点数的相乘如下所示
同样,除法可以通过以下方式执行
因此,要执行浮点乘法,我们可以遵循以下步骤
- 将尾数与指数分离
- 将尾数部分相乘(或相除)
- 将指数相加(或相减)
- 将这两个结果组合成新值
- 规范化结果值(可选)。
浮点加法——以及扩展后的减法——比乘法更难。浮点数只能在它们的指数相同时相加。这意味着当我们将两个数字相加时,首先需要对数字进行缩放,使它们具有相同的指数。以下是算法
- 将每个数字的尾数与指数分离
- 比较两个指数,并确定它们之间的差异。
- 将差异加到较小的指数中,以使两个指数相同。
- 将具有较小指数的数字的尾数逻辑右移一个等于差异的位数。
- 将两个尾数相加
- 规范化结果值(可选)。
正如我们在上面两个算法中看到的,FPU 需要以下组件
- 对于加法/减法
- 一个比较器(减法器)来确定指数之间的差异,以及确定两个指数中较小的一个。
- 一个加法器单元,将该差异加到较小的指数中。
- 一个移位单元,将尾数移位指定的位数。
- 一个加法器,将尾数相加
- 对于乘法/除法
- 一个用于尾数部分的乘法器(或除法器)
- 一个用于指数部分的加法器。
两种运算类型都需要一个复杂的控制单元。
两种算法都需要某种用于指数部分的加法/减法单元,因此似乎可以使用一个组件来执行这两个任务(因为加法和乘法不会在同一个单元中同时发生)。由于指数通常比尾数字段小,因此我们将其称为“小 ALU”。我们还需要一个 ALU 和一个乘法器单元来处理尾数上的运算。如果将两者结合起来,我们可以称这个单元为“大 ALU”。我们还可以将用于尾数的快速移位器集成到大 ALU 中。
一旦我们设计了一个整数 ALU,我们就可以将这些组件几乎直接复制到我们的 FPU 设计中。