ALU是计算机中执行各种算术和逻辑运算操作的部件,运算器的基本操作包括加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、比较和传送等造作,都称作算术逻辑部件(ALU)。
计算机运行时,运算器的操作和操作种类由控制器决定。运算器处理的数据来自存储器;处理后的结果数据通常送回存储器,或暂时寄存在运算器中。
数据运算器的处理对象是数据,所以数据长度和计算机数据表示方法,对运算器的性能影响极大。70年代微处理器常以1个、4个、8个、16个二进制位作为处理数据的基本单位。大多数通用计算机则以16、32、64位作为运算器处理数据的长度。能对一个数据的所有位同时进行处理的运算器称为并行运算器。如果一次只处理一位,则称为串行运算器。有的运算器一次可处理几位 (通常为6或8位),一个完整的数据分成若干段进行计算,称为串 并行运算器。运算器往往只处理一种长度的数据。有的也能处理几种不同长度的数据,如半字长运算、双倍字长运算、四倍字长运算等。有的数据长度可以在运算过程中指定,称为变字长运算。
按照数据的不同表示方法,可以有二进制运算器、十进制运算器、十六进制运算器、定点整数运算器、定点小数运算器、浮点数运算器等。按照数据的性质,有地址运算器和字符运算器等。
操作运算器能执行多少种操作和操作速度,标志着运算器能力的强弱,甚至标志着计算机本身的能力。运算器最基本的操作是加法。一个数与零相加,等于简单地传送这个数。将一个数的代码求补,与另一个数相加,相当于从后一个数中减去前一个数。将两个数相减可以比较它们的大小。
左右移位是运算器的基本操作。在有符号的数中,符号不动而只移数据位,称为算术移位。若数据连同符号的所有位一齐移动,称为逻辑移位。若将数据的位与位链接进行逻辑移位,称为循环移位。
运算器的逻辑操作可将两个数据按位进行与、或、异或,以及将一个数据的各位求非。有的运算器还能进行二值代码的16种逻辑操作。
乘、除法操作较为复杂。很多计算机的运算器能直接完成这些操作。乘法操作是以加法操作为基础的,由乘数的一位或几位译码控制逐次产生部分积,部分积相加得乘积。除法则又常以乘法为基础,即选定若干因子乘以除数,使它近似为1,这些因子乘被除数则得商。没有执行乘法、除法硬件的计算机可用程序实现乘、除,但速度慢得多。有的运算器还能执行在一批数中寻求数,对一批数据连续执行同一种操作,求平方根等复杂操作。
算术逻辑单元(ALU)是进行整数运算的结构。现阶段是用电路来实现,应用在电脑芯片中。
在计算机中,算术逻辑单元(ALU)是专门执行算术和逻辑运算的数字电路。ALU是计算机中央处理器的最重要组成部分,甚至连最小的微处理器也包含ALU作计数功能。在现代CPU和GPU处理器中已含有功能强大和复杂的ALU;一个单一元件也可能含有ALU。
1945年数学家冯诺伊曼在一篇介绍被称为EDVAC的一种新型电脑的基础构成的报告中提出ALU的概念。
早期发展
1946年,冯诺伊曼与同事合作为普林斯顿高等学习学院(IAS)设计计算机。随后IAS计算机成为后来计算机的原形。在论文中,冯诺伊曼提出他相信计算机中所需的部件,其中包括ALU。 冯诺伊曼写到,ALU是计算机的必备组成部分,因为已确定计算机一定要完成基本的数学运算,包括加减乘除。于是他相信「(计算机)应该含有专门完成此类运算的部件。」
数字系统
ALU必须使用与数字电路其他部分使用同样的格式进行数字处理.对现代处理器而言,几乎全都使用二进制补码表示方式。早期的计算机曾使用过很多种数字系统,包括反码、符号数值码,甚至是十进制码,每一位用十个管子。 以上这每一种数字系统所对应的ALU都有不同的设计,而这也影响了当前对二进制补码的优先选择,因为二进制补码能简化ALU加法和减法的运算。 一个简单的能进行与或非和加运算的2位ALU。
可行性分析
绝大部分计算机指令都是由ALU执行的。ALU从寄存器中取出数据,数据经过处理将运算结果存入ALU输出寄存器中。其他部件负责在寄存器与内存间传送数据。 控制单元控制着ALU,通过控制电路来告诉ALU该执行什么操作。
简单运算
大部分ALU都可以完成以下运算∶
整数算术运算(加、减,有时还包括乘和除,不过成本较高)
位逻辑运算(与、或、非、异或)
移位运算(将一个字向左或向右移位或浮动特定位,而无符号延伸),移位可被认为是乘以2或除以2。
复杂运算
工程师可设计能完成任何运算的ALU,不论运算有多复杂;问题在于运算越复杂,ALU成本越高,在处理器中占用的空间越大,消耗的电能越多。 于是,工程师们经常计算一个折中的方案,提供给处理器(或其他电路)一个能使其运算高速的ALU,但同时又避免ALU设计的太复杂而价格昂贵。设想你需要计算一个数的平方根,数字工程师将评估以下的选项来完成此操作∶
设计一个极度复杂的ALU,它能够一步完成对任意数字的平方根运算。这被称为单时钟脉冲计算。
设计一个非常复杂的ALU,它能够分几步完成一个数字的平方根运算。不过,这里有个诀窍,中间结果经过一连串电路,就像是工厂里的生产线。这甚至使得ALU能够在完成前一次运算前就接受新的数字。这使得ALU能够以与单时钟脉冲同样的速度产生数字,虽然从ALU输出的结果有一个初始延迟。这被称为计算流水线。
设计一个复杂的ALU,它能够计算分几步计算一个数字的平方根。这被称为互动计算,经常依赖于带有嵌入式微码的复杂控制单元。
在处理器中设计一个简单的ALU,去掉一个昂贵的专门用于此运算的处理器,再选择以上三个选项之一。这被称为协处理器。
告诉编成人员没有协处理器和仿真设备,于是他们必须自己写出算法来用软件计算平方根。这是由软件图书馆完成的。
对协处理器进行仿真,也就是说,只要一个程序想要进行平方根的计算,就让处理器检查当前有没有协处理器。如果有的话就使用其进行计算,如果没有的话,中断程序进程并调用操作系统通过软件算法来完成平方根的计算。这被称为软件仿真。
以上给出的选项按最快和最贵到最慢和最经济排列。于是,虽然甚至是最简单的计算机也能计算最复杂的公式,但是最简单的计算机经常需要耗费大量时间,通过若干步才能完成。 强大的处理器,比如英特尔酷睿和AMD64系列对一些简单的运算采用1号选项,对最常见的复杂运算采用2号选项,对极为复杂的运算采用3号选项。这是具有在处理器中构造非常复杂的ALU的能力为前提的。
输入和输出
ALU的输入是要进行操作的数据(称为操作数)以及来自控制单元的指令代码,用来指示进行哪种运算。它的输出即为运算结果。 在许多设计中ALU也接收或发出输入或输出条件代码到(或来自)状态寄存器。这些代码用来指示一些情况,比如进位或借位、溢出、除数为零等。
ALU与FPU
浮点单元也对两个数值进行算术运算,但是这种运算已浮点数表示,比在ALU中一般使用的补码表示方式复杂的多。为了完成此类运算,FPU里嵌入了多个复杂电路,包括一些内部ALU。 工程师一般认为ALU是处理整数型(比如补码和BCD码)算术运算的的电路,而对更为复杂的格式(比如浮点型、复数型)进行计算的电路则拥有一个更加匹配的称谓。
1.引言
随着手持式个人通讯系统等的发展,低压低功耗高吞吐量电路的需求越来越多,因此低功耗微处理器和元件的设计已经变成了主流。ALU是微处理器最重要的组成部分,其中全加器电路是所有运算电路的基本单元,设计低功耗快速加法器单元是获得低功耗高速运算电路的关键。ALU单元的设计标准是多种多样的,晶体管数量显然是一个主要的关注点,因为它极大的影响了功能单元ALU的设计复杂性。另外两个重要的却又相互矛盾的因素是功耗和速度。与功耗降低相关的一个因素是电路能工作的电压, 还有一个是晶体管的数量,而全加器晶体管的数量又极大的影响了ALU单元的晶体管数量,因此全加器的设计也是ALU设计中必须重点考虑的一部分。对于已有的全加器的设计按照种类来分有静态CMOS电路,动态电路,传送管和传输门逻辑。其中全静态CMOS电路是最传统的,但需要28个管子。动态电路能极大的减少晶体管的数量但是短路功耗却很大;使用传送门逻辑是一个可选的降低电路复杂性的方案。在中基于传送门和反向器的全加器设计中各使用了20和16个晶体管,为了得到更少管子的全加器,在中基于XOR/XNOR的传送门逻辑电路组成的全加器只用了14个管子,在中,介绍了一个基于传输管的静态能量恢复全加器(SERE),它只使用了10个管子,且不管它自称的功耗小,这个设计相比同类的设计来讲速度比较慢,同时这个设计不能用来级连,因为在低电压下工作时有多阀值损失问题。在中一种新的基于选择电路的10管全加器设计被提出,然而这个设计也同样有多阀值损失问题,以至于不能在低电压级连模式下正确的工作,前面提到的10管全加器都是基于图1的原理来的。文中的ALU单元将采用一种新的10管全加器,它可以减轻阀值损失问题,这个设计可以在使用少量管子的情况下组成快速的并行加法器(RCA)同时保持较低的能量损耗,另外,这个设计可以在较低的工作电压下正确运行。
图1 .现有的10管全加器结构
2.新的基于CLRCL全加器的ALU单元
首先考虑全加器的设计,全加器的逻辑表达式为:
Sum=(A⊙B)·Cin+(A⊕B) ·!Cin Count=(A⊕B) ·Cin+(A⊙B) ·A
可以看出有两个基本的模型需要使用――XOR和2选1选择器。一个XOR/XNOR功能用传送门逻辑只用四个管子就可以达到,一个2选1选择器可以用两个管子实现。但是这些电路都有不同程度的阀值电压损失,所以在使用时必须小心,文中将采用一种新的全加电路,这个全加器的特点是进位逻辑电平恢复称之为(Complementary and Level Restoring Carry Logic or CLRCL)。目的是为了减小电路的复杂性和达到快速的级连运作。为了避免进位链的多阀值电压损失,为此重写全加器的和以及进位逻辑公式:
Sum =(A⊕Cin) ·!Cout+(A⊙Cin) ·B Count =(A⊕Cin) ·B+(A⊙Cin) ·A
改进后的电路图如图2.其中MUX的电路如图3所示。这样设计的合理之处在于以下几点:首先,避免了使用有阀值损失的信号作为下一个单元的控制信号,这是在现有的10管全加器中普遍存在的问题,这将导致在电路级连的时候有多阀值电压损失从而使电路不能正确工作;第二,在传送管链中去除了没有缓冲的进位信号传送。根据Elmore公式,传送延迟时间跟级连的传送门数目是二次方的关系。即使是中等数目的级连长度,这样的延迟也是不能忍受的。
图2.新的1位ALU单元电路图
图3 .MUX 的MOS电路图
正如图2中全加器部分电路所示,XNOR电路采用了一个2选1选择器加一个反向器来实现,这个反向器的功用有三个:,反向器INV1可以用来补偿输出传送门输出电压的损失,这个输出将用来与另外两个2选1选择器一起实现和以及进位功能,这样和以及进位信号的阀值电压损失可以控制在一个|V t|;第二,反向器INV2在进位链中充当了一个缓冲器的作用,从而加速了进位的传送;第三,同时这个反向器提供了一个进位的互补信号(!Count)供下一级电路使用。这样全部的全加器部分电路就只需要10个管子(5个PMOS和5个NMOS),这是目前我们所知的最少的实现全加器电路的晶体管数目。
在逻辑与或的功能部分,采用了两个信号来控制(Cnt2和Cnt3)(Figure 2所示),当全加器的和信号以及逻辑与/或功能信号产生后,再使用一个2选1选择器(控制信号为Cnt1),共使用了三个控制信号实现了全加及逻辑与/或的功能(见Table 1),使用了两个用传送门实现的2选1选择器串联后,这个电路会有两个阀值电压的损失,不过这并不影响最终电路的正确操作,因为两个阀值电压的损失在3.3v的工作电压下还是可以正确工作。
至于左移、右移和SWAP功能可以通过传输门来实现(见Figure 2右部分),通过不同的控制信号可以轻易的实现这些功能。
前面提到了本文中提出的电路会有两个阀值电压的损失,为了后续电路的正确工作我们可以加一个电平恢复电路,同时这个电路还可以加快电路的传送速度(见Figure 2右半部分),在此恢复电路中我们使用了一个控制信号(Cnt4)来实现三态门的功能以控制信号的输出与否。加上这部分电路后输出信号会取反,在许多处理器中信号采用的是补码形式,而这为补码的实现提供了便利。
3. 电路分析和仿真结果
一些其他的全加器设计将用来和本文的全加器比较,因为设计的目标是降低电路的复杂性和提高电路的速度以及能量损耗的降低,所以主要关注于门数少并基于传送门的全加器之间的比较。已有的全加器总结如下表2。
在0.35um工艺下仿真一些10管的全加器的DC特性,其中Vdd为3.3v,反向器的(W/L)p=1.4um/0.35um 以及(W/L)n=0.7um/0.35um(table3)。另外,此电路在1.9v的电压下依然可以正确工作,这为进一步降低功耗提供了一个很好的途径。
对整个电路进行DC分析,得到整个电路的功耗为12.12 uw,延时1.5ns,仿真结果见图4。另外在AC方面,这个电路的工作频率也是比较高的。
图4 . 电路仿真结果
4.结论
本文提出了一种新的1位的ALU单元。所提议的ALU单元在DC方面,可以在很低的工作电压下工作,功耗小且速度快;在AC方面,由于采用了CLRCL全加器可以工作在很高的频率下。同时,比较了现有的一些全加器的性能,可以看到文中的CLRCL电路不仅使用的晶体管的数目较少,同时它的功耗和速度性能也是比较优良的,极大的提高了1位ALU的性能。
维库电子通,电子知识,一查百通!
已收录词条48243个