@@ -146,7 +146,7 @@ Table: 优化后的双通路浮点加法算法
146146
147147本节详细介绍本文改进的双通路浮点加法算法,等效加法或 $d>1$ 的等效减法的通路称为 $far$ 路径,$d≤1$ 且等效减法的通路称为 $close$ 路径。含有无穷或 $NaN$ 操作数的情况单独判断,不属于 $far$ 路径或 $close$ 路径。
148148
149- ##### $ far$ 路径
149+ ##### far 路径
150150
151151$far$ 路径算法如图所示,其中主要步骤如下:
152152
@@ -162,7 +162,7 @@ $far$ 路径算法如图所示,其中主要步骤如下:
162162
163163第五步,产生最终结果,根据有效数字 $A+B$ 的结果在 $[ 1$-$2)$ 之间(情况一)还是 $[ 2$-$4)$之间(情况二),根据之前右移中计算的两套 $grs$ 和舍入模式,分别确定情况一选择两个有效数字加法器的条件,情况二选择两个有效数字加法器的条件,最后用四选一的独热码选择出尾数结果。指数结果则是 $EA$(情况一且尾数舍入后 $<1$)或 $EA+1$ (情况二或情况一舍入后 $=2$),注意舍入后指数是否 $overflow$,最终结果由 $overflow$ 选出 $overflow$ 结果和正常计算结果。异常标志位 $far$ 路径下只会产生上溢和不精确。
164164
165- ##### $ close$ 路径
165+ ##### close 路径
166166
167167$close$ 路径下一定是等效减法并且 $d≤1$ 的情况,具体细分为 $d=0$ 或 $d=1$,算法如图所示,具体步骤如下:
168168
@@ -337,7 +337,7 @@ Table: 无符号整数乘法三种算法比较
337337| 方式二 | $320.41$ | $2426.34$ | 是 |
338338| 方式三 | $302.19$ | $2042.46$ | 是 |
339339
340- ##### $ Booth$ 编码
340+ ##### Booth 编码
341341
342342$Booth$ 编码目的是减少乘法器部分积的个数,以二进制无符号数整数乘法 $C=A* B$ 为例推导 $Booth$ 编码算法。
343343
@@ -408,7 +408,7 @@ Table: $Booth$ 编码与 $PP$ 真值表
408408
409409这样就可以保证所有部分积加起来之后进位是正确的,到此 $Booth$ 编码介绍结束,注意是以 $11$ 比特乘法为例介绍的,$f16$ 和 $f64$ 有效数字位数为奇数,但是 $f32$ 有效数字位数为偶数,最高位补零需要稍作区别,其他过程类似,不再赘述。
410410
411- ##### $ CSA$ 压缩
411+ ##### CSA 压缩
412412
413413$Carry$-$Save$-$Adder$ 保留进位加法器,作用是将 $n$ 个加数通过某些逻辑压缩成 $m$ 个加数($m<n$),典型的是 $3\_ 2$ 压缩和 $4\_ 2$ 压缩。
414414
@@ -525,7 +525,7 @@ Table: $CSA3\_2、CSA4\_2$ 综合结果
525525
526526可见 $CSA4\_ 2$ 虽说理论上是三级异或门的延迟,$CSA3\_ 2$ 理论上是两级异或门的延迟,但是真正物理实现之后,$CSA4\_ 2$ 只是比两级 $CSA3\_ 2$ 快一点点,所以尽量用 $CSA3\_ 2$,除非一级 $CSA4\_ 2$ 可以替代两级 $CSA3\_ 2$ 的情况,比如 $4->2$ 压缩,$8->2$ 压缩。
527527
528- ##### $ CSAn\_ 2$
528+ ##### CSAn\_ 2
529529
530530两个无符号整数乘法使用 $Booth$ 编码产生的部分积数量为 $\frac{n+1}{2}$ 向上取整,因为部分积压缩之后要和位宽更大的数相加,为保证进位正确,部分积位宽拓展一比特,各数据格式部分积数量及位宽见表。
531531
@@ -623,7 +623,7 @@ $fp\_c$ 有效数字右移之后的结果 $rshift\_result$ 要和 $CSAn\_2$ 压
623623
624624还需要考虑减法时对右移 $grs$ 取反加一,最终有效数字的加法结果 $adder$(含右移 $grs$)构成是:$adder\_ high\_ bits$、$adder\_ low\_ bits$、右移 $grs$(减法时取反加一)。因为 $adder$ 可能是负数,拓展了 $1bit$ 仅用于 $adder$ 的符号判断, 之后不需要使用,$adder\_ inv$ 在 $adder$ 是负数时进行取反并且去掉了该符号判断位。
625625
626- ##### $ LZD$ 、左移、舍入与未舍入尾数结果
626+ ##### LZD、左移、舍入与未舍入尾数结果
627627
628628在计算完 $adder\_ inv$ 后,需要对 $adder\_ inv$ 进行前导零检测,以确定需要左移的位数,进而对尾数结果规格化和舍入。
629629
@@ -1104,7 +1104,7 @@ Table: $VFDIV$ 接口和含义
11041104| $fpdiv\_ res\_ o$ | $output$ | $64$ | 计算结果 |
11051105| $fflags\_ o$ | $output$ | $20$ | 标志位 |
11061106
1107- ### 向量格式转换模块 $ VCVT$
1107+ ### 向量格式转换模块 VCVT
11081108
11091109$VCVT$ 模块是一个三级流水的向量浮点的格式转换模块。其例化 $2$ 个具有 $64bits$ 数据处理的子模块 $VectorCvt$,每个 $VectorCvt$ 分别包含一个 $cvt64$,一个 $cvt32$,两个 $cvt16$ 模块。其中 $cvt64$ 支持 $64,32,16,8bits$ 浮点/整数格式的处理,$cvt32$ 支持 $32,16,8bits$ 浮点/整数格式的处理,$cvt16$ 支持 $16,8bits$ 浮点/整数格式的处理。即 $vectorCvt$ 能同时处理 $1$ 个 $64bits$(或者 $2$ 个 $32bits$,或者 $4$ 个 16bits$,或者 $4$ 个 $8bits$ )浮点/整数格式输入数据的转换。
11101110
@@ -1126,7 +1126,7 @@ $f16/f32/f64 -> 65bit(f64 \#\# false.B)$
11261126
11271127在此基础上,$VFCVT64$ 分为 $5$ 类:$int -> fp,fp -> fp widen,fp -> fp narrow,estimate7(rsqrt7$ & $rec7),fp -> int$。
11281128
1129- #### $ FuopType$ 译码逻辑
1129+ #### FuopType 译码逻辑
11301130
11311131对于 $cvt$ 指令来说:其 $fuopType$ 共 $9$ 位,每一位所表示的信息如下:
11321132
0 commit comments