运算器是计算机系统中的核心组件,专门承担着数据处理和计算的任务。[2][3]作为数据处理的核心部件,运算器具备执行算术和逻辑运算的能力,从而对输入的信息进行加工和处理。[3][4]运算器是计算机的数据处理中心,也是机器中各部件交换数据的枢纽。[2]
运算器的数学基础是布尔代数,由乔治·布尔(George Boole)在1854年提出,并在19世纪中叶得到杰文斯(William Jevons)、皮尔斯(Charles Sanders Peirce)、施罗德(Ernst Schröder)和怀特海(A.N. Whitehead)的进一步发展和系统化。[5]1879年,弗雷格(Gottlob Frege)发展了逻辑形式化方法,并提出了第一个逻辑语言。[6][7]1919年,埃克斯(W.H.Eccles)和乔丹(F.W.Jordan)发明了触发器,为计算机算术逻辑单元(ALU)奠定了技术基础。[8]20世纪30年代,香农(Claude Shannon)和谢斯塔科夫(Victor Shestakov)展示了布尔逻辑与电路的对应关系,奠定了数字电路设计基础。[9][10]1937年,斯蒂比茨完成了首个二进制加法器。[11][12]1945年,冯·诺依曼提出运算器概念,[13]1951年LAS计算机采用并行运算器大幅提高效率。[14]1953年,MOSAIC计算机运行首个程序,包含早期算术单元。[15]1967年,费尔柴尔德推出了第一个以集成电路形式实现的类似运算器的器件Fairchild 3800,[16]1970年德州仪器推出74181 TTL IC,简化了计算机设计。[16]20世纪70年代,微处理器开始出现,早期微处理器采用窄ALU,[17]90年代引入SIMD向量运算器和超越函数硬件运算单元,实现十进制定和浮点数运算。[18]
运算器包含基本组件有加法器、通用寄存器、输入数据选择电路和输出数据控制电路。加法器不仅实现加法运算,还支持逻辑运算并作为数据通路。通用寄存器临时存放数据和运算结果。输入数据选择电路负责选择和控制送入加法器的数据。输出数据控制电路控制加法器输出数据的移位和传送。[19]运算器可以根据数据传送方式分为串行和并行运算器,也可以操作数类型可分为定点和浮点运算器。[1]此外,还可以按照进位制分类为二进制和十进制运算器。[20]现代计算架构中,GPU和CPU都包含运算器。[21]数字信号处理器(DSP)中也内置了运算器。[22]在量子计算领域,量子运算器通过量子叠加和纠缠原理加速传统算法,处理高精度和宽范围的浮点数。[23]基于FPGA的浮点运算器在雷达系统中用于高精度数字信号处理。[24]嵌入式系统中则需要专用的运算器来执行特定的算术运算,以满足多样化的应用需求。[25]
历史
运算器的数学基础是布尔代数,由英国数学家乔治·布尔(George Boole)在他的1854年发表的著作《思维规律》(The Laws of Thought)中发展而来。布尔的代数在1860年代由威廉·杰文斯(William Jevons)和查尔斯·桑德斯·皮尔斯(Charles Sanders Peirce)进一步完善,并由恩斯特·施罗德(Ernst Schröder)和A.N.怀特海(A.N. Whitehead)首次系统化地提出。[5]1879年,德国逻辑学家戈特洛布·弗雷格(Gottlob Frege)发展了逻辑的形式化方法,并提出了用于逻辑方程的第一个逻辑语言。[6][7]1919年,美国物理学家埃克斯(W.H.Eccles)和乔丹(F.W.Jordan)共同发明了一种名为“触发器”(“flip-flop”)的电子电路。该电路设计上能够实现在两个状态之间(二进制)平稳且迅速的切换,这一特性为后续计算机中算术逻辑单元(ALU)的发展提供了技术基础。[8]
20世纪30年代,美国电子工程师克劳德·香农(Claude Shannon)和苏联逻辑学家维克托·谢斯塔科夫(Victor Shestakov)独立地展示了布尔逻辑概念与某些电路之间的一一对应关系,这些电路现在被称为逻辑门,它们在数字计算机中无处不在。[9][10]他们展示了电子继电器和开关可以实现布尔代数的表达式。这一论题基本上奠定了实用的数字电路设计基础。[9][10]此外,香农的论文还提供了一个4位数字二进制加法器的电路图。[10]1937年11月斯蒂比茨(George Robert Stibitz)完成了一台基于继电器的计算器,这是第一个二进制加法器。[11][12]
数学家约翰·冯·诺依曼(John von Neumann)于1945年在一份关于EDVAC新型计算机基础的报告中提出了运算器的概念。[13]1951年,LAS计算机研制成功,其效率比过去的ENIAC要高出好凡百倍。该机总共用了2000个电子管,采用了并行运算器以代替之前计算机使用的串行运算器。[14]MOSAIC计算机在1953年运行了第一个程序,它由超过6,480个电子阀组成,占据了四个房间的空间。其中的“算术架”是最早的算术单元。[15]
1967年,费尔柴尔德(Fairchild)推出了第一个以集成电路形式实现的类似运算器的器件Fairchild 3800,由带有累加器的八位算术单元组成。它只支持加法和减法,不支持逻辑函数。[16]1970年,德州仪器(TI)推出了74181 TTL IC(一种4位ALU),简化了小型计算机的设计。它执行算术运算(加法和减法)和逻辑运算(AND、OR、XOR)。[16]
微处理器于20世纪70年代初开始出现。尽管晶体管变得越来越小,但有时仍然没有足够的芯片空间来容纳全字宽ALU,因此,一些早期的微处理器采用了窄ALU,每个机器语言指令需要多个周期。这方面的例子包括流行的Zilog Z80,它使用四位ALU执行八位加法。[17]20世纪90年代开始,微处理器中出现了单指令多数据(Single InstructionMultipleData,简称SIMD)的向量运算器,部分处理器还实现了超越函数硬件运算单元,如sin、cos、exp、log等。部分用于银行业务处理的计算机(如IBMPower系列)还实现了十进制定、浮点数的运算器。[18]
主要组成
运算器包括ALU、阵列乘除器、寄存器、多路开关、三态缓冲器、数据总线等逻辑部件。运算器的设计,主要是围绕ALU和寄存器同数据总线之间如何传送操作数和运算结果进行的。在决定方案时,需要考虑数据传送的方便性和操作速度,在微型机和单片机中还要考虑在础片上制作总线的工艺。在各种计算机中,运算器的结构虽然有区别,但必须包含如下几个基本部分,即加法器、通用寄存器、输入数据选择电路和输出数据控制电路等。[19]
加法器
加法器的主要作用是实现两个数的相加运算,对逻辑运算也给予一定的支持,并且常作为传送数据的通路使用。[19]
通用寄存器
通用寄存器组中有若千个寄存器是用来暂时存放参加运算的数据和运算结果(或中间结果)的。这是因为要将从主存储器中取出的参加运算的数据,立即送到加法器中进行处理还存在一些问题,例如在对两个数据进行操作的情况下是不可能从存储器中同时取出两个数据并直接送入加法器中处理的,而通常是利用寄存器来暂时存放将要参加运算处理的数据。在前几节介绍的运算方法中,参加运算的数可看做是由运算器的通用寄存器直接提供的。另外有些寄存器可作变址寄存器、状态寄存器、堆栈指示器使用。不同的机器对这组寄存器使用的情况和设置的个数也不相同。[19]
输入数据选择电路
输入数据选择电路是对送入加法器的数据进行选择和控制的电路。其作用为:一是用来选择将哪一个或哪两个数据(数据来源于寄存器或总线等部件)送入加法器;二是用来控制数据以何种编码形式(原、反、补码)送入加法器。常称这部分电路为多路开关或多路转换器。这部分电路通常有实现某些逻辑运算的电路,它们也是由与、或、非门组成的。[19]
输出数据控制电路
输出数据控制电路是一种对加法器输出数据进行控制的电路。这部分电路一般具有移位功能,并具有将加法器输出的数据送到运算器通用寄存器的通路和送往总线的控制电路。[19]

