added begin
This commit is contained in:
@@ -102,76 +102,76 @@ module VX_warp_scheduler (
|
|||||||
|
|
||||||
always @(posedge clk or posedge reset) begin
|
always @(posedge clk or posedge reset) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
warp_pcs[0] = (32'h80000000 - 4);
|
warp_pcs[0] <= (32'h80000000 - 4);
|
||||||
start = 0;
|
start <= 0;
|
||||||
warp_active[0] = 1; // Activating first warp
|
warp_active[0] <= 1; // Activating first warp
|
||||||
visible_active[0] = 1; // Activating first warp
|
visible_active[0] <= 1; // Activating first warp
|
||||||
thread_masks[0][0] = 1; // Activating first thread in first warp
|
thread_masks[0][0] <= 1; // Activating first thread in first warp
|
||||||
end
|
end else begin
|
||||||
|
// Wsapwning warps
|
||||||
// Wsapwning warps
|
if (wspawn && found_wspawn) begin
|
||||||
if (wspawn && found_wspawn) begin
|
warp_pcs[warp_to_wsapwn] <= wsapwn_pc;
|
||||||
warp_pcs[warp_to_wsapwn] <= wsapwn_pc;
|
warp_active[warp_to_wsapwn] <= 1;
|
||||||
warp_active[warp_to_wsapwn] <= 1;
|
visible_active[warp_to_wsapwn] <= 1;
|
||||||
visible_active[warp_to_wsapwn] <= 1;
|
end
|
||||||
end
|
// Halting warps
|
||||||
// Halting warps
|
if (whalt) begin
|
||||||
if (whalt) begin
|
warp_active[whalt_warp_num] <= 0;
|
||||||
warp_active[whalt_warp_num] <= 0;
|
visible_active[whalt_warp_num] <= 0;
|
||||||
visible_active[whalt_warp_num] <= 0;
|
|
||||||
end
|
|
||||||
|
|
||||||
// Changing thread masks
|
|
||||||
if (ctm) begin
|
|
||||||
thread_masks[ctm_warp_num] <= ctm_mask;
|
|
||||||
warp_stalled[ctm_warp_num] <= 0;
|
|
||||||
end
|
|
||||||
|
|
||||||
// Stalling the scheduling of warps
|
|
||||||
if (wstall) begin
|
|
||||||
warp_stalled[wstall_warp_num] <= 1;
|
|
||||||
visible_active[wstall_warp_num] <= 0;
|
|
||||||
end
|
|
||||||
|
|
||||||
if (is_split) begin
|
|
||||||
warp_stalled[split_warp_num] <= 0;
|
|
||||||
thread_masks[split_warp_num] <= split_new_mask;
|
|
||||||
end
|
|
||||||
|
|
||||||
if (is_join) begin
|
|
||||||
if (!join_fall) begin
|
|
||||||
warp_pcs[join_warp_num] <= join_pc;
|
|
||||||
end
|
end
|
||||||
thread_masks[join_warp_num] <= join_tm;
|
|
||||||
end
|
|
||||||
|
|
||||||
// Refilling active warps
|
// Changing thread masks
|
||||||
if ((visible_active == 0) && !(stall || wstall || hazard || is_join)) begin
|
if (ctm) begin
|
||||||
visible_active <= warp_active & (~warp_stalled);
|
thread_masks[ctm_warp_num] <= ctm_mask;
|
||||||
end
|
warp_stalled[ctm_warp_num] <= 0;
|
||||||
|
end
|
||||||
|
|
||||||
// First cycle
|
// Stalling the scheduling of warps
|
||||||
if (start <= 2) begin
|
if (wstall) begin
|
||||||
start <= 1;
|
warp_stalled[wstall_warp_num] <= 1;
|
||||||
visible_active <= warp_active & (~warp_stalled);
|
visible_active[wstall_warp_num] <= 0;
|
||||||
end
|
end
|
||||||
|
|
||||||
// Don't change state if stall
|
if (is_split) begin
|
||||||
if (!global_stall && real_schedule && (thread_mask != 0)) begin
|
warp_stalled[split_warp_num] <= 0;
|
||||||
visible_active[warp_to_schedule] <= 0;
|
thread_masks[split_warp_num] <= split_new_mask;
|
||||||
warp_pcs[warp_to_schedule] <= new_pc;
|
end
|
||||||
end
|
|
||||||
|
|
||||||
// Jal
|
if (is_join) begin
|
||||||
if (jal) begin
|
if (!join_fall) begin
|
||||||
warp_pcs[jal_warp_num] <= jal_dest;
|
warp_pcs[join_warp_num] <= join_pc;
|
||||||
warp_stalled[jal_warp_num] <= 0;
|
end
|
||||||
end
|
thread_masks[join_warp_num] <= join_tm;
|
||||||
|
end
|
||||||
|
|
||||||
// Branch
|
// Refilling active warps
|
||||||
if (branch_valid) begin
|
if ((visible_active == 0) && !(stall || wstall || hazard || is_join)) begin
|
||||||
if (branch_dir) warp_pcs[branch_warp_num] <= branch_dest;
|
visible_active <= warp_active & (~warp_stalled);
|
||||||
warp_stalled[branch_warp_num] <= 0;
|
end
|
||||||
|
|
||||||
|
// First cycle
|
||||||
|
if (start <= 2) begin
|
||||||
|
start <= 1;
|
||||||
|
visible_active <= warp_active & (~warp_stalled);
|
||||||
|
end
|
||||||
|
|
||||||
|
// Don't change state if stall
|
||||||
|
if (!global_stall && real_schedule && (thread_mask != 0)) begin
|
||||||
|
visible_active[warp_to_schedule] <= 0;
|
||||||
|
warp_pcs[warp_to_schedule] <= new_pc;
|
||||||
|
end
|
||||||
|
|
||||||
|
// Jal
|
||||||
|
if (jal) begin
|
||||||
|
warp_pcs[jal_warp_num] <= jal_dest;
|
||||||
|
warp_stalled[jal_warp_num] <= 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
// Branch
|
||||||
|
if (branch_valid) begin
|
||||||
|
if (branch_dir) warp_pcs[branch_warp_num] <= branch_dest;
|
||||||
|
warp_stalled[branch_warp_num] <= 0;
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user