5. Fixed Point Arithmetic Unit I

定点算术单元Ⅰ
AP SHANTHI博士

 

本模块的目标是讨论二进制加法器/减法器单元的操作并计算与该电路相关的延迟,展示如何使用快速加法技术加速加法过程,并讨论二进制乘法器的操作.

 

波纹进位加法

 

产生长度为 n 的两个二进制数的算术和的数字电路称为 n 位二进制加法器。它由 n 个串联的全加器电路构成,一个全加器的输出进位连接到下一个全加器的输入进位。下图显示了四个全加器 (FA) 的互连,以提供一个 4 位二进制加法器。二进制加法器的输入进位为 C0,输出进位为 C4。全加器的 S 输出生成所需的和位。A 输入的 n 个数据位来自一个寄存器(例如 R1),而 B 输入的 n 个数据位来自另一个寄存器(例如 R2)。总和可以传输到第三个寄存器或源寄存器之一(R1 或 R2),替换其先前的内容。

 


二进制加减法器

 

二进制数的减法可以最方便地通过补码来完成。通过在每个全加器中包含一个异或门,可以将加法和减法运算组合成一个公共电路。一个 4 位加减法电路如图所示。模式输入 M 控制操作。当 M = 0 时,电路为加法器,当 M = 1 时,电路为减法器。每个异或门接收输入 M 和 B 的输入之一。当 M = 0 时,我们有 B XOR 0 = B。全加器接收 B 的值,输入进位为 0,电路执行 A 加B. 当 M = 1 时,我们有 B XOR 1=B' 和 C0 = 1。B 输入都是互补的,并通过输入进位加一个 1。该电路执行运算 A 加上 B 的 2 的补码。对于无符号数,如果 A > = B 或 (BA) 的 2 的补码,如果 A<B。对于有符号数,如果没有溢出,则结果为 A – B。

 


 

如果您必须构建更大尺寸的加法器,这些 n 位加法器块可以如上所示级联。

 

现在,让我们计算与执行加法等基本操作相关的延迟。我们知道组合逻辑电路不能立即计算输出。将输入发送到电路的时间与计算输出的时间之间存在一些延迟。假设延迟是T个时间单位。假设您要实现一个n 位纹波进位加法器。总共有多少延迟?由于n 位纹波进位加法器由n 个加法器组成,因此会有nT的延迟。这是O(n)延迟。为什么会有这么大的延迟?毕竟,加法器不是并行工作的吗?当加法器并行工作时,进位必须从最低有效位“波动”到最高有效位。最右边一列的进位需要T 个单位,以使其作为最右边一列中的加法器的输入。因此,进位减慢了电路的速度,使加法与加法器中的位数成线性关系。例如,考虑求和和进位的表达式。


 

进位需要两个延迟(乘积表达式的总和),总和需要三个延迟(补码的一个额外延迟)。因此,随着 n 的增加,延迟变得非常高。计算最终 n 位总和的总时间为 2(n-1) + 3 个门延迟。当 n = 64 时,将有 129 个门延迟。

 

有两种方法可以使加法器加起来更快。一种是采用更好的技术,这也有其自身的局限性。第二种选择是使用更多的逻辑,如下所述。

 

快速加法器:携带前瞻加法器

 

进位超前加法器的加法速度比纹波进位加法器快得多。他们通过对carry进行一些观察来做到这一点。纹波进位加法的瓶颈是 ci 的计算,它需要与 n(加法器中的位数)成正比的线性时间。为了改进,我们将生成函数gi定义为 gi = xi yi 和 pi,将传播函数定义为 pi = xi + yi。

 

如果 gi = 1,则第 i 位产生进位,ci+1 = 1。

 

如果 pi = 1,则第 i 位将进位 ci 从第 (i-1) 位传播到第 (i+1) 位 ci+1。

 

可以在恒定时间(1 个门延迟)内为所有 n 位生成 gi 和 pi。