运算方法
运算器具有的只是简单的算术运算、逻辑运算、移位以及计数等功能。因此,计算机对数据信息进行加工时就需要将各种复杂的运算处理分解为最基本的算术运算和逻辑运算。在计算机中实现算术运算和逻辑运算的过程涵盖了从基本的移位操作到复杂的乘除运算。[26]
移位操作
移位操作是计算机中对数据进行位置变换的基本操作,它包括逻辑移位、算术移位和循环移位。逻辑移位主要针对无符号数,只涉及数码位置的变化,不影响数值的大小。算术移位则针对带符号数,移位后数值会相应地扩大或缩小。循环移位分为小循环和大循环,小循环不涉及进位,而大循环则涉及进位的传递。移位操作在计算机中常用于实现乘以2的幂次方或除以2的幂次方的运算。[27]

定点数的加减运算
定点数的加减运算在计算机中通常采用补码表示法,因为补码表示法可以直接利用硬件的加法逻辑来完成减法运算。补码加法中,两个补码数相加后,符号位直接参与运算,而产生的进位则被丢弃。补码减法则通过将减数取反(求补)后再加来进行。在补码加减运算中,还需要考虑溢出的判断,以确保运算结果的正确性。溢出判断通常涉及对最高位进位和结果符号位的检查。[28]
定点数的乘除运算
定点数的乘法运算可以通过原码或补码进行,但补码乘法更为常用,因为它与加减法一样,可以直接利用加法逻辑。原码乘法通过逐位相乘和累加部分积来实现,而补码乘法则利用了Booth算法来优化乘数的判断和部分积的生成。除法则通过比较、上商、恢复余数和移位等步骤实现。不恢复余数法是一种提高除法运算速度的方法,它避免了在每次除法运算后恢复余数的步骤。[29]
浮点数的算术运算
浮点数运算包括加减乘除,其过程比定点数运算更为复杂。浮点数运算需要进行对阶、尾数运算、规格化及舍入处理,以及溢出判断。对阶是使两个操作数的小数点位置对齐,尾数运算则直接进行加减或乘除,规格化是将结果调整为标准形式,舍入处理用于减少误差,而溢出判断则是检查阶码是否超出表示范围。[30]
逻辑运算
逻辑运算包括逻辑非、逻辑或、逻辑与和逻辑异或。这些运算是按位进行的,不涉及进位或借位的概念。逻辑非是求反运算,逻辑或和逻辑与分别是按位求或和按位求与,逻辑异或是按位求模2和。逻辑运算的结果通常用于控制流的判断,如条件语句和循环。[31]

