使用浮点功能块来实行定点正规化的方法和装置与流程

文档序号:15143653发布日期:2018-08-10 20:11阅读:242来源:国知局

本发明涉及集成电路,并且更特别地,涉及能够实行浮点算术运算的集成电路。



背景技术:

浮点运算通常根据ieee754标准来实现,其将非次正规(nonsubnormal)浮点数定义为由符号、尾数和指数组成,其中要求所述尾数总是正规化的,因为该标准暗含先行的“1”(而次正规数具有全零指数位而不具有暗含的一)。常规来说,使用先行零计数器和桶式移位器(即,将要进行正规化的数左移零的数量的电路)来实行正规化。然而,就电路面积和运算的等待时间而言,以这种方式实行正规化是昂贵的。

诸如可编程集成电路之类的集成电路通常包括用于实现先行零计数器和桶式移位器的软逻辑电路系统。特别地,典型地使用多路复用器的网络来实现桶式移位器。然而,可能难以将附加的管线阶段引入到多路复用器的网络中,这可能限制了集成电路的总体性能。因此,将正规化电路的实现转移到可以更加易于管线化的嵌入式硬逻辑资源中可能是合期望的。

是在这样的上下文内出现了本文中的实施例。



技术实现要素:

提供了一种包括正规化电路系统的集成电路。所述正规化电路系统可以接收定点数,并且输出所述定点数的对应的正规化版本以及相关联的计数值。所述计数值可以表示在预正规化的定点数中的先行零的数量。

在一个适合的布置中,所述正规化电路系统可以包括尾数生成电路,其接收所述定点数,并且通过在所述定点数前面插入先行一以及通过可选地用零来右侧填充所述定点数来生成针对浮点数的尾数。所述正规化电路系统还可以包括浮点生成电路以及专门处理块(例如,数字信号处理或“dsp”块),所述浮点生成电路使用预定的指数和符号值来创建所述浮点数,所述专门处理块计算所述浮点数与常数之间的差。所述常数可以具有等于“1.0”的尾数以及等于所述浮点数的指数和符号位的指数和符号位。

所述正规化电路系统可以进一步包括:约简(reducing)或(or)电路,其接收所述差的指数,并且生成针对所述正规化数的msb;减法电路,其接收所述浮点数的指数和所述差的指数,并且生成输出;以及多路复用器,其接收所述定点数的宽度、来自所述减法电路的输出,并且其由所述msb控制以生成所述计数值。

在另一适合的布置中,所述正规化电路系统可以进一步包括第二尾数生成电路系统,其接收所述定点数的不同子集,并且生成针对第二浮点数的另一尾数。所述正规化电路系统还可以包括创建所述第二浮点数的第二浮点生成电路,以及第二dsp块。所述两个dsp块可以串联地耦合。所述dsp块中的第一个可以实行减法运算,而所述dsp块中的第二个可以实行加法运算。

本发明另外的特征、其性质以及各种优点将根据附图和下文对优选实施例的详细描述而更显而易见。

附图说明

图1是根据实施例的例证性集成电路的图示。

图2是根据实施例的单精度浮点数的图示。

图3是根据实施例的例证性可编程集成电路的图示。

图4是根据实施例的使用一个专门处理块的例证性正规化电路系统的图示。

图5是根据实施例的用于操作图4中示出的正规化电路系统的例证性步骤的流程图。

图6是根据实施例的使用两个专门处理块的例证性正规化电路系统的图示。

图7是根据实施例的用于操作图6中示出的正规化电路系统的例证性步骤的流程图。

具体实施方式

本文中的实施例涉及集成电路,并且更特别地,涉及针对浮点算术运算实行正规化的集成电路。

图1中示出了根据本发明的集成电路210的例证性实施例。集成电路210可以包括存储和处理电路系统220以及输入输出电路系统240。存储和处理电路系统220可以包括嵌入式微处理器、数字信号处理器(dsp)、微控制器或其它处理电路系统。存储和处理电路系统220可以进一步具有随机存取存储器(ram)、先进先出(fifo)电路系统、堆栈或后进先出(lifo)电路系统、只读存储器(rom)或其它存储器元件。

