tensor: Fix race in inflight_tensor counter
This commit is contained in:
@@ -262,6 +262,13 @@ module VX_scoreboard import VX_gpu_pkg::*; #(
|
|||||||
$time, CORE_ID, wis_to_wid(ibuffer_if[i].data.wis, i))
|
$time, CORE_ID, wis_to_wid(ibuffer_if[i].data.wis, i))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
wire tensor_issue_fire;
|
||||||
|
wire tensor_writeback_fire;
|
||||||
|
// 'tensor' bit is only contained in the ghost commit/writebacks
|
||||||
|
// generated by the tensor unit
|
||||||
|
assign tensor_issue_fire = ibuffer_if[i].valid && ibuffer_if[i].ready && hgmma_start;
|
||||||
|
assign tensor_writeback_fire = writeback_fire && writeback_if[i].data.tensor;
|
||||||
|
|
||||||
always @(posedge clk) begin
|
always @(posedge clk) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
inuse_regs <= '0;
|
inuse_regs <= '0;
|
||||||
@@ -274,11 +281,13 @@ module VX_scoreboard import VX_gpu_pkg::*; #(
|
|||||||
inuse_regs[ibuffer_if[i].data.wis][ibuffer_if[i].data.rd] <= 1;
|
inuse_regs[ibuffer_if[i].data.wis][ibuffer_if[i].data.rd] <= 1;
|
||||||
end
|
end
|
||||||
`ifdef EXT_T_HOPPER
|
`ifdef EXT_T_HOPPER
|
||||||
if (writeback_fire && writeback_if[i].data.tensor) begin
|
if (tensor_writeback_fire) begin
|
||||||
inflight_tensor[writeback_if[i].data.wis] <=
|
// ensure no race condition
|
||||||
inflight_tensor[writeback_if[i].data.wis] - INFLT_WIDTH'(1);
|
if (!tensor_issue_fire) begin
|
||||||
end
|
inflight_tensor[writeback_if[i].data.wis] <=
|
||||||
if (ibuffer_if[i].valid && ibuffer_if[i].ready && hgmma_start) begin
|
inflight_tensor[writeback_if[i].data.wis] - INFLT_WIDTH'(1);
|
||||||
|
end
|
||||||
|
end else if (tensor_issue_fire) begin
|
||||||
inflight_tensor[ibuffer_if[i].data.wis] <=
|
inflight_tensor[ibuffer_if[i].data.wis] <=
|
||||||
inflight_tensor[ibuffer_if[i].data.wis] + INFLT_WIDTH'(1);
|
inflight_tensor[ibuffer_if[i].data.wis] + INFLT_WIDTH'(1);
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user