原理
鉴于不同运算器的原理存在差异,[32]现以一个12位长的运算器为例,介绍运算器的工作原理,以编号0至11标识各位置。运算器逻辑图示例图中仅展示最后一位Q11和连接位QL。每个位的全加器配备有相应的输入控制门、移位控制门和主寄存器输入控制门,最终将数据传输至四个主寄存器的对应位。[33]以下是运算器执行几种基本运算的过程:[33]
算术加:将被加数X置于JL中,加数Y从内存取出置于JSN中。控制器发出求和信号,开启"JL"和"JSN"的输入门,使得各位数字通过门电路送至相应的Q中去。求和后,进位信号向前传递,和数通过"不移位"门送至主寄存器母线,控制器发出信号,将和数的各位保存至JL的各位。如果在Q0产生了进位信号,则它的进位信号C0将向连接位L进位。主寄存器加1:JL、JHN、Jsz、JDN四个寄存器中的数值可能需要通过加法器加"1"。例如,Jsz在执行完指令后自动加"1"以指示下一个地址的指令。通过"Jsz开门"和"加1控制"信号,实现地址码加1,并将结果存储回Jsz。逻辑乘:逻辑乘遵循按位"与"运算规则。将一个数置于JL中,另一个数从内存取出置于JHN中。控制器发出"AND开门"信号,加法器输入端X上即得到逻辑乘的积,然后传送至主寄存器母线,并存储至JL。逻辑加:逻辑加即按位"或"运算。将两个数分别置于JL和Js中,控制器发出信号后,加法器输入端X上得到逻辑加的结果,然后传送至主寄存器母线,并存储至JL。变反:要得到JL的反码,只需发出"JL开门"和"送入JL"信号,即可在JL中得到结果,此时加法器仅作为通道使用。变补:二进制数的补码等于其反码加1。要得到JL的补码,发出"JL开门”“加1控制"和"送入JL"信号,即可在JL中得到结果。循环移位:在"JL开门"信号控制下,JL中的数字通过加法器出现在Q的各位上。若要进行循环左移位,控制器发出"左移一位"信号,实现Q11至JL10等的位移动。右移位操作类似。作为传送通道:加法器除了用于运算外,还可以将信号传送至四个主寄存器中的任意一个。例如,通过控制台输入一个数并希望将其存储至内存的指定单元,通过一系列开门和传送信号,最终实现数据的存储。
以上所述是运算器的一些主要功能,至于乘、除、浮点运算等,用这个12位运算器是没法完成的,要作这些运算,可用程序来实现,只不过速度慢了一些,也有的机器是设置扩展单元来解决这些问题的。[33]

