From a15f4fd483591846ff7df0eb9ef3ca60f322b4b2 Mon Sep 17 00:00:00 2001 From: Hansung Kim Date: Thu, 1 Feb 2024 21:16:54 -0800 Subject: [PATCH] [BUGFIX] Set mem_req_mask to 0 for fence Fence instructions have address field set to X's which propagates to cache_req_ready, causing issue stalls. Fix this by setting req_mask to all-zero so that they can be handled unaffected by x-propagation. Setting req_valid to 0 does not fix the problem because the LSU only commits instructions when they have a matching response coming back. --- hw/rtl/core/VX_lsu_unit.sv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/rtl/core/VX_lsu_unit.sv b/hw/rtl/core/VX_lsu_unit.sv index b939b081..36aa76d5 100644 --- a/hw/rtl/core/VX_lsu_unit.sv +++ b/hw/rtl/core/VX_lsu_unit.sv @@ -160,7 +160,7 @@ module VX_lsu_unit import VX_gpu_pkg::*; #( && (~mem_req_rw || st_rsp_ready); // writes commit directly for (genvar i = 0; i < NUM_LANES; ++i) begin - assign mem_req_mask[i] = execute_if[0].data.tmask[i] && (~lsu_is_dup || (i == 0)); + assign mem_req_mask[i] = is_fence ? 1'b0 : (execute_if[0].data.tmask[i] && (~lsu_is_dup || (i == 0))); end assign mem_req_rw = ~execute_if[0].data.wb;