1 / 47

处理器设计

处理器设计. — 浮点部件 王海霞 周旭 2001.6.8. 主要内容 (1). IEEE 754 标准 浮点数的表示 特殊数 舍入模式 浮点操作 例外 MIPS R4000 控制 / 状态寄存器 Godson 浮点 ALU 部件介绍. 主要内容 (2). 浮点加减 基本算法 Two-Path 算法 LOP(leading one prediction) 提前舍入算法 浮点 ALU 其他指令的实现 比较指令 定点和浮点之间的转换指令 双精度浮点和单精度浮点的转换指令 其他

rinah-roth
Download Presentation

处理器设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 处理器设计 —浮点部件 王海霞 周旭 2001.6.8

  2. 主要内容 (1) • IEEE 754标准 浮点数的表示 特殊数 舍入模式 浮点操作 例外 • MIPS R4000控制/状态寄存器 • Godson浮点ALU部件介绍

  3. 主要内容 (2) • 浮点加减 • 基本算法 • Two-Path算法 • LOP(leading one prediction) • 提前舍入算法 • 浮点ALU其他指令的实现 • 比较指令 • 定点和浮点之间的转换指令 • 双精度浮点和单精度浮点的转换指令 • 其他 • 浮点ALU各级流水寄存器的控制

  4. 浮点格式 • IEEE 754标准支持四种浮点格式: 单精度, 单精度扩展, 双精度和双精度扩展。其中单精度和双精度属于基本格式, 单精度扩展和双精度扩展属于扩展格式。 • 扩展格式 扩展格式是依赖于具体实现的。IEEE 754 标准允许实现上存在一部分冗余编码,用于特殊目的,但要保证对用户透明。在我们的系统中,目前没有提供扩展格式。所以后面只介绍基本格式。

  5. 浮点数的基本格式 • 浮点数由以下三个字段组成: 一位符号位 s;移码表示的指数 e = E + bias; 尾数 f = .b1b2 …bp-1。

  6. 指数移码值与实际值的对应关系 以单精度指数为例,单精度的指数位数是8位,可表示的移码数是0 ~ 255, IEEE 754 标准规定: • 0用于表示±0和denormalized number; • 255用于表示±∞和 NaN(Not a number), • 剩余的254个数1~254 表示规格化浮点数的指数, bias为127,所以对应的指数实际值(E):-126 ~127,即Emax =127, Emin= -126。

  7. 单精度浮点数值 单精度格式表示的浮点数值v: • 当 e = 255 并且 f ≠ 0 时,不管s的值,v是NaN • 当 e = 255 并且 f = 0 时,v = (-1)s ∞ • 当 0 < e < 255 时,v = (-1)s2e-127(1.f) • 当 e = 0 并且 f ≠ 0 时, v = (-1)s2-126(0.f) (denormalized numbers) • 当 e = 0 并且 f = 0 时, v = (-1)s0 (zero)

  8. 双精度浮点数值 双精度格式表示的浮点数值v: • 当 e = 2047 并且 f ≠ 0 时,不管s的值,v是NaN • 当 e = 2047 并且 f = 0 时,v = (-1)s ∞ • 当 0 < e < 2047 时,v = (-1)s2e-1023(1.f) • 当 e = 0 并且 f ≠ 0 时, v = (-1)s2-1022(0.f) (denormalized numbers) • 当 e = 0 并且 f = 0 时, v = (-1)s0 (zero)

  9. NaN • NaN分为两种:signaling NaN 和 quiet NaN. • Signaling NaN(报警非数): 当变量没有初始化或者其他需要报警的情况下,出现SNaN。 一旦操作数是SNaN, 那么一定会产生invalid例外。如果没有trap并且需要一个浮点结果,那么结果为一个QNaN. • Quiet NaN(静态非数):提供数据或结果无效或不可用等判别信息。因此QNaN在经过运算部件或者格式转换时应该保持这些判别信息,并且不产生invalid例外。

  10. Denormalized mumber • Denormalized number判别条件:e = 0 并且 f ≠ 0 • 单精度Denormalized number对应的实际值v: v = (-1)s2-126(0.f) • 无符号单精度Denormalized number 的取值范围: 2-149 ≤ v < 2-126 2-126:最小的一个规格化数, e = 1,f = 23’b0; 2-149:最小的可以表示的非规格化数,e = 0, f = {22’b0,1’b1};

  11. 舍入模式

  12. 浮点操作 • 算术运算: 加,减,乘,除,求平方根,求余数。 • 浮点格式转换 :单精度和双精度 • 浮点和定点格式之间的转换 • 浮点舍入到定点 • 二进制和十进制之间的转换 • 比较指令

  13. Exception(1) • 无效(Invalid): (1)、任何对 SNaN的操作 (2)、加减法中,两个无穷大的数实际相减 +∞)- (+∞), (+∞) + ( - ∞) (3)、乘法中,0×∞ (4)、除法中,0/0或者∞/∞ (5)、求余数中,x REM y, 其中y是0或∞ (6)、求平方根中,操作数小于等于0 (7)、格式转换中,出现操作数是NaN, 无穷大,或者发 生上溢 (8)、比较中,如果操作数是无序的(NaN),而比较符 中没有是否无序项。

  14. Exception(2) • 零做除数(Division by Zero) • 上溢(Overflow) :指的是指数上溢 • 下溢(Underflow) : 指的是指数上溢 • 不精确(Inexact ):结果需要舍入或者溢出

  15. 缺省的FPU例外处理(1)

  16. 缺省的FPU例外处理(2)

  17. R4000中Control/Status Register(1) FS: FS为1时表示denormalized结果变为0。 C: 比较指令的结果,转移指令的依据。 Cause:上一条浮点操作 产生的例外(load, store, 和move 指令除外)。R4000比IEEE 754 标准增加了 E(unimplemented)位,表示有效的但目前没有实 现的操作。 Enable:浮点操作产生的例外只有在相应的Enable置位的 情况下才会被触发,否则,结果取IEEE 754 标 准定义的缺省值。只有E例外属于不可屏蔽的例 外,没有相应的Enable位。

  18. R4000中Control/Status Register(2) Flag: 进行例外处理时,浮点例外处理程序对flag置位, 处理完毕,对flags复位。 RM: 舍入模式。

  19. GodSon浮点例外

  20. 浮点加减的基本算法 • 1.00011 - 1.10001*2-3 (1)、计算指数差: 0 - (-3) = 3 (2)、对阶: 1.10001右移3位,得到0.00110001 (3)、尾数运算(补码形式): 1.00011 + 1.11001 111 0.11100 111 (4)、如果尾数运算结果为负数,需要将补码转化为原码。 (5)、Leading zero detector: 0.11100 111中有1个Leading zero (6)、规格化:将尾数和0.11100 111左移一位,指数加1。 (7)、舍入 (8)、重新规格化

  21. Two-Path算法 • 算法改进的基础在于对各种情况的讨论:

  22. Two-Path算法 • 基于上面的分析,我们可以将整个路径一分为二,一条是CLOSE路径,另一条是FAR路径。CLOSE路径计算指数差小于等于1的减法和两个操作数都是denormalized的加法。FAR路径执行其他情况下的运算。 • 虽然操作数是denormalized情况下,产生unimplemented例外,但是我们仍然要求硬件给出运算结果,便于软件处理,所以在浮点ALU的设计中支持denormalized operand。

  23. Two-Path算法优点 • CLOSE路径上对阶时需要一位移位器(指数差≤1),规格化时需要全长(full-length)移位器(尾数和出现0.0x…x情况,左移位数超过1)。 • FAR Path对阶时需要full-length移位器(指数差>1),规格化时只需要一位移位器(最多左移或右移1位)。 • 因此,Two-Path算法相当于将基本算法的一个 full-length移位器转化成了一个一位移位器。由于一位移位器的逻辑比较简单,延迟很小,所以与基本算法相比,延迟降低。

  24. 其他改进措施(1) • 通过比较操作数大小,使得符号位与运算脱离,运算过程中使用无符号数。再通过交换操作数,保证尾数和运算结果始终是正数,省略了结果求补的一步。 • 采用Leading-One Prediction(LOP)(或称Leading Zero Detector)方法将数1过程与尾数加并行执行,当求和运算结束时,需要的移位数目也已经计算出来,缩小了latency。 • 先做Rounding,后做Normalization,不需要重新规格化。并且用compound adder代替原来的加法器,尾数求和的同时计算可能产生的舍入结果,缩短了舍入延迟。

  25. 其他改进措施(2) • 对于Close Path, 不必等判断条件计算出来再开始运算,而是和求指数差同时开始,仅通过分析两个操作数指数的低两位来估计操作数的大小,交换操作数。如果计算出来的结果不选择CLOSE路径, 那么再终止CLOSE;否则继续。 • 采用Pipelining技术,增加浮点部件的吞吐率。

  26. 浮点加减部件物理结构图 PENC:Priority encode, 对LOP产生的结果编码,得到移位数目。

  27. LOP算法 • LOP(leading one prediction): 对结果规格化前需要先得到leading one position,即规格化的移位数目。一般来讲,该数一过程是在尾数和得到以后才开始的。现在将LOP提前,从操作数着手判断最后结果的leading one position. • 一般的LOP算法并不精确定位leading one position, 经常存在一位误差,最后再重新进行1位移位调整。我们采用了1997年Javier D.Bruguera and Tomas Lang提出的同时计算leading-one position和position correction的算法,减小了延迟,但该系统要求尾数和结果一定是正数。 • 因为两个denormalized数相加的情况不需要规格化,所以LOP算法只需考虑两个指数差小于等于1的操作数做减法的情况。

  28. Leading-one Position Analysis • LOP算法也是基于对各种输入位模式的分析。 • 位模式Bit Pattern: 假定被减数和减数的第i位分别为ai, bi ,如果ai=1,bi=0,那么用1表示该位;如果ai=0 , bi=1 ,那么用 表示;如果ai = bi,那么用0表示。对各位的分析就构成了Bit Pattern.

  29. Leading-One Position • 实质:将确定leading one 位置的问题转化为确定各种可能的子串模式的位置问题。

  30. Leading one position encoding tree

  31. Concurrent Position Correction • 首先用ni定义修正子串模式0 • 其次,通过detection tree判定Bit Pattern 是否具有 zjpzkn…形式,其中j ≥0, k>0。

  32. Concurrent Position Correction

  33. Position Correction Detect

  34. Detection tree • 首先定义几个状态:

  35. Detection tree • 然后,定义相邻两个状态组合后的值,并推导出新值的逻辑表达式。 Y = Yl + ZlYr + PlNr Z = ZlZr P = ZlPr + PlZr N = ZlNr + Nl

  36. Detection Tree

  37. 分阶段移位器

  38. 舍入逻辑 • 如果对原码表示的浮点数X=x0.x1x2…xsxs+1xs+2… xn舍入,保留小数点后s位,我们定义L(least significance bit)= xs,g(ground) = xs+1,s(sticky) = xs+2 +xs+3+… +xn。舍入逻辑如下: • Round to nearest even: up = g(L+s) • Round to zero: up = 0 • Round to positive infinity: up = !sign (正数) • Round to negative infinity: up = sign(负数)

  39. 对阶移位保留位数 • 对阶移出位保留3位就可以支持IEEE 754标准给出的四种舍入模式。 • 加法 如果两个加数都是denormalized,那么不用对阶,不存在移出位保留问题。否则,得到的尾数和只有两种形式:1.xx…x和10.xx…x,根据舍入逻辑,预留两位(g:移出位中最高位,s:除最高位以外的其他移出位是否含有1)。 • 减法 如果两个操作数的指数差大于1,减法得到的尾数和只有两种形式:1.xx…x和0.1xx…x,对于0.1xx…x形式,规格化需要移入一位,所以,预留三位(两位存放移出位最高两位,一位保存其他移出位是否含有1 )就可以满足条件。 否则,指数差小于等于1,最多移出一位,预留一位就可以。

  40. 提前舍入结构图

  41. 提前舍入逻辑 符号说明: cout; 尾数和的向前进位。 L-1, L:尾数和的最低两位。 g(ground), r(round), s(sticky):预留的三位。 sp1: 选择结果X+Y+1 • Round to nearest even • 加法:

  42. 提前舍入逻辑 • 减法

  43. 提前舍入逻辑

  44. 提前舍入逻辑

  45. 提前舍入逻辑

  46. FAR 路径求和电路的实现 • FAR路径上除了计算X+Y, X+Y+1以外, 还要计算X+Y+2. 采用Half-adder加Compound Adder的方法, 可以避免增加一个加法器. • 方法: 如果X+Y的最低位(半加器的低位输出)是0, 那么只计算X+Y+1和X+Y+2即可, 因为X+Y可以通过将X+Y+1的低位置0实现; 如果X+Y的最低位(半加器的低位输出)是1, 那么只计算X+Y和X+Y+1即可, 因为X+Y+2可以通过将X+Y+1的低位置1实现.

More Related