分类
运算器有多种分类方式,如可以按从数的传送方式、小数点的表示形式及进位制等方式进行分类。[20]
按数的传送方式分类
运算器按照数据的传送方式分类,可分为串行运算器和并行运算器。串行运算器仅见于最早期的计算机,[1]其特点是数据按位序逐个进行运算,从低位到高位,导致运算速度较慢。尽管如此,串行运算器所需的设备和材料较少,适合用于小型控制计算机。并行运算器则允许数据的各位同时进行运算,从而显著提高运算速度。不过,这种设计需要更多的设备和材料,通常应用于通用计算机。此外,还有一种运算器结合了串行和并行运算的特点,称为串并行运算器,它能够根据需要灵活地进行数据运算。[20]
按小数点的表示形式分类
按参与运算的操作数是定点数还是浮点数,运算器又可分为定点运算器和浮点运算器。[1]定点运算器只能做定点数运算,其特点是机器数所表示的范围较小,但相应的结构较简单。通常在小型机和微型机中采用。[20]定点运算器又可细分为多种类型,以适应不同的计算需求。带多路选择器的运算器通过独立数据选择,实现高效的数据输入。带输入锁存器的运算器利用锁存器暂存操作数,以支持复杂的双操作数运算。单总线结构运算器通过一条总线传输数据,尽管需要分时操作,但结构简单。双总线结构运算器则通过两条总线提高数据传输的灵活性。三总线结构运算器进一步提升操作速度,尽管控制更为复杂。[34]


浮点运算器是专门设计用于高效处理浮点数运算的单元,由多个专门部件组成,以实现精确的浮点数计算。[35]浮点运算器功能较强,它既能做浮点数运算,又能做定点数运算,其数的表示范围很大,但结构相当复杂。通常在数值计算的通用机中采用。[20]

