AXI总线之FPGA应用

发布于:2025-03-19 ⋅ 阅读:(16) ⋅ 点赞:(0)

        AXI总线在FPGA与可编程逻辑中的应用非常广泛,尤其是在IP核互连、自定义逻辑模块与处理器协同设计中。以下从使用规则收发协议注意事项三个方面详细说明其实现细节:

、AXI总线在FPGA中的使用规则

1.1、 协议选择规则

        根据功能需求选择AXI子协议:

                AXI4-Lite

                        适用场景:配置寄存器、低速外设(如UART、GPIO)。

                        规则:仅支持单次传输(无突发),地址空间较小(通常32位)。

                AXI4

                        适用场景:高带宽模块(如DMA、DDR控制器)。

                        规则:支持突发传输(1~256拍),需处理多事务并行(Outstanding Transactions)。

                AXI4-Stream

                        适用场景:流式数据传输(如视频流、传感器数据)。

                        规则:无地址信号,仅通过TVALID/TREADY握手传输连续数据。

1.2主从设备设计规则

        主设备(Master)

                需生成ARVALID/AWVALID信号发起读/写请求。

                必须支持突发传输(AXI4)或单次传输(AXI-Lite)。

        从设备(Slave)

        需在ARREADY/AWREADY有效时锁存地址,并在RVALID/WVALID有效时返回数据。

        必须响应主设备的错误信号(RRESP/BRESP)。

1.3地址映射规则

        地址对齐:突发传输的起始地址需对齐数据宽度(如32位数据对应4字节对齐)。

                例如:32位数据总线的地址最低两位应为00。

        地址空间分配:使用FPGA工具(如Xilinx Address Editor)为每个从设备分配唯一地址范围。

                示例:将AXI-Lite外设配置在0x4000_0000~0x4000_FFFF区间。

1.4时钟与复位规则

        同步设计

                AXI接口的所有信号必须在同一时钟域(ACLK)下同步。

                跨时钟域需使用异步FIFO或桥接逻辑(如AXI Clock Converter IP)。

        复位策略

                复位信号(ARESETn)需异步置位、同步释放,避免亚稳态。

二、收发协议详解

        AXI4和AXI4-Lite接口都由5个不同的通道组成:

  1. 写地址通道;
  2. 读地址通道;
  3. 写数据通道;
  4. 读数据通道;
  5. 写响应通道;

读事务结构图

写事务结构图

2.1、AXI4-Lite协议

        写事务流程

                主设备置AWVALID和AWADDR,从设备响应AWREADY。

                主设备置WVALID和WDATA,从设备响应WREADY。

                从设备完成写入后返回BVALID和BRESP(状态码)。
        时序图示例

ACLK   ___/¯¯¯\_/¯¯¯\_/¯¯¯\_/¯¯¯\_  

AWVALID _______/¯¯¯¯¯¯¯¯¯¯\_______  

AWREADY _______/¯¯¯¯¯¯\___________  

WVALID  _________/¯¯¯¯¯¯¯¯\_______  

WREADY  _________/¯¯¯¯¯¯\_________  

BVALID  _______________/¯¯¯¯¯¯\___  

        读事务流程

                主设备置ARVALID和ARADDR,从设备响应ARREADY。

                从设备返回RVALID、RDATA和RRESP。
        关键信号

                ARPROT:设置访问权限(安全/非安全、特权级)。

                RRESP:返回状态(OKAY、DECERR、SLVERR)。

2.2AXI4协议(突发传输)

        突发类型

                INCR(增量):地址按数据宽度递增(如32位数据,地址+4)。

                WRAP(回环):地址在设定范围内循环(用于缓存行填充)。

        突发传输流程(以写为例):

                主设备发送AWADDR、AWBURST(突发类型)、AWLEN(突发长度)。

                从设备响应AWREADY后,主设备分多次发送WDATA(每拍数据对应一个WVALID)。

                最后通过WLAST标志结束传输。
        

        示例代码(Verilog)

