107 lines
4.3 KiB
Systemverilog
107 lines
4.3 KiB
Systemverilog
// Generated by CIRCT firtool-1.151.0
|
|
module MulAddRecFNToRaw_preMul_1(
|
|
input [1:0] io_op,
|
|
input [64:0] io_a,
|
|
io_b,
|
|
io_c,
|
|
output [52:0] io_mulAddA,
|
|
io_mulAddB,
|
|
output [105:0] io_mulAddC,
|
|
output io_toPostMul_isSigNaNAny,
|
|
io_toPostMul_isNaNAOrB,
|
|
io_toPostMul_isInfA,
|
|
io_toPostMul_isZeroA,
|
|
io_toPostMul_isInfB,
|
|
io_toPostMul_isZeroB,
|
|
io_toPostMul_signProd,
|
|
io_toPostMul_isNaNC,
|
|
io_toPostMul_isInfC,
|
|
io_toPostMul_isZeroC,
|
|
output [12:0] io_toPostMul_sExpSum,
|
|
output io_toPostMul_doSubMags,
|
|
io_toPostMul_CIsDominant,
|
|
output [5:0] io_toPostMul_CDom_CAlignDist,
|
|
output [54:0] io_toPostMul_highAlignedSigC,
|
|
output io_toPostMul_bit0AlignedSigC
|
|
);
|
|
|
|
wire _rawA_out_sig_T = |(io_a[63:61]);
|
|
wire rawA_isSpecial = &(io_a[63:62]);
|
|
wire rawA_isNaN = rawA_isSpecial & io_a[61];
|
|
wire _rawB_out_sig_T = |(io_b[63:61]);
|
|
wire rawB_isSpecial = &(io_b[63:62]);
|
|
wire rawB_isNaN = rawB_isSpecial & io_b[61];
|
|
wire _rawC_out_sig_T = |(io_c[63:61]);
|
|
wire rawC_isSpecial = &(io_c[63:62]);
|
|
wire rawC_isNaN = rawC_isSpecial & io_c[61];
|
|
wire signProd = io_a[64] ^ io_b[64] ^ io_op[1];
|
|
wire [13:0] _sExpAlignedProd_T_1 = {2'h0, io_a[63:52]} + {2'h0, io_b[63:52]} - 14'h7C8;
|
|
wire doSubMags = signProd ^ io_c[64] ^ io_op[0];
|
|
wire [13:0] _sNatCAlignDist_T = _sExpAlignedProd_T_1 - {2'h0, io_c[63:52]};
|
|
wire isMinCAlign =
|
|
~_rawA_out_sig_T | ~_rawB_out_sig_T | $signed(_sNatCAlignDist_T) < 14'sh0;
|
|
wire CIsDominant =
|
|
_rawC_out_sig_T & (isMinCAlign | _sNatCAlignDist_T[12:0] < 13'h36);
|
|
wire [7:0] CAlignDist =
|
|
isMinCAlign
|
|
? 8'h0
|
|
: _sNatCAlignDist_T[12:0] < 13'hA1 ? _sNatCAlignDist_T[7:0] : 8'hA1;
|
|
wire [164:0] mainAlignedSigC =
|
|
$unsigned($signed($signed({doSubMags
|
|
? {1'h1, ~_rawC_out_sig_T, ~(io_c[51:0])}
|
|
: {1'h0, _rawC_out_sig_T, io_c[51:0]},
|
|
{111{doSubMags}}}) >>> CAlignDist));
|
|
wire [64:0] reduced4CExtra_shift =
|
|
$unsigned($signed(65'sh10000000000000000 >>> CAlignDist[7:2]));
|
|
wire [7:0] _reduced4CExtra_T_13 =
|
|
{4'h0, reduced4CExtra_shift[31:28]} | {reduced4CExtra_shift[27:24], 4'h0};
|
|
wire [7:0] _reduced4CExtra_T_23 =
|
|
{2'h0, _reduced4CExtra_T_13[7:2] & 6'h33} | {_reduced4CExtra_T_13[5:0] & 6'h33, 2'h0};
|
|
wire [12:0] _GEN =
|
|
{|(io_c[51:48]),
|
|
|(io_c[47:44]),
|
|
|(io_c[43:40]),
|
|
|(io_c[39:36]),
|
|
|(io_c[35:32]),
|
|
|(io_c[31:28]),
|
|
|(io_c[27:24]),
|
|
|(io_c[23:20]),
|
|
|(io_c[19:16]),
|
|
|(io_c[15:12]),
|
|
|(io_c[11:8]),
|
|
|(io_c[7:4]),
|
|
|(io_c[3:0])}
|
|
& {{1'h0, _reduced4CExtra_T_23[7:1] & 7'h55}
|
|
| {_reduced4CExtra_T_23[6:0] & 7'h55, 1'h0},
|
|
reduced4CExtra_shift[32],
|
|
reduced4CExtra_shift[33],
|
|
reduced4CExtra_shift[34],
|
|
reduced4CExtra_shift[35],
|
|
reduced4CExtra_shift[36]};
|
|
assign io_mulAddA = {_rawA_out_sig_T, io_a[51:0]};
|
|
assign io_mulAddB = {_rawB_out_sig_T, io_b[51:0]};
|
|
assign io_mulAddC = mainAlignedSigC[108:3];
|
|
assign io_toPostMul_isSigNaNAny =
|
|
rawA_isNaN & ~(io_a[51]) | rawB_isNaN & ~(io_b[51]) | rawC_isNaN & ~(io_c[51]);
|
|
assign io_toPostMul_isNaNAOrB = rawA_isNaN | rawB_isNaN;
|
|
assign io_toPostMul_isInfA = rawA_isSpecial & ~(io_a[61]);
|
|
assign io_toPostMul_isZeroA = ~_rawA_out_sig_T;
|
|
assign io_toPostMul_isInfB = rawB_isSpecial & ~(io_b[61]);
|
|
assign io_toPostMul_isZeroB = ~_rawB_out_sig_T;
|
|
assign io_toPostMul_signProd = signProd;
|
|
assign io_toPostMul_isNaNC = rawC_isNaN;
|
|
assign io_toPostMul_isInfC = rawC_isSpecial & ~(io_c[61]);
|
|
assign io_toPostMul_isZeroC = ~_rawC_out_sig_T;
|
|
assign io_toPostMul_sExpSum =
|
|
CIsDominant ? {1'h0, io_c[63:52]} : _sExpAlignedProd_T_1[12:0] - 13'h35;
|
|
assign io_toPostMul_doSubMags = doSubMags;
|
|
assign io_toPostMul_CIsDominant = CIsDominant;
|
|
assign io_toPostMul_CDom_CAlignDist = CAlignDist[5:0];
|
|
assign io_toPostMul_highAlignedSigC = mainAlignedSigC[163:109];
|
|
assign io_toPostMul_bit0AlignedSigC =
|
|
doSubMags
|
|
? (&(mainAlignedSigC[2:0])) & _GEN == 13'h0
|
|
: (|{mainAlignedSigC[2:0], _GEN});
|
|
endmodule
|
|
|