>
首页 » 业界动态 » 龙芯2号处理器功能部件设计

龙芯2号处理器功能部件设计

作者:张 戈,齐子初,胡伟武  时间:2006-11-02 00:37  来源:
摘 要:功能部件是处理器中进行指令运算的核心单元,它的算法及其实现直接影响到处理器的总体性能。介绍了龙芯2号处理器的功能部件,探讨了从算法到物理设计等不同层次的功能部件设计方法。龙芯2号功能部件分为两个定点ALU和两个浮点ALU实现,除实现完整的MIPS定、浮点指令集外,还实现了龙芯2号类MMX自定义多媒体指令集以及定点操作在浮点部件(FPU)中的数据通路复用。龙芯2号浮点部件遵照IEEE754和MIPS相关标准,浮点加法4拍完成,浮点乘法5拍完成,浮点除法4~17拍完成。物理设计支持0.18μm 工艺下主频500MHz的标准单元实现,浮点单精度峰值性能达到2G FLOPS,双精度峰值性能达到1G FLOPS。

关键词:龙芯2号处理器;功能部件设计;浮点部件;多媒体指令集

引言

功能部件是处理器中进行指令运算的核心,随着当今高性能处理器对数据计算能力以及数据多样性需求的不断提高,与此相关的功能部件设计业已变得日趋复杂化。现代通用处理器指令集从最基本的定点操作指令集,扩展到目前包含浮点、多媒体等多种数据格式和计算功能于一体的现代指令集系统。与此同时,当今高性能处理器广泛采用多发射、动态调度、转移猜测等多种手段以实现指令级并行和IPC的最大化,因此相应地也对功能部件的性能提出了更高的要求。作为处理器的重要组成部分,功耗也是功能部件设计中必须考虑的问题之一,这都使得当前的功能部件设计面临着新的复杂度及其挑战。

本文介绍了龙芯2号通用处理器功能部件设计。龙芯2号处理器为基于MIPS指令系统,采用4发射结构的64b高性能通用处理器系列,它采用复杂的寄存器重命名、转移猜测以及乱序执行等技术以提高指令运算的并行度。龙芯2号一共包含5个功能部件,其中包括两个定点ALU、两个浮点ALU以及访存部件,本文主要描述了龙芯2号功能部件中算术逻辑单元(ALU)的实现,其中包括定点ALU1、定点ALU2、浮点ALU1以及浮点ALU2。

龙芯2号功能部件在处理器中所处位置及其前后数据通路关系如图1所示。龙芯2号处理器内部为64b4发射流水结构,其中定点操作和浮点操作在处理器中各自拥有独立的数据通路。处理器每拍允许2条定点指令和2条浮点指令分别进入不同的功能部件进行运算。考虑到模块间的时序关系及连线延迟,每条指令的源操作数从物理寄存器堆读出并进入相应的功能部件后首先被存入寄存器,写回时除定点ALU1外,其他功能部件基本上有一个时钟周期的时间用来写回,而定点ALU。中指令能够在一拍内完成运算并且写回,因此在forward逻辑的作用下没有延迟槽。

图1 龙芯2号功能部件数据通路

龙芯2号功能部件描述

龙芯2号功能部件分为两个定点ALU:ALU1/ALU2和两个浮点ALU: FALU1/FALU2实现。每条指令在寄存器重命名阶段完成指令的功能部件分配。根据不同指令在程序中使用频繁程度的不同以及考虑到不同指令的实现代价,每个功能部件所能执行的标准MIPS指令设置如下:

定点ALU1执行定点加减、逻辑、移位、比较、自陷和转移操作;

定点ALU2执行定点加减、逻辑、移位、比较、乘法以及除法操作;

浮点ALU1执行浮点加减、求绝对值、取反、格式转换、比较以及转移操作;

浮点ALU2执行浮点乘法、除法以及浮点开平方操作。

除执行标准的MIPSⅢ定、浮点运算指令集外,龙芯2号处理器还对MIPS浮点指令格式进行扩展,实现了类MMX的龙芯2号自定义多媒体指令集系统。由于新增加的多媒体指令在处理器内部仅被当做浮点操作的一部分,因此实现起来不需要对现有数据通路做任何改动,仅在浮点功能部件中增加相应的指令计算功能即可,实现了以较小代价换取较高媒体性能的目的。

