Skip to content
RTL Design Sherpa CocoTB Framework · Verification Infrastructure for RTL Testing
GitHub · Documentation Index · MIT License

AXI4 Components Overview

The CocoTBFramework AXI4 components provide comprehensive support for AXI4-Full protocol verification and transaction generation. Built on the proven GAXI infrastructure, these components offer a consistent and powerful interface for memory-mapped protocol testing with advanced features for burst transactions, outstanding operations, and protocol compliance verification.

Framework Integration

GAXI Infrastructure Foundation

The AXI4 components inherit from the robust GAXI framework, providing:

Unified Field Configuration: Complete integration with the CocoTBFramework field configuration system for flexible transaction structures Memory Model Support: Seamless integration with memory models for data verification and complex test scenarios Statistics Integration: Comprehensive performance metrics and transaction tracking Signal Resolution: Automatic signal detection and mapping across different naming conventions Advanced Debugging: Multi-level debugging capabilities with detailed transaction logging

Memory-Mapped Protocol Specialization

While inheriting GAXI's power, AXI4 components are specifically optimized for memory-mapped protocols:

Five Channel Architecture: Complete support for AR, R, AW, W, and B channels Burst Transaction Management: Native support for INCR, FIXED, and WRAP burst types Outstanding Transaction Support: Advanced management of multiple concurrent transactions Address and Data Decoupling: Independent address and data phases for maximum throughput Protocol Compliance: Integrated compliance checking for AXI4 specification adherence

Core Components Architecture

graph TB
    subgraph Ecosystem["AXI4 Component Ecosystem"]
        subgraph Components["Core Components"]
            MasterRd["AXI4MasterRd<br/>(AR/R)"]
            MasterWr["AXI4MasterWr<br/>(AW/W/B)"]
            SlaveRd["AXI4SlaveRd<br/>(AR/R)"]
            SlaveWr["AXI4SlaveWr<br/>(AW/W/B)"]
        end

        subgraph FieldConfig["AXI4 Field Configurations"]
            AR[AR Config]
            R[R Config]
            AW[AW Config]
            W[W Config]
            B[B Config]
        end

        subgraph Advanced["Advanced AXI4 Features"]
            Compliance[Compliance]
            Random[Randomization]
            Timing[Timing Config]
            Factories[Factories]
            PktUtils[Packet Utils]
            TxnSupport[Transaction Support]
        end

        subgraph GAXI["GAXI Infrastructure"]
            SigRes[Signal Resolution]
            MemModels[Memory Models]
            Stats[Statistics]
            FieldHandle[Field Handling]
            Debug[Debug Support]
            Config[Configuration]
        end
    end

    Components --> FieldConfig
    FieldConfig --> Advanced
    Advanced --> GAXI

Component Capabilities

AXI4MasterRead - Memory Read Operations

The AXI4MasterRead component drives AXI4 read transactions as a master:

Address Request Management: - AR Channel Control: Complete AWADDR, AWLEN, AWSIZE, AWBURST, AWID management - Outstanding Transactions: Support for multiple concurrent read requests - Address Alignment: Automatic address alignment and burst boundary checking - QoS and Caching: Complete AWQOS, AWCACHE, AWPROT, AWREGION support

Read Data Reception: - R Channel Monitoring: Automatic RDATA, RRESP, RID, RLAST processing - Burst Assembly: Automatic assembly of multi-beat read bursts - Error Handling: Complete RRESP error detection and reporting - Flow Control: Intelligent RREADY backpressure management

Performance Features: - Pipeline Optimization: Overlapped address and data phases - Memory Integration: Direct memory model integration for verification - Statistics Tracking: Real-time performance monitoring and analysis

AXI4MasterWrite - Memory Write Operations

The AXI4MasterWrite component drives AXI4 write transactions as a master:

Address and Data Management: - AW Channel Control: Complete AWADDR, AWLEN, AWSIZE, AWBURST management - W Channel Control: WDATA, WSTRB, WLAST, WID coordination - Address/Data Synchronization: Proper ordering of address and data phases - Write Strobes: Byte-level write enable control

Write Response Handling: - B Channel Processing: Automatic BRESP, BID response verification - Error Detection: Complete write response error handling - Transaction Completion: Proper write transaction lifecycle management

Advanced Write Features: - Partial Writes: WSTRB-based partial word writing - Write Ordering: Support for write ordering requirements - Outstanding Management: Multiple concurrent write transaction support

