fpu implementation (part1)
This commit is contained in:
@@ -8,10 +8,12 @@ module VX_scheduler #(
|
||||
|
||||
VX_decode_if decode_if,
|
||||
VX_wb_if writeback_if,
|
||||
input wire gpr_busy,
|
||||
input wire alu_busy,
|
||||
input wire lsu_busy,
|
||||
input wire csr_busy,
|
||||
input wire mul_busy,
|
||||
input wire fpu_busy,
|
||||
input wire gpu_busy,
|
||||
output wire schedule_delay,
|
||||
output wire is_empty
|
||||
@@ -19,23 +21,27 @@ module VX_scheduler #(
|
||||
localparam CTVW = `CLOG2(`NUM_WARPS * `NUM_REGS + 1);
|
||||
|
||||
reg [`NUM_REGS-1:0][`NUM_THREADS-1:0] rename_table [`NUM_WARPS-1:0];
|
||||
reg [`NUM_REGS-1:0] busy_table[`NUM_WARPS-1:0];
|
||||
reg [`NUM_REGS-1:0] busy_table [`NUM_WARPS-1:0];
|
||||
reg [CTVW-1:0] count_valid;
|
||||
|
||||
wire rs1_rename = busy_table[decode_if.warp_num][decode_if.rs1];
|
||||
wire rs2_rename = busy_table[decode_if.warp_num][decode_if.rs2];
|
||||
wire rs3_rename = busy_table[decode_if.warp_num][decode_if.rs3];
|
||||
wire rd_rename = busy_table[decode_if.warp_num][decode_if.rd];
|
||||
|
||||
wire rs1_rename_qual = (rs1_rename) && (decode_if.use_rs1);
|
||||
wire rs2_rename_qual = (rs2_rename) && (decode_if.use_rs2);
|
||||
wire rd_rename_qual = (rd_rename) && (decode_if.wb != 0);
|
||||
wire rs1_rename_qual = rs1_rename && decode_if.use_rs1;
|
||||
wire rs2_rename_qual = rs2_rename && decode_if.use_rs2;
|
||||
wire rs3_rename_qual = rs3_rename && decode_if.use_rs3;
|
||||
wire rd_rename_qual = rd_rename && decode_if.wb;
|
||||
|
||||
wire rename_valid = (rs1_rename_qual || rs2_rename_qual || rd_rename_qual);
|
||||
wire rename_valid = (rs1_rename_qual || rs2_rename_qual || rs3_rename_qual || rd_rename_qual);
|
||||
|
||||
wire ex_stalled = ((alu_busy && (decode_if.ex_type == `EX_ALU))
|
||||
wire ex_stalled = ((gpr_busy)
|
||||
|| (alu_busy && (decode_if.ex_type == `EX_ALU))
|
||||
|| (lsu_busy && (decode_if.ex_type == `EX_LSU))
|
||||
|| (csr_busy && (decode_if.ex_type == `EX_CSR))
|
||||
|| (mul_busy && (decode_if.ex_type == `EX_MUL))
|
||||
|| (fpu_busy && (decode_if.ex_type == `EX_FPU))
|
||||
|| (gpu_busy && (decode_if.ex_type == `EX_GPU)));
|
||||
|
||||
wire stall = (ex_stalled || rename_valid) && (| decode_if.valid);
|
||||
@@ -82,7 +88,7 @@ module VX_scheduler #(
|
||||
`ifdef DBG_PRINT_PIPELINE
|
||||
always @(posedge clk) begin
|
||||
if (stall) begin
|
||||
$display("%t: Core%0d-stall: warp=%0d, PC=%0h, rd=%0d, wb=%0d, rename=%b%b%b, alu=%b, lsu=%b, csr=%b, mul=%b, gpu=%b", $time, CORE_ID, decode_if.warp_num, decode_if.curr_PC, decode_if.rd, decode_if.wb, rd_rename_qual, rs1_rename_qual, rs2_rename_qual, alu_busy, lsu_busy, csr_busy, mul_busy, gpu_busy);
|
||||
$display("%t: Core%0d-stall: warp=%0d, PC=%0h, rd=%0d, wb=%0d, rename=%b%b%b, alu=%b, lsu=%b, csr=%b, mul=%b, fpu=%b, gpu=%b", $time, CORE_ID, decode_if.warp_num, decode_if.curr_PC, decode_if.rd, decode_if.wb, rd_rename_qual, rs1_rename_qual, rs2_rename_qual, alu_busy, lsu_busy, csr_busy, mul_busy, fpu_busy, gpu_busy);
|
||||
end
|
||||
end
|
||||
`endif
|
||||
|
||||
Reference in New Issue
Block a user