前导0预测(Leading-Zero Anticipator,LZA)

浮点加法在完成之后会进行尾数规格化移位,而在进行尾数加法时,可以使用前导0预测(Leading-Zero Anticipator,LZA)同时计算移位,前导0预测只发生在一个正数加上一个负数的情况下,电路图如图1所示。
前导0预测(Leading-Zero Anticipator,LZA)

图1 传统LZD算法和LZA算法

1. 基础算法

算法的目标是计算出加法结果序列左边连续0的数量,下文中对序列的位置的索引值是从高位开始到低位的,假设输入尾数为A=a0a1an1A = a_0 a_1 \cdots a_{n-1}B=b0b1bn1B = b_0 b_1 \cdots b_{n-1},首先需要对AABB进行有效位减法:
R=AB,R=r0r1rn1,ri{n,z,p} R = A - B, \quad R = r_0 r_1 \cdots r_{n-1}, \quad r_i \in \{ n, z, p \}
其中nnzzpp代表负(negative)、零(zero)、正(positive),下面分情况讨论。首先考虑33种情况:A>BA > BA=BA = BA<BA < B

1.1 A>BA > B的情况

这种情况下序列RR中的第一个不为zz的值一定是ppRR的序列形式为z(k)p(x)z^{(k)} p (x),接下来也要分33种情况来讨论:

  1. z(k)pp(x)z^{(k)} pp (x)的情况 这种情况下即使xx为负,也无法影响序列中k+1k+1位的pp,因此前导共有kk00
  2. z(k)pz(x)z^{(k)} pz (x)的情况 此时若xx为负需要向前借位,则借位之后第一个pp出现在k+2k+2的位置,若xx不需要借位,则第一个pp仍在k+1k+1位置,但是检测RR的码型无法确定第一个pp的位置,因此先假设第一个ppk+1k+1的位置,之后进行纠错;
  3. z(k)pn(j)(z or p)(x)z^{(k)} p n^{(j)} (z \ or \ p)(x)的情况 其中nn的长度为jj,将前面k+j+1k+j+1位借位化简,则得到zzzk+jp(z or p)(x)\underbrace{z \cdots z \cdots z}_{k+j} p ( z \ or \ p) (x),那么序列中首个pp出现在k+j+1k+j+1或者k+j+2k+j+2的位置,原因与情况22相同;

A>BA > B时总结出的情况如下表所示:

RR的序列码 首个pp位置 判断子序列
z(k)pp(x)z^{(k)} pp (x) k+1 pppp
z(k)pz(x)z^{(k)} pz (x)xx不需要借位) k+1 pzpz
z(k)pz(j)(x)z^{(k)} pz^{(j)} (x)xx需要借位) k+2 pzpz(需要纠错)
z(k)pn(j)p(x)z^{(k)} p n^{(j)} p(x) k+j+1 npnp
z(k)pn(j)z(x)z^{(k)} p n^{(j)}z(x)xx不需要借位) k+j+1 nznz
z(k)pn(j)z(x)z^{(k)} p n^{(j)}z(x)xx需要借位) k+j+2 nznz(需要纠错)

1.2 A<BA < B的情况

这种情况下序列RR中的第一个不为zz的值一定是nnRR的序列形式为z(k)n(x)z^{(k)} n (x),为了方便讨论,以下会对RR的相反数Rˉ\bar{R}进行分析,也就是对z(k)p(y), y=xz^{(k)} p (y), \ y = -x进行分析:

  1. z(k)nn(x)z^{(k)} nn (x)的情况 与上节分析相同,Rˉ=z(k)pp(x)\bar{R}=z^{(k)}pp(x),首个pp出现在k+1k+1的位置,由子序列nnnnk+1k+1位和k+2k+2位)决定;
  2. z(k)nz(x)z^{(k)} nz (x)的情况 对应Rˉ\bar{R}z(k)pz(y)z^{(k)} pz (y),若子序列(y)(y)不需要借位,则Rˉ\bar{R}的第一个pp出现在k+1k+1位,若序列(y)(y)需要向前借位,那么借位由k+1k+1位产生,Rˉ\bar{R}所表示的加法结果序列的第一个ppk+2k+2位。同理若子序列(x)(x)为负需要向前借位(或者为zz),RR的第一个nn出现在k+1k+1位,若子序列(x)(x)为正,则第一个pp出现在k+2k+2位。这种情况下会先假设ppk+1k+1位之后进行纠错;
  3. z(k)np(j)(z or n)(x)z^{(k)} np^{(j)} (z \ or \ n) (x)的情况 这种情况化简之后得到R=zzzk+jn(z or n)(x)R=\underbrace{z \cdots z \cdots z}_{k+j} n ( z \ or \ n) (x),那么RR中的首个nn出现在k+j+1k+j+1k+j+2k+j+2位,还是假设nn出现在k+j+1k+j+1,随后进行纠错。

A<BA<B的情况如下表所示:

RR的序列码 首个nn位置 判断子序列
z(k)nn(x)z^{(k)} nn (x) k+1 nnnn
z(k)nz(x)z^{(k)} nz (x)xx不需要借位) k+1 nznz
z(k)nz(j)(x)z^{(k)} n z^{(j)} (x)xx需要借位) k+2 nznz(需要纠错)
z(k)np(j)n(x)z^{(k)} n p^{(j)} n (x) k+j+1 npnp
z(k)np(j)z(x)z^{(k)} n p^{(j)}z(x)xx不需要借位) k+j+1 nznz
z(k)np(j)z(x)z^{(k)} n p^{(j)} z (x)xx需要借位) k+j+1 nznz(需要纠错)

3. A=BA = B的情况

不需要编码移位。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-16
  • 2022-12-23
  • 2021-12-14
  • 2021-07-12
  • 2021-05-24
  • 2021-12-09
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-28
  • 2022-01-05
  • 2022-12-23
  • 2022-12-23
  • 2021-10-28
相关资源
相似解决方案