Fix fence by disallowing x-initialization instead of all-0 mask

Setting mem_req_mask to all-zero triggers an assertion error in
mem_scheduler.  Instead, disallow initialize-by-x in instruction decode
which is the source of x-propagation.  Since this seems to only happen
in VCS, define-gate it accordingly.

This reverts commit a15f4fd483.
This commit is contained in:
Hansung Kim
2024-03-07 17:39:18 -08:00
parent 010c4675ce
commit 8317a3fbe5
2 changed files with 9 additions and 1 deletions

View File

@@ -148,13 +148,21 @@ module VX_decode #(
always @(*) begin
ex_type = '0;
`ifdef VCS
op_type = '0;
`else
op_type = 'x;
`endif
op_mod = '0;
rd_r = '0;
rs1_r = '0;
rs2_r = '0;
rs3_r = '0;
`ifdef VCS
imm = '0;
`else
imm = 'x;
`endif
use_imm = 0;
use_PC = 0;
use_rd = 0;

View File

@@ -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] = is_fence ? 1'b0 : (execute_if[0].data.tmask[i] && (~lsu_is_dup || (i == 0)));
assign mem_req_mask[i] = execute_if[0].data.tmask[i] && (~lsu_is_dup || (i == 0));
end
assign mem_req_rw = ~execute_if[0].data.wb;