输入/输出电路系统可以包括并行输入/输出电路系统、差分输入/输出电路系统、串行数据收发器电路系统或适合于发送和接收数据的其它输入/输出电路系统。诸如传导线和总线之类的内部互连资源230可以用来将数据从一个组件发送到另一组件,或者将数据从一个组件播送到一个或多个其它组件。诸如传导线和总线、光学互连基础设施或具有可选的中间交换机的有线和无线网络之类的外部互连资源250可以用来与其它设备进行通信。

浮点数常见于在计算系统中以科学计数法表示实数,并且被设计成覆盖大的数值范围和多样的精度要求。ieee754标准通常用于浮点数。诸如图2中图示的浮点数之类的浮点数包括三个不同部分:浮点数的符号10、尾数11以及指数12。这些部分中的每一个可以由二进制数表示,并且在ieee754格式中,这些部分中的每一个取决于精度而具有不同的位尺寸。

例如,单精度浮点数(诸如图2中的浮点数)要求32个位,其分布如下:一个符号位(位31)、八个指数位(位[30:23])以及23个尾数位(位[22:0])。作为另一示例,双精度浮点数要求64个位,包括一个符号位(位63)、11个指数位(位[62:52])以及52个尾数位(位[51:0])。

根据标准ieee754的浮点数的符号使用单个位来表示,其中“0”指示正数并且“1”指示负数。浮点数的指数优选地是无符号的二进制数,其针对单精度格式来说范围从0到255。为了表示非常小的数,有必要使用负指数。为了实现这点,指数优选地具有与其相关联的负偏移。针对单精度浮点数而言,该偏移优选地是127。例如,用于指数的值140实际上表示(140-127)=13,而值100表示(100-127)=-27。针对双精度数而言,指数偏移优选地是1023。

如上文所讨论的,根据ieee754标准,尾数是正规化数(即,其没有先行零并且表示浮点数的精度部分)。因为尾数是以二进制格式存储的,所以先行位可以是0或者是1,但是对于正规化数而言,先行位将总是1。因此,在其中数总是正规化的系统中,先行位不需要是存储的而可以是暗含的,以有效地给予尾数一个额外的精度位。

根据实施例,可以在诸如可编程逻辑器件或“pld”100(见例如图3)之类的可编程集成电路器件上实现正规化电路系统。如图3中所示,器件100可以包括功能块的二维阵列,所述功能块包括逻辑阵列块(lab)110和诸如随机存取存储器(ram)块130之类的其它功能块以及诸如数字信号处理(dsp)块120之类的专门处理块。诸如lab110之类的功能块可以包括较小的可编程区域(例如,逻辑元件、可配置逻辑块或自适应逻辑模块),其接收输入信号并且对输入信号实行自定义功能以产生输出信号。

可编程逻辑器件100可以包含可编程存储器元件。可以使用输入/输出元件(ioe)102来为存储器元件加载有配置数据(也称为编程数据)。一旦已加载,存储器元件就各自提供对应的静态控制信号,其控制相关联的功能块(例如,lab110、dsp120、ram130或输入/输出元件102)的操作。

在典型的场景中,将已加载的存储器元件的输出应用到功能块中的金属氧化物半导体晶体管的栅极,以导通或关断某些晶体管并且从而对包括定线路径的功能块中的逻辑进行配置。可以以这种方式控制的可编程逻辑电路元件包括多路复用器的各部分(例如,用于在互连电路中形成定线路径的多路复用器)、查找表、逻辑阵列、与逻辑门、或逻辑门、与非逻辑门以及或非逻辑门、通过门等。

pld还可以包括以竖直定线通道140(即,沿pld100的竖直轴形成的互连)和水平定线通道150(即,沿pld100的水平轴形成的互连)形式的可编程互连电路系统,每个定线通道包括至少一个轨道来定线至少一根导线。如果期望的话,互连电路系统可以包括双数据速率互连和/或单数据速率互连。

如上所述,可以在每次将定点格式转换成浮点格式时进行正规化运算,这在浮点基本功能的内部数据路径内是常见的,或者用于在浮点多项式求值之前准备浮点已知数,或者用于将内部定点格式最终打包成浮点格式。