龙芯2号功能部件内部除定点除法、浮点除法和浮点开平方根操作外,其他所有指令均为全流水操作,其中大部分定点操作(定点乘、除法除外)可以在一个时钟周期内完成计算并写回,浮点操作则根据指令功能的不同,存在不同的周期延迟。表。详细列出了不同指令在龙芯2号处理器中所需的执行节拍数。

表1 龙芯2号指令运算延迟

定点ALU设计

高性能功能部件的实现不但依赖于物理设计及其电路工艺,与处理器中其他以控制为主的模块相比,功能部件设计更注重对其算法和微体系结构的研究。本文下面将从定点ALU、浮点ALU以及多媒体指令集3个方面分别对龙芯2号功能部件的指令级设计进行描述。该节首先描述了定点ALU指令设计部分。

定点ALU1设计
龙芯2号定点ALU1实现传统意义上最为基本的定点算术运算指令。随着现代通用处理器功能部件复杂度的不断增加(如浮点部件和多媒体部件的引入),定点ALU在处理器中通常只占到很小一部分,但它依然包含了功能上最为常用的定点运算指令集,其中包括定点加减、移位、转移及逻辑运算等。

龙芯2号定点ALU1模块的主要实现逻辑包含一个64b的超前进位加法器(CLA)以及两个64b的全长移位器(左移+右移)。其中单字、双字,有符号、无符号加减指令以及比较等指令可以复用一个64b加法器实现;单字、双字逻辑右移和算术右移等指令可以复用一个64b的右移逻辑实现。由于定点ALU1的运算逻辑相对简单,因此延迟和面积开销也较小,其所有指令在一拍内可以完成运算并且写回。

定点乘法设计
龙芯2号定点乘法模块支持单、双字运算兼容的有符号及无符号定点乘法运算。在算法的设计上,我们首先采用Booth2编码方式以在不增加编码复杂度的情况下有效降低部分和的产生个数,接下来我们利用全规模乘法树对部分和结果进行压缩,最后则通过一个全长进位加法器得到最终结果。

定点乘法中主要的计算量来源于乘法树的压缩计算过程,传统的华莱士(Wallace)压缩树采用Counter3-2作为基本的构建单元。为了使乘法树的组织更加规整,从而使后期布局布线工作变得相对容易,在乘法压缩树的具体实现上,我们的设计原则是在尽量保证不增加乘法树延迟的前提下采用Counter4-2代替Counter3-2作为基本单元来完成乘法树的构建。图2描述了在定点乘法中通过Counter4-2来搭建规整的Counter16-2压缩树的结构框图。

图2 Counter16-2组成结构框图

图3进一步给出了龙芯2号定点乘法的整体框图及其节拍划分。考虑到节拍划分所带来的寄存器代价,第1拍Booth编码部分仅生成部分和选择信号,第2拍根据选择信号进行部分和的生成及压缩。这样做可以减少两拍之间所需寄存器的数目,而由此造成的节拍延迟不平衡可利用布线时的有效时钟偏斜(useful clock skew)技术来解决。

图3 定点乘法结构框图

定点除法设计
龙芯2号定、浮点除法采用基4的SRT算法,每次循环产生两位结果,这样对两个64b的操作数做除法,主体算法最多需要循环32次就可以得到需要的商和余数。对于定点除法来说,为了满足被除数和除数的大小范围限制,在执行主体算法之前,要根据操作数首0(正数)或首。(负数)的个数对被除数和除数进行左移。

定点除法设计一共包含5个部分,其中包括两个预处理节拍(数0和移位),一个主体循环(SRT24循环)以及两个后处理节拍(用于余数和商处理)。所以整个实现最多需要37拍(包括写回)完成,不过由于我们的优化设计以及实际应用中数据的特点,大部分定点除法指令的运行节拍数将远小于37拍。定点除法设计完成后的综合面积为3.5×104标准门左右。对于不同的输入数,它得到结果至少需要5拍,至多需要37拍。

浮点ALU设计

