Skip to content
WIP: parts of this documentation are AI-generated and may contain factual errors.

Interfaces and Types

Interface Reference

This page is the reference for idma_req_t, options_t, and idma_rsp_t. Use it when writing drivers or connecting custom frontends. For integration, prefer the convenience macros from typedef.svh.

Transfer Request (idma_req_t)

The request carries addresses, transfer length, and options that control protocol and backend behavior.

`IDMA_TYPEDEF_REQ_T(idma_req_t, tf_len_t, axi_addr_t, options_t)
// Expands to:
typedef struct packed {
tf_len_t length; // Transfer length in bytes
axi_addr_t src_addr; // Source byte address
axi_addr_t dst_addr; // Destination byte address
user_t user; // User-defined sideband data
options_t opt; // Transfer options
} idma_req_t;

Transfer Options (options_t)

Transfer options select protocols and carry sideband signals. Each request embeds one options_t.

`IDMA_TYPEDEF_OPTIONS_T(options_t, axi_id_t)
// Expands to:
typedef struct packed {
idma_pkg::protocol_e src_protocol; // Source bus protocol
idma_pkg::protocol_e dst_protocol; // Destination bus protocol
idma_pkg::multihead_t src_head; // Source head select (multi-head)
idma_pkg::multihead_t dst_head; // Destination head select (multi-head)
axi_id_t axi_id; // AXI transaction ID
idma_pkg::axi_options_t src; // Source AXI options
idma_pkg::axi_options_t dst; // Destination AXI options
idma_pkg::backend_options_t beo; // Backend engine options
idma_pkg::compute_options_t compute; // On-the-fly compute selection
logic last; // Last transfer flag (for midend)
} options_t;

Compute Options (compute_options_t)

compute selects an optional on-the-fly transform for the transfer. It is inert unless the backend is elaborated with EnableCompute and the op is enabled in ComputeOps. See Compute for op semantics and constraints.

typedef struct packed {
logic enable; // Arm compute for this transfer
compute_op_e op; // Op selector (transpose, MX quant/dequant)
compute_params_t params; // Per-op parameters (transpose tensor dims/mode)
} compute_options_t;

compute_op_e encodes COMPUTE_NONE, COMPUTE_TRANSPOSE, COMPUTE_MXQUANT, COMPUTE_MXQUANT_FP16, COMPUTE_MXDEQUANT, and COMPUTE_MXDEQUANT_FP16. The enum is generated from idma_reg.rdl so RTL and the SW headers share one encoding.

Transfer Response (idma_rsp_t)

The response indicates completion and error status for a transfer.

`IDMA_TYPEDEF_RSP_T(idma_rsp_t, err_payload_t)
// Expands to:
typedef struct packed {
logic last; // Last response for this ND transfer
logic error; // Error occurred
err_payload_t pld; // Error details (cause, type, address)
} idma_rsp_t;

Error Payload (err_payload_t)

The error payload identifies the faulting burst and its origin.

`IDMA_TYPEDEF_ERR_PAYLOAD_T(err_payload_t, axi_addr_t)
// Expands to:
typedef struct packed {
axi_pkg::resp_t cause; // AXI response code
idma_pkg::err_type_t err_type; // Error source (BUS_READ, BUS_WRITE, BACKEND, ND_MIDEND)
axi_addr_t burst_addr; // Address of the faulting burst
} err_payload_t;

Handshake Semantics

All request and response interfaces use ready/valid handshaking. A transfer is accepted when req_valid_i and req_ready_o are both high in the same cycle. A response is accepted when rsp_valid_o and rsp_ready_i are both high.