93 lines
3.2 KiB
Systemverilog
93 lines
3.2 KiB
Systemverilog
// Generated by CIRCT firtool-1.151.0
|
|
module FPToFP(
|
|
input clock,
|
|
reset,
|
|
io_in_valid,
|
|
io_in_bits_ren2,
|
|
input [1:0] io_in_bits_typeTagOut,
|
|
input io_in_bits_wflags,
|
|
input [2:0] io_in_bits_rm,
|
|
input [64:0] io_in_bits_in1,
|
|
io_in_bits_in2,
|
|
output [64:0] io_out_bits_data,
|
|
output [4:0] io_out_bits_exc,
|
|
input io_lt
|
|
);
|
|
|
|
wire [32:0] _narrower_io_out;
|
|
wire [4:0] _narrower_io_exceptionFlags;
|
|
reg in_pipe_v;
|
|
reg in_pipe_b_ren2;
|
|
reg [1:0] in_pipe_b_typeTagOut;
|
|
reg in_pipe_b_wflags;
|
|
reg [2:0] in_pipe_b_rm;
|
|
reg [64:0] in_pipe_b_in1;
|
|
reg [64:0] in_pipe_b_in2;
|
|
wire isnan1 = &(in_pipe_b_in1[63:61]);
|
|
wire isnan2 = &(in_pipe_b_in2[63:61]);
|
|
wire _GEN = in_pipe_b_wflags & ~in_pipe_b_ren2;
|
|
wire [64:0] fsgnjMux_data =
|
|
_GEN
|
|
? ((&(in_pipe_b_in1[63:61])) ? 65'hE008000000000000 : in_pipe_b_in1)
|
|
: in_pipe_b_wflags
|
|
? (isnan1 & isnan2
|
|
? 65'hE008000000000000
|
|
: isnan2 | in_pipe_b_rm[0] != io_lt & ~isnan1
|
|
? in_pipe_b_in1
|
|
: in_pipe_b_in2)
|
|
: {in_pipe_b_rm[1]
|
|
? in_pipe_b_in1[64] ^ in_pipe_b_in2[64]
|
|
: in_pipe_b_rm[0] ^ in_pipe_b_in2[64],
|
|
in_pipe_b_in1[63: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_ren2 <= io_in_bits_ren2;
|
|
in_pipe_b_typeTagOut <= io_in_bits_typeTagOut;
|
|
in_pipe_b_wflags <= io_in_bits_wflags;
|
|
in_pipe_b_rm <= io_in_bits_rm;
|
|
in_pipe_b_in1 <= io_in_bits_in1;
|
|
in_pipe_b_in2 <= io_in_bits_in2;
|
|
end
|
|
if (in_pipe_v) begin
|
|
automatic logic _GEN_0 = in_pipe_b_typeTagOut == 2'h0;
|
|
automatic logic [8:0] _mux_data_expOut_commonCase_T = fsgnjMux_data[60:52] - 9'h100;
|
|
io_out_pipe_b_data <=
|
|
_GEN_0
|
|
? (_GEN
|
|
? {fsgnjMux_data[64:33], _narrower_io_out}
|
|
: {fsgnjMux_data[64:33],
|
|
fsgnjMux_data[64],
|
|
fsgnjMux_data[63:61] == 3'h0 | fsgnjMux_data[63:61] > 3'h5
|
|
? {fsgnjMux_data[63:61], _mux_data_expOut_commonCase_T[5:0]}
|
|
: _mux_data_expOut_commonCase_T,
|
|
fsgnjMux_data[51:29]})
|
|
: fsgnjMux_data;
|
|
io_out_pipe_b_exc <=
|
|
_GEN & _GEN_0
|
|
? _narrower_io_exceptionFlags
|
|
: _GEN
|
|
? {(&(in_pipe_b_in1[63:61])) & ~(in_pipe_b_in1[51]), 4'h0}
|
|
: in_pipe_b_wflags
|
|
? {(&(in_pipe_b_in1[63:61])) & ~(in_pipe_b_in1[51])
|
|
| (&(in_pipe_b_in2[63:61])) & ~(in_pipe_b_in2[51]),
|
|
4'h0}
|
|
: 5'h0;
|
|
end
|
|
end // always @(posedge)
|
|
RecFNToRecFN narrower (
|
|
.io_in (in_pipe_b_in1),
|
|
.io_roundingMode (in_pipe_b_rm),
|
|
.io_out (_narrower_io_out),
|
|
.io_exceptionFlags (_narrower_io_exceptionFlags)
|
|
);
|
|
assign io_out_bits_data = io_out_pipe_b_data;
|
|
assign io_out_bits_exc = io_out_pipe_b_exc;
|
|
endmodule
|
|
|