blob: aa35e680df72919e7609577acc7ab205c41b102a [file] [log] [blame]
// description:
// 1. It will get uops from ALU Reservation station and execute this uop.
//
// feature list:
// 1. All are combinatorial logic.
// 2. All alu uop is executed and submit to ROB in 1 cycle.
// 3. Reuse arithmetic logic as much as possible.
// 4. Low-power design.
`include "rvv_backend.svh"
module rvv_backend_alu_unit
(
alu_uop_valid,
alu_uop,
result_valid,
result
);
//
// interface signals
//
// ALU RS handshake signals
input logic alu_uop_valid;
input ALU_RS_t alu_uop;
// ALU send result signals to ROB
output logic result_valid;
output PU2ROB_t result;
//
// internal signals
//
logic result_valid_addsub;
PU2ROB_t result_addsub;
logic result_valid_shift;
PU2ROB_t result_shift;
logic result_valid_mask;
PU2ROB_t result_mask;
//
// instance
//
rvv_backend_alu_unit_addsub u_alu_addsub
(
.alu_uop_valid (alu_uop_valid),
.alu_uop (alu_uop),
.result_valid (result_valid_addsub),
.result (result_addsub)
);
rvv_backend_alu_unit_shift u_alu_shift
(
.alu_uop_valid (alu_uop_valid),
.alu_uop (alu_uop),
.result_valid (result_valid_shift),
.result (result_shift)
);
rvv_backend_alu_unit_mask u_alu_mask
(
.alu_uop_valid (alu_uop_valid),
.alu_uop (alu_uop),
.result_valid (result_valid_mask),
.result (result_mask)
);
//
// submit to ROB
//
always_comb begin
// initial
result_valid = 'b0;
result = 'b0;
case(1'b1)
result_valid_addsub: begin
result_valid = 1'b1;
result = result_addsub;
end
result_valid_shift: begin
result_valid = 1'b1;
result = result_shift;
end
result_valid_mask: begin
result_valid = 1'b1;
result = result_mask;
end
endcase
end
endmodule