Tininess $B$N%]%j%7!<$r(B After Rounding $B$+$i(B Before Rounding $B$KJQ99$9$k!#(B
$B$=$7$F!"%P%0
$BB4O@D>A0$K$d$C$?$@$1$"$C$F!"JQ99$NI,MWL5$7!#(B
$B$3$3$GFC
$B1i;; | $B7k2L(B | $BNc30(B |
---|---|---|
SNaN $B!^(B SNaN SNaN $B!^(B QNaN $B$H(B QNaN $B!^(B SNaN SNaN $B!^(B 0 $B$H(B 0 $B!^(B SNaN SNaN $B!^(B Inf $B$H(B Inf $B!^(B SNaN SNaN $B!^(B W $B$H(B W $B!^(B SNaN (+Inf) + (-Inf) $B$H(B (+Inf) - (+Inf) (-Inf) + (+Inf) $B$H(B (-Inf) - (-Inf) | QNaN | V |
QNaN $B!^(B QNaN QNaN $B!^(B 0 $B$H(B 0 $B!^(B QNaN QNaN $B!^(B Inf $B$H(B Inf $B!^(B QNaN QNaN $B!^(B W $B$H(B W $B!^(B QNaN | QNaN | - |
(+Inf) + (+Inf) $B$H(B (+Inf) - (-Inf) (+Inf) + W $B$H(B (+Inf) - W W + (+Inf) $B$H(B W - (-Inf) (+Inf) + 0 $B$H(B (+Inf) - 0 0 + (+Inf) $B$H(B 0 - (-Inf) | +Inf | - |
(-Inf) - (+Inf) $B$H(B (-Inf) + (-Inf) (-Inf) + W $B$H(B (-Inf) - W W - (+Inf) $B$H(B W + (-Inf) (-Inf) + 0 $B$H(B (-Inf) - 0 0 - (+Inf) $B$H(B 0 + (-Inf) | -Inf | - |
W + 0 $B$H(B W - 0 0 + W | ( + ) W | - |
0 - W | - W | - |
(+0) + (+0) $B$H(B (+0) - (-0) | +0 | - |
(+0) + (-0) $B$H(B (+0) - (+0) (-0) + (+0) $B$H(B (-0) - (-0) (+A) - (+A) $B$H(B (+A) + (-A) (-A) - (-A) $B$H(B (-A) + (+A) | RN,RZ,RP $B$J$i(B +0 RM $B$J$i(B -0 | - |
(-0) + (-0) $B$H(B (-0) - (+0) | -0 | - |
(+A) + (+A) $B$H(B (+A) - (-A) (-A) - (+A) $B$H(B (-A) + (-A) W + Z $B$H(B W - Z | ?(W,Inf,0) | ?(O,U,I) |
W , Z$B$O!"$I$A$i$bHs%<%m$NM-8B$J!"@dBPCM$N0[$J$k(B ( $BId9fIU$-$N(B ) $BCM$H$9(B $B$k!#$^$?!"Hs%<%m$NM-8B?tCM$N@dBPCM$r(B A $B$H=q$$$F$$$k!#$=$7$F!"(B 2 $B$D$NM-(B $B8B?t$N%*%Z%i%s%I$N@dBPCM$,Ey$7$$$H$-$O!"(BW $B$d(B Z $B$G$O$J$/(B A $B$rMQ$$$FH=CG(B $B$r9T$$!"(BA $B$rMQ$$$k$H$-$OI,$:Id9f$r$D$1$F=q$$$F$$$k!#$d$d$3$7$$$N$GCm0U!#(B
$B$J$*!"9g@.7k2L$O(B 1707 $B%2!<%H$N(B 10.099 ns
$BIbF0>.?tE@2C8:;;$N%H%C%W3,AX$O%b%8%e!<%k(B fp_adder $B$G$"$j!"$=$N9=@.%b%8%e!<(B $B%k$O0J2<$NDL$j!#(B
$B%b%8%e!<%kL>(B | $B%/%m%C%/(B | $B2<0L3,AX(B | $B%2!<%H?t(B | $B%/%j%F%#%+%k%Q%9(B[ns] |
---|---|---|---|---|
fadd_1 | $BMW(B | $BM-(B | 12,501 | 18.069 |
fadd_2 | $BMW(B | $BM-(B | 5,530 | 17.090 |
fadd_3 | $BITMW(B | $BM-(B | 2,785 | 7.705 |
$B$D$^$s$J$$!#3F%9%F!<%8Kh$K%b%8%e!<%k$r3d$C$F$"$k$@$1!#Bh(B3$B%9%F!<%8$@$1(B $B$O!"$3$N$^$^>e0L3,AX$N%^%k%A%W%l%/%5$rDL$7$F$+$i%i%C%A$r$+$1$k$?$a!"(B $BAH$_9g$o$;2sO)$K$J$C$F$$$k!#B>$O%i%C%A9~$_$N9g@.7k2L!#(B
$B%b%8%e!<%kL>(B | $B%/%m%C%/(B | $B2<0L3,AX(B | $B%2!<%H?t(B | $B%/%j%F%#%+%k%Q%9(B[ns] |
---|---|---|---|---|
fadd_split | $BITMW(B | $BL5(B | 198 | 1.866 |
fadd_exception | $BITMW(B | $BL5(B | 1587 | 10.573 |
fadd_far_1 | $BMW(B | $BM-(B | 3458($B13(B) | 14.461($B13(B) |
fadd_clo_1 | $BMW(B | $BM-(B | 3541 | 11.135 |
$B%b%8%e!<%kL>(B | $B%/%m%C%/(B | $B2<0L3,AX(B | $B%2!<%H?t(B | $B%/%j%F%#%+%k%Q%9(B[ns] |
---|---|---|---|---|
fadd_split | $BITMW(B | $BL5(B | 198 | 1.866 |
fadd_exception | $BITMW(B | $BL5(B | 1587 | 10.573 |
fadd_far_1 | $BMW(B | $BM-(B | 3458($B13(B) | 14.461($B13(B) |
fadd_clo_1 | $BMW(B | $BM-(B | 3541 | 11.135 |
$B%b%8%e!<%kL>(B | $B%/%m%C%/(B | $B2<0L3,AX(B | $B%2!<%H?t(B | $B%/%j%F%#%+%k%Q%9(B[ns] |
---|---|---|---|---|
fadd_split | $BITMW(B | $BL5(B | 198 | 1.866 |
fadd_exception | $BITMW(B | $BL5(B | 1587 | 10.573 |
fadd_far_1 | $BMW(B | $BM-(B | 3458($B13(B) | 14.461($B13(B) |
fadd_clo_1 | $BMW(B | $BM-(B | 3541 | 11.135 |
module add_expdiff(ea,eb,ls,df,be,eq); input [10:0] ea,eb; output ls; // less : ea < eb output [10:0] df; // diff : abs(ea-eb) output [10:0] be; // larger exp of ea,eb output eq; // equal : ea = eb$BF~NO%*%Z%i%s%I$N;X?tIt(B ea , eb $B$rF~NO$H$7$F(B
module add_unpack(allorea,alloreb,fa,fb,upfa,upfb); input allorea,alloreb; input [51:0] fa,fb; output [52:0] upfa,upfb; // unpacked fa/fb$B%G%N!<%^%k$N:]!"IaDL$K%"%s%Q%C%/$r9T$&$H!"0lHV:8$K(B 0 $B$r(B 1 $B%S%C%HA^F~$9(B $B$k$,!"$3$3$G$O!"0lHV1&$K(B 0 $B$rA^F~$7$F$$$k!#8e$G%7%U%?$K$+$1$k:]!"$3$N(B $BItJ,$,$A$c$s$HD4@0$5$l$F=PNO$5$l$k!#(B
$B$^$:!"%G%N!<%^%k$N;~$N;X?t$NCM$O!"(BEmin - 1 ( = 0 ) $B$G$O$J$/!"(BEmin ( = 1 )
$B$H$7$F9M$($k$3$H$K$9$k!#(B
$B$=$7$F!"Nc30%Q%9$O$H$j$"$($:L5;k$7$F!"$3$N%Q%9$,
$B7eMn$A%S%C%H?t(B | $B;X?t$N:9(B ( $B"((B ) | $B | $BC4Ev(B |
---|---|---|---|
- | ( don't care ) | ADD ( 1 ) | FAR |
( don't care ) 0 | 2 $B0J>e(B 1 | SUB ( 0 ) | FAR |
1$B0J>e(B ( don't care ) | 1 0 | SUB ( 0 ) | CLOSE |
$B$A$J$_$K!"$3$N>r7o$NJQ99$K$h$C$F!"(BEmin $B$N@55,2=?t$H%G%N!<%^%k$N8:(B $B;;$G!"7eMn$A$r$9$k$b$N$b%+%P!<$9$kI,MW$,@8$8$?!#(B ( $B$"$?$j$^$((B )
$B>r7oKh$K!"LdBjE@$r@v$C$F$_$k!#(B
$B:#$N$H$3$mLdBjL5$7!#(B
$B$3$N;~E@$G$O!"%"%s%Q%C%/2sO)$r(B FAR path $B$N$=$l$HJ,N%$7$F!"C1=c$J2sO)$rAH$`$3$H$K(B
$B%a%j%C%H$,$"$k!#(B ( $B$3$3$^$GC1=c$@$H$b$O$d%b%8%e!<%k$K$9$k2ACM$,$J$$(B )
$B$D$^$j@55,2=?tF1;N$N;~$H!">.?tE@$N0LCV$rJQ99$7$J$$J}$,$$$$$h$&$J5$$,$9$k!#(B
$B>.?tE@$r8GDj$9$l$P!"LdBjL5$$$h$&$K8+$($k!#(B
$B$3$N8e!"H=CG$7$J$1$l$P$J$i$J$$$N$,!"7eMn$A$,$"$C$?$+$I$&$+$G$"$k!#$b$7(B
$B$b7eMn$A$,5/$-$J$1$l$P!"4]$a$NI,MW@-$,@8$8$k$?$a!"(BCLOSE path $B$G$O
$BLdBj$J$5$=$&!#$`$7$m$3$l$O;X?t$N:9$,(B 0 $B$N%+%F%4%j$KAH$_F~$l$k$Y(B
$B$-$G$O$J$$$+!)(B ( = $B7k2L$K4X$o$i$:(B CLOSE path $B$r:NMQ$9$k(B )
$B$H$$$&$N$O!"$3$N>l9g!">o$K4]$a$NI,MW$,L5$$$+$i$G$"$k!#(B
$B$J$<$3$l$^$GG:$s$G$$$?$N$@$m$&!)$J$s$J$s$@$$$C$?$$(B
module add_clo_comparexp(ea,eb,eq,og,ol,be); input [10:0] ea,eb; output eq; // equal : ea2 = eb2 output og; // one greater : ea2 = eb2 + 1 output ol; // one lesser : eb2 = ea2 + 1 output [10:0] be; // bigger exp of ea,eb
$BF~NO$N;X?t(B EA , EB $B$+$i(B
module add_clo_adder(upfa,upfb,sa,ndga,ndgb,odga,odgb); input [52:0] upfa,upfb; // unpacked FA/FB input sa; // sign of FA output [54:0] ndga,ndgb,odga,odgb; // No/One-Differnce, Greater-FA/FB with sign ( MSB )
$B%"%s%Q%C%/$7$?2>?t(B ( upfa , upfb ) $B$r85$K!"%S%C%H%7%U%H$NM-L5$H2>?t$N(B $B@dBPCM$NBg>.$rM=A[$7$F(B 4 $BDL$j$N8:;;=PNO$rJV$9!#6qBNE*$K$O(B
CLOSE $B$K$*$$$F!"JV$9Id9f$O0J2<$NDL$j!#(B
MSBofNDGA | eq | og | ol | Sign |
---|---|---|---|---|
( don't care ) | 0 | 0 | 1 | ! SA |
( don't care ) | 0 | 1 | 0 | SA |
0 1 | 1 | 0 | 0 | SA ! SA |
MSBofNDGA $B$O!"7e$,F1$8$G!"(Bfa > fb $B$H2>Dj$7$?$H$-$N8:;;7k2L(B NDGA $B$N(B MSB $B$G!"(BSA $B$OF~NO(B A $B$NId9f$G$"$k!#(B
$B$J$*!"8:;;$N7k2L$,(B 0 $B$K$J$C$F$7$^$C$?>l9g!"Id9f$O4]$a%b!<%IEy$b9MN8$7(B
$B$?$b$N$K$J$j!">e5-$NI=$OE,MQ$5$l$J$$!#(B
( $B$3$N>l9g$O
$B;X?t$,!":GDc$NCM$H%G%N!<%^%k$N>l9g!"$D$^$j$=$l$O(B Emin $B$H(B Emin - 1 ( $B=$(B
$B@5$7$F(B Emin $B$H$J$k(B ) $B$N$H$-$J$N$@$,!"$=$N$H$->eI=$G$O$&$^$/$$$+$J$$!#(B
( $B:G>.;X?t$H%G%N!<%^%k$H$N8:;;$G!"7eMn$A$,L5$$>l9g$K@5$7$/$J$$(B )
$B$$$m$$$mBP1~
$B$D$$$G$K!"JBNs$K7W;;$7$?(B 4 $BDL$j$N8:;;$N7k2L$N$I$l$rA*Br$9$l$P$$$$$+$b(B $B=q$$$F$*$/!#(B
MSBofNDGA | MSBofFA | MSBofFB | eq | og | ol | Sign | Select |
---|---|---|---|---|---|---|---|
( don't care ) | ( don't care ) | ( don't care ) | 0 | 0 | 1 | ! SA | ODGB |
( don't care ) | ( don't care ) | ( don't care ) | 0 | 1 | 0 | SA | ODGA |
( don't care ) | 1 | 0 | 1 | 0 | 0 | SA | NDGA |
( don't care ) | 0 | 1 | 1 | 0 | 0 | ! SA | NDGB |
0 1 | 0 | 0 | 1 | 0 | 0 | SA ! SA | NDGA NDGB |
0 1 | 1 | 1 | 1 | 0 | 0 | SA ! SA | NDGA NDGB |
$B$3$3$G5$$E$/!#Id9f$NA*Br$H!"(B4 $B$D$N8:;;7k2LA*Br$O!"FHN)$K9T$&$Y$-$G$O$J$$!#(B 4 $BDL$j$N7W;;$r$7$?;~E@$G!"Id9f$,7h$^$C$F$$$k$N$G!"(B4 $BDL$j$N7W;;$r9T$C$?(B $B$H$-$KId9f%S%C%H$rDI2C$7$F!"7W;;$rA*Br$9$l$P!"Id9f$bF1;~$K7W;;$5$l$k!#(B
$B2>Dj$7$?8:;;7k2L$HId9f$NBP1~$O0J2<$NDL$j!#$3$l$G7k2L$rA*Br$9$l$P@5$7$$(B $BId9f$b0l=o$KF@$k$3$H$,$G$-$k!#(B
Subtract | Sign |
---|---|
NDGA | SA |
NDGB | ~SA |
ODGA | SA |
ODGB | ~SA |
$B$D$^$j!"
module add_clo_mux(ndga,ndgb,odga,odgb,msbfa,msbfb,og,ol,sc,fc); input [54:0] ndga,ndgb,odga,odgb; // MSB is signbit input msbfa,msbfb; // MSBofFA , MSBofFB input og,ol; // equal is not needed by using don't care output sc; // sign of result output [53:0] fc; // mantissa of result
$B$r@_7W$9$k!#F~NO$K;X?t$,F1$8$+$I$&$+$H$$$&?.9f(B eq $B$,L5$$$,!"$3$l$O!"(B
og = ol = 0 $B$N$H$-$O(B eq $B$,N)$C$F$$$k$H2>Dj$7$F7W;;$7$F$$$k$?$a$G$"$k!#(B
( $BK\Ev$K(B eq $B$@$C$?$+$I$&$+$O!"
module add_clo_valid(msbfc,og,ol,eq,ecmd,valid); input msbfc; // MSB of FC input og,ol,eq; input ecmd; // effective command ( sub : 0 , add : 1 ) output valid; // this calc is valid / invalid
CLOSE path $B$,%+%P!<$9$k%*%Z%i%s%I$NHO0O$OA0=R$NDL$j$@$,!"(B add_clo_valid $B$O!"6qBNE*$K$=$l$rH=CG$9$k2sO)!#2~$a$F$=$N>r7o$r=q$1$P(B
$B7eMn$A$,$"$k$H$$$&$3$H$O!"8:;;7k2L$N(B MSB ( MSBofFC ) $B$,(B 0 $B$H$$$&$3$H!#(B
$B$J$*!"(B MSB $B$,(B 1 $B$G$b(B LSB $B$,(B 0 $B$J$i!"4]$a$r9T$&I,MW$,$J$/!"(B CLOSE $B%Q%9$G$b(B
$B%+%P!<$O2DG=$G$"$k!#$b$7(B FAR $B$G2?$+$,5/$-$?$i;H$&$3$H$K$9$k$,!":#$N$H$3$m$O(B
LSB $B$O;H$o$J$$$3$H$K$9$k!#(B
( $B$^$?!"(Beq $B$N$H$-$O!"(BMSBofFC = 1 $B$H$J$k$H$-$b$"$k(B ( $B%G%N!<%^%kMm$_(B )
$B$,!"$7$+$7(B LSBofFC $B$OI,$:(B 0 $B$K$J$k$3$H$KCm0U(B )
$B$H$J$k!#??M}CMI=$O0J2<$NDL$j!#(B
MSBofFC | og | ol | eq | ecmd | CloseValid |
---|---|---|---|---|
( don't care ) | ( don't care ) | ( don't care ) | 1 | 0 |
( don't care ) | ( don't care ) | 1 | 0 | 1 |
( don't care ) | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 1 |
1 | 1 | 0 | 0 | 0 |
module add_clo_encode(in,encode); input [53:0] in; output [5:0] encode;
$B$?$@$N%(%s%3!<%@!#$3$N=PNO$rMQ$$$F!"%G%N!<%^%k$KMn$A$?$H$-$b9MN8$7$?!"(B $B%7%U%H?t$r7W;;$9$k!#(B
module add_clo_adjexp(be,encode,ec,shift); input [10:0] be; // Bigger Exp input [5:0] encode; // encoded value output [10:0] ec; // result exp ( denormal -> ec = 0 ) output [5:0] shift; // shift bit
$B;X?t(B be ( Bigger Exp ) $B$H%b%8%e!<%k(B add_clo_encode $B$N=PNO(B encode $B$+$i!"(B
$BD4@a$7$?;X?t(B ec $B$H:G=*CJ$G%7%U%H$9$Y$-%S%C%H?t(B shift $B$r7W;;$9$k!#(B
$B$J$*!"=iCJ$N(B add_clo_comparexp $B$G!"%G%N!<%^%k$N$H$-$N;X?tIt$NCM$r(B Emin
( = 1 ) $B$K=$@5$7$?$,!"$3$3$G$^$?%G%N!<%^%k$N>l9g$O(B Emin - 1 ( = 0 ) $B$K(B
$BLa$9!#(B
be $B$H(B encode $B$N:9$GH=CG$9$k(B
be - encode | ec | shift |
---|---|---|
1 $B0J>e(B | be - encode | encode |
0 $B0J2<(B | 0 | be - 1 |
module add_clo_shift(in,shift,out); input [53:0] in; input [5:0] shift; output [53:0] out;
$BF~NO(B 54 $B%S%C%H$N$&$A
( $B$b$C$H$b!"(BMSB $B$r(B underflow $B$NH=CG$K;H$C$F$$$k$,(B )
$B$^$?!"(BCLOSE path $B$H$OD>@\4X78L5$$$,!"(BEXCEPTION path $B$H!"(BCLOSE path$B$N$I(B $B$A$i$N7k2L$r;HMQ$9$k$+$r$3$NCJ3,$G7hDj$7$F$7$^$&!#$3$NCJ3,$G9T$&:,5r$O(B
EXCEPTION path $B$N
module add_clo_excorclo( excvalid,se,ee,fe,ive,ofe,ufe,iee, sc,ec,fc,ufc, so,eo,fo,ivo,ofo,ufo,ieo); input excvalid; input se; input [10:0] ee; input [51:0] fe; // economized expression input ive,ofe,ufe,iee; // invalid , pverflow , underflow , inexact flag input sc; input [10:0] ec; input [51:0] fc; // economized expression input ufc; // invalid , pverflow , underflow , inexact flag output so; output [10:0] eo; output [51:0] fo; // economized expression output ivo,ofo,ufo,ieo; // invalid , pverflow , underflow , inexact flag$B0J2<$NI=$K=>$&$h$&$K2r$NA*Br$r$9$k!#(BEXCEPTION path $B$,M-8z$+$I$&$+$r<((B $B$7$F$$$k%S%C%H(B ExcValid $B$O!":GM%@h8"$r;}$A!"B3$$$F(B CLOSE path $B$,M%@h8"(B $B$r;}$D!#$=$N$I$A$i$bL58z$G$"$C$?$H$-$K=i$a$F(B FAR path $B$,M-8z$HG'$a$k$3(B $B$H$,$G$-$k!#(B
ExcValid | CloValid | Selected |
---|---|---|
1 | ( don't care ) | Exception path |
0 | 1 | CLOSE path |
0 | 0 | FAR path |
$B
$B%b%8%e!<%kL>(B | cost prim. | $B;~4V(B (ns) | $BI,MW?t(B | $B>.7W(B prim. |
---|---|---|---|---|
add_clo_comparexp | 481 | 5.935 | 1 | 481 |
add_clo_adder | 2848 | 8.888 | 1 | 2848 |
add_clo_mux | 370 | 2.304 | 1 | 370 |
($B$3$3$^$G$N(B $BAH$_9g$o$;2sO)(B ) | 3518 | 10.714 | 1 | 3518 |
add_clo_valid | 4 | 0.988 | 1 | 4 |
add_clo_encode | 371 | 7.253 | 1 | 371 |
add_clo_adjexp | 247 | 5.911 | 1 | 247 |
add_clo_shift | 804 | 4.782 | 1 | 804 |
($B$3$3$^$G$N(B $BAH$_9g$o$;2sO)(B ) | 5122 | 27.915 | 1 | 5122 |
add_clo_excorclo | 209 | 1.993 | 1 | 209 |
$B$3$3$G$b!"%G%N!<%^%k$N;~$N;X?t$O(B Emin ( = 1 ) $B$H$7$F9M$($k!#(B
$B%+%P!<$9$kHO0O$O!"(BCLOSE path $B0J30$N$b$NA4$F(B ( $BNc30%Q%9$bEvA3=|$/(B )$B!#(B $B6qBNE*$K$O(B
$B$G$"$k!#(B
module add_far_comparexp(ea,eb,be,df,ls); input [10:0] ea,eb; output [10:0] be; // bigger exp output [10:0] df; // difference : abs( ea - eb ) output ls; // less : ea < eb
$BF~NO$G$"$k(B 2 $B$D$N;X?tIt$NCM(B ea , eb $B$+$i(B
$B%G%N!<%^%k$r40A4$K(B Emin $B$H$7$F07$&$H!"2>?t$NBg>.$,$O$C$-$j$7$F$$$k$K$b(B
$B$+$+$o$i$:$o$+$i$J$/$J$C$F$7$^$&%1!<%9$,H/@8$9$k!#(B
FAR path $B$N8:;;$O!"2>?t$N@dBPCM$NBg>.(B
$B$,40A4$KJ]>Z$5$l$F$$$kI,MW$,$"$k$,!"F~NO$K(B Emin $B$H(B Emin - 1 $B$,F~$C$F$-(B
$B$?$H$-$K!"?t$N%9%o%C%Q$G@5$7$5$,J]>Z$5$l$J$/$J$k!#(B
( $B$=$b$=$b!"(BEmin - 1 -> Emin $B$K
$B$3$l$KBP=h$9$k$?$a!"Hf3S:n6H(B ( ls $B$N7W;;(B ) $B$@$1$K$D$$$F$O!"%G%N!<%^%k(B $B$G$bJQ49$9$k$3$H$J$/Hf3S$r$7$F!"(B be $B$H(B df $B$K4X$7$F$O!"(BEmin - 1 $B$r(B Emin $B$KJQ49$7$?$H$_$J$7$F7W;;$9$k$3$H$K$9$k!#(B
$B$^$:$$ItJ,$O CLOSE path $B$N(B add_clo_comparexp $B$H!"A4$/F1$8F/$-$r$9$kF1L>$N?.9f$,$"$k(B $B$,!":#$N$H$3$mJL!9$K:n$C$F$$$k!#$"$^$j%a%j%C%H$OL5$$$,!"$a$s$I$/$5$$$N(B $B$GJ,$1$F$"$k!#3Z!#(B
module add_far_swapper(upfa,upfb,ls,sa,ecmd,fx,fy,sc); input [52:0] upfa,upfb; input ls; // less : ea < eb input sa; // sign of input A input ecmd; // effective command = sa^sb^cmd ( sub : 0 , add : 1 ) output [52:0] fx,fy; output sc; // sign of result
$B%b%8%e!<%k(B add_far_comparexp $B$N=PNO(B ls $B$rMQ$$$F!"%"%s%Q%C%/$7$?;X?t$r(B $B%9%o%C%W$9$k!#%9%o%C%W$5$l$?CM$O(B fx , fy $B$H$J$k!#(B
$B$3$N(B fx $B$H(B fy $B$O!"%7%U%H8e$O!"@dBPCM$K$*$$$F(B fx > fy $B$rJ]>Z$9$k$b$N$G(B $B$"$k!#C"$7(B 1 $B$DNc30$,$"$C$F!";X?t%U%#!<%k%I$NCM$,F1$8>l9g$O$I$A$i$,Bg(B $B$-$$$N$+$o$+$i$J$$$N$G(B fx > fy $B$OJ]>Z$G$-$J$$!#$7$+$7@53N$JBg>.$,$o$+(B $B$i$J$$$^$^7W;;$rB3$1$k$H:$$k$N$O8:;;$N$_$G!"2C;;$K$D$$$F$O!"7e9g$o$;$5(B $B$($A$c$s$H$d$C$F$*$1$P$h$$!#$=$7$F8:;;$K$D$$$F$O!"$=$N$h$&$J;vBV(B ( $B;X(B $B?t$,F1$8$G(B fx > fy $B$,J]>Z$5$l$J$$(B : $B%O%^$k(B ) $B$K$J$k$N$O!" $B$^$?!"7k2L$NId9f(B sc $B$b$D$$$G$K=PNO$7!"0J2<$NI=$N$h$&$KF0:n$9$k!#(B
ls | ecmd | sc |
---|---|---|
( don't care ) | 1 | sa |
0 | 0 | sa |
1 | 0 | ~sa |
module add_far_shift(fx,fy,df,ecmd,sfx,sfy,rob,stb); input [52:0] fx,fy; // fx , fy input [10:0] df; // exp difference input ecmd; // effective command ( sub : 0 ) output [53:0] sfx,sfy; // shifted fx , fy output rob; output stb;
$B$?$@$N%7%U%?(B + $B%9%F%#%C%-!<%S%C%H$N8!=P!#?t$b
FAR path $B$K$*$$$F$O(B
$B$,@5$7$/$G$-$l$P$h$$!#$3$l$rA4$F8GDj>.?tE@$G7W;;$5$;$k$N$O!"@8M}E*$KDq(B $B93$,$"$k!#$N$G!">l9gJ,$1$r$7$F!"2C8:;;4o$KEjF~$9$k:]!">/$72C9)$9$k!#(B
FAR path $B$G$O!"7eMn$A$,:GBg(B 1 $B%S%C%H$N$b$N$^$G9M$($F$$$k!#2<0L$N7e$KJ](B $B8n%S%C%H$r(B 1 $B%S%C%HIU2C$7$F(B 54 $B%S%C%H$G7W;;$r9T$&!#$3$l$G(B 1 $B%S%C%H7eMn(B $B$A$7$?$H$-$K$b4]$a$N$?$a$N>pJs$,==J,F@$i$l$k(B
5 4 3 2 1 0 321098765432109876543210987654321098765432109876543210 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0 - bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbG R S ------------------------------------------------------ ccccccccccccccccccccccccccccccccccccccccccccccccccccc R S
5 4 3 2 1 0 321098765432109876543210987654321098765432109876543210 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0 - bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbG R S ------------------------------------------------------ cccccccccccccccccccccccccccccccccccccccccccccccccccccR' S'
$B$J$*!"%\%m!<(B ( $B8e=R(B ) $B$K$D$$$F$O8e$G9M$($k!#(B
$B7e>e$,$j$3$=$9$l!"7eMn$A$9$k$3$H$,$J$$$?$a$KJ]8n%S%C%H$r$D$1$kI,MW$,$J(B $B$$!#$=$N$?$a!"(B 53 $B%S%C%H$G$$$$$N$@$,!"$I$&$;8:;;$,(B 54 $B%S%C%H;HMQ$9$k$N(B $B$G!"%"%s%Q%C%/$7$?2>?t$N(B MSB $B$K(B 0 $B$rIU2C$7$F(B 54 $B%S%C%H$K$7$F$7$^$&!#(B
5 4 3 2 1 0 321098765432109876543210987654321098765432109876543210 0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + 0bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb R S ------------------------------------------------------ ccccccccccccccccccccccccccccccccccccccccccccccccccccc R S
5 4 3 2 1 0 321098765432109876543210987654321098765432109876543210 0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + 0bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb R S ------------------------------------------------------ cccccccccccccccccccccccccccccccccccccccccccccccccccccR' S'
$B7k6I!"M-8z1i;;$,2C;;$G$"$k>l9g$K$O!"1&%7%U%H$r(B 1 $B%S%C%HM>J,$KF~$l$l$P(B $B$h$$!#$3$N$H$-$NLdBj$O!";X?t$N:9$,(B Emax + 1 ( $B%S%C%HNs$,%*!<%k(B 1 ) $B$N(B $B$H$-$N2C;;$G!"(B Emax + 1 + 1 $B%S%C%H%7%U%H$5$;$k$h$&$K%7%U%?$K;X<($9$k$N(B $B$@$,!"%S%C%HNs$,A4$F(B 1 $B$N$H$-$K(B 1 $B$r2C$($k$H7k2L$O(B 0 $B$K$J$j!"%7%U%?$K(B $B$O(B 0 $B%S%C%H%7%U%H$r$9$k$h$&$J;XNa$,$G$F$7$^$&!#$7$+$7$3$l$O!":9$,(B Emax + 1 $B$N$H$-$O!"!g$+(B NaN $B$J$N$G!"(BEXCEPTION path $B$KG$$;$F$7$^$C$F$$$k$N$G!"(B $B1F6A$OL5$$$O$:$G$"$k!#(B
module add_far_adder(x,y,roi,sti,ecmd,c0,c1,c2,roo,sto,br); input [53:0] x,y; input roi,sti; // roundbit in , stickybit in input ecmd; output [53:0] c0,c1,c2; output roo,sto; // roundbit out , stickybit out output br; // borrow bit
$B2C8:;;%b%8%e!<%k!#$3$N$H$-JBNs$K(B 3 $B$D$N7W;;$r9T$&!#2C;;$J$i(B
$B4]$a$H$$$&A`:n$O!"@dBPCME*$K$OA}$($k$3$H$O$"$C$F$b8:$k$3$H$O$J$$$N$K!"(B $B8:;;$G(B ( X - Y - 1 ) $B$H$$$&(B 1 $B$@$1>/$J$$CM$r7W;;$5$;$F$$$k$N$O!"8:;;$K(B $B%\%m!<(B ( borrow ) $B$H$$$&35G0$rF3F~$7$F$$$k$+$i$G$"$k!#(B
$B%\%m!<$H$O!"(B 54 $B%S%C%H$N8:;;4o$K0z$C$+$+$C$F$$$J$$4]$a%S%C%H$H%9%F%#%C(B $B%-!<%S%C%H$r9MN8$7$?$H$-$KI=$o$l$k$b$N$G$"$k!#(B
$B4]$a%S%C%H$H%9%F%#%C%-!<%S%C%H$N$&$A!">/$J$/$H$b$I$A$i$+$N%S%C%H$,N)$C(B
$B$F$$$k>l9g!"Ho8:;;?t$+$i(B 1 $B$r
aaa.....aa0 - bbb.....bbb R S ----------- ccc.....ccc R S
$B$H$J$k!#(B R = S = 0 $B$J$i$P!"1i;;7k2L$G$"$k(B c $B$N%S%C%HNs$K$O$J$s$i1F6A$O(B
$B$J$$$,!"$b$7(B R = 0 , S = 1 $B$@$C$?$H$-$O!"
aaa.....aa0 0 0 - bbb.....bbb 0 1 ----------- --- ddd.....ddd 1 1
$B$3$N$H$-!"(B54 $B%S%C%H8:;;4o$N(B LSB $B$N7e$G!V%\%m!.$5$$CM$K$J$C$F$$(B $B$k!#$=$7$F4]$a%S%C%H$H%9%F%#%C%-!<%S%C%H$b(B ( 0 , 1 ) $B$+$i(B ( 1 , 1 ) $B$K(B $BJQ2=$7$F$$$k!#$D$^$j(B A - B - 1 $B$,(B D $B$NEz$($G$"$k!#(B $B$3$l$,!"(B 3 $BDL$j$N(B $B8:;;$G!"(B X - Y - 1 $B$r7W;;$7$F$$$kM}M3$G$"$k!#(B
$B7k6I!"%\%m!<$K4X$9$kA`:n$O(B
$B4]$a%S%C%H$H%9%F%#%C%-!<%S%C%H$NJQ49$O(B
R | S | R' | S' |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
$B$H$J$k!#$3$3$^$G$r2C8:;;4o(B add_far_adder $B$NFbIt$G!"(B54 $B%S%C%H2C8:;;$HJB(B $BNs$K9T$&!#EvA3!"%\%m!<$N=hM}$O!"M-8z1i;;$,8:;;$N$H$-$N$_9T$$!"2C;;$N$H$-$O!"(B $B$=$N$^$^%9%k!<$5$;$k!#(B
module add_far_round(fz_53,fz_1,fz_0,roin,stin,sib,rmode,pone,ie); input fz_53,fz_1,fz_0; // result of ADD/SUB [53],[1],[0] input roin,stin; // roundbit , stickybit input sib; // signbit of result input [1:0] rmode; // roundmode 00:RN , 01:RZ , 10:RP , 11:RM output pone; // plus one : ROUND or NOT ROUND output ie; // inexact flag$B$3$N%b%8%e!<%k$O!"(B X + Y $B$H(B X + Y + 1 $B$N(B 2 $BDL$j$NN>J}$K$D$$$F!"Ej5!E*(B $B$K4]$a$r9T$&$?$a$KMQ0U$5$l$F$$$k!#B($A$3$N%b%8%e!<%k$O(B 2 $B$DMQ0U$9$k!#(B
$B$^$?!"$3$N%b%8%e!<%k$O!"4]$a$r
$B$H$3$m$G!"$3$3$^$G$N%W%m%;%9$r9T$&$3$H$G!"(BA + B , A + B + 1 , A + B + 2 $B$N(B 3 $BDL$j$r7W;;$9$k$@$1$GK\Ev$K!"%\%m!<$H7eMn$A(B ( $B7e>e$,$j(B ) $B$H4]$a(B $B$r9MN8$7$?A4$F$NAH$_9g$o$;$rK~$?$7$F$$$k$+$I$&$+$K$D$$$F9M$($k!#(B
$B2C;;$N>l9g$H8:;;$N>l9g$N(B 2 $B$D$KJ,$1$F9M$($k$,!"6&DL$NJ}?K$O0J2<$N(B 2 $BE@(B $B$G$"$k!#(B
$BNc$($P!"2C;;$G$"$k$J$i$P!"(B A + B $B$K$D$$$F4]$aA`:n$r9T$&$Y$-$G$"$k$7!"(B $B8:;;$G$"$k$J$i$P!"(B A - B = A + ~B + 1 $B$K$D$$$F4]$aA`:n$r9T$&$Y$-$G$"$k(B
$B4]$a$r9T$&:]!">e0L(B 53 $B%S%C%H$,7k2L$H$J$k$h$&$K9M$($J$1$l$P$J$i$J$$!#>e(B $B0L(B 53 $B%S%C%H$,$I$N(B 53 $B%S%C%H$K$J$k$N$+$H$$$&$N$O!"1i;;7k2L$N7e>e$,$j$b(B $B$7$/$O7eMn$A$K0MB8$9$k(B
$B8:;;$K$D$$$F$O!"%\%m!<$NM-L5$H7eMn$A$NM-L5(B,$B!"$=$7$F4]$a$K$h$k@Z>e$2$N(B $BM-L5$,A*Br$N4p=`$H$J$k!#(B
$B%\%m!<$,L5$$>l9g$O!"4]$a$NH=CG$r9T$&2sO)$O(B A - B = A + ~B + 1 $B$G$"$k!#(B $BH?BP$K%\%m!<$,$"$k$H$-$N4]$a$O(B A - B - 1 = A + ~B $B$G9T$&I,MW$,$"$k!#$=(B $B$7$F99$K!"4]$a$K$h$k@Z>e$2$,$"$k$+$I$&$+$G:G=*E*$J2r$rA*Br$9$k!#(B
( $BNc(B )
aaa.....aa0 - bbb.....bbb 0 0 ----------- (or) ccc.....ccR' 0 ^ LSB'
$B%\%m!<$,L5$$$N$G!"4]$a$NH=CG$O(B A + ~B + 1 $B$G9T$&!#7eMn$A$,$J$$$N$G!"(B54
$B%S%C%H8:;;7k2L$N(B LSB $B$r?7$?$K4]$a%S%C%H(B R' $B$H$7!"=>Mh$N4]$a%S%C%H$H%9(B
$B%F%#%C%-!<%S%C%H$N(B or $B$r$H$C$?$b$N$r?7$?$J%9%F%#%C%-!<%S%C%H(B S' $B$H$9$k!#(B
( $B$A$J$_$K!"%\%m!<$,L5$$$H$$$&$3$H$O!"(B S' = 0 $B$HEy2A$G$"$k(B )
$B$=$7$F!"8:;;7k2L$N(B LSB $B$r?7$?$K(B R' $B$H$9$k$N$@$+$i!"(BLSB $B$N(B 1 $B$D>e0L$N%S%C(B
$B%H$,4]$a$r9T$&:]$N?7$?$J(B LSB' $B$H$J$k!#(B
$B4]$a$K$h$k@Z>e$2$,$J$1$l$P!"2r$O(B A + ~B + 1 $B$G$"$k!#(B
$B$H$3$m$G!"4]$a$K$h$k@Z>e$2$,H/@8$9$k>u67$K$D$$$F9M$($F$_$k!#(B
$B4]$a$K$h$k@Z>e$2$O!"4]$a%b!<%I$N
( $B$I$A$i$b(B 0 $B$G$"$k$H$$$&$3$H$O!"1i;;$N7k2L$,@53N$G4]$a$NI,MW$,$J$$$H(B
$B$$$&$3$H$G$"$k!#$"$?$j$^$((B )
$B$=$3$G!":#2s$N%1!<%9$r9M$($F$_$k$H!"(BS' = 0 $B$J$N$@$+$i!">/$J$/$H$b(B R' =
1 $B$G$J$$$H!"4]$a$K$h$k@Z>e$2$OH/@8$7$J$$!#$=$7$F4]$a$N@Z>e$2$,5/$-$?$H(B
$B$-$O(B A - B + 2 = A + ~B + 3 $B$r7W;;$7$F(B LSB $B$r@Z
( $BNc(B )
aaa.....aa0 - bbb.....bbb 0 0 ----------- cc.....ccc R'S' ^ LSB' ( = LSB )
$B%\%m!<$,$J$$$N$G!"(BA - B = A + ~B + 1 $B$r4]$a$NH=CG$KMQ$$$k!#$=$7$F7eMn(B $B$A$,$"$k$3$H$+$i!"$=$N$^$^(B LSB' = LSB , R' = R ( = 0 ) , S' = S ( = 0 ) $B$,@.$jN)$D!#$7$+$74{$K=R$Y$?$h$&$K!"(BR' = S' = 0 $B$H$$$&$3$H$O!"4]$a$K$h(B $B$k@Z>e$2$,H/@8$7$J$$$3$H$r<($7$F$$$k!#(B
$B$D$^$j$3$N%1!<%9$G$O!"4]$a$O0l@Z9MN8$;$:$K!"L5>r7o$K(B A - B = A + ~B + 1 $B$rA*Br$9$l$P$h$$!#(B
( $BNc(B )
aaa.....aa0 - bbb.....bbb 0 1 ----------- (or) ccc.....ccR' S' ^ LSB'
$B%\%m!<$,$"$k$N$G!"4]$a$NH=CG$K$O!"(B A - B - 1 = A + ~B $B$rMQ$$$k!#(B $B$^$?!"7eMn$A$,$J$$$N$G:#$^$GF1MM!"(BR' = LSB , S' = R or S $B$H$9$k!#(B
$B$3$3$G4]$a$K$h$k@Z>e$2$,5/$-$?$H$-$K$O!"(BLSB' $B$K(B 1 $B$rB-$9I,MW$,$"$k!#(B $B$3$l$O!"5l(B LSB $B$+$i8+$l$P!"(B2 $B$rB-$9$3$H$KAjEv$7!"(B A - B - 1 + 2 = A - B + 1 = A + ~B + 2 $B$G7W;;$,2DG=$G$"$k!#(B
$B7k6I!"4]$a$K$h$k@Z>e$2$,$J$1$l$P(B A - B - 1 = A + ~B $B$rA*Br$7$F!"(B $B@Z>e$2$,$"$l$P!"(B A - B -1 + 2 = A + ~B + 2 $B$rA*Br$9$l$P$h$$!#(B
( $BNc(B )
aaa.....aa0 - bbb.....bbb 0 1 ----------- cc.....ccc R'S' ^ LSB' ( = LSB )
$B%\%m!<$,$"$k$N$G!"4]$a$NH=CG$K$O!"(B A - B - 1 = A + ~B $B$rMQ$$$k!#(B $B$^$?!"7eMn$A$,$"$k$N$G!"(BLSB' = LSB , R' = R , S' = S $B$H$9$k!#(B
$B4]$a$K$h$k@Z>e$2$,5/$-$?$H$-$K$O!"(BR' $B$r4]$a$F(B LSB' $B$N7e$G(B +1 $B$r9T$($P$h$$$+$i!"(B A - B - 1 + 1 = A + ~B + 1 $B$,2r$H$J$k!#(B
$B$D$^$j!"$3$N>l9g$O4]$a$N@Z>e$2$,L5$1$l$P(B A - B - 1 = A + ~B $B$r!"(B $B@Z>e$2$,$"$k$J$i$P(B A - B - 1 + 1 = A + ~B + 1 $B$rA*Br$9$l$P$h$$!#(B
$B2C;;$O8:;;$N>l9g$H0[$J$j!"%\%m!<$N$h$&$J4]$a$rH=CG$9$Y$-A*Br$r9T$&I,MW(B $B$,$J$/!"7e>e$,$j$NM-L5$H4]$a$K$h$k@Z>e$2$NM-L5$N(B 2 $B$D$N$_$,%Q%i%a!<%?(B $B$H$J$k!#(B
$B4]$a$NH=CG$O!"A4$F(B A + B $B$N7k2L$rMQ$$$k!#(B
( $BNc(B )
0aa.....aaa - 0bb.....bbb R S ----------- 0cc.....ccc R'S' ^ LSB'
$B7e>e$,$j$,$J$$$N$G!"(BLSB' = LSB , R' = R , S' = S $B$H$9$k!#(B
$B4]$a$K$h$k@Z>e$2$,5/$-$?$H$-$O!"(BLSB' $B$N7e(B ( = $B5l(B LSB $B$N7e(B ) $B$G(B +1 $B$9$l(B $B$P$h$$$+$i!"7k2L$O(B A + B + 1 $B$H$J$k!#(B
$BB($A!"4]$a$K$h$k@Z>e$2$,5/$-$J$+$C$?$i!"(BA + B $B$r!"(B $B4]$a$K$h$k@Z>e$2$,5/$-$?$J$i!"(BA + B + 1 $B$rA*Br$9$l$P$h$$!#(B
( $BNc(B )
0aa.....aaa - 0bb.....bbb R S ----------- (or) ccc.....ccR' S' ^ LSB'
$B7e>e$,$j$,$"$k$N$G!"(B R' = LSB , S' = R or S $B$H$9$k!#(B
$B4]$a$K$h$k@Z>e$2$,5/$-$?$H$-$O!"(BLSB' $B$N7e(B ( = $B5l(B LSB $B$N(B 1 $B$D>e0L$N7e(B ) $B$G(B +1 $B$9$l$P$h$$$+$i!"7k2L$O(B A + B + 2 $B$H$J$k!#(B
$BB($A!"4]$a$K$h$k@Z>e$2$,5/$-$J$+$C$?$i!"(BA + B $B$r!"(B $B4]$a$K$h$k@Z>e$2$,5/$-$?$J$i!"(BA + B + 2 $B$rA*Br$9$l$P$h$$!#(B
$B0J>e$K$h$j!"(BA + B , A + B + 1 , A + B + 2 $B$GA4$F$N>l9g$rJq3g$7$F$$$k$3(B
$B$H$,@bL@$G$-$?!#$3$NA*Br:n6H$r
module add_far_mux1(msbc0,msbc1,pone0,pone1,ie0,ie1,br,ecmd,c0e,c1e,c2e,ief); input msbc0,msbc1; // MSB of C0 , C1 input pone0,pone1; // PlusOne of C0 , C1 ( result of Roundlogic ) input ie0,ie1; // inexact0,1 input br; // borrow input ecmd; // sub : 0 , add : 1 output c0e,c1e,c2e; // C0,1,2 Enable output ief; // inexact FAR path
3 $B$D$N2C8:;;7k2L(B C0 , C1 , C2 $B$NCf$+$i0J2<$NI=$K4p$E$$$F(B 1 $B$D$rA*$V$?(B $B$a$N(B ( $B>iD9$J(B ) $B?.9f$rEG$/!#3F!9$N?.9f(B C0E , C1E , C2E $B$O!"GSB>E*$K%"(B $B%5!<%H$5$l$k!#(B
MSBofC0 | PlusOne0 | MSBofC1 | PlusOne1 | Borrow | ecmd | Select | $BHw9M(B |
---|---|---|---|---|---|---|---|
d | 0 | d | d | d | 1 | C0 | $B2C;;(B $B@Z |
0 | 1 | d | d | d | 1 | C1 | $B2C;;(B $B@Z>e$2(B $B7e>eL5(B |
1 | 1 | d | d | d | 1 | C2 | $B2C;;(B $B@Z>e$2(B $B7e>eM-(B |
d | d | d | 0 | 0 | 0 | C1 | $B8:;;(B $B |
d | d | 0 | 1 | 0 | 0 | ( $BIT2DG=(B ) | $B8:;;(B $B $B7eMnM-(B |
d | d | 1 | 1 | 0 | 0 | C2 | $B8:;;(B $B $B7eMnL5(B |
d | 0 | d | d | 1 | 0 | C0 | $B8:;;(B $B |
0 | 1 | d | d | 1 | 0 | C1 | $B8:;;(B $B $B7eMnM-(B |
1 | 1 | d | d | 1 | 0 | C2 | $B8:;;(B $B $B7eMnL5(B |
$B$^$?!"3F!9(B add_far_round $B$G7W;;$7$?IT@53N$N%U%i%0$bA*Br$9$k!#(B
Borrow | ECmd | Selected |
---|---|---|
x | 1 | InExact_0 |
1 0 | 0 | InExaqct_0 InExact_1 |
$B%*!<%P!<%U%m!<$d%"%s%@!<%U%m!
module add_far_resultinfty(rmode,sc,ovi); input [1:0] rmode; // roundmode input sc; // sign of result output ovi;
$B>h;;4o$G$bF1$8F0:n$r$9$k%b%8%e!<%k$rMQ$$$F$$$k!#7k2L$,%*!<%P%U%m!<$7$?(B $B$iB((B INF $B$rJV$9$H$$$&$o$1$G$O$J$/!"4]$a%b!<%I$K$h$C$F$OI=8=$G$-$kM-8B(B $B?t$NCf$G:GBgCM$rJV$9>l9g$b$"$k!#(B
$B2C8:;;4o$KEjF~$9$kA0$N%9%o%C%W$N=PNO$G$"$k7k2L$NId9f(B sc $B$H4]$a%b!<%I$r(B $BMQ$$$F!"%*!<%P!<%U%m!<;~$K!"(BINF $B$r7k2L$H$9$k$+$I$&$+$rH=Dj$9$k%S%C%H(B OVI $B$rJV$9!#(B
$B$3$NA`:n$O!"2C8:;;$HJBNs$K9T$&$3$H$,$G$-$k!#(B
$B4]$a%b!<%I(B | SC | OVI |
---|---|---|
RN ( 00 ) | ( don't care ) | 1 |
RZ ( 01 ) | ( don't care ) | 0 |
RP ( 10 ) | 0 1 | 1 0 |
RM( 11 ) | 0 1 | 0 1 |
module add_far_adjexp(be,ecmd,fc,ovi,ae,of,uf); input [10:0] be; // Bigger Exp ( from input ecmd; // effective cmd. SUB:0 , ADD:1 input [53:0] fc; // FC = FA + FB input ovi; // output infinity as a result if overflow output [10:0] ae; // adjusted exponent output [52:0] af; // uneconomized 53bit out output of,uf;
$B4pK\E*$K$O!"IbF0>.?tE@2C8:;;1i;;7k2L$N;X?t$O(B 2 $B$D$NF~NO%*%Z%i%s%I$N$&(B $B$ABg$-$$J}$N;X?t$G$"$k$,!"7eMn$AEy$K$h$j!";X?t$ND4@a$,I,MW$H$J$k!#(B
$B;X?t$rD4@a$7$J$1$l$P$J$i$J$$MW0x$O(B 5 $B$D$"$k!#(B
$B99$K%*!<%P!<%U%m!<;~$K$O!"(BEmax + 1 $B$K;X?t$r8GDj$9$k$N$+(B Emax $B$K8GDj$9$k$N$+$r(B $B%b%8%e!<%k(B add_far_resultinfty $B$N=PNO(B OVI $B$+$iH=CG$9$kI,MW$,$"$k!#(B
$B$J$*!":G8e$NMW0x$G$"$k%G%N!<%^%k$KMn$A$k$d$D$O!" 3 $BHVL\$N>r7o$O!"$9$C$+$jK:$l$F$$$?$b$N$G!";X?t$N=$@5$K$O!"2C;;7k2L$N(B MSB $B$@$1$G$O$J$/!"$b$&(B 1 $B%S%C%H$@$12<0L$N%S%C%H$,99$KI,MW$H$J$k!#$3$$(B $B$D$N$*$+$2$G$@$$$VI=$,1x$/$J$C$?!#(B
CLOSE path $B$NC4Ev!"(BINF $B$rJV$9$H$3$m!"2C;;$N%G%N!<%^%k$r=|$$$F2C8:;;$N(B $BF0:n$O!"BP>N$K$J$C$F$$$k!#(B
$B99$K$3$N;~E@$G!"%*!<%P!<%U%m!
$B>eI=$H0c$C$F!"(BMSBofFC $B$N(B 1 $B%S%C%H$@$1$"$l$P$h$$$3$H$KCm0U!#(B
OVI | MSBofFC | ECmd | BE | AdjustedF |
---|---|---|---|---|
1 0 | 1 | 1 | Emax | ALL 0 ALL 1 |
x | 1 | 1 | Emin $B!A(B Emax -1 | FC[53:1] |
x | 0 | 1 | x | FC[52:0] |
x | 1 0 | 0 | Emin + 1 $B!A(B Emax | FC[53:1] FC[52:0] |
x | x | 0 | Emin | FC[53:1] |
module add_far_mux2( sc,ec,fc,ivc,ofc,ufc,iec,valec, sf,ef_0,ef_1,ef_2,c0,c1,c2,c0e,c1e,c2e,off_0,off_1,off_2,uff_0,uff_1,uff_2,ief, so,eo,fo,ivo,ofo,ufo,ieo); input sc; // sign of CLOSE input [10:0] ec; // exponenent of CLOSE path input [51:0] fc; // mantissa of CLOSE path input ivc,ofc,ufc,iec; // invalid , overflow , underflow , inexact input valec; // VALid EXCEPTION / CLOSE path input sf; // sign of FAR path input [10:0] ef_0,ef_1,ef_2; // exponenent of FAR path input [51:0] c0,c1,c2; // mantissa of FAR path ( economize expression ) input c0e,c1e,c2e; input off_0,off_1,off_2,uff_0,uff_1,uff_2,ief; // invalid , overflow , underflow and inexact(already determined) output so; output [10:0] eo; output [51:0] fo; output ivo,ofo,ufo,ieo;
$B:G=*$N2>?t!";X?t!"%U%i%0$rA*Br$9$k!#(Badd_far_mux1 $B$O%$%M!<%V%k$N?.9f$@(B
$B$1$@$C$?$,!"(Badd_far_mux2 $B$G$O
ExValid | CloValid | Selected |
---|---|---|
1 | ( don't care ) | Exception path |
0 | 1 | CLOSE path |
0 | 0 | FAR path |
EXCEPTIO path $B$+(B CLOSE path $B$+$N$I$A$i$+$H$$$&$3$H$K$D$$$F$O!"4{$KA*Br(B $B$5$l$F$$$k$b$N$H$9$k!#(B
$B$=$NA0$NCJ3,$K$*$$$F!"99$K(B FAR path $B$NFbIt$N(B 3 $BDL$j$K7kCe$r$D$1$k$?$a(B $B$N!"2>?t$NA*Br$r9T$&!#(B
C0E | C1E | C2E | FarF |
---|---|---|---|
1 | 0 | 0 | C0 |
0 | 1 | 0 | C1 |
0 | 0 | 1 | C2 |
$BKt!"3F%Q%9$G5/$3$jF@$kNc30$O0J2<$NDL$j!#(B
$B%Q%9(B | $BNc30(B |
---|---|
Exception | IV , OF , OF with IEX , UF? |
CLOSE | UF |
FAR | OF with IEX , UF , IEX |
FAR path $B$N%*!<%P!<%U%m!<$O!"I,$:(B InExact $B$K$J$k$h$&$K@_Dj$7$F$"$k!#(B
$B%b%8%e!<%kL>(B | cost prim. | $B;~4V(B (ns) | $BI,MW(B $B?t(B | $B>.7W(B prim. |
---|---|---|---|---|
add_far_comparexp | 460 | 6.192 | 1 | 460 |
add_far_swapper | 336 | 2.940 | 1 | 336 |
add_far_shift | 3223 | 6.428 | 1 | 3223 |
($B$3$3$^$G$N(B $BAH$_9g$o$;2sO)(B) | 3852 | 12.626 | 1 | 3852 |
add_far_adder | 2358 | 12.396 | 1 | 2358 |
add_far_round | 20 | 1.331 | 2 | 40 |
add_far_mux1 | 16 | 1.209 | 1 | 16 |
add_far_resultinfty | 4 | 0.733 | 1 | 4 |
add_far_adjexp | 512 | 4.388 | 3 | 1536 |
add_far_mux2 | 439 | 3.027 | 1 | 439 |
$B2C8:;;$r$9$k:]!"(B
A $B$NId9f(B | B $B$NId9f(B | $BL?Na(B | $B |
---|---|---|---|
+ | + | ADD | ADD |
+ | - | ADD | SUB |
- | + | ADD | SUB |
- | - | ADD | ADD |
+ | + | SUB | SUB |
+ | - | SUB | ADD |
- | + | SUB | ADD |
- | - | SUB | SUB |
$B1i;;(B | $B7k2L$NId9f(B |
A + B | Sign A |
A - B | Sign A |
B + A | Sign B |
B - A | Sign ~B |
if(exp == 0) return( { 1'b0, significand } ); ~~~~~~~~~~~~~~~~~ else return( { 1'b1, significand } );$B$J$N$@$,!"
X op Y | Y = 0 | Y = W | Y = $B!g(B | Y = NaN |
---|---|---|---|---|
X = 0 | (iii) | (ii) | (i) | |
X = W | (ii) | (i) | ||
X = $B!g(B | (ii) | (ii) | (ii) | (i) |
X = NaN | (i) | (i) | (i) | (i) |
X = NaN ? | Y = NaN ? | $B7k2L(B |
0 | 0 | d ($BC4Ev30(B) |
0 | 1 | Y |
1 | 0 | X |
1 | 1 | X |
X = $B!g(B ? | Y = $B!g(B ? | $B | $B7k2L(B |
0 | 0 | d | d ($BC4Ev30(B) |
0 | 1 | 0 | {Sign ~X,$B!g(B} |
0 | 1 | 1 | {Sign X,$B!g(B} |
1 | 0 | d | {Sign X,$B!g(B} |
1 | 1 | 0 | NaN |
1 | 1 | 1 | {Sign X,$B!g(B} |
| X | = | Y | ? | $B | X = 0 ? | Rmode = RM ? | $B7k2L(B |
1 | 1 | 1 | d | X |
1 | 1 | 0 | d | d ($BC4Ev30(B) |
1 | 0 | d | 0 | +0 |
1 | 0 | d | 1 | -0 |
0 | d | d | d | d ($BC4Ev30(B) |