Fix CDMA sequencer declaration order
This commit is contained in:
@@ -489,6 +489,62 @@ module snix_axil_cdma_mux #(
|
|||||||
logic seq_arready;
|
logic seq_arready;
|
||||||
logic seq_rready;
|
logic seq_rready;
|
||||||
|
|
||||||
|
// Hardware matmul loop sequencer state. Keep these declarations before the
|
||||||
|
// DMA routing logic because Vivado does not allow forward enum references.
|
||||||
|
typedef enum logic [4:0] {
|
||||||
|
SQ_IDLE,
|
||||||
|
SQ_CLEAR_CRC,
|
||||||
|
SQ_LOAD0,
|
||||||
|
SQ_START0,
|
||||||
|
SQ_LOAD1,
|
||||||
|
SQ_WAIT_DONE,
|
||||||
|
SQ_STORE,
|
||||||
|
SQ_CLEAR_DONE,
|
||||||
|
SQ_START_NEXT,
|
||||||
|
SQ_LOAD_NEXT,
|
||||||
|
SQ_DONE
|
||||||
|
} seq_state_t;
|
||||||
|
|
||||||
|
typedef enum logic [3:0] {
|
||||||
|
OP_IDLE,
|
||||||
|
OP_READ_ADDR,
|
||||||
|
OP_READ_DATA,
|
||||||
|
OP_WRITE_ADDR,
|
||||||
|
OP_WRITE_DATA,
|
||||||
|
OP_WRITE_RESP,
|
||||||
|
OP_REG_READ_ADDR,
|
||||||
|
OP_REG_READ_DATA,
|
||||||
|
OP_COPY_START,
|
||||||
|
OP_COPY_WAIT
|
||||||
|
} op_state_t;
|
||||||
|
|
||||||
|
seq_state_t seq_state;
|
||||||
|
op_state_t op_state;
|
||||||
|
|
||||||
|
logic op_start_copy;
|
||||||
|
logic op_start_write;
|
||||||
|
logic op_start_read;
|
||||||
|
logic op_done;
|
||||||
|
logic [31:0] op_src_addr;
|
||||||
|
logic [31:0] op_dst_addr;
|
||||||
|
logic [31:0] op_bytes;
|
||||||
|
logic [31:0] op_write_addr;
|
||||||
|
logic [31:0] op_write_data;
|
||||||
|
logic [31:0] op_read_addr;
|
||||||
|
logic [31:0] op_read_data;
|
||||||
|
logic [31:0] op_src_cur;
|
||||||
|
logic [31:0] op_dst_cur;
|
||||||
|
logic [31:0] op_bytes_left;
|
||||||
|
logic [31:0] op_data_buf;
|
||||||
|
logic op_buf_valid;
|
||||||
|
logic op_copy_store;
|
||||||
|
|
||||||
|
logic [31:0] seq_group_idx;
|
||||||
|
logic [31:0] seq_load_idx;
|
||||||
|
logic [31:0] seq_store_idx;
|
||||||
|
logic seq_compute_bank;
|
||||||
|
logic [31:0] seq_status_data;
|
||||||
|
|
||||||
wire use_ep_engine = (state == RUN) && (engine_mode != MODE_MEM2MEM);
|
wire use_ep_engine = (state == RUN) && (engine_mode != MODE_MEM2MEM);
|
||||||
wire use_seq_engine = seq_busy && (op_state != OP_IDLE) &&
|
wire use_seq_engine = seq_busy && (op_state != OP_IDLE) &&
|
||||||
(op_state != OP_COPY_START) && (op_state != OP_COPY_WAIT);
|
(op_state != OP_COPY_START) && (op_state != OP_COPY_WAIT);
|
||||||
@@ -646,60 +702,6 @@ module snix_axil_cdma_mux #(
|
|||||||
// ==========================================
|
// ==========================================
|
||||||
// Hardware matmul loop sequencer
|
// Hardware matmul loop sequencer
|
||||||
// ==========================================
|
// ==========================================
|
||||||
typedef enum logic [4:0] {
|
|
||||||
SQ_IDLE,
|
|
||||||
SQ_CLEAR_CRC,
|
|
||||||
SQ_LOAD0,
|
|
||||||
SQ_START0,
|
|
||||||
SQ_LOAD1,
|
|
||||||
SQ_WAIT_DONE,
|
|
||||||
SQ_STORE,
|
|
||||||
SQ_CLEAR_DONE,
|
|
||||||
SQ_START_NEXT,
|
|
||||||
SQ_LOAD_NEXT,
|
|
||||||
SQ_DONE
|
|
||||||
} seq_state_t;
|
|
||||||
|
|
||||||
typedef enum logic [3:0] {
|
|
||||||
OP_IDLE,
|
|
||||||
OP_READ_ADDR,
|
|
||||||
OP_READ_DATA,
|
|
||||||
OP_WRITE_ADDR,
|
|
||||||
OP_WRITE_DATA,
|
|
||||||
OP_WRITE_RESP,
|
|
||||||
OP_REG_READ_ADDR,
|
|
||||||
OP_REG_READ_DATA,
|
|
||||||
OP_COPY_START,
|
|
||||||
OP_COPY_WAIT
|
|
||||||
} op_state_t;
|
|
||||||
|
|
||||||
seq_state_t seq_state;
|
|
||||||
op_state_t op_state;
|
|
||||||
|
|
||||||
logic op_start_copy;
|
|
||||||
logic op_start_write;
|
|
||||||
logic op_start_read;
|
|
||||||
logic op_done;
|
|
||||||
logic [31:0] op_src_addr;
|
|
||||||
logic [31:0] op_dst_addr;
|
|
||||||
logic [31:0] op_bytes;
|
|
||||||
logic [31:0] op_write_addr;
|
|
||||||
logic [31:0] op_write_data;
|
|
||||||
logic [31:0] op_read_addr;
|
|
||||||
logic [31:0] op_read_data;
|
|
||||||
logic [31:0] op_src_cur;
|
|
||||||
logic [31:0] op_dst_cur;
|
|
||||||
logic [31:0] op_bytes_left;
|
|
||||||
logic [31:0] op_data_buf;
|
|
||||||
logic op_buf_valid;
|
|
||||||
logic op_copy_store;
|
|
||||||
|
|
||||||
logic [31:0] seq_group_idx;
|
|
||||||
logic [31:0] seq_load_idx;
|
|
||||||
logic [31:0] seq_store_idx;
|
|
||||||
logic seq_compute_bank;
|
|
||||||
logic [31:0] seq_status_data;
|
|
||||||
|
|
||||||
wire seq_has_more_load = (seq_load_idx < seq_groups);
|
wire seq_has_more_load = (seq_load_idx < seq_groups);
|
||||||
wire [31:0] seq_src_addr_for_load = seq_src_base + (seq_load_idx * seq_src_stride);
|
wire [31:0] seq_src_addr_for_load = seq_src_base + (seq_load_idx * seq_src_stride);
|
||||||
wire [31:0] seq_dst_addr_for_load = seq_mat_base + (seq_load_idx[0] ? MAT_B1_AB_OFF : MAT_B0_AB_OFF);
|
wire [31:0] seq_dst_addr_for_load = seq_mat_base + (seq_load_idx[0] ? MAT_B1_AB_OFF : MAT_B0_AB_OFF);
|
||||||
|
|||||||
Reference in New Issue
Block a user