正规化问题表面上看起来简单。考虑10位的输入位向量x=“00000110011”的示例。常规来说,将使用先行零计数器来对先行零的数量进行计数,在该示例中,先行零的数量等于五。然后将使用桶式移位器将输入向量x向左移位五个位置而将零填充到右侧。所得到的正规化的向量是“1100100000”以及相关联的计数值五。先行零计数器和桶式移位器典型地实现在软逻辑中并且由多个阶段组成。该多层结构使得这些组件难以管线化,并且还对高效地安置和定线以实现高性能应用产生挑战。

根据本发明的实施例,正规化运算的至少一部分通过利用可编程集成电路100内的dsp块120的浮点能力来利用这些dsp块。dsp块120是器件100上的嵌入式块,并且可以部分地或全部地进行硬接线以实行诸如逻辑运算或数学运算之类的一个或多个特定任务。通常实现在这样的专门处理块中的结构的示例包括浮点乘法器、算术逻辑单元(alu)以及存储器元件。利用dsp块120内的嵌入式浮点资源可以允许正规化电路的更高效的实现方式(即,所述实现方式是紧凑的,几乎不具有逻辑消耗)。基于dsp的正规化电路可以展现出高性能,并且还易于安置和定线,因为块尺寸是可预测的。

图4是仅使用一个专门处理块的例证性正规化电路系统400的图示。如图4中所示,正规化电路系统400可以包括诸如电路402之类的尾数生成电路、诸如电路404之类的浮点数生成电路、诸如数字信号处理(dsp)块406之类的嵌入式专门处理块、诸如逻辑或门408、常数减法电路410之类的约简电路以及诸如多路复用器412之类的切换电路。

正规化电路系统400具有接收以定点格式的位向量x的输入端。电路402和404可以被配置成创建对应的单精度浮点值y,其具有尾数my、等于“01111111”的指数ey以及等于零的符号位sy,(例如,使用尾数生成电路402实现的)所述尾数my具有额外隐含的先行“1”和含有在必要的情况下被填充到右侧的任何附加的零的等于x的分数部分。由于针对单精度浮点数的偏移是127,因此指数ey“01111111”得到有效指数值零。符号值零指示y是正数。

dsp块406可以被配置为浮点减法电路,其接收y和浮点常数c,并且生成对应的差值d(例如,d=y-c)。常数值c可以具有等于1.0的尾数、等于ey的指数以及等于sy的符号。一般来说,d可以等于y-1,因为c事实上等于一。dsp减法器406可以生成具有如下尾数的输出d:所述尾数具有分数部分fd、指数ed和符号位sd。符号位sd可以是未使用的。

可以从差值d的尾数和指数来获得正规化的x。约简或门408可以对指数ed的所有位一起进行或运算来输出针对正规化的输出xnormalized的最高有效位(msb)。msb表现得像是隐含的先行一,并且只要ed不等于零该msb就将等于“1”。假设x具有等于xwidth的宽度,接下来可以附上从fd顶部开始的(xwidth-1)个位以形成最终输出xnormalized。

可以使用电路410和412来生成计数值。电路410可以用来计算(ey-1)与ed之间的差。多路复用器412具有接收宽度xwidth的第一(0)输入端、接收来自电路410的结果的第二(1)输入端、接收来自电路408的msb的控制输入端以及在其上提供计数值的输出端。以这种方式进行配置,只要msb等于“1”,计数值就将等于电路410的输出。然而,如果msb是“0”,则计数值将等于xwidth。

经由示例来最佳地例证正规化电路系统400的操作。考虑第一示例,其中输入位向量x具有20位,并且等于“00000110010000111101”。电路404然后可以生成具有等于“0”的符号位、指数“01111111”和尾数“1.00000110010000111101000”的对应的y。在该示例中,尾数将被填充有三个零(见上面被斜体的零),因为单精度格式具有总计23个尾数位。