AXI4SlaveRead - Memory Read Response

The AXI4SlaveRead component responds to AXI4 read transactions as a slave:

Address Processing: - AR Channel Monitoring: Automatic read address request detection - Address Decode: Configurable address range checking and routing - Burst Analysis: ARLEN, ARSIZE, ARBURST parameter processing - QoS Processing: ARQOS, ARCACHE, ARPROT parameter handling

Data Response Generation: - R Channel Control: RDATA, RRESP, RID, RLAST generation - Memory Interface: Direct memory model integration for data sourcing - Error Injection: Configurable SLVERR, DECERR response generation - Timing Control: Configurable RVALID timing and latency

Slave-Specific Features: - Address Range Configuration: Flexible address space definition - Response Randomization: Realistic slave timing behavior - Protocol Compliance: Automatic AXI4 slave protocol adherence

AXI4SlaveWrite - Memory Write Response

The AXI4SlaveWrite component responds to AXI4 write transactions as a slave:

Write Transaction Processing: - AW/W Channel Coordination: Proper address and data phase synchronization - Write Data Assembly: Multi-beat burst data collection and assembly - Strobe Processing: WSTRB-based byte-level write processing - Write Ordering: Support for write ordering and hazard detection

Write Response Generation: - B Channel Control: BRESP, BID response generation - Error Response: Configurable error condition simulation - Response Timing: Realistic write response latency modeling

Memory Integration Features: - Write-Through: Direct memory model updates - Write Verification: Automatic write data validation - Conflict Detection: Write hazard and ordering conflict detection

Field Configuration System

AXI4FieldConfigs - Channel-Specific Configuration

The field configuration system enables flexible AXI4 parameter adaptation:

Channel-Specific Configurations:

# AR Channel Configuration
ar_config = AXI4FieldConfigHelper.create_ar_field_config(
    id_width=8, addr_width=32, user_width=1
)

# AW Channel Configuration
aw_config = AXI4FieldConfigHelper.create_aw_field_config(
    id_width=8, addr_width=32, user_width=1
)

# R Channel Configuration
r_config = AXI4FieldConfigHelper.create_r_field_config(
    id_width=8, data_width=32, user_width=1
)

# W Channel Configuration
w_config = AXI4FieldConfigHelper.create_w_field_config(
    data_width=32, user_width=1
)

# B Channel Configuration
b_config = AXI4FieldConfigHelper.create_b_field_config(
    id_width=8, user_width=1
)

Flexible Parameter Support: - Variable Widths: Support for different data, address, and ID widths - Optional Signals: Proper handling of zero-width USER, QOS, REGION signals - Custom Extensions: Support for proprietary sideband signals

Advanced Features

AXI4ComplianceChecker - Protocol Verification

The integrated compliance checker provides comprehensive AXI4 specification verification:

Transaction-Level Checking: - Handshake Protocol: VALID/READY signal timing verification - Burst Compliance: AWLEN, ARLEN, LAST signal consistency - Address Alignment: Burst boundary and size alignment checking - ID Consistency*: Transaction ID matching across channels

System-Level Monitoring: - Outstanding Limits: Maximum outstanding transaction enforcement - Ordering Requirements: Read/write ordering rule verification - Deadlock Detection: System-level deadlock condition monitoring - Performance Analysis: Bus utilization and efficiency metrics

AXI4Randomization - Realistic Test Scenarios

The randomization system provides comprehensive parameter variation:

Transaction Randomization:

# Configure address randomization
randomizer.configure_address_range(0x1000, 0x8000)
randomizer.configure_burst_length(1, 16)
randomizer.configure_burst_types(['INCR', 'WRAP'])

# Configure timing randomization
randomizer.configure_valid_delays(min=0, max=5)
randomizer.configure_ready_delays(min=0, max=3)

# Configure ID randomization
randomizer.configure_id_pool([1, 2, 3, 4, 5])

Data Pattern Generation: - Pseudorandom Data: LFSR-based data pattern generation - Address-Based Patterns: Data values derived from address - Custom Patterns: User-defined data generation algorithms - Error Injection: Controlled error condition insertion

Usage Patterns and Integration

Basic Read Transaction

# Create AXI4 master read interface
master_read = AXI4MasterRead(
    dut=dut,
    clock=clk,
    prefix="m_axi_",
    data_width=32,
    id_width=8,
    addr_width=32
)

