279 lines
20 KiB
Systemverilog
279 lines
20 KiB
Systemverilog
// Generated by CIRCT firtool-1.151.0
|
|
module IntToFP(
|
|
input clock,
|
|
reset,
|
|
io_in_valid,
|
|
input [1:0] io_in_bits_typeTagIn,
|
|
input io_in_bits_wflags,
|
|
input [2:0] io_in_bits_rm,
|
|
input [1:0] io_in_bits_typ,
|
|
input [63:0] io_in_bits_in1,
|
|
output [64:0] io_out_bits_data,
|
|
output [4:0] io_out_bits_exc
|
|
);
|
|
|
|
wire [64:0] _i2fResults_i2f_1_io_out;
|
|
wire [4:0] _i2fResults_i2f_1_io_exceptionFlags;
|
|
wire [32:0] _i2fResults_i2f_io_out;
|
|
wire [4:0] _i2fResults_i2f_io_exceptionFlags;
|
|
reg in_pipe_v;
|
|
reg [1:0] in_pipe_b_typeTagIn;
|
|
reg in_pipe_b_wflags;
|
|
reg [2:0] in_pipe_b_rm;
|
|
reg [1:0] in_pipe_b_typ;
|
|
reg [63:0] in_pipe_b_in1;
|
|
wire [63:0] intValue_res =
|
|
in_pipe_b_typ[1]
|
|
? in_pipe_b_in1
|
|
: {{32{~(in_pipe_b_typ[0]) & in_pipe_b_in1[31]}}, in_pipe_b_in1[31:0]};
|
|
reg [64:0] io_out_pipe_b_data;
|
|
reg [4:0] io_out_pipe_b_exc;
|
|
always @(posedge clock) begin
|
|
if (reset)
|
|
in_pipe_v <= 1'h0;
|
|
else
|
|
in_pipe_v <= io_in_valid;
|
|
if (io_in_valid) begin
|
|
in_pipe_b_typeTagIn <= io_in_bits_typeTagIn;
|
|
in_pipe_b_wflags <= io_in_bits_wflags;
|
|
in_pipe_b_rm <= io_in_bits_rm;
|
|
in_pipe_b_typ <= io_in_bits_typ;
|
|
in_pipe_b_in1 <= io_in_bits_in1;
|
|
end
|
|
if (in_pipe_v) begin
|
|
automatic logic [63:0] _mux_data_T_2 =
|
|
(in_pipe_b_typeTagIn[0] ? 64'h0 : 64'hFFFFFFFF00000000) | in_pipe_b_in1;
|
|
automatic logic mux_data_rawIn_isZeroExpIn = _mux_data_T_2[62:52] == 11'h0;
|
|
automatic logic _mux_data_rawIn_out_isNaN_T = |(_mux_data_T_2[51:0]);
|
|
automatic logic [5:0] mux_data_rawIn_normDist =
|
|
_mux_data_T_2[51]
|
|
? 6'h0
|
|
: _mux_data_T_2[50]
|
|
? 6'h1
|
|
: _mux_data_T_2[49]
|
|
? 6'h2
|
|
: _mux_data_T_2[48]
|
|
? 6'h3
|
|
: _mux_data_T_2[47]
|
|
? 6'h4
|
|
: _mux_data_T_2[46]
|
|
? 6'h5
|
|
: _mux_data_T_2[45]
|
|
? 6'h6
|
|
: _mux_data_T_2[44]
|
|
? 6'h7
|
|
: _mux_data_T_2[43]
|
|
? 6'h8
|
|
: _mux_data_T_2[42]
|
|
? 6'h9
|
|
: _mux_data_T_2[41]
|
|
? 6'hA
|
|
: _mux_data_T_2[40]
|
|
? 6'hB
|
|
: _mux_data_T_2[39]
|
|
? 6'hC
|
|
: _mux_data_T_2[38]
|
|
? 6'hD
|
|
: _mux_data_T_2[37]
|
|
? 6'hE
|
|
: _mux_data_T_2[36]
|
|
? 6'hF
|
|
: _mux_data_T_2[35]
|
|
? 6'h10
|
|
: _mux_data_T_2[34]
|
|
? 6'h11
|
|
: _mux_data_T_2[33]
|
|
? 6'h12
|
|
: _mux_data_T_2[32]
|
|
? 6'h13
|
|
: _mux_data_T_2[31]
|
|
? 6'h14
|
|
: _mux_data_T_2[30]
|
|
? 6'h15
|
|
: _mux_data_T_2[29]
|
|
? 6'h16
|
|
: _mux_data_T_2[28]
|
|
? 6'h17
|
|
: _mux_data_T_2[27]
|
|
? 6'h18
|
|
: _mux_data_T_2[26]
|
|
? 6'h19
|
|
: _mux_data_T_2[25]
|
|
? 6'h1A
|
|
: _mux_data_T_2[24]
|
|
? 6'h1B
|
|
: _mux_data_T_2[23]
|
|
? 6'h1C
|
|
: _mux_data_T_2[22]
|
|
? 6'h1D
|
|
: _mux_data_T_2[21]
|
|
? 6'h1E
|
|
: _mux_data_T_2[20]
|
|
? 6'h1F
|
|
: _mux_data_T_2[19]
|
|
? 6'h20
|
|
: _mux_data_T_2[18]
|
|
? 6'h21
|
|
: _mux_data_T_2[17]
|
|
? 6'h22
|
|
: _mux_data_T_2[16]
|
|
? 6'h23
|
|
: _mux_data_T_2[15]
|
|
? 6'h24
|
|
: _mux_data_T_2[14]
|
|
? 6'h25
|
|
: _mux_data_T_2[13]
|
|
? 6'h26
|
|
: _mux_data_T_2[12]
|
|
? 6'h27
|
|
: _mux_data_T_2[11]
|
|
? 6'h28
|
|
: _mux_data_T_2[10]
|
|
? 6'h29
|
|
: _mux_data_T_2[9]
|
|
? 6'h2A
|
|
: _mux_data_T_2[8]
|
|
? 6'h2B
|
|
: _mux_data_T_2[7]
|
|
? 6'h2C
|
|
: _mux_data_T_2[6]
|
|
? 6'h2D
|
|
: _mux_data_T_2[5]
|
|
? 6'h2E
|
|
: _mux_data_T_2[4]
|
|
? 6'h2F
|
|
: _mux_data_T_2[3]
|
|
? 6'h30
|
|
: _mux_data_T_2[2]
|
|
? 6'h31
|
|
: {5'h19,
|
|
~(_mux_data_T_2[1])};
|
|
automatic logic [11:0] _mux_data_rawIn_adjustedExp_T_4 =
|
|
(mux_data_rawIn_isZeroExpIn
|
|
? {6'h3F, ~mux_data_rawIn_normDist}
|
|
: {1'h0, _mux_data_T_2[62:52]})
|
|
+ {10'h100, mux_data_rawIn_isZeroExpIn ? 2'h2 : 2'h1};
|
|
automatic logic [114:0] _mux_data_rawIn_subnormFract_T =
|
|
{63'h0, _mux_data_T_2[51:0]} << mux_data_rawIn_normDist;
|
|
automatic logic [51:0] _mux_data_T_10 =
|
|
mux_data_rawIn_isZeroExpIn
|
|
? {_mux_data_rawIn_subnormFract_T[50:0], 1'h0}
|
|
: _mux_data_T_2[51:0];
|
|
automatic logic [2:0] _mux_data_T_4 =
|
|
mux_data_rawIn_isZeroExpIn & ~_mux_data_rawIn_out_isNaN_T
|
|
? 3'h0
|
|
: _mux_data_rawIn_adjustedExp_T_4[11:9];
|
|
automatic logic _GEN =
|
|
_mux_data_T_4[0] | (&(_mux_data_rawIn_adjustedExp_T_4[11:10]))
|
|
& _mux_data_rawIn_out_isNaN_T;
|
|
automatic logic mux_data_rawIn_isZeroExpIn_1 = _mux_data_T_2[30:23] == 8'h0;
|
|
automatic logic _mux_data_rawIn_out_isNaN_T_2 = |(_mux_data_T_2[22:0]);
|
|
automatic logic [4:0] mux_data_rawIn_normDist_1 =
|
|
_mux_data_T_2[22]
|
|
? 5'h0
|
|
: _mux_data_T_2[21]
|
|
? 5'h1
|
|
: _mux_data_T_2[20]
|
|
? 5'h2
|
|
: _mux_data_T_2[19]
|
|
? 5'h3
|
|
: _mux_data_T_2[18]
|
|
? 5'h4
|
|
: _mux_data_T_2[17]
|
|
? 5'h5
|
|
: _mux_data_T_2[16]
|
|
? 5'h6
|
|
: _mux_data_T_2[15]
|
|
? 5'h7
|
|
: _mux_data_T_2[14]
|
|
? 5'h8
|
|
: _mux_data_T_2[13]
|
|
? 5'h9
|
|
: _mux_data_T_2[12]
|
|
? 5'hA
|
|
: _mux_data_T_2[11]
|
|
? 5'hB
|
|
: _mux_data_T_2[10]
|
|
? 5'hC
|
|
: _mux_data_T_2[9]
|
|
? 5'hD
|
|
: _mux_data_T_2[8]
|
|
? 5'hE
|
|
: _mux_data_T_2[7]
|
|
? 5'hF
|
|
: _mux_data_T_2[6]
|
|
? 5'h10
|
|
: _mux_data_T_2[5]
|
|
? 5'h11
|
|
: _mux_data_T_2[4]
|
|
? 5'h12
|
|
: _mux_data_T_2[3]
|
|
? 5'h13
|
|
: _mux_data_T_2[2]
|
|
? 5'h14
|
|
: _mux_data_T_2[1]
|
|
? 5'h15
|
|
: 5'h16;
|
|
automatic logic [8:0] _mux_data_rawIn_adjustedExp_T_9 =
|
|
(mux_data_rawIn_isZeroExpIn_1
|
|
? {4'hF, ~mux_data_rawIn_normDist_1}
|
|
: {1'h0, _mux_data_T_2[30:23]})
|
|
+ {7'h20, mux_data_rawIn_isZeroExpIn_1 ? 2'h2 : 2'h1};
|
|
automatic logic [2:0] _mux_data_T_13 =
|
|
mux_data_rawIn_isZeroExpIn_1 & ~_mux_data_rawIn_out_isNaN_T_2
|
|
? 3'h0
|
|
: _mux_data_rawIn_adjustedExp_T_9[8:6];
|
|
automatic logic [64:0] i2fResults_1_1 =
|
|
({65{_i2fResults_i2f_1_io_out[63:61] != 3'h7}} | 65'h1EFEFFFFFFFFFFFFF)
|
|
& _i2fResults_i2f_1_io_out;
|
|
automatic logic [53:0] _mux_data_rawIn_subnormFract_T_2 =
|
|
{31'h0, _mux_data_T_2[22:0]} << mux_data_rawIn_normDist_1;
|
|
io_out_pipe_b_data <=
|
|
in_pipe_b_wflags
|
|
? (in_pipe_b_typeTagIn[0]
|
|
? i2fResults_1_1
|
|
: {i2fResults_1_1[64:33], _i2fResults_i2f_io_out})
|
|
: {_mux_data_T_2[63],
|
|
_mux_data_T_4[2:1],
|
|
_GEN,
|
|
(&{_mux_data_T_4[2:1], _GEN})
|
|
? {&(_mux_data_T_10[51:32]),
|
|
_mux_data_rawIn_adjustedExp_T_4[7:1],
|
|
_mux_data_T_13[2],
|
|
_mux_data_T_10[51:32],
|
|
_mux_data_T_2[31],
|
|
_mux_data_T_13[1],
|
|
_mux_data_T_13[0] | (&(_mux_data_rawIn_adjustedExp_T_9[8:7]))
|
|
& _mux_data_rawIn_out_isNaN_T_2,
|
|
_mux_data_rawIn_adjustedExp_T_9[5:0],
|
|
mux_data_rawIn_isZeroExpIn_1
|
|
? {_mux_data_rawIn_subnormFract_T_2[21:0], 1'h0}
|
|
: _mux_data_T_2[22:0]}
|
|
: {_mux_data_rawIn_adjustedExp_T_4[8:0], _mux_data_T_10}};
|
|
io_out_pipe_b_exc <=
|
|
in_pipe_b_wflags
|
|
? (in_pipe_b_typeTagIn[0]
|
|
? _i2fResults_i2f_1_io_exceptionFlags
|
|
: _i2fResults_i2f_io_exceptionFlags)
|
|
: 5'h0;
|
|
end
|
|
end // always @(posedge)
|
|
INToRecFN i2fResults_i2f (
|
|
.io_signedIn (~(in_pipe_b_typ[0])),
|
|
.io_in (intValue_res),
|
|
.io_roundingMode (in_pipe_b_rm),
|
|
.io_out (_i2fResults_i2f_io_out),
|
|
.io_exceptionFlags (_i2fResults_i2f_io_exceptionFlags)
|
|
);
|
|
INToRecFN_1 i2fResults_i2f_1 (
|
|
.io_signedIn (~(in_pipe_b_typ[0])),
|
|
.io_in (intValue_res),
|
|
.io_roundingMode (in_pipe_b_rm),
|
|
.io_out (_i2fResults_i2f_1_io_out),
|
|
.io_exceptionFlags (_i2fResults_i2f_1_io_exceptionFlags)
|
|
);
|
|
assign io_out_bits_data = io_out_pipe_b_data;
|
|
assign io_out_bits_exc = io_out_pipe_b_exc;
|
|
endmodule
|
|
|