From 7a7fc6f57fb2a3b6a411c20911fb99fee7eddcb9 Mon Sep 17 00:00:00 2001 From: Maurus Item Date: Fri, 21 Jun 2024 16:57:46 +0200 Subject: [PATCH] Improved synchronization in case of faults in division and prevented potential cases where a bitflip causes a stall due to activating a division lane that does not exist. --- src/fpnew_aux_fsm.sv | 2 +- src/fpnew_opgroup_multifmt_slice.sv | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fpnew_aux_fsm.sv b/src/fpnew_aux_fsm.sv index 4b1c6013..7ab7763f 100644 --- a/src/fpnew_aux_fsm.sv +++ b/src/fpnew_aux_fsm.sv @@ -154,7 +154,7 @@ module fpnew_aux_fsm #( assign in_ready[NUM_INP_REGS] = fsm_in_ready; // Done when all active lanes are done - assign fsm_ready = &(lane_fsm_ready_i | ~held_lane_active); + assign fsm_ready = &lane_fsm_ready_i; // FSM to safely apply and receive data from DIVSQRT unit always_comb begin : flag_fsm diff --git a/src/fpnew_opgroup_multifmt_slice.sv b/src/fpnew_opgroup_multifmt_slice.sv index cc6f963a..390b918c 100644 --- a/src/fpnew_opgroup_multifmt_slice.sv +++ b/src/fpnew_opgroup_multifmt_slice.sv @@ -477,7 +477,7 @@ or on 16b inputs producing 32b outputs"); assign local_result = {(LANE_WIDTH){lane_ext_bit[0]}}; // sign-extend/nan box assign lane_status[lane] = '0; assign in_lane_active[lane] = 1'b0; // Lane does not exist, it can never be active - assign lane_fsm_ready[lane] = 1'b0; // Lane does not exist, it can not be ready + assign lane_fsm_ready[lane] = 1'b1; // Lane does not exist, it is always ready just in case erronous data gets to the FSM in this slot end // Generate result packing depending on float format