龙芯2号浮点部件支持4种舍入模式和5个IEEE754标准规定的例外,另外,MIPS体系结构标准定义了第6个例外类型:未实现操作(E)例外。在龙芯2号浮点ALU设计中,出于对实现复杂度等方面的考虑,我们对亚正常操作数(denormalizedoperand)采用置E例外的方式交由操作系统进行软件模拟处理。

浮点加减法设计
浮点加减指令是最常用的浮点操作之一,研究表明浮点加减指令在浮点程序里通常占到浮点操作的60%左右,因此如何尽可能地提升浮点加减的运算性能就显得尤为重要。龙芯2号浮点加减算法主体上采用改进的双通路结构以降低关键路径延迟,如图4所示。在整体通路上,浮点加减被分为两条独立的路径,远路径(far)和近路径(close)。采用这种双通路算法所带来的好处是使得通路上的一部分关键路径由全长移位降低为一位移位,同时近路径不需要舍入,远路径舍入逻辑变得简单。

双通路算法的两条路径分别执行不同的运算。对于远路径,首先进行指数差计算,然后根据指数差结果对操作数进行移位,并且判断是否交换操作数。在计算指数差和操作数移位的两步操作中我们采用错位并行技巧使得这两个前后相关的串行步骤在计算时间上有所重叠,从而进一步降低关键路径延迟。我们采用基于Injection的舍入算法使得舍入逻辑尽量简单,最后在远路径上需要进行后规格化处理。

双通路算法的近路径设计相对远路径设计而言比较简单,首先它仅通过指数差低两位即可判断是否需要交换操作数。由于近路径相对远路径延迟较小,因此我们这里选择采用了非精确的前导。预测算法(leading one prediction,LOP)来达到性能和面积的权衡。

图4 龙芯2号浮点加减结构框图

浮点乘法设计
龙芯2号浮点乘法和定点乘法设计思路大体相同,首先利用Booth2编码生成部分和,然后利用Counter3-2和Counter4-2作为基本单元构建乘法压缩树,图5描述了浮点乘法中所用到的Counter。4-2压缩树的搭建方式。与定点乘法相比浮点乘法中指数部分的处理以及IEEE754各种操作数形式、舍入模式及例外结果的产生,使得浮点乘法操作延迟有所增加,这也是设计中需要重点考虑的部分。

图5 Counter14-2组成结构框图

基于浮点乘法的舍入特点,龙芯2号浮点乘法中采用了改进的MSC(most significant carryout)算法对舍入部分的进位进行计算。由于MSC算法直接根据输入的两个操作数来判断是否有进位比特输出,因此延迟通常比一个加法器要节省25%左右。另外,我们对舍入操作的粘贴(sticky)位计算也做了改进,通过计算两个操作数后面为0的个数来预先判断出粘贴位的具体值。

龙芯2号浮点乘法的另外一个重要特点是实现了一个双精度浮点与两个并行的单精度浮点(parallel single)运算在整体数据通路上的复用。由于双精度浮点有53b尾数,单精度有24b尾数,从硬件资源的角度看一个双精度浮点运算所需硬件电路(如乘法树等)完全可以满足两个单精度浮点运算的并行操作。为此,我们提出了一种使得双精度和两个并行单精度浮点乘法运算兼容的硬件结构,并由此修改Booth2编码方式及其乘法树以及适当增加部分硬件资源(如舍入逻辑等),完成了一个浮点乘法器下的一个浮点双精度和两个浮点并行单精度的统一运算,也提高了浮点乘法操作的效率能量比。

浮点除法与开平方根设计
龙芯2号浮点除法与开平方根的设计选择常见的SRT算法为基本算法,同时为了达到设计延迟要求,在浮点除法的设计中,我们选择重叠基4的方法,使每次循环得到4b结果。而在浮点开平方根的设计中,考虑到浮点开根指令在所有的浮点指令中占的比例很少,采用的是基为4的SRT算法,即每次循环产生2b结果。而对于基大于4的开平方根算法实现起来比较复杂,时间延迟也相对较长。