另一方面,常数c可以具有等于“0”的符号位、指数“01111111”和尾数“1.00000000000000000000000”。由dsp减法块406计算的所得到的差d因此可以是以定点格式等于“0.00000110010000111101000”,其等价于以浮点格式的“1.10010000111101000000000*2^(-6)”(分数部分加了下划线)。为了得到有效的指数-6,ed将等于121(即,127减6),其在二进制中为“01111001”。然后可以从上面强调的分数部分的较高的19位提取最终的正规化的x。因为ed是非零的,因此由门408生成的msb等于“1”。结果,xnormalized将等于“110010000111101000000”。因为msb为高,因此在多路复用器412的输出端处的计数将等于[(ey-1)-ed],其为[(127-1)-121]=5,这得到了先行零的正确数量。

考虑第二示例,其中输入位向量x具有20位并且等于“00000000000000000001”。电路404然后可以生成具有等于“0”的符号位、指数“01111111”和尾数“1.00000000000000000001000”的对应的y。在该示例中,尾数将被填充有三个零(见上面被斜体的零),因为单精度格式具有总计23个尾数位。

另一方面,常数c可以具有等于“0”的符号位、指数“01111111”和尾数“1.00000000000000000000000”。由dsp减法块406计算的所得到的差d因此可以是以定点格式等于“0.00000000000000000001000”,其等价于以浮点格式的“1.00000000000000000000000*2^(-20)”(分数部分加了下划线)。为了得到有效的指数-20,ed将等于107(即,127减20),其在二进制中为“01101011”。然后可以从上面强调的分数部分的较高的19位提取最终的正规化的x。因为ed是非零的,因此由门408生成的msb等于“1”。结果,xnormalized将等于“100000000000000000000000”。因为msb为高,因此在多路复用器412的输出端处的计数将等于[(ey-1)-ed],其为[(127-1)-107]=19,这得到了先行零的正确数量。

考虑另一边缘情况,其中输入位向量x具有20位并且等于“00000000000000000000”(即,x是全零)。电路404然后可以生成具有等于“0”的符号位、指数“01111111”和尾数“1.00000000000000000000000”的对应的y。在该示例中,尾数将被填充有三个零(见上面被斜体的零),因为单精度格式具有总计23个尾数位。

另一方面,常数c可以具有等于“0”的符号位、指数“01111111”和尾数“1.00000000000000000000000”。由dsp减法块406计算的所得到的差d因此可以是等于零或以定点格式的“0.00000000000000000000000”,其可以在浮点中被编码成这样的数:具有全零“00000000”指数以及含有全零“00000000000000000000000”的分数。然后可以从分数部分的较高的19位提取最终的正规化的x,其在该场景中为全零。因为ed是全零,因此由门408生成的msb等于“0”。结果,xnormalized将等于“000000000000000000000000”。因为msb为低,因此在多路复用器412的输出端处的计数将等于xwidth,其在该特定示例中为20。

图5是用于操作正规化电路系统400的例证性步骤的流程图。在步骤500处,电路系统400可以接收输入位向量x。在步骤502处,电路402和电路404可以用来创建浮点值y,其中尾数my等于右侧填充有零直至填满了23个尾数位为止的1.x,指数ey等于12710,并且符号位sy等于零。

在步骤504处,具有尾数mc为1.0(例如,具有23个分数零位的尾数)、等于ey的指数ec和等于零的符号位sc的单精度常数值c提供给dsp块406。由于c是常数值,因此只要ey和sy保持是常数,c就可以是硬接线的预定值。

在步骤506处,dsp浮点减法器406然后可以通过y减去c来计算差d。差d可以具有指数ed、具有分数部fd的尾数md(其中md=1.fd)和符号位sd。

在步骤508处,约简电路408可以通过对ed的位进行或运算来计算最终结果的msb。如果ed中的位中的任何为高,则xnormalized的所得到的msb为高,并且仅在ed中的所有位都是零的情况下xnormalized的所得到的msb才为低(即,当x是全零时,msb等于“0”)。

在步骤510处,可以从分数部fd提取xnormalized的其余的位。例如,来自fd的最高的(xwidth-1)个位可以表示xnormalized的其余的位。如果x具有13位,那么将使用fd的仅12个最高有效位。如果x具有18位,那么将仅使用fd的前17位。

