29 lines
1.1 KiB
Systemverilog
29 lines
1.1 KiB
Systemverilog
// Generated by CIRCT firtool-1.151.0
|
|
module RoundAnyRawFNToRecFN_1(
|
|
input io_in_isZero,
|
|
io_in_sign,
|
|
input [8:0] io_in_sExp,
|
|
input [64:0] io_in_sig,
|
|
input [2:0] io_roundingMode,
|
|
output [32:0] io_out,
|
|
output [4:0] io_exceptionFlags
|
|
);
|
|
|
|
wire roundingMode_near_even = io_roundingMode == 3'h0;
|
|
wire _adjustedSig_T_2 = |(io_in_sig[38:0]);
|
|
wire anyRound = |{io_in_sig[39], _adjustedSig_T_2};
|
|
wire [25:0] roundedSig =
|
|
(roundingMode_near_even | io_roundingMode == 3'h4) & io_in_sig[39]
|
|
| (io_roundingMode == 3'h2 & io_in_sign | io_roundingMode == 3'h3 & ~io_in_sign)
|
|
& anyRound
|
|
? {1'h0, io_in_sig[64:40]} + 26'h1
|
|
& {25'h1FFFFFF, ~(roundingMode_near_even & io_in_sig[39] & ~_adjustedSig_T_2)}
|
|
: {1'h0, io_in_sig[64:40]} | {25'h0, io_roundingMode == 3'h6 & anyRound};
|
|
assign io_out =
|
|
{io_in_sign,
|
|
io_in_sExp + {7'h0, roundedSig[25:24]} + 9'h80 & ~(io_in_isZero ? 9'h1C0 : 9'h0),
|
|
io_in_isZero ? 23'h0 : roundedSig[22:0]};
|
|
assign io_exceptionFlags = {4'h0, ~io_in_isZero & anyRound};
|
|
endmodule
|
|
|