龙芯2号浮点除法与开根部件的另一特色是充分利用了浮点除法、浮点开根的例外产生方式以及SRT算法本身的特点,加快得到结果的速度。其中包括两点: ①在初始状态只要根据操作数就可以判断是否出现例外,即例外的发生与得到的最后结果无关,所以如果例外出现,则不需要进行循环计算,直接给出例外结果即可;②循环执行过程中如果发现部分余数为0,那么可以立即终止循环计算,得出最后结果。

从算法的实现角度看浮点除法和浮点开根算法存在一定的相似性,因此在具体实现上我们也公用了很多功能模块,如对操作数的处理以及其中用来存放结果的寄存器等。浮点除法和浮点开根算法的基本实现结构可由图6表示:

图6 龙芯2号浮点除法与开根整体框图

龙芯2号多媒体指令集

为了支持多媒体应用加速,龙芯2号增加了自定义的64bSIMD定点多媒体指令集。这些多媒体指令引入了新的组装数据类型,共包括67条指令,支持并行对8个字节、4个16b数、2个32b数或64b数的定点操作。与龙芯2号定、浮点指令集为MIPSⅢ兼容不同,龙芯2号多媒体指令集没有单独的指令格式,多媒体指令通过使用原有的浮点指令的FMT域保留值来实现。表2和表3给出了龙芯2号的多媒体指令集定义情况。

  龙芯2号多媒体指令按照功能可分为算术指令、比较指令、数据转换指令、数据调整指令、逻辑指令和移位指令。龙芯2号多媒体运算不产生算术例外,它使用了3种新的运算类型来处理溢出,其中包括Wraparound、有符号饱和运算(S)以及无符号饱和运算(US)。龙芯2号多媒体指令集中定义了32个64b多媒体寄存器,但具体实现时没有增加新的硬件,而是映射到32个原有浮点寄存器。由于多媒体指令在实现上仅作为浮点部件的一部分,不需要增加新的数据通路,因此大大节省了硬件开销。据估算,在龙芯2号中实现多媒体指令集仅占用了不到2%的芯片面积。

表2 龙芯2号多媒体指令集定义(1)

表3 龙芯2号多媒体指令集定义(2)

物理实现

龙芯2号物理设计采用中芯国际0.18μm 6层铝布线工艺,基于标准单元设计,在设计方法上采用部分层次化的ASIC布局布线流程,目标设计主频为500MHz。

龙芯2号功能部件在龙芯2号处理器中作为主体模块之一占用了约。P4的标准单元面积,其中实现上采用了大量自主设计的定制标准单元,如高速触发器以及高速组合逻辑单元等。同时这些单元基本为静态逻辑,因此功耗相对较小。其中值得一提的是乘法部件中专门定制的CSA(Counter3-2)双倍高标准单元,该单元作为定点及浮点乘法树的基本构建单元,它的大量采用有效地降低了乘法树的延迟,与Artisan标准单元库提供的Counter3-2单元相比该单元延迟减少了约24%。

功能部件物理设计中的另外一个主要特点是充分利用了有效时钟偏斜(useful clock skew)技术以平衡前后流水级间的关键路径延迟。如前所述,由于考虑寄存器代价,在定点乘法和浮点乘法的设计中,第1拍与第2拍之间存在较大的路径延迟差异,这种情况下我们通过布局布线阶段的有效时钟偏移来解决,从而降低了关键路径延迟。

龙芯2号功能部件布局布线后共包含。26233个标准单元,约占龙芯2号总体标准单元数目的28%,其中包含6502个寄存器。实际流片结果最高频率达到500MHz。由于龙芯2号功能部件每个时钟周期最多可以并行执行两条定点指令和两条浮点(包括双单精度运算指令)或多媒体指令,因此对于浮点运算来讲,单精度运算性能峰值达到2GFLOPS,双精度运算性能峰值达到1GFLOPS。

总结

本文介绍了龙芯2号处理器的功能部件设计,讨论了包括体系结构、算法以及物理实现等方面的设计方法及其相关考虑。龙芯2号功能部件作为一款功能强大的运算单元,为龙芯2号处理器提供了高速完备的运算支持,同时在浮点算法以及多媒体指令设计等方面有较多创新,也为进一步实现功能部件全定制打下了良好的基础。

相关推荐

龙芯2号处理器功能部件设计

龙芯2号处理器功能部件设计

在线研讨会
焦点