在步骤512处,可以通过使用电路410计算[(ey-1)-ed]来获得与xnormalized相关联的计数值。然而,如果x是全零,则门408的输出端处的最终msb将为低,这将替代地将计数配置成等于xwidth。

结合图4和图5描述的实施例涉及到仅使用一个dsp块来实行单精度减法运算,并且因此将支持对具有多达23位的输入位向量x进行正规化。本文中描述的技术也可以扩展至支持具有多于23位的输入位向量。

图6是使用两个专门处理块来支持对具有xwidth>23的向量x进行正规化的例证性正规化电路系统600的图示。如图6中所示,正规化电路系统600可以包括第一尾数生成电路602-1、第二尾数生成电路602-1、第一浮点数生成电路604-1、第二浮点数生成电路604-2、第一dsp块606、第二dsp块607、约简或电路608、常数减法电路610以及多路复用电路612。

正规化电路系统600具有接收以定点格式的位向量x(具有多于23位)的输入端。电路602-1和604-1可以被配置成创建第一对应的单精度浮点值y,其具有:(例如,使用尾数提取/生成电路602-1实现的)尾数my,其具有额外隐含的先行“1”以及等于x的前23位的分数部分;指数ey,其等于“01111111”(或127,其对127偏移求负(negate));以及符号位sy,其等于零。

此外,电路602-2和604-2可以被配置成创建第一对应的单精度浮点值z,其具有:(例如,使用尾数生成电路602-2实现的)尾数mz,其具有额外隐含的先行“1”和分数部分,所述分数部分等于可选地右侧填充有零的x的其余的位——假设x也小于或等于46位;指数ez;以及符号位sz,其等于零。由于z表示x中的23个位置之后的位值,因此ez将具有等于(127-23)=104的指数,其等价于以二进制格式的“01101000”。

dsp块606可以被配置为浮点减法电路,其接收y和浮点常数c'=(1+2^-23),并且其生成对应的差值w(例如,w=y-c')。常数c'中的“1”项用来抵消y中隐含的先行一,而常数c'中的“2^-23”项用来抵消z中隐含的先行一。

另一方面,dsp块607可以被配置为浮点加法电路,其将w和z加到一起来生成对应的和输出d(例如,d=w+z)。输出d可以具有尾数,该尾数具有分数部分fd、指数ed和符号位sd。符号位sd可以是未使用的。

可以从差值d的尾数和指数来获得正规化的x。约简或门608可以对指数ed的所有的位一起进行或运算来输出针对正规化输出xnormalized的最高有效位(msb)。msb表现得像是隐含的先行一,并且只要ed不等于零,msb就将等于“1”。假设x具有等于xwidth的宽度,接下来可以附上从fd顶部开始的(xwidth-1)个位以形成最终输出xnormalized,其中假设xwidth大于23。针对双dsp实现方式,输出宽度可以至多为分数位宽度加一。针对单精度浮点数,输出宽度可以至多为(23+1)。因此,2个dsp的正规化电路系统可以接收46位,但是仅可以返回24个有用的位。

可以使用电路610和电路612来生成计数值。电路610可以用来计算(ey-1)与ed之间的差。多路复用器412具有:第一(0)输入端,其接收宽度xwidth;第二(1)输入端,其接收来自电路610的结果;控制输入端,其接收来自电路608的msb;以及输出端,在其上提供计数值。以这种方式进行配置,只要msb等于“1”,计数值就将等于电路610的输出。然而,如果msb是“0”,则计数值将等于xwidth。

经由示例来最佳地例证正规化电路系统600的操作。考虑一场景,其中输入位向量x具有41位并且等于“00000000001111010101010101010101010101001”。电路602-1和电路604-1可以提取前23位并且插入先行一来生成第一浮点值y,其具有等于12710的ey和等于零的sy。电路602-2和电路604-2可以提取后面其余的位(并且可选地右侧填充有零以实现总计23位),并且也插入先行一来生成第二浮点值z,其具有等于10410的ez和等于零的sz。插入在z的尾数中的先行一具有与y的尾数的最低有效位(lsb)相同的权重。

如同图4和图5的先前的实施例,可以通过计算所导出的浮点值和它们的相关联的先行一之间的差来获得最终d值。因此,可能期望计算:

