Understanding the AXI Bus Protocol

The Advanced eXtensible Interface (AXI) is part of the ARM Advanced Microcontroller Bus Architecture (AMBA) specifications. It’s designed for high-performance, high-frequency system designs.

Key Features

  • Separate Address/Control and Data Phases: Allows for outstanding transactions.
  • Unaligned Data Transfers: Support for using byte strobes.
  • Burst-based Transactions: Only the start address is issued.

The Five Channels

AXI uses five independent channels for communication:

  1. Read Address Channel (AR)
  2. Read Data Channel (R)
  3. Write Address Channel (AW)
  4. Write Data Channel (W)
  5. Write Response Channel (B)

Example: A Simple Verilog Wrapper

Here is a simplified view of how an AXI slave interface might look in Verilog:

module axi_slave_interface #(
    parameter C_S_AXI_DATA_WIDTH = 32,
    parameter C_S_AXI_ADDR_WIDTH = 4
) (
    input wire  S_AXI_ACLK,
    input wire  S_AXI_ARESETN,
    
    // Write Address Channel
    input wire [C_S_AXI_ADDR_WIDTH-1 : 0] S_AXI_AWADDR,
    input wire  S_AXI_AWVALID,
    output wire S_AXI_AWREADY,
    
    // Write Data Channel
    input wire [C_S_AXI_DATA_WIDTH-1 : 0] S_AXI_WDATA,
    input wire [(C_S_AXI_DATA_WIDTH/8)-1 : 0] S_AXI_WSTRB,
    input wire  S_AXI_WVALID,
    output wire S_AXI_WREADY,
    
    // Write Response Channel
    output wire [1 : 0] S_AXI_BRESP,
    output wire  S_AXI_BVALID,
    input wire  S_AXI_BREADY
    
    // Read channels omitted for brevity
);
    // Implementation details...
endmodule

NOTE

In an actual system, handling backpressure (VALID/READY handshakes) is the most critical part of AXI design. Ensure your ready signals don’t combinatorially depend on valid signals to prevent loops.

Back to articles