feat: add scalar fexp support

This commit is contained in:
Zhongdi LUO
2026-07-02 07:24:59 +00:00
parent 97a1eff701
commit 9251ba0a24
12 changed files with 327 additions and 14 deletions

View File

@@ -538,6 +538,18 @@ module VX_decode #(
endcase
end
end
`ifdef EXT_F_ENABLE
3'h2: begin
if (func7 == 7'h30 && rs2 == 5'd0) begin
ex_type = `EX_FPU;
op_type = `INST_OP_BITS'(`INST_FPU_MISC);
op_mod = `INST_MOD_BITS'(8); // FEXP.S
use_rd = 1;
`USED_FREG (rd);
`USED_FREG (rs1);
end
end
`endif
default:;
endcase
end

View File

@@ -145,6 +145,7 @@ module VX_fpu_unit import VX_fpu_pkg::*; #(
.valid_in (fpu_req_valid),
.op_type (execute_if[block_idx].data.op_type),
.op_mod (execute_if[block_idx].data.op_mod),
.lane_mask (execute_if[block_idx].data.tmask),
.fmt (fpu_fmt),
.frm (fpu_req_frm),
@@ -174,6 +175,7 @@ module VX_fpu_unit import VX_fpu_pkg::*; #(
.valid_in (fpu_req_valid),
.op_type (execute_if[block_idx].data.op_type),
.op_mod (execute_if[block_idx].data.op_mod),
.lane_mask (execute_if[block_idx].data.tmask),
.fmt (fpu_fmt),
.frm (fpu_req_frm),
@@ -204,6 +206,7 @@ module VX_fpu_unit import VX_fpu_pkg::*; #(
.valid_in (fpu_req_valid),
.lane_mask (execute_if[block_idx].data.tmask),
.op_type (execute_if[block_idx].data.op_type),
.op_mod (execute_if[block_idx].data.op_mod),
.fmt (fpu_fmt),
.frm (fpu_req_frm),
.dataa (execute_if[block_idx].data.rs1_data),

View File

@@ -327,6 +327,7 @@ task trace_ex_op(input int level,
`INST_FPU_MISC: begin
if (fdst_d) begin
case (op_mod)
8: `TRACE(level, ("FEXP.D"));
0: `TRACE(level, ("FSGNJ.D"));
1: `TRACE(level, ("FSGNJN.D"));
2: `TRACE(level, ("FSGNJX.D"));
@@ -338,6 +339,7 @@ task trace_ex_op(input int level,
endcase
end else begin
case (op_mod)
8: `TRACE(level, ("FEXP.S"));
0: `TRACE(level, ("FSGNJ.S"));
1: `TRACE(level, ("FSGNJN.S"));
2: `TRACE(level, ("FSGNJX.S"));