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:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user