(1)

通过将常数分组到一起,该表达式然后变成:

(2)

可以使用dsp浮点减法电路606来实行等式2中的减法运算,而可以使用dsp浮点减法运算电路607来实行加法运算(见图6)。可以循环地重复该过程。可以如上所述地从fd和ed(例如,使用电路608、610和612)来获得最终输出xnormalized。

图7是用于操作正规化电路系统600的例证性步骤的流程图。在步骤700处,电路系统600可以接收要进行正规化的输入位向量x。

在步骤702处,电路602-1和604-1可以用来创建浮点值y,其中尾数my等于1.(x的最高23位),指数ey等于12710,并且符号位sy等于零。

在步骤704处,电路602-2和604-2可以用来创建浮点值z,其中尾数mz等于被右侧填充有零直到占据了23个尾数位为止的1.(x的其余的位),指数ez等于10410,并且符号位sz等于零。

在步骤706处,dsp浮点减法器606然后可以通过y减去[1+2^(-23)]来计算差w。在步骤708处,dsp浮点加法器607然后可以通过w加上z来计算和d。和d可以具有指数ed、具有分数部fd的尾数md(其中md=1.fd)以及符号位sd。

在步骤710处,约简电路608可以通过对ed的位进行或运算来计算最终结果的msb。如果ed中的位中的任何为高,则xnormalized的所得到的msb为高,并且仅在ed中的所有位都是零的情况下xnormalized的所得到的msb才为低(即,当x是全零时,msb等于“0”)。

在步骤712处,可以从分数部fd提取xnormalized的其余的位。

在步骤714处,可以通过使用电路610计算[(ey-1)-ed]来获得与xnormalized相关联的计数值。然而,如果x是全零,则门608的输出端处的最终msb将为低,这将替代地将计数配置成等于xwidth。

这些步骤仅是例证性的并且不意图限制本实施例的范围。可以修改或省略现有步骤;可以并行地实行所述步骤中的一些;可以添加附加的步骤;并且可以颠倒或更改某些步骤的顺序。如果期望的话,上文描述的方法可以扩展至使用两个或更多个浮点dsp块来对具有多于46位的位向量进行正规化等等。此外,如果用在关于单精度功能的浮点上下文中,则可以嵌入舍入运算。如果期望的话,还可以通过适当地调节ey来嵌入指数更新功能(例如,y和/或z的指数可以取决于期望的基础指数而具有其它适合的值)。

到目前为止关于集成电路描述了实施例。本文中描述的方法和装置可以被结合到任何适合的电路中。例如,它们可以被结合到众多类型的器件中,诸如可编程逻辑器件、专用标准产品(assp)以及专用集成电路(asic)。可编程逻辑器件的示例包括可编程阵列逻辑(pal)、可编程逻辑阵列(pla)、现场可编程逻辑阵列(fpla)、电可编程逻辑器件(epld)、电可擦可编程逻辑器件(eepld)、逻辑单元阵列(lca)、复杂可编程逻辑器件(cpld)以及现场可编程门阵列(fpga),仅举几例。

在本文中的一个或多个实施例中描述的可编程逻辑器件可以是数据处理系统的部分,所述数据处理系统包括以下组件中的一个或多个:处理器、存储器、io电路系统以及外围设备。数据处理可以用在各种广泛的应用中,诸如计算机联网、数据联网、仪表化、视频处理、数字信号处理或其中期望使用可编程或可再编程逻辑的优势的任何适合的其它应用。可编程逻辑器件可以用来实行各种不同的逻辑功能。例如,可编程逻辑器件可以被配置为与系统处理器协同工作的处理器或控制器。可编程逻辑器件还可以用作仲裁器,其用于对到数据处理系统中的共享资源的访问进行仲裁。在又另一示例中,可编程逻辑器件可以被配置为处理器与系统中其它组件中的一个之间的接口。在一个实施例中,可编程逻辑器件可以是阿尔特拉/英特尔公司所拥有的器件家族中的一个。

前述内容仅是对本发明原理的例证,并且可以由本领域技术人员做出各种修改。可以单独地或以任何组合来实现前述实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1