mirror of
https://github.com/vortexgpgpu/vortex.git
synced 2025-04-23 05:17:45 -04:00
138 lines
5.2 KiB
Systemverilog
138 lines
5.2 KiB
Systemverilog
`include "VX_define.vh"
|
|
|
|
module VX_commit #(
|
|
parameter CORE_ID = 0
|
|
) (
|
|
input wire clk,
|
|
input wire reset,
|
|
|
|
// inputs
|
|
VX_commit_if.slave alu_commit_if,
|
|
VX_commit_if.slave ld_commit_if,
|
|
VX_commit_if.slave st_commit_if,
|
|
VX_commit_if.slave csr_commit_if,
|
|
`ifdef EXT_F_ENABLE
|
|
VX_commit_if.slave fpu_commit_if,
|
|
`endif
|
|
VX_commit_if.slave gpu_commit_if,
|
|
|
|
// outputs
|
|
VX_writeback_if.master writeback_if,
|
|
VX_cmt_to_csr_if.master cmt_to_csr_if
|
|
);
|
|
// CSRs update
|
|
|
|
wire alu_commit_fire = alu_commit_if.valid && alu_commit_if.ready;
|
|
wire ld_commit_fire = ld_commit_if.valid && ld_commit_if.ready;
|
|
wire st_commit_fire = st_commit_if.valid && st_commit_if.ready;
|
|
wire csr_commit_fire = csr_commit_if.valid && csr_commit_if.ready;
|
|
`ifdef EXT_F_ENABLE
|
|
wire fpu_commit_fire = fpu_commit_if.valid && fpu_commit_if.ready;
|
|
`endif
|
|
wire gpu_commit_fire = gpu_commit_if.valid && gpu_commit_if.ready;
|
|
|
|
wire commit_fire = alu_commit_fire
|
|
|| ld_commit_fire
|
|
|| st_commit_fire
|
|
|| csr_commit_fire
|
|
`ifdef EXT_F_ENABLE
|
|
|| fpu_commit_fire
|
|
`endif
|
|
|| gpu_commit_fire;
|
|
|
|
`ifdef EXT_F_ENABLE
|
|
wire [(6*`NUM_THREADS)-1:0] commit_tmask;
|
|
`else
|
|
wire [(5*`NUM_THREADS)-1:0] commit_tmask;
|
|
`endif
|
|
|
|
wire [$clog2($bits(commit_tmask)+1)-1:0] commit_size;
|
|
|
|
assign commit_tmask = {
|
|
{`NUM_THREADS{alu_commit_fire}} & alu_commit_if.tmask,
|
|
{`NUM_THREADS{ld_commit_fire}} & ld_commit_if.tmask,
|
|
{`NUM_THREADS{st_commit_fire}} & st_commit_if.tmask,
|
|
{`NUM_THREADS{csr_commit_fire}} & csr_commit_if.tmask,
|
|
`ifdef EXT_F_ENABLE
|
|
{`NUM_THREADS{fpu_commit_fire}} & fpu_commit_if.tmask,
|
|
`endif
|
|
{`NUM_THREADS{gpu_commit_fire}} & gpu_commit_if.tmask
|
|
};
|
|
|
|
`POP_COUNT(commit_size, commit_tmask);
|
|
|
|
VX_pipe_register #(
|
|
.DATAW (1 + $bits(commit_size)),
|
|
.RESETW (1)
|
|
) pipe_reg (
|
|
.clk (clk),
|
|
.reset (reset),
|
|
.enable (1'b1),
|
|
.data_in ({commit_fire, commit_size}),
|
|
.data_out ({cmt_to_csr_if.valid, cmt_to_csr_if.commit_size})
|
|
);
|
|
|
|
// Writeback
|
|
|
|
VX_writeback #(
|
|
.CORE_ID(CORE_ID)
|
|
) writeback (
|
|
.clk (clk),
|
|
.reset (reset),
|
|
|
|
.alu_commit_if (alu_commit_if),
|
|
.ld_commit_if (ld_commit_if),
|
|
.csr_commit_if (csr_commit_if),
|
|
`ifdef EXT_F_ENABLE
|
|
.fpu_commit_if (fpu_commit_if),
|
|
`endif
|
|
.gpu_commit_if (gpu_commit_if),
|
|
.writeback_if (writeback_if)
|
|
);
|
|
|
|
// store and gpu commits don't writeback
|
|
assign st_commit_if.ready = 1'b1;
|
|
|
|
`ifdef DBG_TRACE_CORE_PIPELINE
|
|
always @(posedge clk) begin
|
|
if (alu_commit_if.valid && alu_commit_if.ready) begin
|
|
dpi_trace("%d: core%0d-commit: wid=%0d, PC=%0h, ex=ALU, tmask=%b, wb=%0d, rd=%0d, data=", $time, CORE_ID, alu_commit_if.wid, alu_commit_if.PC, alu_commit_if.tmask, alu_commit_if.wb, alu_commit_if.rd);
|
|
`TRACE_ARRAY1D(alu_commit_if.data, `NUM_THREADS);
|
|
dpi_trace(" (#%0d)\n", alu_commit_if.uuid);
|
|
end
|
|
if (ld_commit_if.valid && ld_commit_if.ready) begin
|
|
dpi_trace("%d: core%0d-commit: wid=%0d, PC=%0h, ex=LSU, tmask=%b, wb=%0d, rd=%0d, data=", $time, CORE_ID, ld_commit_if.wid, ld_commit_if.PC, ld_commit_if.tmask, ld_commit_if.wb, ld_commit_if.rd);
|
|
`TRACE_ARRAY1D(ld_commit_if.data, `NUM_THREADS);
|
|
dpi_trace(" (#%0d)\n", ld_commit_if.uuid);
|
|
end
|
|
if (st_commit_if.valid && st_commit_if.ready) begin
|
|
dpi_trace("%d: core%0d-commit: wid=%0d, PC=%0h, ex=LSU, tmask=%b, wb=%0d, rd=%0d (#%0d)\n", $time, CORE_ID, st_commit_if.wid, st_commit_if.PC, st_commit_if.tmask, st_commit_if.wb, st_commit_if.rd, st_commit_if.uuid);
|
|
end
|
|
if (csr_commit_if.valid && csr_commit_if.ready) begin
|
|
dpi_trace("%d: core%0d-commit: wid=%0d, PC=%0h, ex=CSR, tmask=%b, wb=%0d, rd=%0d, data=", $time, CORE_ID, csr_commit_if.wid, csr_commit_if.PC, csr_commit_if.tmask, csr_commit_if.wb, csr_commit_if.rd);
|
|
`TRACE_ARRAY1D(csr_commit_if.data, `NUM_THREADS);
|
|
dpi_trace(" (#%0d)\n", csr_commit_if.uuid);
|
|
end
|
|
`ifdef EXT_F_ENABLE
|
|
if (fpu_commit_if.valid && fpu_commit_if.ready) begin
|
|
dpi_trace("%d: core%0d-commit: wid=%0d, PC=%0h, ex=FPU, tmask=%b, wb=%0d, rd=%0d, data=", $time, CORE_ID, fpu_commit_if.wid, fpu_commit_if.PC, fpu_commit_if.tmask, fpu_commit_if.wb, fpu_commit_if.rd);
|
|
`TRACE_ARRAY1D(fpu_commit_if.data, `NUM_THREADS);
|
|
dpi_trace(" (#%0d)\n", fpu_commit_if.uuid);
|
|
end
|
|
`endif
|
|
if (gpu_commit_if.valid && gpu_commit_if.ready) begin
|
|
dpi_trace("%d: core%0d-commit: wid=%0d, PC=%0h, ex=GPU, tmask=%b, wb=%0d, rd=%0d, data=", $time, CORE_ID, gpu_commit_if.wid, gpu_commit_if.PC, gpu_commit_if.tmask, gpu_commit_if.wb, gpu_commit_if.rd);
|
|
`TRACE_ARRAY1D(gpu_commit_if.data, `NUM_THREADS);
|
|
dpi_trace(" (#%0d)\n", gpu_commit_if.uuid);
|
|
end
|
|
end
|
|
`endif
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|