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

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

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

图1 传统LZD算法和LZA算法

1. 基础算法

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

1.1 A > B A > B A>B的情况

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

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

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

R R R的序列码首个 p p p位置判断子序列
z ( k ) p p ( x ) z^{(k)} pp (x) z(k)pp(x)k+1 p p pp pp
z ( k ) p z ( x ) z^{(k)} pz (x) z(k)pz(x) x x x不需要借位)k+1 p z pz pz
z ( k ) p z ( j ) ( x ) z^{(k)} pz^{(j)} (x) z(k)pz(j)(x) x x x需要借位)k+2 p z pz pz(需要纠错)
z ( k ) p n ( j ) p ( x ) z^{(k)} p n^{(j)} p(x) z(k)pn(j)p(x)k+j+1 n p np np
z ( k ) p n ( j ) z ( x ) z^{(k)} p n^{(j)}z(x) z(k)pn(j)z(x) x x x不需要借位)k+j+1 n z nz nz
z ( k ) p n ( j ) z ( x ) z^{(k)} p n^{(j)}z(x) z(k)pn(j)z(x) x x x需要借位)k+j+2 n z nz nz(需要纠错)
1.2 A < B A < B A<B的情况

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

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

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

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

3. A = B A = B A=B的情况

不需要编码移位。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值