# Perform single read
data = await master_read.read_transaction(
    address=0x1000,
    burst_len=1,
    id=1
)

# Perform burst read
burst_data = await master_read.read_transaction(
    address=0x2000,
    burst_len=8,
    id=2,
    burst_type=1,  # INCR
    size=2         # 4-byte transfers
)

Basic Write Transaction

# Create AXI4 master write interface
master_write = AXI4MasterWrite(
    dut=dut,
    clock=clk,
    prefix="m_axi_",
    data_width=32,
    id_width=8,
    addr_width=32
)

# Perform single write
await master_write.write_transaction(
    address=0x1000,
    data=[0x12345678],
    id=1
)

# Perform burst write with strobes
await master_write.write_transaction(
    address=0x2000,
    data=[0xDEADBEEF, 0xCAFEBABE, 0xFEEDFACE],
    strb=[0xF, 0xC, 0x3],  # Different byte enables
    id=2,
    burst_type=1  # INCR
)

Memory Model Integration

# Create memory model
memory = create_memory_model(size=4096, data_width=32)

# Connect to components
master_write.connect_memory(memory)
slave_read.connect_memory(memory)

# Automatic verification
await master_write.write_transaction(0x1000, [0x12345678])
read_data = await slave_read.read_response(0x1000, 1)
assert read_data[0] == 0x12345678  # Automatic verification

Outstanding Transaction Management

# Configure outstanding transaction limits
master_read.configure_outstanding(max_ar_outstanding=4, max_r_outstanding=8)

# Launch concurrent transactions
import asyncio

async def concurrent_reads():
    tasks = []
    for i in range(4):
        task = master_read.read_transaction(
            address=0x1000 + i*0x100,
            burst_len=4,
            id=i
        )
        tasks.append(asyncio.create_task(task))

    results = await asyncio.gather(*tasks)
    return results

read_results = await concurrent_reads()

Performance Optimization

Pipeline Control

Address/Data Overlap: - Write Channel Coordination: AW and W channel timing optimization - Read Pipeline: AR and R channel pipeline management - Outstanding Balance: Optimal outstanding transaction configuration

Flow Control Optimization: - Backpressure Management: Intelligent READY signal timing - Throughput Maximization: Minimal bubble insertion strategies - Latency Minimization: Optimized handshake timing

Memory Efficiency

Transaction Batching: - Burst Optimization: Automatic burst size and alignment optimization - Outstanding Queuing: Efficient outstanding transaction queue management - Data Caching: Smart data caching for repetitive patterns

Debug and Analysis

Comprehensive Logging

Transaction Tracing: - Channel-Level Logging: Detailed per-channel transaction logging - Timing Analysis: Handshake timing and pipeline analysis - Protocol Compliance: Real-time compliance violation reporting - Performance Metrics: Throughput and latency measurement

Integration Tools: - Waveform Annotation: Automatic transaction marker generation - Coverage Integration: Direct integration with functional coverage - Debug Interfaces: Integration with external debug tools

Configuration Examples

Hardware Parameter Matching

# Match SystemVerilog AXI4 interface parameters
# parameter AXI_DATA_WIDTH = 64,
# parameter AXI_ADDR_WIDTH = 40,
# parameter AXI_ID_WIDTH = 4,
# parameter AXI_USER_WIDTH = 0

master_read = AXI4MasterRead(
    dut=dut,
    clock=clk,
    prefix="m_axi_",
    data_width=64,
    addr_width=40,
    id_width=4,
    user_width=0  # Disabled user signals
)

Protocol Variant Support

# AXI4-Lite configuration (single transaction, no bursts)
axi4_lite_config = {
    'data_width': 32,
    'addr_width': 32,
    'id_width': 0,      # No ID signals
    'user_width': 0,    # No USER signals
    'burst_support': False,  # Single transactions only
    'outstanding_limit': 1   # Single outstanding transaction
}

# Custom AXI4 variant
custom_config = {
    'data_width': 512,   # Wide data bus
    'addr_width': 48,    # Extended addressing
    'id_width': 16,      # Many outstanding transactions
    'user_width': 32,    # Rich sideband data
    'qos_support': True, # Quality of Service
    'region_support': True  # Memory regions
}

The AXI4 components provide a comprehensive, high-performance, and flexible solution for AXI4-Full protocol verification, combining the power of the GAXI infrastructure with AXI4-specific optimizations and advanced features for complete memory-mapped interface testing.