按进位制分类
运算器按照按进位制分类可以分为二进制运算器和十进制运算器。二进制运算器多数用作科学计算;十进制运算器主要用于数据处理,如商用计算机采用十进制运算器,这样可以省掉十进制与二进制的转换。许多计算机往往既能完成二进制运算,也能完成十进制运算,这种运算器的功能较强。[20]
字长
字长,作为计算机体系结构中的一个核心概念,定义为参与运算的数据的基本位数。它关键地决定了寄存器、运算器以及数据总线的宽度,从而对硬件成本产生直接影响。字长的长度直接关联到计算机的计算精度,对于需要高精度计算的科学计算型机器,较长的字长是必要的。相对而言,用于一般数据处理和工业控制的计算机,16位或32位的字长便足够使用。为了平衡计算精度与成本之间的矛盾,并适应不同的应用需求,现代计算机系统普遍支持变字长计算,提供半字长、全字长和双倍字长等选项。此外,由于数据和指令代码均存储在主存中,字长与指令码的长度存在一定的关联,这也意味着字长对指令系统的功能和效能具有决定性作用。市场上的计算机,其字长设计多样,从4位到64位不等,以适应不同复杂度和性能要求的计算任务。[36]
运算速度
运算速度是衡量计算机性能的关键指标,它反映了计算机处理运算和操作的速率。该指标的计算方法多样,但普遍采用的是平均速度的度量方式,即在固定时间周期内计算机平均执行的指令数量。例如,若一台计算机的运算速度为100万次/秒,这表示该设备每秒能够处理100万个指令,相当于1百万条指令每秒(MIPS)。此外,为了更精确地评估运算速度,有时还会采用加权平均法,该方法根据各种指令的执行时间和它们在整个操作中所占的比重来进行综合计算,以得出更为准确的等效速度值。[36]
功耗其他指标
除了字长和运算速度,运算器还有一些比较常见的指标,如功耗、延迟、频率、计算精度、可靠性、经济性等。[37][38]
运算器功耗是指在执行算术运算时所耗费的能量。研究显示,通过可逆计算技术和近似算术单元的设计,运算器的功耗可实现显著降低。[39][40]运算器的延迟是指信号在该单元内传播所需的时间,这一指标对算术运算的速度和性能至关重要。延迟的程度受到算术单元设计、所采用的技术和算术函数实现方式的影响。[41][42]算器的频率,即算术逻辑单元(ALU)执行基本数学运算的操作频率,是决定数字系统数学计算速度和效率的关键因素。[43]算术单元的频率对系统整体性能有着直接影响。[44]
图形处理器(GPU)
在现代计算架构中,图形处理单元与中央处理单元均配备了运算器,它们是执行算术和逻辑操作的基本组件。然而,GPU和CPU在设计和应用方面存在显著差异。GPU特别擅长于通过其众多的运算器进行并行处理,这使得它们在处理计算密集型应用,如机器学习和人工智能等领域,展现出比CPU更高的效率。[21]
GPU的设计特点在于拥有数千个针对并行处理而优化的较小内核。这些内核中的运算器虽然在功能上相对简单,但它们通过数量优势和并行执行能力,能够同时处理大量的数据。这种设计使得GPU在执行大规模并行任务时,如图形渲染、科学计算和深度学习等,能够提供显著的性能提升。[45][46][47]
数字信号处理器 (DSP)
数字信号处理器(DSP)是一种专为高速处理而设计的专用处理器,其核心功能是将模拟信号转换为数字信号,并利用内置的运算器硬件模块,如乘法器和累加器,进行高效处理。数字信号处理器以其低功耗、高级语言编程能力以及易于维护和编程的特点而著称。数字信号处理器具备高性能、大容量内存、高级可编程性、宽数据宽度、高度并行的核心架构和对定点与浮点运算的支持等关键特性。数字信号处理器广泛应用于电信、视频和音频信号处理、飞行控制系统以及航天器和导弹等高科技领域。随着技术的发展,数字信号处理器也被广泛应用于移动设备,包括游戏机、智能手机、调制解调器、寻呼机、无绳电话和基站等。[22]
量子计算
量子运算器在量子计算领域扮演着至关重要的角色,特别是在执行浮点数运算时,它们通过量子叠加和纠缠原理,对传统算法进行加速,以处理高精度和宽范围的浮点数,这在科学计算和图像处理等复杂任务中极为关键。量子浮点数运算器包括加法器、乘法器和除法器,它们遵循IEEE 754标准来确保运算的准确性。量子浮点数加法器通过引入可逆的RS MS确定模块,优化了源码到补码的转换过程,减少了硬件资源的消耗。此外,采用二分法设计的前导零探测器有效降低了T-count和T-depth,提升了系统效率。基于Clifford+T门构建的容错电路,即使在噪声干扰下,也能保证计算的准确性。[23]
量子浮点数的乘法器和除法器设计同样注重资源消耗的减少和性能的提升。IBM量子云平台的仿真验证了这些运算器模块的正确性和有效性。与传统技术相比,量子运算器的乘法器和除法器在Qubits、T-count和T-depth上都有显著减少,显示出在量子运算领域的显著应用潜力。深入研究和设计量子浮点数运算器对推动量子计算技术的发展至关重要。它们不仅提升了量子计算机处理复杂计算任务的性能,也增强了计算的可靠性,为量子信息科技的发展奠定了坚实的基础。[23]
无线电探测
在无线电探测领域,尤其是雷达系统中,数据处理的精度和速度至关重要。基于FPGA设计的浮点运算器因其大动态范围和高精度特性,在雷达系统中发挥着关键作用,显著提升了系统性能。浮点运算器在雷达系统中用于实现高精度数字信号处理,如设计浮点FIR滤波器并应用于正交中频采样,与定点运算器相比,能够获得更高的镜频抑制比,从而显著提升雷达系统性能。此外,浮点运算器在设计浮点FFT处理器时的应用,实现了FPGA中的高精度FFT处理,这对于快速分析信号的频谱特性至关重要。因此,基于FPGA的浮点运算器在无线电探测领域具有显著优势和广泛应用前景,能够提高数据处理精度和系统运行速度,满足现代雷达系统对高性能处理能力的需求。[24]
嵌入式系统
在嵌入式系统中,运算器承担着执行关键算术运算的任务,这些运算对于数据的高效处理至关重要。它们在信号处理、图像处理和数学计算等核心功能中发挥着不可或缺的作用。研究表明,运算器的设计和实现直接影响着嵌入式系统的整体性能。在电路级优化方面,高效的运算器设计,如包含近似4-2压缩器和错误恢复模块的乘法器,对于提升电路性能具有显著作用。[48]此外,在物联网技术的背景下,嵌入式系统需要专用的运算器来执行特定的算术运算,以满足多样化的应用需求。[25]
针对特定应用系统中的特定任务,运算器需要进行定制化设计。例如,在基于FPGA的卷积神经网络(CNN)加速器中,定制化的高效运算器对于实现高性能的CNN处理至关重要。这表明,运算器的定制化设计和实现对于满足特定应用需求具有显著的重要性。[49]综上所述,运算器作为嵌入式系统中的核心组件,不仅支持了多种关键应用,而且通过其设计和实现的优化,显著提升了系统的性能和效率。研究人员正在不断探索和改进运算器的设计方法,以期达到更高的性能标准,满足未来嵌入式系统发展的需求。[50]
参考资料 50
- 参考 1
- 参考 2
- 参考 3
- 参考 4
- 参考 5
- Gottlob Frege — britannica
- Gottlob Frege — stanford
- 参考 8
- 参考 9
- A symbolic analysis of relay and switching circuits — cs
- The computer pioneers : the making of the modern computer — archive
- George Robert Stibitz — IEEE
- https://web.archive.org/web/20150923211408/http://www.cs.berkeley.edu/~christos/classics/paper.pdf — archive
- 参考 14
- Arithmetic Logic Units (ALU): An Introduction — arith-matic
- Inside the 74181 ALU chip: die photos and reverse engineering — righto
- The Z-80 has a 4-bit ALU. Here's how it works. — righto
- 参考 18
- 参考 19
- 参考 20
- GPU 与 CPU 之间有什么区别? — amazon
- The Evolution of Digital Signal Processors — ieee
- https://d.wanfangdata.com.cn/Thesis/ChJUaGVzaXNOZXdTMjAyNDAxMDkSCUQwMzA3MTkxNRoId2xnMW10eWo%3D
- https://d.wanfangdata.com.cn/Thesis/ChJUaGVzaXNOZXdTMjAyNDAxMDkSCFkxNDMyMTgxGghvc3F4cGdwNw%3D%3D
- IoT technologies for embedded computing: a survey — acm
- 参考 26
- 参考 27
- 参考 28
- 参考 29
- 参考 30
- 参考 31
- 参考 32
- 参考 33
- 参考 34
- 参考 35
- 参考 36
- CPU Metrics Reference — intel
- Arithmetic Logic Unit — studysmarter
- An Arithmetic Logic Unit design based on reversible logic gates — IEEE
- Low-Power Digital Signal Processing Using Approximate Adders — ieee
- Delay-based processing-in-wire for design of QCA serial decimal arithmetic units — acm
- MEMRISTOR-BASED ARITHMETIC UNITS — lib
- 80-GHz Operation of an 8-Bit RSFQ Arithmetic Logic Unit | IEEE Conference Publication | IEEE Xplore — IEEE
- TidalCurrentFundamentalFrequencyDeterminationAlgorithmforIntegerArithmeticUnits — ieee
- Hardware-Accelerated Platforms and Infrastructures for Network Functions: A Survey of Enabling Technologies and Research Studies — researchgate
- Comparative Study on CPU, GPU and TPU — researchgate
- CPU and GPU: features, differences and use cases — stackscale
- Multipliers With Approximate 4–2 Compressors and Error Recovery Modules — ieee
- High-Performance FPGA-Based CNN Accelerator With Block-Floating-Point Arithmetic | IEEE Journals & Magazine | IEEE Xplore — ieee
- Introduction — googlebook