accelerator cisc

This commit is contained in:
Richard Yan
2024-05-07 13:58:32 -07:00
parent 14d1552f08
commit c9a3eaad79
7 changed files with 66 additions and 12 deletions

View File

@@ -125,6 +125,12 @@ module Vortex import VX_gpu_pkg::*; #(
// output fpu_killm, // output fpu_killm,
// output fpu_keep_clock_enabled, // output fpu_keep_clock_enabled,
// accelerator cisc csr --------------------------------
input wire [31:0] acc_read_in,
output wire [31:0] acc_write_out,
output wire acc_write_en,
output finished, output finished,
input traceStall, input traceStall,
@@ -414,7 +420,11 @@ module Vortex import VX_gpu_pkg::*; #(
.sim_ebreak (sim_ebreak), .sim_ebreak (sim_ebreak),
.sim_wb_value (sim_wb_value), .sim_wb_value (sim_wb_value),
.busy (busy) .busy (busy),
.acc_read_in (acc_read_in),
.acc_write_out (acc_write_out),
.acc_write_en (acc_write_en)
); );
// VX_dcache_req_if #( // VX_dcache_req_if #(

View File

@@ -184,4 +184,7 @@
`define VX_CSR_NUM_WARPS 12'hFC1 `define VX_CSR_NUM_WARPS 12'hFC1
`define VX_CSR_NUM_CORES 12'hFC2 `define VX_CSR_NUM_CORES 12'hFC2
// CISC Accelerator Invocation
`define VX_CSR_ACCEL_CISC 12'hACC
`endif // VX_TYPES_VH `endif // VX_TYPES_VH

View File

@@ -47,7 +47,11 @@ module VX_core import VX_gpu_pkg::*; #(
output wire [`NUM_REGS-1:0][`XLEN-1:0] sim_wb_value, output wire [`NUM_REGS-1:0][`XLEN-1:0] sim_wb_value,
// Status // Status
output wire busy //stays 1 when busy, 0 when done (termination) detect the negative edge output wire busy, //stays 1 when busy, 0 when done (termination) detect the negative edge
input wire [31:0] acc_read_in,
output wire [31:0] acc_write_out,
output wire acc_write_en
); );
VX_schedule_if schedule_if(); VX_schedule_if schedule_if();
VX_fetch_if fetch_if(); VX_fetch_if fetch_if();
@@ -214,7 +218,11 @@ module VX_core import VX_gpu_pkg::*; #(
.lsu_commit_if (lsu_commit_if), .lsu_commit_if (lsu_commit_if),
.sfu_commit_if (sfu_commit_if), .sfu_commit_if (sfu_commit_if),
.sim_ebreak (sim_ebreak) .sim_ebreak (sim_ebreak),
.acc_read_in (acc_read_in),
.acc_write_out (acc_write_out),
.acc_write_en (acc_write_en)
); );
VX_commit #( VX_commit #(

View File

