mirror of
https://github.com/vortexgpgpu/vortex.git
synced 2025-04-23 21:39:10 -04:00
querying num_barriers device caps
This commit is contained in:
parent
82908a3026
commit
98ead77405
6 changed files with 185 additions and 171 deletions
|
@ -1,10 +1,10 @@
|
|||
// Copyright © 2019-2023
|
||||
//
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
|
@ -62,7 +62,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
localparam CCI_RW_PENDING_SIZE= 256;
|
||||
|
||||
localparam AFU_ID_L = 16'h0002; // AFU ID Lower
|
||||
localparam AFU_ID_H = 16'h0004; // AFU ID Higher
|
||||
localparam AFU_ID_H = 16'h0004; // AFU ID Higher
|
||||
|
||||
localparam CMD_MEM_READ = `AFU_IMAGE_CMD_MEM_READ;
|
||||
localparam CMD_MEM_WRITE = `AFU_IMAGE_CMD_MEM_WRITE;
|
||||
|
@ -70,15 +70,15 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
localparam CMD_RUN = `AFU_IMAGE_CMD_RUN;
|
||||
localparam CMD_TYPE_WIDTH = `CLOG2(`AFU_IMAGE_CMD_MAX_VALUE+1);
|
||||
|
||||
localparam MMIO_CMD_TYPE = `AFU_IMAGE_MMIO_CMD_TYPE;
|
||||
localparam MMIO_CMD_TYPE = `AFU_IMAGE_MMIO_CMD_TYPE;
|
||||
localparam MMIO_CMD_ARG0 = `AFU_IMAGE_MMIO_CMD_ARG0;
|
||||
localparam MMIO_CMD_ARG1 = `AFU_IMAGE_MMIO_CMD_ARG1;
|
||||
localparam MMIO_CMD_ARG2 = `AFU_IMAGE_MMIO_CMD_ARG2;
|
||||
localparam MMIO_STATUS = `AFU_IMAGE_MMIO_STATUS;
|
||||
|
||||
localparam COUT_TID_WIDTH = `CLOG2(`VX_MEM_BYTEEN_WIDTH);
|
||||
localparam COUT_TID_WIDTH = `CLOG2(`VX_MEM_BYTEEN_WIDTH);
|
||||
localparam COUT_QUEUE_DATAW = COUT_TID_WIDTH + 8;
|
||||
localparam COUT_QUEUE_SIZE = 64;
|
||||
localparam COUT_QUEUE_SIZE = 64;
|
||||
|
||||
localparam MMIO_DEV_CAPS = `AFU_IMAGE_MMIO_DEV_CAPS;
|
||||
localparam MMIO_ISA_CAPS = `AFU_IMAGE_MMIO_ISA_CAPS;
|
||||
|
@ -96,15 +96,16 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
|
||||
wire [127:0] afu_id = `AFU_ACCEL_UUID;
|
||||
|
||||
wire [63:0] dev_caps = {16'b0,
|
||||
wire [63:0] dev_caps = {8'b0,
|
||||
8'(`LMEM_ENABLED ? `LMEM_LOG_SIZE : 0),
|
||||
16'(`NUM_CORES * `NUM_CLUSTERS),
|
||||
8'(`NUM_WARPS),
|
||||
8'(`NUM_THREADS),
|
||||
8'(`NUM_BARRIERS),
|
||||
16'(`NUM_CORES * `NUM_CLUSTERS),
|
||||
8'(`NUM_WARPS),
|
||||
8'(`NUM_THREADS),
|
||||
8'(`IMPLEMENTATION_ID)};
|
||||
|
||||
wire [63:0] isa_caps = {32'(`MISA_EXT),
|
||||
2'(`CLOG2(`XLEN)-4),
|
||||
wire [63:0] isa_caps = {32'(`MISA_EXT),
|
||||
2'(`CLOG2(`XLEN)-4),
|
||||
30'(`MISA_STD)};
|
||||
|
||||
reg [STATE_WIDTH-1:0] state;
|
||||
|
@ -161,7 +162,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
|
||||
reg scope_bus_in;
|
||||
wire scope_bus_out;
|
||||
|
||||
|
||||
reg [5:0] scope_bus_ctr;
|
||||
|
||||
wire scope_reset = reset;
|
||||
|
@ -177,8 +178,8 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
scope_bus_ctr <= 63;
|
||||
end
|
||||
scope_bus_in <= 0;
|
||||
if (cp2af_sRxPort.c0.mmioWrValid
|
||||
&& (MMIO_SCOPE_WRITE == mmio_hdr.address)) begin
|
||||
if (cp2af_sRxPort.c0.mmioWrValid
|
||||
&& (MMIO_SCOPE_WRITE == mmio_hdr.address)) begin
|
||||
cmd_scope_wdata <= 64'(cp2af_sRxPort.c0.data);
|
||||
cmd_scope_writing <= 1;
|
||||
scope_bus_ctr <= 63;
|
||||
|
@ -191,7 +192,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
if (scope_bus_ctr == 0) begin
|
||||
cmd_scope_writing <= 0;
|
||||
end
|
||||
end
|
||||
end
|
||||
if (cmd_scope_reading) begin
|
||||
cmd_scope_rdata <= {cmd_scope_rdata[62:0], scope_bus_out};
|
||||
scope_bus_ctr <= scope_bus_ctr - 1;
|
||||
|
@ -211,7 +212,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
// disable assertions until full reset
|
||||
reg [`CLOG2(`RESET_DELAY+1)-1:0] assert_delay_ctr;
|
||||
initial begin
|
||||
$assertoff;
|
||||
$assertoff;
|
||||
end
|
||||
always @(posedge clk) begin
|
||||
if (reset) begin
|
||||
|
@ -231,15 +232,15 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
mmio_tx.mmioRdValid <= 0;
|
||||
mmio_tx.hdr <= '0;
|
||||
end else begin
|
||||
mmio_tx.mmioRdValid <= cp2af_sRxPort.c0.mmioRdValid;
|
||||
mmio_tx.hdr.tid <= mmio_hdr.tid;
|
||||
mmio_tx.mmioRdValid <= cp2af_sRxPort.c0.mmioRdValid;
|
||||
mmio_tx.hdr.tid <= mmio_hdr.tid;
|
||||
end
|
||||
// serve MMIO write request
|
||||
if (cp2af_sRxPort.c0.mmioWrValid) begin
|
||||
case (mmio_hdr.address)
|
||||
MMIO_CMD_ARG0: begin
|
||||
cmd_args[0] <= 64'(cp2af_sRxPort.c0.data);
|
||||
`ifdef DBG_TRACE_AFU
|
||||
`ifdef DBG_TRACE_AFU
|
||||
`TRACE(2, ("%d: MMIO_CMD_ARG0: data=0x%0h\n", $time, 64'(cp2af_sRxPort.c0.data)));
|
||||
`endif
|
||||
end
|
||||
|
@ -284,7 +285,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
8'b0, // reserved
|
||||
4'b0, // afu minor revision = 0
|
||||
7'b0, // reserved
|
||||
1'b1, // end of DFH list = 1
|
||||
1'b1, // end of DFH list = 1
|
||||
24'b0, // next DFH offset = 0
|
||||
4'b0, // afu major revision = 0
|
||||
12'b0 // feature ID = 0
|
||||
|
@ -314,7 +315,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
`ifdef DBG_TRACE_AFU
|
||||
`TRACE(2, ("%d: MMIO_DEV_CAPS: data=0x%0h\n", $time, dev_caps));
|
||||
`endif
|
||||
end
|
||||
end
|
||||
MMIO_ISA_CAPS: begin
|
||||
mmio_tx.data <= isa_caps;
|
||||
`ifdef DBG_TRACE_AFU
|
||||
|
@ -352,41 +353,41 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
end
|
||||
|
||||
wire is_mmio_wr_cmd = cp2af_sRxPort.c0.mmioWrValid && (MMIO_CMD_TYPE == mmio_hdr.address);
|
||||
wire [CMD_TYPE_WIDTH-1:0] cmd_type = is_mmio_wr_cmd ?
|
||||
wire [CMD_TYPE_WIDTH-1:0] cmd_type = is_mmio_wr_cmd ?
|
||||
CMD_TYPE_WIDTH'(cp2af_sRxPort.c0.data) : CMD_TYPE_WIDTH'(0);
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (reset) begin
|
||||
state <= STATE_IDLE;
|
||||
vx_busy_wait <= 0;
|
||||
vx_running <= 0;
|
||||
vx_running <= 0;
|
||||
end else begin
|
||||
case (state)
|
||||
STATE_IDLE: begin
|
||||
STATE_IDLE: begin
|
||||
case (cmd_type)
|
||||
CMD_MEM_READ: begin
|
||||
CMD_MEM_READ: begin
|
||||
`ifdef DBG_TRACE_AFU
|
||||
`TRACE(2, ("%d: STATE MEM_READ: ia=0x%0h addr=0x%0h size=%0d\n", $time, cmd_io_addr, cmd_mem_addr, cmd_data_size));
|
||||
`endif
|
||||
state <= STATE_MEM_READ;
|
||||
end
|
||||
CMD_MEM_WRITE: begin
|
||||
state <= STATE_MEM_READ;
|
||||
end
|
||||
CMD_MEM_WRITE: begin
|
||||
`ifdef DBG_TRACE_AFU
|
||||
`TRACE(2, ("%d: STATE MEM_WRITE: ia=0x%0h addr=0x%0h size=%0d\n", $time, cmd_io_addr, cmd_mem_addr, cmd_data_size));
|
||||
`endif
|
||||
state <= STATE_MEM_WRITE;
|
||||
end
|
||||
CMD_DCR_WRITE: begin
|
||||
CMD_DCR_WRITE: begin
|
||||
`ifdef DBG_TRACE_AFU
|
||||
`TRACE(2, ("%d: STATE DCR_WRITE: addr=0x%0h data=%0d\n", $time, cmd_dcr_addr, cmd_dcr_data));
|
||||
`endif
|
||||
state <= STATE_DCR_WRITE;
|
||||
end
|
||||
CMD_RUN: begin
|
||||
CMD_RUN: begin
|
||||
`ifdef DBG_TRACE_AFU
|
||||
`TRACE(2, ("%d: STATE RUN\n", $time));
|
||||
`endif
|
||||
state <= STATE_RUN;
|
||||
`endif
|
||||
state <= STATE_RUN;
|
||||
vx_running <= 0;
|
||||
end
|
||||
default: begin
|
||||
|
@ -425,7 +426,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
end
|
||||
end else begin
|
||||
// wait until the gpu is not busy
|
||||
if (~vx_busy) begin
|
||||
if (~vx_busy) begin
|
||||
state <= STATE_IDLE;
|
||||
`ifdef DBG_TRACE_AFU
|
||||
`TRACE(2, ("%d: AFU: End execution\n", $time));
|
||||
|
@ -441,8 +442,8 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
`endif
|
||||
vx_running <= 1;
|
||||
vx_busy_wait <= 1;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
default:;
|
||||
endcase
|
||||
|
@ -462,7 +463,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
wire [CCI_ADDR_WIDTH-1:0] cci_mem_req_tag;
|
||||
wire cci_mem_req_ready;
|
||||
|
||||
wire cci_mem_rsp_valid;
|
||||
wire cci_mem_rsp_valid;
|
||||
wire [CCI_DATA_WIDTH-1:0] cci_mem_rsp_data;
|
||||
wire [CCI_ADDR_WIDTH-1:0] cci_mem_rsp_tag;
|
||||
wire cci_mem_rsp_ready;
|
||||
|
@ -478,10 +479,10 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
`RESET_RELAY (cci_adapter_reset, reset);
|
||||
|
||||
VX_mem_adapter #(
|
||||
.SRC_DATA_WIDTH (CCI_DATA_WIDTH),
|
||||
.DST_DATA_WIDTH (LMEM_DATA_WIDTH),
|
||||
.SRC_ADDR_WIDTH (CCI_ADDR_WIDTH),
|
||||
.DST_ADDR_WIDTH (LMEM_ADDR_WIDTH),
|
||||
.SRC_DATA_WIDTH (CCI_DATA_WIDTH),
|
||||
.DST_DATA_WIDTH (LMEM_DATA_WIDTH),
|
||||
.SRC_ADDR_WIDTH (CCI_ADDR_WIDTH),
|
||||
.DST_ADDR_WIDTH (LMEM_ADDR_WIDTH),
|
||||
.SRC_TAG_WIDTH (CCI_ADDR_WIDTH),
|
||||
.DST_TAG_WIDTH (AVS_REQ_TAGW),
|
||||
.REQ_OUT_BUF (0),
|
||||
|
@ -495,12 +496,12 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
.mem_req_rw_in (cci_mem_req_rw),
|
||||
.mem_req_byteen_in ({CCI_DATA_SIZE{1'b1}}),
|
||||
.mem_req_data_in (cci_mem_req_data),
|
||||
.mem_req_tag_in (cci_mem_req_tag),
|
||||
.mem_req_ready_in (cci_mem_req_ready),
|
||||
.mem_req_tag_in (cci_mem_req_tag),
|
||||
.mem_req_ready_in (cci_mem_req_ready),
|
||||
|
||||
.mem_rsp_valid_in (cci_mem_rsp_valid),
|
||||
.mem_rsp_data_in (cci_mem_rsp_data),
|
||||
.mem_rsp_tag_in (cci_mem_rsp_tag),
|
||||
.mem_rsp_valid_in (cci_mem_rsp_valid),
|
||||
.mem_rsp_data_in (cci_mem_rsp_data),
|
||||
.mem_rsp_tag_in (cci_mem_rsp_tag),
|
||||
.mem_rsp_ready_in (cci_mem_rsp_ready),
|
||||
|
||||
.mem_req_valid_out (cci_vx_mem_bus_if[1].req_valid),
|
||||
|
@ -509,14 +510,14 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
.mem_req_byteen_out (cci_vx_mem_bus_if[1].req_data.byteen),
|
||||
.mem_req_data_out (cci_vx_mem_bus_if[1].req_data.data),
|
||||
.mem_req_tag_out (cci_vx_mem_bus_if[1].req_data.tag),
|
||||
.mem_req_ready_out (cci_vx_mem_bus_if[1].req_ready),
|
||||
.mem_req_ready_out (cci_vx_mem_bus_if[1].req_ready),
|
||||
|
||||
.mem_rsp_valid_out (cci_vx_mem_bus_if[1].rsp_valid),
|
||||
.mem_rsp_data_out (cci_vx_mem_bus_if[1].rsp_data.data),
|
||||
.mem_rsp_tag_out (cci_vx_mem_bus_if[1].rsp_data.tag),
|
||||
.mem_rsp_valid_out (cci_vx_mem_bus_if[1].rsp_valid),
|
||||
.mem_rsp_data_out (cci_vx_mem_bus_if[1].rsp_data.data),
|
||||
.mem_rsp_tag_out (cci_vx_mem_bus_if[1].rsp_data.tag),
|
||||
.mem_rsp_ready_out (cci_vx_mem_bus_if[1].rsp_ready)
|
||||
);
|
||||
|
||||
|
||||
assign cci_vx_mem_bus_if[1].req_data.atype = '0;
|
||||
`UNUSED_VAR (cci_vx_mem_bus_if[1].req_data.atype)
|
||||
|
||||
|
@ -532,8 +533,8 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
|
||||
VX_mem_adapter #(
|
||||
.SRC_DATA_WIDTH (`VX_MEM_DATA_WIDTH),
|
||||
.DST_DATA_WIDTH (LMEM_DATA_WIDTH),
|
||||
.SRC_ADDR_WIDTH (`VX_MEM_ADDR_WIDTH),
|
||||
.DST_DATA_WIDTH (LMEM_DATA_WIDTH),
|
||||
.SRC_ADDR_WIDTH (`VX_MEM_ADDR_WIDTH),
|
||||
.DST_ADDR_WIDTH (LMEM_ADDR_WIDTH),
|
||||
.SRC_TAG_WIDTH (`VX_MEM_TAG_WIDTH),
|
||||
.DST_TAG_WIDTH (AVS_REQ_TAGW),
|
||||
|
@ -548,12 +549,12 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
.mem_req_rw_in (vx_mem_req_rw),
|
||||
.mem_req_byteen_in (vx_mem_req_byteen),
|
||||
.mem_req_data_in (vx_mem_req_data),
|
||||
.mem_req_tag_in (vx_mem_req_tag),
|
||||
.mem_req_ready_in (vx_mem_req_ready_qual),
|
||||
.mem_req_tag_in (vx_mem_req_tag),
|
||||
.mem_req_ready_in (vx_mem_req_ready_qual),
|
||||
|
||||
.mem_rsp_valid_in (vx_mem_rsp_valid),
|
||||
.mem_rsp_data_in (vx_mem_rsp_data),
|
||||
.mem_rsp_tag_in (vx_mem_rsp_tag),
|
||||
.mem_rsp_valid_in (vx_mem_rsp_valid),
|
||||
.mem_rsp_data_in (vx_mem_rsp_data),
|
||||
.mem_rsp_tag_in (vx_mem_rsp_tag),
|
||||
.mem_rsp_ready_in (vx_mem_rsp_ready),
|
||||
|
||||
.mem_req_valid_out (cci_vx_mem_bus_if[0].req_valid),
|
||||
|
@ -562,11 +563,11 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
.mem_req_byteen_out (cci_vx_mem_bus_if[0].req_data.byteen),
|
||||
.mem_req_data_out (cci_vx_mem_bus_if[0].req_data.data),
|
||||
.mem_req_tag_out (cci_vx_mem_bus_if[0].req_data.tag),
|
||||
.mem_req_ready_out (cci_vx_mem_bus_if[0].req_ready),
|
||||
.mem_req_ready_out (cci_vx_mem_bus_if[0].req_ready),
|
||||
|
||||
.mem_rsp_valid_out (cci_vx_mem_bus_if[0].rsp_valid),
|
||||
.mem_rsp_data_out (cci_vx_mem_bus_if[0].rsp_data.data),
|
||||
.mem_rsp_tag_out (cci_vx_mem_bus_if[0].rsp_data.tag),
|
||||
.mem_rsp_valid_out (cci_vx_mem_bus_if[0].rsp_valid),
|
||||
.mem_rsp_data_out (cci_vx_mem_bus_if[0].rsp_data.data),
|
||||
.mem_rsp_tag_out (cci_vx_mem_bus_if[0].rsp_data.tag),
|
||||
.mem_rsp_ready_out (cci_vx_mem_bus_if[0].rsp_ready)
|
||||
);
|
||||
|
||||
|
@ -602,7 +603,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
`RESET_RELAY (avs_adapter_reset, reset);
|
||||
|
||||
VX_avs_adapter #(
|
||||
.DATA_WIDTH (LMEM_DATA_WIDTH),
|
||||
.DATA_WIDTH (LMEM_DATA_WIDTH),
|
||||
.ADDR_WIDTH (LMEM_ADDR_WIDTH),
|
||||
.BURST_WIDTH (LMEM_BURST_CTRW),
|
||||
.NUM_BANKS (NUM_LOCAL_MEM_BANKS),
|
||||
|
@ -614,7 +615,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
.clk (clk),
|
||||
.reset (avs_adapter_reset),
|
||||
|
||||
// Memory request
|
||||
// Memory request
|
||||
.mem_req_valid (mem_bus_if[0].req_valid),
|
||||
.mem_req_rw (mem_bus_if[0].req_data.rw),
|
||||
.mem_req_byteen (mem_bus_if[0].req_data.byteen),
|
||||
|
@ -623,7 +624,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
.mem_req_tag (mem_bus_if[0].req_data.tag),
|
||||
.mem_req_ready (mem_bus_if[0].req_ready),
|
||||
|
||||
// Memory response
|
||||
// Memory response
|
||||
.mem_rsp_valid (mem_bus_if[0].rsp_valid),
|
||||
.mem_rsp_data (mem_bus_if[0].rsp_data.data),
|
||||
.mem_rsp_tag (mem_bus_if[0].rsp_data.tag),
|
||||
|
@ -667,13 +668,13 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
always @(*) begin
|
||||
af2cp_sTxPort.c0.valid = cci_rd_req_fire;
|
||||
af2cp_sTxPort.c0.hdr = t_ccip_c0_ReqMemHdr'(0);
|
||||
af2cp_sTxPort.c0.hdr.address = cci_rd_req_addr;
|
||||
af2cp_sTxPort.c0.hdr.address = cci_rd_req_addr;
|
||||
af2cp_sTxPort.c0.hdr.mdata = t_ccip_mdata'(cci_rd_req_tag);
|
||||
end
|
||||
|
||||
wire cci_mem_wr_req_fire = cci_mem_wr_req_valid && cci_mem_req_ready;
|
||||
|
||||
wire cci_rd_rsp_fire = cp2af_sRxPort.c0.rspValid
|
||||
wire cci_rd_rsp_fire = cp2af_sRxPort.c0.rspValid
|
||||
&& (cp2af_sRxPort.c0.hdr.resp_type == eRSP_RDLINE);
|
||||
|
||||
assign cci_rd_req_tag = CCI_RD_QUEUE_TAGW'(cci_rd_req_ctr);
|
||||
|
@ -685,7 +686,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
|
||||
wire [`CLOG2(CCI_RD_QUEUE_SIZE+1)-1:0] cci_pending_reads;
|
||||
wire cci_pending_reads_full;
|
||||
VX_pending_size #(
|
||||
VX_pending_size #(
|
||||
.SIZE (CCI_RD_QUEUE_SIZE)
|
||||
) cci_rd_pending_size (
|
||||
.clk (clk),
|
||||
|
@ -712,29 +713,29 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
if (reset) begin
|
||||
cci_rd_req_valid <= 0;
|
||||
cci_rd_req_wait <= 0;
|
||||
end else begin
|
||||
if ((STATE_IDLE == state)
|
||||
end else begin
|
||||
if ((STATE_IDLE == state)
|
||||
&& (CMD_MEM_WRITE == cmd_type)) begin
|
||||
cci_rd_req_valid <= (cmd_data_size != 0);
|
||||
cci_rd_req_wait <= 0;
|
||||
end
|
||||
|
||||
cci_rd_req_valid <= (STATE_MEM_WRITE == state)
|
||||
cci_rd_req_valid <= (STATE_MEM_WRITE == state)
|
||||
&& (cci_rd_req_ctr_next != cmd_data_size)
|
||||
&& !cp2af_sRxPort.c0TxAlmFull;
|
||||
&& !cp2af_sRxPort.c0TxAlmFull;
|
||||
|
||||
if (cci_rd_req_fire
|
||||
if (cci_rd_req_fire
|
||||
&& (cci_rd_req_tag == CCI_RD_QUEUE_TAGW'(CCI_RD_WINDOW_SIZE-1))) begin
|
||||
cci_rd_req_wait <= 1; // end current request batch
|
||||
end
|
||||
|
||||
if (cci_rd_rsp_fire
|
||||
if (cci_rd_rsp_fire
|
||||
&& (cci_rd_rsp_ctr == CCI_RD_QUEUE_TAGW'(CCI_RD_WINDOW_SIZE-1))) begin
|
||||
cci_rd_req_wait <= 0; // begin new request batch
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if ((STATE_IDLE == state)
|
||||
if ((STATE_IDLE == state)
|
||||
&& (CMD_MEM_WRITE == cmd_type)) begin
|
||||
cci_rd_req_addr <= cmd_io_addr;
|
||||
cci_rd_req_ctr <= '0;
|
||||
|
@ -744,7 +745,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
cmd_mem_wr_done <= 0;
|
||||
end
|
||||
|
||||
if (cci_rd_req_fire) begin
|
||||
if (cci_rd_req_fire) begin
|
||||
cci_rd_req_addr <= cci_rd_req_addr + 1;
|
||||
cci_rd_req_ctr <= cci_rd_req_ctr + $bits(cci_rd_req_ctr)'(1);
|
||||
`ifdef DBG_TRACE_AFU
|
||||
|
@ -760,7 +761,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
`ifdef DBG_TRACE_AFU
|
||||
`TRACE(2, ("%d: CCI Rd Rsp: idx=%0d, ctr=%0d, data=0x%0h\n", $time, cci_rd_rsp_tag, cci_rd_rsp_ctr, cp2af_sRxPort.c0.data));
|
||||
`endif
|
||||
end
|
||||
end
|
||||
|
||||
if (cci_rdq_pop) begin
|
||||
`ifdef DBG_TRACE_AFU
|
||||
|
@ -768,7 +769,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
`endif
|
||||
end
|
||||
|
||||
if (cci_mem_wr_req_fire) begin
|
||||
if (cci_mem_wr_req_fire) begin
|
||||
cci_mem_wr_req_ctr <= cci_mem_wr_req_ctr + CCI_ADDR_WIDTH'(1);
|
||||
if (cci_mem_wr_req_ctr == (cmd_data_size-1)) begin
|
||||
cmd_mem_wr_done <= 1;
|
||||
|
@ -801,13 +802,13 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
if (reset) begin
|
||||
dbg_cci_rd_rsp_mask <= '0;
|
||||
end else begin
|
||||
if (cci_rd_rsp_fire) begin
|
||||
if (cci_rd_rsp_fire) begin
|
||||
if (cci_rd_rsp_ctr == 0) begin
|
||||
dbg_cci_rd_rsp_mask <= (CCI_RD_WINDOW_SIZE'(1) << cci_rd_rsp_tag);
|
||||
end else begin
|
||||
dbg_cci_rd_rsp_mask <= (CCI_RD_WINDOW_SIZE'(1) << cci_rd_rsp_tag);
|
||||
end else begin
|
||||
assert(!dbg_cci_rd_rsp_mask[cci_rd_rsp_tag]);
|
||||
dbg_cci_rd_rsp_mask[cci_rd_rsp_tag] <= 1;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -830,21 +831,21 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
af2cp_sTxPort.c1.hdr = t_ccip_c1_ReqMemHdr'(0);
|
||||
af2cp_sTxPort.c1.hdr.sop = 1; // single line write mode
|
||||
af2cp_sTxPort.c1.hdr.address = cci_wr_req_addr;
|
||||
af2cp_sTxPort.c1.data = cci_wr_req_data;
|
||||
end
|
||||
af2cp_sTxPort.c1.data = cci_wr_req_data;
|
||||
end
|
||||
|
||||
wire cci_mem_rd_req_fire = cci_mem_rd_req_valid && cci_mem_req_ready;
|
||||
wire cci_mem_rd_rsp_fire = cci_mem_rsp_valid && cci_mem_rsp_ready;
|
||||
|
||||
wire cci_wr_rsp_fire = (STATE_MEM_READ == state)
|
||||
&& cp2af_sRxPort.c1.rspValid
|
||||
wire cci_wr_rsp_fire = (STATE_MEM_READ == state)
|
||||
&& cp2af_sRxPort.c1.rspValid
|
||||
&& (cp2af_sRxPort.c1.hdr.resp_type == eRSP_WRLINE);
|
||||
|
||||
wire [`CLOG2(CCI_RW_PENDING_SIZE+1)-1:0] cci_pending_writes;
|
||||
wire cci_pending_writes_empty;
|
||||
wire cci_pending_writes_full;
|
||||
|
||||
VX_pending_size #(
|
||||
VX_pending_size #(
|
||||
.SIZE (CCI_RW_PENDING_SIZE)
|
||||
) cci_wr_pending_size (
|
||||
.clk (clk),
|
||||
|
@ -858,10 +859,10 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
|
||||
`UNUSED_VAR (cci_pending_writes)
|
||||
|
||||
assign cci_mem_rd_req_valid = (STATE_MEM_READ == state)
|
||||
assign cci_mem_rd_req_valid = (STATE_MEM_READ == state)
|
||||
&& ~cci_mem_rd_req_done;
|
||||
|
||||
assign cci_mem_rsp_ready = ~cp2af_sRxPort.c1TxAlmFull
|
||||
assign cci_mem_rsp_ready = ~cp2af_sRxPort.c1TxAlmFull
|
||||
&& ~cci_pending_writes_full;
|
||||
|
||||
assign cmd_mem_rd_done = cci_wr_req_done
|
||||
|
@ -874,29 +875,29 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
end else begin
|
||||
cci_wr_req_fire <= cci_mem_rd_rsp_fire;
|
||||
end
|
||||
|
||||
if ((STATE_IDLE == state)
|
||||
|
||||
if ((STATE_IDLE == state)
|
||||
&& (CMD_MEM_READ == cmd_type)) begin
|
||||
cci_mem_rd_req_ctr <= '0;
|
||||
cci_mem_rd_req_addr <= cmd_mem_addr;
|
||||
cci_mem_rd_req_done <= 0;
|
||||
cci_wr_req_ctr <= cmd_data_size;
|
||||
cci_wr_req_done <= 0;
|
||||
end
|
||||
end
|
||||
|
||||
if (cci_mem_rd_req_fire) begin
|
||||
cci_mem_rd_req_addr <= cci_mem_rd_req_addr + CCI_ADDR_WIDTH'(1);
|
||||
cci_mem_rd_req_addr <= cci_mem_rd_req_addr + CCI_ADDR_WIDTH'(1);
|
||||
cci_mem_rd_req_ctr <= cci_mem_rd_req_ctr + CCI_ADDR_WIDTH'(1);
|
||||
if (cci_mem_rd_req_ctr == (cmd_data_size-1)) begin
|
||||
cci_mem_rd_req_done <= 1;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
cci_wr_req_addr <= cmd_io_addr + t_ccip_clAddr'(cci_mem_rsp_tag);
|
||||
cci_wr_req_data <= t_ccip_clData'(cci_mem_rsp_data);
|
||||
cci_wr_req_data <= t_ccip_clData'(cci_mem_rsp_data);
|
||||
|
||||
if (cci_wr_req_fire) begin
|
||||
`ASSERT(cci_wr_req_ctr != 0, ("runtime error"));
|
||||
`ASSERT(cci_wr_req_ctr != 0, ("runtime error"));
|
||||
cci_wr_req_ctr <= cci_wr_req_ctr - CCI_ADDR_WIDTH'(1);
|
||||
if (cci_wr_req_ctr == CCI_ADDR_WIDTH'(1)) begin
|
||||
cci_wr_req_done <= 1;
|
||||
|
@ -906,10 +907,10 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
`endif
|
||||
end
|
||||
|
||||
if (cci_wr_rsp_fire) begin
|
||||
`ifdef DBG_TRACE_AFU
|
||||
`TRACE(2, ("%d: CCI Wr Rsp: pending=%0d\n", $time, cci_pending_writes));
|
||||
`endif
|
||||
if (cci_wr_rsp_fire) begin
|
||||
`ifdef DBG_TRACE_AFU
|
||||
`TRACE(2, ("%d: CCI Wr Rsp: pending=%0d\n", $time, cci_pending_writes));
|
||||
`endif
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -929,7 +930,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
wire vx_dcr_wr_valid = (STATE_DCR_WRITE == state);
|
||||
wire [`VX_DCR_ADDR_WIDTH-1:0] vx_dcr_wr_addr = cmd_dcr_addr;
|
||||
wire [`VX_DCR_DATA_WIDTH-1:0] vx_dcr_wr_data = cmd_dcr_data;
|
||||
|
||||
|
||||
`SCOPE_IO_SWITCH (2)
|
||||
|
||||
Vortex vortex (
|
||||
|
@ -938,7 +939,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
.clk (clk),
|
||||
.reset (reset || ~vx_running),
|
||||
|
||||
// Memory request
|
||||
// Memory request
|
||||
.mem_req_valid (vx_mem_req_valid),
|
||||
.mem_req_rw (vx_mem_req_rw),
|
||||
.mem_req_byteen (vx_mem_req_byteen),
|
||||
|
@ -947,7 +948,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
.mem_req_tag (vx_mem_req_tag),
|
||||
.mem_req_ready (vx_mem_req_ready),
|
||||
|
||||
// Memory response
|
||||
// Memory response
|
||||
.mem_rsp_valid (vx_mem_rsp_valid),
|
||||
.mem_rsp_data (vx_mem_rsp_data),
|
||||
.mem_rsp_tag (vx_mem_rsp_tag),
|
||||
|
@ -957,7 +958,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
.dcr_wr_valid (vx_dcr_wr_valid),
|
||||
.dcr_wr_addr (vx_dcr_wr_addr),
|
||||
.dcr_wr_data (vx_dcr_wr_data),
|
||||
|
||||
|
||||
// Status
|
||||
.busy (vx_busy)
|
||||
);
|
||||
|
@ -986,7 +987,7 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
|
||||
wire cout_q_push = vx_mem_req_valid && vx_mem_is_cout && ~cout_q_full;
|
||||
|
||||
wire cout_q_pop = cp2af_sRxPort.c0.mmioRdValid
|
||||
wire cout_q_pop = cp2af_sRxPort.c0.mmioRdValid
|
||||
&& (mmio_hdr.address == MMIO_STATUS)
|
||||
&& ~cout_q_empty;
|
||||
|
||||
|
@ -1035,26 +1036,26 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
.triggers({
|
||||
reset,
|
||||
state_changed,
|
||||
mem_req_fire,
|
||||
mem_rsp_fire,
|
||||
avs_write_fire,
|
||||
avs_read_fire,
|
||||
avs_waitrequest[0],
|
||||
avs_readdatavalid[0],
|
||||
cp2af_sRxPort.c0.mmioRdValid,
|
||||
cp2af_sRxPort.c0.mmioWrValid,
|
||||
cp2af_sRxPort.c0.rspValid,
|
||||
cp2af_sRxPort.c1.rspValid,
|
||||
af2cp_sTxPort.c0.valid,
|
||||
af2cp_sTxPort.c1.valid,
|
||||
cp2af_sRxPort.c0TxAlmFull,
|
||||
cp2af_sRxPort.c1TxAlmFull,
|
||||
af2cp_sTxPort.c2.mmioRdValid,
|
||||
cci_wr_req_fire,
|
||||
cci_wr_rsp_fire,
|
||||
cci_rd_req_fire,
|
||||
mem_req_fire,
|
||||
mem_rsp_fire,
|
||||
avs_write_fire,
|
||||
avs_read_fire,
|
||||
avs_waitrequest[0],
|
||||
avs_readdatavalid[0],
|
||||
cp2af_sRxPort.c0.mmioRdValid,
|
||||
cp2af_sRxPort.c0.mmioWrValid,
|
||||
cp2af_sRxPort.c0.rspValid,
|
||||
cp2af_sRxPort.c1.rspValid,
|
||||
af2cp_sTxPort.c0.valid,
|
||||
af2cp_sTxPort.c1.valid,
|
||||
cp2af_sRxPort.c0TxAlmFull,
|
||||
cp2af_sRxPort.c1TxAlmFull,
|
||||
af2cp_sTxPort.c2.mmioRdValid,
|
||||
cci_wr_req_fire,
|
||||
cci_wr_rsp_fire,
|
||||
cci_rd_req_fire,
|
||||
cci_rd_rsp_fire,
|
||||
cci_pending_reads_full,
|
||||
cci_pending_reads_full,
|
||||
cci_pending_writes_empty,
|
||||
cci_pending_writes_full
|
||||
}),
|
||||
|
@ -1093,9 +1094,9 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
if (avs_write[i] && ~avs_waitrequest[i]) begin
|
||||
`TRACE(2, ("%d: AVS Wr Req [%0d]: addr=0x%0h, byteen=0x%0h, burst=0x%0h, data=0x%0h\n", $time, i, `TO_FULL_ADDR(avs_address[i]), avs_byteenable[i], avs_burstcount[i], avs_writedata[i]));
|
||||
end
|
||||
if (avs_read[i] && ~avs_waitrequest[i]) begin
|
||||
if (avs_read[i] && ~avs_waitrequest[i]) begin
|
||||
`TRACE(2, ("%d: AVS Rd Req [%0d]: addr=0x%0h, byteen=0x%0h, burst=0x%0h\n", $time, i, `TO_FULL_ADDR(avs_address[i]), avs_byteenable[i], avs_burstcount[i]));
|
||||
end
|
||||
end
|
||||
if (avs_readdatavalid[i]) begin
|
||||
`TRACE(2, ("%d: AVS Rd Rsp [%0d]: data=0x%0h\n", $time, i, avs_readdata[i]));
|
||||
end
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
// Copyright © 2019-2023
|
||||
//
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
|
@ -22,34 +22,34 @@ module VX_afu_ctrl #(
|
|||
input wire clk,
|
||||
input wire reset,
|
||||
input wire clk_en,
|
||||
|
||||
|
||||
input wire s_axi_awvalid,
|
||||
input wire [AXI_ADDR_WIDTH-1:0] s_axi_awaddr,
|
||||
input wire [AXI_ADDR_WIDTH-1:0] s_axi_awaddr,
|
||||
output wire s_axi_awready,
|
||||
|
||||
input wire s_axi_wvalid,
|
||||
input wire [AXI_DATA_WIDTH-1:0] s_axi_wdata,
|
||||
input wire [AXI_DATA_WIDTH/8-1:0] s_axi_wstrb,
|
||||
input wire [AXI_DATA_WIDTH/8-1:0] s_axi_wstrb,
|
||||
output wire s_axi_wready,
|
||||
|
||||
output wire s_axi_bvalid,
|
||||
output wire [1:0] s_axi_bresp,
|
||||
output wire [1:0] s_axi_bresp,
|
||||
input wire s_axi_bready,
|
||||
|
||||
input wire s_axi_arvalid,
|
||||
input wire [AXI_ADDR_WIDTH-1:0] s_axi_araddr,
|
||||
input wire [AXI_ADDR_WIDTH-1:0] s_axi_araddr,
|
||||
output wire s_axi_arready,
|
||||
|
||||
output wire s_axi_rvalid,
|
||||
output wire [AXI_DATA_WIDTH-1:0] s_axi_rdata,
|
||||
output wire [1:0] s_axi_rresp,
|
||||
input wire s_axi_rready,
|
||||
|
||||
output wire [1:0] s_axi_rresp,
|
||||
input wire s_axi_rready,
|
||||
|
||||
output wire ap_reset,
|
||||
output wire ap_start,
|
||||
input wire ap_done,
|
||||
input wire ap_ready,
|
||||
input wire ap_idle,
|
||||
input wire ap_idle,
|
||||
output wire interrupt,
|
||||
|
||||
`ifdef SCOPE
|
||||
|
@ -101,7 +101,7 @@ module VX_afu_ctrl #(
|
|||
// 0x48 : Control signal of MEM
|
||||
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)
|
||||
|
||||
// Parameters
|
||||
// Parameters
|
||||
localparam
|
||||
ADDR_AP_CTRL = 8'h00,
|
||||
ADDR_GIE = 8'h04,
|
||||
|
@ -111,11 +111,11 @@ module VX_afu_ctrl #(
|
|||
ADDR_DEV_0 = 8'h10,
|
||||
ADDR_DEV_1 = 8'h14,
|
||||
ADDR_DEV_CTRL = 8'h18,
|
||||
|
||||
|
||||
ADDR_ISA_0 = 8'h1C,
|
||||
ADDR_ISA_1 = 8'h20,
|
||||
ADDR_ISA_CTRL = 8'h24,
|
||||
|
||||
|
||||
ADDR_DCR_0 = 8'h28,
|
||||
ADDR_DCR_1 = 8'h2C,
|
||||
ADDR_DCR_CTRL = 8'h30,
|
||||
|
@ -127,28 +127,29 @@ module VX_afu_ctrl #(
|
|||
ADDR_MEM_0 = 8'h40,
|
||||
ADDR_MEM_1 = 8'h44,
|
||||
ADDR_MEM_CTRL = 8'h48,
|
||||
|
||||
|
||||
ADDR_BITS = 8;
|
||||
|
||||
localparam
|
||||
WSTATE_IDLE = 2'd0,
|
||||
WSTATE_DATA = 2'd1,
|
||||
WSTATE_RESP = 2'd2;
|
||||
|
||||
|
||||
localparam
|
||||
RSTATE_IDLE = 2'd0,
|
||||
RSTATE_DATA = 2'd1;
|
||||
|
||||
// device caps
|
||||
wire [63:0] dev_caps = {16'b0,
|
||||
wire [63:0] dev_caps = {8'b0,
|
||||
8'(`LMEM_ENABLED ? `LMEM_LOG_SIZE : 0),
|
||||
16'(`NUM_CORES * `NUM_CLUSTERS),
|
||||
8'(`NUM_WARPS),
|
||||
8'(`NUM_THREADS),
|
||||
8'(`NUM_BARRIERS),
|
||||
16'(`NUM_CORES * `NUM_CLUSTERS),
|
||||
8'(`NUM_WARPS),
|
||||
8'(`NUM_THREADS),
|
||||
8'(`IMPLEMENTATION_ID)};
|
||||
|
||||
wire [63:0] isa_caps = {32'(`MISA_EXT),
|
||||
2'(`CLOG2(`XLEN)-4),
|
||||
wire [63:0] isa_caps = {32'(`MISA_EXT),
|
||||
2'(`CLOG2(`XLEN)-4),
|
||||
30'(`MISA_STD)};
|
||||
|
||||
reg [1:0] wstate;
|
||||
|
@ -156,7 +157,7 @@ module VX_afu_ctrl #(
|
|||
wire [31:0] wmask;
|
||||
wire s_axi_aw_fire;
|
||||
wire s_axi_w_fire;
|
||||
|
||||
|
||||
reg [1:0] rstate;
|
||||
reg [31:0] rdata;
|
||||
wire [ADDR_BITS-1:0] raddr;
|
||||
|
@ -171,12 +172,12 @@ module VX_afu_ctrl #(
|
|||
reg [63:0] mem_r [AXI_NUM_BANKS];
|
||||
reg [31:0] dcra_r;
|
||||
reg [31:0] dcrv_r;
|
||||
reg dcr_wr_valid_r;
|
||||
|
||||
reg dcr_wr_valid_r;
|
||||
|
||||
`ifdef SCOPE
|
||||
|
||||
reg [63:0] scope_bus_wdata;
|
||||
reg [63:0] scope_bus_rdata;
|
||||
reg [63:0] scope_bus_rdata;
|
||||
reg [5:0] scope_bus_ctr;
|
||||
|
||||
reg cmd_scope_reading;
|
||||
|
@ -186,7 +187,7 @@ module VX_afu_ctrl #(
|
|||
always @(posedge clk) begin
|
||||
if (reset) begin
|
||||
cmd_scope_reading <= 0;
|
||||
cmd_scope_writing <= 0;
|
||||
cmd_scope_writing <= 0;
|
||||
scope_bus_ctr <= '0;
|
||||
scope_bus_out_r <= 0;
|
||||
end else if (clk_en) begin
|
||||
|
@ -194,29 +195,29 @@ module VX_afu_ctrl #(
|
|||
scope_bus_wdata[31:0] <= (s_axi_wdata & wmask) | (scope_bus_wdata[31:0] & ~wmask);
|
||||
end
|
||||
if (s_axi_w_fire && waddr == ADDR_SCP_1) begin
|
||||
scope_bus_wdata[63:32] <= (s_axi_wdata & wmask) | (scope_bus_wdata[63:32] & ~wmask);
|
||||
scope_bus_wdata[63:32] <= (s_axi_wdata & wmask) | (scope_bus_wdata[63:32] & ~wmask);
|
||||
cmd_scope_writing <= 1;
|
||||
scope_bus_out_r <= 1;
|
||||
scope_bus_out_r <= 1;
|
||||
scope_bus_ctr <= 63;
|
||||
end
|
||||
end
|
||||
if (scope_bus_in) begin
|
||||
cmd_scope_reading <= 1;
|
||||
scope_bus_ctr <= 63;
|
||||
end
|
||||
end
|
||||
if (cmd_scope_reading) begin
|
||||
scope_bus_rdata <= {scope_bus_rdata[62:0], scope_bus_in};
|
||||
scope_bus_ctr <= scope_bus_ctr - 1;
|
||||
if (scope_bus_ctr == 0) begin
|
||||
cmd_scope_reading <= 0;
|
||||
end
|
||||
end
|
||||
end
|
||||
if (cmd_scope_writing) begin
|
||||
scope_bus_out_r <= 1'(scope_bus_wdata >> scope_bus_ctr);
|
||||
scope_bus_ctr <= scope_bus_ctr - 1;
|
||||
if (scope_bus_ctr == 0) begin
|
||||
cmd_scope_writing <= 0;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -224,7 +225,7 @@ module VX_afu_ctrl #(
|
|||
|
||||
`endif
|
||||
|
||||
// AXI Write
|
||||
// AXI Write
|
||||
|
||||
assign s_axi_awready = (wstate == WSTATE_IDLE);
|
||||
assign s_axi_wready = (wstate == WSTATE_DATA);
|
||||
|
@ -259,14 +260,14 @@ module VX_afu_ctrl #(
|
|||
waddr <= s_axi_awaddr[ADDR_BITS-1:0];
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
// wdata
|
||||
always @(posedge clk) begin
|
||||
if (reset) begin
|
||||
ap_start_r <= 0;
|
||||
ap_reset_r <= 0;
|
||||
auto_restart_r <= 0;
|
||||
|
||||
|
||||
gie_r <= 0;
|
||||
ier_r <= '0;
|
||||
isr_r <= '0;
|
||||
|
@ -287,7 +288,7 @@ module VX_afu_ctrl #(
|
|||
if (s_axi_w_fire) begin
|
||||
case (waddr)
|
||||
ADDR_AP_CTRL: begin
|
||||
if (s_axi_wstrb[0]) begin
|
||||
if (s_axi_wstrb[0]) begin
|
||||
if (s_axi_wdata[0])
|
||||
ap_start_r <= 1;
|
||||
if (s_axi_wdata[4])
|
||||
|
@ -326,7 +327,7 @@ module VX_afu_ctrl #(
|
|||
end
|
||||
end
|
||||
endcase
|
||||
|
||||
|
||||
if (ier_r[0] & ap_done)
|
||||
isr_r[0] <= 1'b1;
|
||||
if (ier_r[1] & ap_ready)
|
||||
|
@ -341,10 +342,10 @@ module VX_afu_ctrl #(
|
|||
assign s_axi_rvalid = (rstate == RSTATE_DATA);
|
||||
assign s_axi_rdata = rdata;
|
||||
assign s_axi_rresp = 2'b00; // OKAY
|
||||
|
||||
|
||||
assign s_axi_ar_fire = s_axi_arvalid && s_axi_arready;
|
||||
assign raddr = s_axi_araddr[ADDR_BITS-1:0];
|
||||
|
||||
|
||||
// rstate
|
||||
always @(posedge clk) begin
|
||||
if (reset) begin
|
||||
|
@ -414,6 +415,6 @@ module VX_afu_ctrl #(
|
|||
|
||||
assign dcr_wr_valid = dcr_wr_valid_r;
|
||||
assign dcr_wr_addr = `VX_DCR_ADDR_WIDTH'(dcra_r);
|
||||
assign dcr_wr_data = `VX_DCR_DATA_WIDTH'(dcrv_r);
|
||||
assign dcr_wr_data = `VX_DCR_DATA_WIDTH'(dcrv_r);
|
||||
|
||||
endmodule
|
||||
|
|
|
@ -227,14 +227,17 @@ public:
|
|||
case VX_CAPS_NUM_CORES:
|
||||
_value = (dev_caps_ >> 24) & 0xffff;
|
||||
break;
|
||||
case VX_CAPS_NUM_BARRIERS:
|
||||
_value = (dev_caps_ >> 40) & 0xff;
|
||||
break;
|
||||
case VX_CAPS_CACHE_LINE_SIZE:
|
||||
_value = CACHE_BLOCK_SIZE;
|
||||
break;
|
||||
case VX_CAPS_GLOBAL_MEM_SIZE:
|
||||
case VX_CAPS_GLOBAL_MEM_SIZE:
|
||||
_value = global_mem_size_;
|
||||
break;
|
||||
case VX_CAPS_LOCAL_MEM_SIZE:
|
||||
_value = 1ull << ((dev_caps_ >> 40) & 0xff);
|
||||
_value = 1ull << ((dev_caps_ >> 48) & 0xff);
|
||||
break;
|
||||
case VX_CAPS_LOCAL_MEM_ADDR:
|
||||
_value = LMEM_BASE_ADDR;
|
||||
|
|
|
@ -81,6 +81,9 @@ public:
|
|||
case VX_CAPS_NUM_CORES:
|
||||
_value = NUM_CORES * NUM_CLUSTERS;
|
||||
break;
|
||||
case VX_CAPS_NUM_BARRIERS:
|
||||
_value = NUM_BARRIERS;
|
||||
break;
|
||||
case VX_CAPS_CACHE_LINE_SIZE:
|
||||
_value = CACHE_BLOCK_SIZE;
|
||||
break;
|
||||
|
|
|
@ -85,6 +85,9 @@ public:
|
|||
case VX_CAPS_NUM_CORES:
|
||||
_value = NUM_CORES * NUM_CLUSTERS;
|
||||
break;
|
||||
case VX_CAPS_NUM_BARRIERS:
|
||||
_value = NUM_BARRIERS;
|
||||
break;
|
||||
case VX_CAPS_CACHE_LINE_SIZE:
|
||||
_value = CACHE_BLOCK_SIZE;
|
||||
break;
|
||||
|
|
|
@ -246,6 +246,9 @@ public:
|
|||
case VX_CAPS_NUM_CORES:
|
||||
_value = (dev_caps_ >> 24) & 0xffff;
|
||||
break;
|
||||
case VX_CAPS_NUM_BARRIERS:
|
||||
_value = (dev_caps_ >> 40) & 0xff;
|
||||
break;
|
||||
case VX_CAPS_CACHE_LINE_SIZE:
|
||||
_value = CACHE_BLOCK_SIZE;
|
||||
break;
|
||||
|
@ -253,7 +256,7 @@ public:
|
|||
_value = global_mem_size_;
|
||||
break;
|
||||
case VX_CAPS_LOCAL_MEM_SIZE:
|
||||
_value = 1ull << ((dev_caps_ >> 40) & 0xff);
|
||||
_value = 1ull << ((dev_caps_ >> 48) & 0xff);
|
||||
break;
|
||||
case VX_CAPS_LOCAL_MEM_ADDR:
|
||||
_value = LMEM_BASE_ADDR;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue