accelerator cisc
This commit is contained in:
@@ -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 #(
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 #(
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user