// 主设备写控制逻辑

always @(posedge ACLK) begin

  if (AWREADY && AWVALID) begin

    next_addr = AWADDR + (data_width/8); // 计算下一地址

  end
end
2.3AXI4-Stream协议

        数据传输规则:发送方置TVALID,接收方置TREADY,两者同时有效时完成传输。可附加TLAST标志表示数据包结束(如一帧图像传输完成)。

        时序示例

ACLK    ___/¯¯¯\_/¯¯¯\_/¯¯¯\_/¯¯¯\_  

TVALID _______/¯¯¯¯¯¯¯¯¯¯¯¯\______  

TREADY _______/¯¯¯\_/¯¯¯\_________  

TDATA  _______<D0>__<D1>__<D2>____  

TLAST  ____________________/¯¯¯\__  

三、注意事项

3.1时序收敛

        关键路径优化:AXI控制逻辑(如地址生成、握手信号)易成为关键路径,需插入流水寄存器。

                示例:将ARVALID生成逻辑拆分为两级流水线。

        时钟频率限制:高频设计(>300MHz)需减少组合逻辑层级,必要时使用寄存器切割(Register Slice)。

3.2资源消耗优化

        AXI-Lite vs. AXI4

                AXI-Lite接口占用较少逻辑资源(约200 LUTs),适合低速控制。

                AXI4接口可能消耗上千LUTs,需权衡带宽需求。

        共享总线与Crossbar:多主设备时,使用AXI Interconnect(交叉开关)优化带宽,但会增加面积。

3.3错误处理

        超时机制

                从设备若长时间未响应(如死锁),主设备需发起超时复位。

                示例:计数器监控BVALID或RVALID的超时状态。

        错误响应

                从设备返回SLVERR(从设备错误)或DECERR(地址解码错误)时,主设备需记录错误日志。

3.4仿真与调试

        仿真模型

                使用Xilinx AXI Verification IP(VIP)或开源AXI BFM(Bus Functional Model)验证协议合规性。

        调试技巧

                插入ILA(Integrated Logic Analyzer)抓取AXI信号,监控ARVALID/RREADY等握手时序。

                常见问题:地址未对齐、突发长度超限、握手信号死锁。

3.5FPGA厂商特定差异

Xilinx Vivado

        推荐使用AXI SmartConnect自动生成互连逻辑,支持动态地址映射。

        AXI4-Stream需搭配DMA IP(如AXI DMA)实现PS(处理器)与PL(逻辑)间数据传输。

Intel Quartus

        使用Platform Designer(原QSys)配置AXI总线,支持Nios II处理器与自定义IP核集成。

        注意:Intel的AXI实现可能要求信号命名与Xilinx不同(如awvalid vs. AWVALID)。

四、典型应用示例(Xilinx FPGA)

        场景:通过AXI-Lite配置自定义PWM模块
        地址映射:

                0x4000_0000:PWM占空比寄存器(32位可写)。

                0x4000_0004:PWM频率寄存器(32位可写)。

        从设备逻辑(verilog
 

always @(posedge ACLK) begin

  if (AWVALID && AWADDR == 32'h4000_0000 && WVALID) begin

    pwm_duty <= WDATA; // 更新占空比

  end

end

主设备(MicroBlaze CPU)

// C代码示例

#define PWM_DUTY_ADDR 0x40000000void set_pwm_duty(uint32_t duty) {

  *(volatile uint32_t *)PWM_DUTY_ADDR = duty;}

五、总结

        AXI总线在FPGA中的使用需严格遵循协议规范,并针对资源、时序和调试进行优化:

                协议选择:根据带宽需求选择AXI4/AXI-Lite/AXI-Stream。

                设计要点:地址对齐、握手时序、错误处理。

                工具辅助:利用厂商提供的IP核(如AXI Interconnect)简化开发。

                调试关键:ILA抓取信号,仿真验证协议完整性。

        掌握这些规则与技巧,可高效实现FPGA中复杂系统的AXI互连设计。