ci+1 要么在第 i 位(gi = 1)中生成,要么从第(i-1)位(ci = 1 和 pi = 1)传播(可能两者都有)。



现在,在 gi 和 pi 可用后,所有 ci 都可以在 2 个以上的门延迟的恒定时间(与 n 无关)内生成。这如下图所示。



 


 

上图为4位加法器的MSI芯片74×283的逻辑图所有进位可以在gi和pi可用后的2个门延迟中由进位前瞻逻辑产生,所有和位都可以以 6 个门延迟的恒定时间提供,与加法器中的位数无关。

 

两级进位超前:进位超前加法器需要具有多达 (n + 1) 个输入的 AND 和 OR 门,这在硬件实现中是不切实际的。为了妥协,我们将 n = 4 位打包为一个带有进位超前的块,并且在块之间仍然使用波纹进位。

 


n 位加法器中有 n / 4 个块,总门延迟可以计算为:

 


 

 

当 n = 64 时,门延迟的数量为 36。为了使用相同的思想进一步提高速度,定义 2 级生成和传播函数:

P0 = p3p2p1p0

 

如果块中的所有 4 位都传播,则该块传播进位。

 

G0 = g3 + p3g2 + p3p2g1 + p3p2p1g0

 

如果 4 位中至少有一个产生进位并且可以传播到 MSB,则该块会产生进位。现在可以在恒定时间内生成 c4(与 n 无关):


 

将 4 个 4 位进位超前加法器块组合为一个超级块,我们得到一个具有 2 级进位超前逻辑的 16 位加法器。

 


 

n 位加法器中有 n / 16 个超级块,总门延迟可计算为:


当 n = 64 时,门延迟数为 14。

完全相同的想法可以执行到第三级,以便第三级进位前瞻逻辑可以同时生成进位、c16、c32、c48 和 c64:

 


 

二进制乘法

 

正数的乘法

 

手动执行并适用于无符号数或正数的手动乘法算法如下所示。检查乘数的每一位,并在每一行中输入 0 或被乘数,这取决于检查的乘数位分别是 0 还是 1。

 


可以单独使用组合逻辑来实现相同的乘法,如下所示。

 


 


 

基本单元有一个 AND 门,它传递 0 或被乘数位,这取决于乘数位是 0 还是 1。全加器将被乘数 / 0、进位和上面的部分乘积位相加。请注意,此乘法器的 排列在结构上类似于前面指出的手动算法。

 

乘法也可以使用组合和顺序技术进行。ALU 单元中的加法器可以顺序使用。算法、示例和寄存器组织如下所示。



 

 


 

 

寄存器 A 最初加载全 0,Q 加载乘数,M 加载被乘数。最终的双倍长度乘积加载在 A、Q 中。控制序列器检查乘法器的 LSB 并给出 ADD/NOADD 控制 信号。MUX 根据 LSB 位传递被乘数或 0。加法后,乘积右移,从而移出检查的乘法器位并将下一个要测试的位带入 LSB 位置。这个序列连续 n 次,最终产品在 A、Q 中可用。上面给出了模拟。

 

上述技术仅适用于正数。对于负数,最简单的处理方式是分别对待符号位,最后附加乘积的符号。负被乘数的另一种选择是对负被乘数的 2 的补码进行符号扩展并执行通常的过程。但是,如果乘数为负,则此技术不起作用。因此,选项是对两个数字求补,然后处理负被乘数和正乘数。

 

还有另一种处理正数和负数的统一方法。您将在下一个模块中看到这一点。

 

总而言之,我们已经讨论了定点算术单元。我们研究了二进制加法、减法、快速加法器——进位前瞻加法器和二进制乘法技术。

 

网页链接/支持材料

 

计算机组织,Carl Hamacher、Zvonko Vranesic 和 Safwat Zaky,第 5 版,McGraw-Hill 高等教育,2011 年。
计算机组织与设计——硬件/软件接口,David A. Patterson 和 John L. Hennessy,第 4 版,Morgan Kaufmann,Elsevier,2009 年。