@@ -58,7 +58,11 @@ import VX_fpu_pkg::*;
input wire [`UUID_WIDTH-1:0] write_uuid, input wire [`UUID_WIDTH-1:0] write_uuid,
input wire [`NW_WIDTH-1:0] write_wid, input wire [`NW_WIDTH-1:0] write_wid,
input wire [`VX_CSR_ADDR_BITS-1:0] write_addr, input wire [`VX_CSR_ADDR_BITS-1:0] write_addr,
input wire [31:0] write_data input wire [31:0] write_data,
input wire [31:0] acc_read_in,
output wire [31:0] acc_write_out,
output wire acc_write_en
); );
`UNUSED_VAR (reset) `UNUSED_VAR (reset)
@@ -108,6 +112,9 @@ import VX_fpu_pkg::*;
end end
`endif `endif
assign acc_write_en = write_enable && (write_addr == `VX_CSR_ACCEL_CISC);
assign acc_write_out = write_data;
always @(posedge clk) begin always @(posedge clk) begin
if (write_enable) begin if (write_enable) begin
case (write_addr) case (write_addr)
@@ -116,6 +123,7 @@ import VX_fpu_pkg::*;
`VX_CSR_FRM, `VX_CSR_FRM,
`VX_CSR_FCSR, `VX_CSR_FCSR,
`endif `endif
`VX_CSR_ACCEL_CISC,
`VX_CSR_SATP, `VX_CSR_SATP,
`VX_CSR_MSTATUS, `VX_CSR_MSTATUS,
`VX_CSR_MNSTATUS, `VX_CSR_MNSTATUS,
@@ -143,7 +151,7 @@ import VX_fpu_pkg::*;
read_data_ro_r = '0; read_data_ro_r = '0;
read_data_rw_r = '0; read_data_rw_r = '0;
read_addr_valid_r = 1; read_addr_valid_r = 1;
case (read_addr) case (read_addr)
`VX_CSR_MVENDORID : read_data_ro_r = 32'(`VENDOR_ID); `VX_CSR_MVENDORID : read_data_ro_r = 32'(`VENDOR_ID);
`VX_CSR_MARCHID : read_data_ro_r = 32'(`ARCHITECTURE_ID); `VX_CSR_MARCHID : read_data_ro_r = 32'(`ARCHITECTURE_ID);
`VX_CSR_MIMPID : read_data_ro_r = 32'(`IMPLEMENTATION_ID); `VX_CSR_MIMPID : read_data_ro_r = 32'(`IMPLEMENTATION_ID);
@@ -179,6 +187,7 @@ import VX_fpu_pkg::*;
`VX_CSR_MEPC, `VX_CSR_MEPC,
`VX_CSR_PMPCFG0, `VX_CSR_PMPCFG0,
`VX_CSR_PMPADDR0 : read_data_ro_r = 32'(0); `VX_CSR_PMPADDR0 : read_data_ro_r = 32'(0);
`VX_CSR_ACCEL_CISC : read_data_ro_r = 32'(acc_read_in);
default: begin default: begin
read_addr_valid_r = 0; read_addr_valid_r = 0;

View File

@@ -34,7 +34,11 @@ module VX_csr_unit import VX_gpu_pkg::*; #(
VX_commit_csr_if.slave commit_csr_if, VX_commit_csr_if.slave commit_csr_if,
VX_sched_csr_if.slave sched_csr_if, VX_sched_csr_if.slave sched_csr_if,
VX_execute_if.slave execute_if, VX_execute_if.slave execute_if,
VX_commit_if.master commit_if VX_commit_if.master commit_if,
input wire [31:0] acc_read_in,
output wire [31:0] acc_write_out,
output wire acc_write_en
); );
`UNUSED_PARAM (CORE_ID) `UNUSED_PARAM (CORE_ID)
localparam PID_BITS = `CLOG2(`NUM_THREADS / NUM_LANES); localparam PID_BITS = `CLOG2(`NUM_THREADS / NUM_LANES);
@@ -102,7 +106,11 @@ module VX_csr_unit import VX_gpu_pkg::*; #(
.write_uuid (execute_if.data.uuid), .write_uuid (execute_if.data.uuid),
.write_wid (execute_if.data.wid), .write_wid (execute_if.data.wid),
.write_addr (csr_addr), .write_addr (csr_addr),
.write_data (csr_write_data) .write_data (csr_write_data),
.acc_read_in (acc_read_in),
.acc_write_out (acc_write_out),
.acc_write_en (acc_write_en)
); );
// CSR read // CSR read

View File

@@ -54,7 +54,11 @@ module VX_execute import VX_gpu_pkg::*; #(
VX_warp_ctl_if.master warp_ctl_if, VX_warp_ctl_if.master warp_ctl_if,
// simulation helper signals // simulation helper signals
output wire sim_ebreak output wire sim_ebreak,
input wire [31:0] acc_read_in,
output wire [31:0] acc_write_out,
output wire acc_write_en
); );
`ifdef EXT_F_ENABLE `ifdef EXT_F_ENABLE
@@ -124,7 +128,11 @@ module VX_execute import VX_gpu_pkg::*; #(
.commit_csr_if (commit_csr_if), .commit_csr_if (commit_csr_if),
.sched_csr_if (sched_csr_if), .sched_csr_if (sched_csr_if),
.warp_ctl_if (warp_ctl_if), .warp_ctl_if (warp_ctl_if),
.commit_if (sfu_commit_if) .commit_if (sfu_commit_if),
.acc_read_in (acc_read_in),
.acc_write_out (acc_write_out),
.acc_write_en (acc_write_en)
); );
// simulation helper signal to get RISC-V tests Pass/Fail status // simulation helper signal to get RISC-V tests Pass/Fail status

View File

@@ -37,7 +37,11 @@ module VX_sfu_unit import VX_gpu_pkg::*; #(
VX_commit_if.master commit_if [`ISSUE_WIDTH], VX_commit_if.master commit_if [`ISSUE_WIDTH],
VX_commit_csr_if.slave commit_csr_if, VX_commit_csr_if.slave commit_csr_if,
VX_sched_csr_if.slave sched_csr_if, VX_sched_csr_if.slave sched_csr_if,
VX_warp_ctl_if.master warp_ctl_if VX_warp_ctl_if.master warp_ctl_if,
input wire [31:0] acc_read_in,
output wire [31:0] acc_write_out,
output wire acc_write_en
); );
`UNUSED_PARAM (CORE_ID) `UNUSED_PARAM (CORE_ID)
localparam BLOCK_SIZE = 1; localparam BLOCK_SIZE = 1;
@@ -134,8 +138,12 @@ module VX_sfu_unit import VX_gpu_pkg::*; #(
.sched_csr_if (sched_csr_if), .sched_csr_if (sched_csr_if),
.commit_csr_if (commit_csr_if), .commit_csr_if (commit_csr_if),
.commit_if (csr_commit_if) .commit_if (csr_commit_if),
);
.acc_read_in (acc_read_in),
.acc_write_out (acc_write_out),
.acc_write_en (acc_write_en)
);
assign rsp_arb_valid_in[RSP_ARB_IDX_CSRS] = csr_commit_if.valid; assign rsp_arb_valid_in[RSP_ARB_IDX_CSRS] = csr_commit_if.valid;
assign rsp_arb_data_in[RSP_ARB_IDX_CSRS] = csr_commit_if.data; assign rsp_arb_data_in[RSP_ARB_IDX_CSRS] = csr_commit_if.data;