bug fixes
Some checks are pending
CI / setup (push) Waiting to run
CI / build (32) (push) Blocked by required conditions
CI / build (64) (push) Blocked by required conditions
CI / tests (cache, 32) (push) Blocked by required conditions
CI / tests (cache, 64) (push) Blocked by required conditions
CI / tests (config1, 32) (push) Blocked by required conditions
CI / tests (config1, 64) (push) Blocked by required conditions
CI / tests (config2, 32) (push) Blocked by required conditions
CI / tests (config2, 64) (push) Blocked by required conditions
CI / tests (debug, 32) (push) Blocked by required conditions
CI / tests (debug, 64) (push) Blocked by required conditions
CI / tests (opencl, 32) (push) Blocked by required conditions
CI / tests (opencl, 64) (push) Blocked by required conditions
CI / tests (regression, 32) (push) Blocked by required conditions
CI / tests (regression, 64) (push) Blocked by required conditions
CI / tests (scope, 32) (push) Blocked by required conditions
CI / tests (scope, 64) (push) Blocked by required conditions
CI / tests (stress, 32) (push) Blocked by required conditions
CI / tests (stress, 64) (push) Blocked by required conditions
CI / tests (synthesis, 32) (push) Blocked by required conditions
CI / tests (synthesis, 64) (push) Blocked by required conditions
CI / tests (vector, 32) (push) Blocked by required conditions
CI / tests (vector, 64) (push) Blocked by required conditions
CI / tests (vm, 32) (push) Blocked by required conditions
CI / tests (vm, 64) (push) Blocked by required conditions
CI / complete (push) Blocked by required conditions

This commit is contained in:
tinebp 2025-03-01 04:12:33 -08:00
parent b0d7e45dbd
commit aa5a0d2c66
2 changed files with 16 additions and 15 deletions

View file

@ -199,7 +199,7 @@ module VX_opc_unit import VX_gpu_pkg::*; #(
always @(*) begin
other_pending_regs = '0;
for (integer i = 0; i < `NUM_OPCS-1; ++i) begin
other_pending_regs = other_pending_regs | pending_regs_in[i] & {NUM_REGS{staging_if.data.wis == pending_wis_in[i]}};
other_pending_regs |= pending_regs_in[i] & {NUM_REGS{staging_if.data.wis == pending_wis_in[i]}};
end
end
wire war_dp_check = staging_if.data.wb && (other_pending_regs[rd] != 0);

View file

@ -53,20 +53,21 @@ module VX_operands import VX_gpu_pkg::*; #(
reg [`NUM_OPCS-1:0] select_opcs;
always @(*) begin
select_opcs = '1;
if (`NUM_OPCS > 1 && SIMD_COUNT > 1) begin
// SFU cannot handle multiple inflight WCTL instructions, always assign them same collector
// LD/ST instructions should also be ordered via the same collector
if (scoreboard_if.data.ex_type == EX_SFU
&& inst_sfu_is_wctl(scoreboard_if.data.op_type)) begin
// select collector 0
for (int i = 0; i < `NUM_OPCS; ++i) begin
if (i != 0) select_opcs[i] = 0;
end
end else if (scoreboard_if.data.ex_type == EX_LSU) begin
// select collector 1
for (int i = 0; i < `NUM_OPCS; ++i) begin
if (i != 1) select_opcs[i] = 0;
end
// SFU cannot handle multiple inflight WCTL instructions, should use same collector
if (`NUM_OPCS > 1 && SIMD_COUNT > 1
&& scoreboard_if.data.ex_type == EX_SFU
&& inst_sfu_is_wctl(scoreboard_if.data.op_type)) begin
// select collector 0
for (int i = 0; i < `NUM_OPCS; ++i) begin
if (i != 0) select_opcs[i] = 0;
end
end
// LSU cannot handle out of order LD/ST instructions, should use same collector
if (`NUM_OPCS > 1
&& scoreboard_if.data.ex_type == EX_LSU) begin
// select collector 1
for (int i = 0; i < `NUM_OPCS; ++i) begin
if (i != 1) select_opcs[i] = 0;
end
end
end