52 lines
1.5 KiB
Systemverilog
52 lines
1.5 KiB
Systemverilog
// Generated by CIRCT firtool-1.151.0
|
|
module FPUFMAPipe_l3_f32(
|
|
input clock,
|
|
reset,
|
|
io_in_valid,
|
|
io_in_bits_ren3,
|
|
io_in_bits_swap23,
|
|
input [2:0] io_in_bits_rm,
|
|
input [1:0] io_in_bits_fmaCmd,
|
|
input [64:0] io_in_bits_in1,
|
|
io_in_bits_in2,
|
|
io_in_bits_in3,
|
|
output [64:0] io_out_bits_data,
|
|
output [4:0] io_out_bits_exc
|
|
);
|
|
|
|
wire [32:0] _fma_io_out;
|
|
reg valid;
|
|
reg [2:0] in_rm;
|
|
reg [1:0] in_fmaCmd;
|
|
reg [64:0] in_in1;
|
|
reg [64:0] in_in2;
|
|
reg [64:0] in_in3;
|
|
always @(posedge clock) begin
|
|
valid <= io_in_valid;
|
|
if (io_in_valid) begin
|
|
in_rm <= io_in_bits_rm;
|
|
in_fmaCmd <= io_in_bits_fmaCmd;
|
|
in_in1 <= io_in_bits_in1;
|
|
in_in2 <= io_in_bits_swap23 ? 65'h80000000 : io_in_bits_in2;
|
|
in_in3 <=
|
|
io_in_bits_ren3 | io_in_bits_swap23
|
|
? io_in_bits_in3
|
|
: {32'h0, io_in_bits_in1[32] ^ io_in_bits_in2[32], 32'h0};
|
|
end
|
|
end // always @(posedge)
|
|
MulAddRecFNPipe_l2_e8_s24 fma (
|
|
.clock (clock),
|
|
.reset (reset),
|
|
.io_validin (valid),
|
|
.io_op (in_fmaCmd),
|
|
.io_a (in_in1[32:0]),
|
|
.io_b (in_in2[32:0]),
|
|
.io_c (in_in3[32:0]),
|
|
.io_roundingMode (in_rm),
|
|
.io_out (_fma_io_out),
|
|
.io_exceptionFlags (io_out_bits_exc)
|
|
);
|
|
assign io_out_bits_data = {32'h0, _fma_io_out};
|
|
endmodule
|
|
|