pipeline refactoring
This commit is contained in:
@@ -64,88 +64,159 @@
|
||||
|
||||
`define NC_BITS `LOG2UP(`NUM_CORES)
|
||||
|
||||
`define NB_BITS `LOG2UP(`NUM_BARRIERS)
|
||||
|
||||
`define REQS_BITS `LOG2UP(NUM_REQUESTS)
|
||||
|
||||
`define NUM_GPRS 32
|
||||
`define NUM_REGS 32
|
||||
|
||||
`define NR_BITS `LOG2UP(`NUM_REGS)
|
||||
|
||||
`define CSR_ADDR_SIZE 12
|
||||
|
||||
`define CSR_WIDTH 12
|
||||
|
||||
`define DIV_LATENCY 22
|
||||
`define DIV_LATENCY 2
|
||||
|
||||
`define MUL_LATENCY 2
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
`define BYTE_EN_NO 3'h7
|
||||
`define BYTE_EN_SB 3'h0
|
||||
`define BYTE_EN_SH 3'h1
|
||||
`define BYTE_EN_SW 3'h2
|
||||
`define BYTE_EN_UB 3'h4
|
||||
`define BYTE_EN_UH 3'h5
|
||||
`define BYTE_EN_BITS 3
|
||||
`define INST_LUI 7'b0110111
|
||||
`define INST_AUIPC 7'b0010111
|
||||
`define INST_JAL 7'b1101111
|
||||
`define INST_JALR 7'b1100111
|
||||
`define INST_B 7'b1100011
|
||||
`define INST_L 7'b0000011
|
||||
`define INST_S 7'b0100011
|
||||
`define INST_I 7'b0010011
|
||||
`define INST_R 7'b0110011
|
||||
`define INST_F 7'b0001111
|
||||
`define INST_SYS 7'b1110011
|
||||
`define INST_GPU 7'b1101011
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
`define OP_BITS 4
|
||||
|
||||
`define INST_R 7'd051
|
||||
`define INST_L 7'd003
|
||||
`define INST_ALU 7'd019
|
||||
`define INST_S 7'd035
|
||||
`define INST_B 7'd099
|
||||
`define INST_LUI 7'd055
|
||||
`define INST_AUIPC 7'd023
|
||||
`define INST_JAL 7'd111
|
||||
`define INST_JALR 7'd103
|
||||
`define INST_SYS 7'd115
|
||||
`define INST_GPGPU 7'd107
|
||||
`define ALU_ADD 4'h0
|
||||
`define ALU_SUB 4'h1
|
||||
`define ALU_SLL 4'h2
|
||||
`define ALU_SRL 4'h3
|
||||
`define ALU_SRA 4'h4
|
||||
`define ALU_SLT 4'h5
|
||||
`define ALU_SLTU 4'h6
|
||||
`define ALU_XOR 4'h7
|
||||
`define ALU_OR 4'h8
|
||||
`define ALU_AND 4'h9
|
||||
`define ALU_LUI 4'hA
|
||||
`define ALU_AUIPC 4'hB
|
||||
`define ALU_OTHER 4'hF
|
||||
`define ALU_BITS 4
|
||||
`define ALU_OP(x) x[`ALU_BITS-1:0]
|
||||
|
||||
`define RS2_IMMED 1
|
||||
`define RS2_REG 0
|
||||
`define MUL_MUL 3'h0
|
||||
`define MUL_MULH 3'h1
|
||||
`define MUL_MULHSU 3'h2
|
||||
`define MUL_MULHU 3'h3
|
||||
`define MUL_DIV 3'h4
|
||||
`define MUL_DIVU 3'h5
|
||||
`define MUL_REM 3'h6
|
||||
`define MUL_REMU 3'h7
|
||||
`define MUL_BITS 3
|
||||
`define MUL_OP(x) x[`MUL_BITS-1:0]
|
||||
`define IS_DIV_OP(x) x[2]
|
||||
|
||||
`define BR_NO 3'h0
|
||||
`define BR_EQ 3'h1
|
||||
`define BR_NE 3'h2
|
||||
`define BR_LT 3'h3
|
||||
`define BR_GT 3'h4
|
||||
`define BR_LTU 3'h5
|
||||
`define BR_GTU 3'h6
|
||||
`define BR_EQ 4'h0
|
||||
`define BR_NE 4'h1
|
||||
`define BR_LT 4'h2
|
||||
`define BR_GE 4'h3
|
||||
`define BR_LTU 4'h4
|
||||
`define BR_GEU 4'h5
|
||||
`define BR_JAL 4'h6
|
||||
`define BR_JALR 4'h7
|
||||
`define BR_ECALL 4'h8
|
||||
`define BR_EBREAK 4'h9
|
||||
`define BR_MRET 4'hA
|
||||
`define BR_SRET 4'hB
|
||||
`define BR_DRET 4'hC
|
||||
`define BR_OTHER 4'hF
|
||||
`define BR_BITS 4
|
||||
`define BR_OP(x) x[`BR_BITS-1:0]
|
||||
|
||||
`define ALU_NO 5'd15
|
||||
`define ALU_ADD 5'd00
|
||||
`define ALU_SUB 5'd01
|
||||
`define ALU_SLLA 5'd02
|
||||
`define ALU_SLT 5'd03
|
||||
`define ALU_SLTU 5'd04
|
||||
`define ALU_XOR 5'd05
|
||||
`define ALU_SRL 5'd06
|
||||
`define ALU_SRA 5'd07
|
||||
`define ALU_OR 5'd08
|
||||
`define ALU_AND 5'd09
|
||||
`define ALU_SUBU 5'd10
|
||||
`define ALU_LUI 5'd11
|
||||
`define ALU_AUIPC 5'd12
|
||||
`define ALU_CSR_RW 5'd13
|
||||
`define ALU_CSR_RS 5'd14
|
||||
`define ALU_CSR_RC 5'd15
|
||||
`define ALU_MUL 5'd16
|
||||
`define ALU_MULH 5'd17
|
||||
`define ALU_MULHSU 5'd18
|
||||
`define ALU_MULHU 5'd19
|
||||
`define ALU_DIV 5'd20
|
||||
`define ALU_DIVU 5'd21
|
||||
`define ALU_REM 5'd22
|
||||
`define ALU_REMU 5'd23
|
||||
`define BYTEEN_SB 3'h0
|
||||
`define BYTEEN_SH 3'h1
|
||||
`define BYTEEN_SW 3'h2
|
||||
`define BYTEEN_UB 3'h4
|
||||
`define BYTEEN_UH 3'h5
|
||||
`define BYTEEN_BITS 3
|
||||
`define LSU_BITS 4
|
||||
`define LSU_RW(x) x[3]
|
||||
`define LSU_BE(x) x[2:0]
|
||||
|
||||
`define CSR_RW 2'h0
|
||||
`define CSR_RS 2'h1
|
||||
`define CSR_RC 2'h2
|
||||
`define CSR_OTHER 2'h3
|
||||
`define CSR_BITS 2
|
||||
`define CSR_OP(x) x[`CSR_BITS-1:0]
|
||||
|
||||
`define GPU_TMC 3'h0
|
||||
`define GPU_WSPAWN 3'h1
|
||||
`define GPU_SPLIT 3'h2
|
||||
`define GPU_JOIN 3'h3
|
||||
`define GPU_BAR 3'h4
|
||||
`define GPU_OTHER 3'h7
|
||||
`define GPU_BITS 3
|
||||
`define GPU_OP(x) x[`GPU_BITS-1:0]
|
||||
|
||||
`define EX_NOP 3'h0
|
||||
`define EX_ALU 3'h1
|
||||
`define EX_BR 3'h2
|
||||
`define EX_MUL 3'h3
|
||||
`define EX_LSU 3'h4
|
||||
`define EX_FPU 3'h5
|
||||
`define EX_CSR 3'h6
|
||||
`define EX_GPU 3'h7
|
||||
`define EX_BITS 3
|
||||
|
||||
`define WB_NO 2'h0
|
||||
`define WB_ALU 2'h1
|
||||
`define WB_MEM 2'h2
|
||||
`define WB_JAL 2'h3
|
||||
`define WB_BITS 2
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
`ifdef DBG_CORE_REQ_INFO // pc, wb, rd, warp_num
|
||||
`define DEBUG_CORE_REQ_MDATA_WIDTH (32 + 2 + 5 + `NW_BITS)
|
||||
`define ISA_CODE (0 << 0) // A - Atomic Instructions extension \
|
||||
| (0 << 1) // B - Tentatively reserved for Bit operations extension \
|
||||
| (0 << 2) // C - Compressed extension \
|
||||
| (0 << 3) // D - Double precsision floating-point extension \
|
||||
| (0 << 4) // E - RV32E base ISA \
|
||||
| (0 << 5) // F - Single precsision floating-point extension \
|
||||
| (0 << 6) // G - Additional standard extensions present \
|
||||
| (0 << 7) // H - Hypervisor mode implemented \
|
||||
| (1 << 8) // I - RV32I/64I/128I base ISA \
|
||||
| (0 << 9) // J - Reserved \
|
||||
| (0 << 10) // K - Reserved \
|
||||
| (0 << 11) // L - Tentatively reserved for Bit operations extension \
|
||||
| (1 << 12) // M - Integer Multiply/Divide extension \
|
||||
| (0 << 13) // N - User level interrupts supported \
|
||||
| (0 << 14) // O - Reserved \
|
||||
| (0 << 15) // P - Tentatively reserved for Packed-SIMD extension \
|
||||
| (0 << 16) // Q - Quad-precision floating-point extension \
|
||||
| (0 << 17) // R - Reserved \
|
||||
| (0 << 18) // S - Supervisor mode implemented \
|
||||
| (0 << 19) // T - Tentatively reserved for Transactional Memory extension \
|
||||
| (1 << 20) // U - User mode implemented \
|
||||
| (0 << 21) // V - Tentatively reserved for Vector extension \
|
||||
| (0 << 22) // W - Reserved \
|
||||
| (1 << 23) // X - Non-standard extensions present \
|
||||
| (0 << 24) // Y - Reserved \
|
||||
| (0 << 25) // Z - Reserved
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
`ifdef DBG_CORE_REQ_INFO // pc, wb, rd, warp_num
|
||||
`define DEBUG_CORE_REQ_MDATA_WIDTH (32 + `WB_BITS + `NR_BITS + `NW_BITS)
|
||||
`else
|
||||
`define DEBUG_CORE_REQ_MDATA_WIDTH 0
|
||||
`endif
|
||||
@@ -288,9 +359,129 @@
|
||||
`define VX_DRAM_TAG_WIDTH `L3DRAM_TAG_WIDTH
|
||||
`define VX_SNP_TAG_WIDTH `L3SNP_TAG_WIDTH
|
||||
`define VX_CORE_TAG_WIDTH `L3CORE_TAG_WIDTH
|
||||
`define VX_CSR_ID_WIDTH `CLOG2(`NUM_CLUSTERS * `NUM_CORES)
|
||||
`define VX_CSR_ID_WIDTH `LOG2UP(`NUM_CLUSTERS * `NUM_CORES)
|
||||
|
||||
`define DRAM_TO_BYTE_ADDR(x) {x, (32-$bits(x))'(0)}
|
||||
|
||||
// VX_DEFINE
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
task print_ex_type;
|
||||
input [`EX_BITS-1:0] ex;
|
||||
begin
|
||||
case (ex)
|
||||
`EX_ALU: $write("ALU");
|
||||
`EX_BR: $write("BR");
|
||||
`EX_LSU: $write("LSU");
|
||||
`EX_CSR: $write("CSR");
|
||||
`EX_MUL: $write("MUL");
|
||||
`EX_FPU: $write("FPU");
|
||||
`EX_GPU: $write("GPU");
|
||||
default: $write("NOP");
|
||||
endcase
|
||||
end
|
||||
endtask
|
||||
|
||||
task print_instr_op;
|
||||
input [`EX_BITS-1:0] ex;
|
||||
input [`OP_BITS-1:0] op;
|
||||
begin
|
||||
case (ex)
|
||||
`EX_ALU: begin
|
||||
case (`ALU_BITS'(op))
|
||||
`ALU_ADD: $write("ADD");
|
||||
`ALU_SUB: $write("SUB");
|
||||
`ALU_SLL: $write("SLL");
|
||||
`ALU_SRL: $write("SRL");
|
||||
`ALU_SRA: $write("SRA");
|
||||
`ALU_SLT: $write("SLT");
|
||||
`ALU_SLTU: $write("SLTU");
|
||||
`ALU_XOR: $write("XOR");
|
||||
`ALU_OR: $write("OR");
|
||||
`ALU_AND: $write("AND");
|
||||
`ALU_LUI: $write("LUI");
|
||||
`ALU_AUIPC: $write("AUIPC");
|
||||
default: $write("?");
|
||||
endcase
|
||||
end
|
||||
`EX_BR: begin
|
||||
case (`BR_BITS'(op))
|
||||
`BR_EQ: $write("EQ");
|
||||
`BR_NE: $write("NE");
|
||||
`BR_LT: $write("LT");
|
||||
`BR_GE: $write("GE");
|
||||
`BR_LTU: $write("LTU");
|
||||
`BR_GEU: $write("GEU");
|
||||
`BR_JAL: $write("JAL");
|
||||
`BR_JALR: $write("JALR");
|
||||
`BR_ECALL: $write("ECALL");
|
||||
`BR_EBREAK: $write("EBREAK");
|
||||
`BR_MRET: $write("MRET");
|
||||
`BR_SRET: $write("SRET");
|
||||
`BR_DRET: $write("DRET");
|
||||
default: $write("?");
|
||||
endcase
|
||||
end
|
||||
`EX_MUL: begin
|
||||
case (`MUL_BITS'(op))
|
||||
`MUL_MUL: $write("MUL");
|
||||
`MUL_MULH: $write("MULH");
|
||||
`MUL_MULHSU: $write("MULHSU");
|
||||
`MUL_MULHU: $write("MULHU");
|
||||
`MUL_DIV: $write("DIV");
|
||||
`MUL_DIVU: $write("DIVU");
|
||||
`MUL_REM: $write("REM");
|
||||
`MUL_REMU: $write("REMU");
|
||||
default: $write("?");
|
||||
endcase
|
||||
end
|
||||
`EX_LSU: begin
|
||||
case (`LSU_BITS'(op))
|
||||
4'b0000: $write("LB");
|
||||
4'b0001: $write("LH");
|
||||
4'b0010: $write("LW");
|
||||
4'b0100: $write("LBU");
|
||||
4'b0101: $write("LHU");
|
||||
4'b1000: $write("SB");
|
||||
4'b1001: $write("SH");
|
||||
4'b1010: $write("SW");
|
||||
4'b1100: $write("SBU");
|
||||
4'b1101: $write("SHU");
|
||||
default: $write("?");
|
||||
endcase
|
||||
end
|
||||
`EX_CSR: begin
|
||||
case (`CSR_BITS'(op))
|
||||
`CSR_RW: $write("CSRW");
|
||||
`CSR_RS: $write("CSRS");
|
||||
`CSR_RC: $write("CSRC");
|
||||
default: $write("?");
|
||||
endcase
|
||||
end
|
||||
`EX_GPU: begin
|
||||
case (`GPU_BITS'(op))
|
||||
`GPU_TMC: $write("TMC");
|
||||
`GPU_WSPAWN: $write("WSPAWN");
|
||||
`GPU_SPLIT: $write("SPLIT");
|
||||
`GPU_JOIN: $write("JOIN");
|
||||
`GPU_BAR: $write("BAR");
|
||||
default: $write("?");
|
||||
endcase
|
||||
end
|
||||
default:;
|
||||
endcase
|
||||
end
|
||||
endtask
|
||||
|
||||
task print_wb;
|
||||
input [`WB_BITS-1:0] wb;
|
||||
begin
|
||||
case (wb)
|
||||
`WB_ALU: $write("ALU");
|
||||
`WB_MEM: $write("MEM");
|
||||
`WB_JAL: $write("JAL");
|
||||
default: $write("NO");
|
||||
endcase
|
||||
end
|
||||
endtask
|
||||
|
||||
`endif
|
||||
|
||||
Reference in New Issue
Block a user