AXI STREAM外设+AXI STREAM DATA FIFO+AXI DMA总线时序观察

📅 2026/7/14 12:58:09
AXI STREAM外设+AXI STREAM DATA FIFO+AXI DMA总线时序观察
1. AXI总线协议家族概览在开始深入探讨AXI STREAM外设、AXI STREAM DATA FIFO和AXI DMA的交互之前我们先简单了解一下AXI总线协议家族。AXIAdvanced eXtensible Interface是ARM公司提出的高性能片上总线协议主要包含三种类型AXI4面向高性能内存映射需求支持突发传输AXI4-Lite简化版AXI适合简单控制寄存器访问AXI4-Stream用于高速数据流传输没有地址概念这三种协议在我们的实验场景中都会涉及。AXI STREAM用于外设与FIFO之间、FIFO与DMA之间的数据传输AXI FULL用于DMA与内存控制器之间的数据传输AXI LITE用于PS端配置DMA控制器。2. 实验环境搭建与逻辑架构2.1 硬件逻辑框图我们的实验环境搭建了一个完整的从PL到PS的数据通路AXI STREAM外设 → AXI STREAM DATA FIFO → AXI DMA → AXI内存互联 → DDR内存这个数据流涉及四种不同的AXI协议交互我们使用ILAIntegrated Logic Analyzer在四个关键节点进行信号捕获SLOT0观测AXI STREAM外设到AXI FIFO的时序AXI-STREAM协议SLOT1观测AXI FIFO到AXI DMA的时序AXI-STREAM协议SLOT2观测AXI DMA S2MM到AXI内存互联的时序AXI-FULL协议SLOT3观测AXI DMA配置接口的时序AXI-LITE协议2.2 关键组件配置AXI STREAM外设我们实现了一个简单的数据生成模块核心代码如下always(posedge sys_clk or negedge sys_rst_n) begin if(!sys_rst_n) begin state TRANS_IDLE; r_tdata 32b0; r_tvalid 1b0; end else begin case(state) TRANS_IDLE: begin if(trans_start_posedge m_axis_tready) begin state TRANS_ING; end end TRANS_ING: begin if(trans_cnt TRANS_NUM) begin r_tvalid 1b1; r_tdata trans_cnt; end else begin state TRANS_DONE; r_tvalid 1b0; end end TRANS_DONE: begin state TRANS_IDLE; end endcase end endAXI DMA配置需要特别注意几个关键寄存器S2MM_DMACR控制寄存器S2MM_DA目标地址寄存器S2MM_LENGTH传输长度寄存器S2MM_DMASR状态寄存器AXI STREAM DATA FIFO配置要点深度设置为512根据实际数据吞吐量调整独立时钟域如果需要跨时钟域传输几乎满/几乎空阈值设置3. 时序捕获与分析3.1 AXI STREAM协议时序分析在SLOT0和SLOT1观测到的AXI STREAM协议信号主要包括TVALID数据有效信号源端驱动TREADY接收准备信号目的端驱动TDATA实际传输数据TKEEP字节有效指示TLAST数据包结束标志关键发现当FIFO为空时其TREADY信号始终保持高电平表示可以立即接收数据。这使得AXI STREAM外设可以连续发送数据而不需要等待。但当FIFO接近满时TREADY会拉低导致数据传输暂停。3.2 AXI FULL协议时序分析在SLOT2观测到的AXI FULL协议信号包括AW通道地址写通道W通道数据写通道B通道响应通道AR通道地址读通道R通道数据读通道突发传输特性AXI DMA配置为突发长度16每个突发传输16个数据字。在实验中传输256字节数据64个32位字DMA会分成4次突发传输完成。3.3 AXI LITE协议时序分析通过SLOT3观察PS端对DMA的配置过程向S2MM_DA0x48写入目标地址0x1400000向S2MM_DMACR0x30写入控制字0x17003向S2MM_LENGTH0x58写入传输长度0x100256字节配置完成后PS端会读取状态寄存器确认配置是否成功。4. FIFO缓冲机制的影响4.1 数据流控制AXI STREAM DATA FIFO在系统中扮演着关键的角色解耦生产者和消费者外设可以持续产生数据即使DMA暂时无法接收平滑数据流吸收突发数据防止数据丢失跨时钟域如果配置为异步FIFO可以连接不同时钟域实测现象当DMA未准备好时TREADY为低FIFO会暂停输出数据但继续从外设接收数据直到接近满。这种背压机制Backpressure确保了数据不会丢失。4.2 性能影响我们测量了传输256字节数据的总耗时理论最小时间100MHz时钟64周期×10ns 640ns实际测量时间2840ns性能差距主要来自DMA配置时间FIFO到DMA的TREADY不稳定初期只有4个周期的高电平AXI FULL协议的地址/数据通道握手延迟5. DMA中断触发机制分析5.1 中断触发条件通过观察时序我们发现DMA中断s2mm_introut触发与以下条件相关BCNT计数器DMA内部维护的突发传输计数器每次发起AW请求时AWCNT和BCNT自增收到B响应时AWCNT和BCNT自减当BCNT归零时可能触发中断FIFO的TLAST信号即使未传输完预设长度如果收到TLAST且缓存数据为空也会触发中断5.2 中断服务处理典型的中断服务流程读取S2MM_DMASR0x34确认中断类型处理完成的数据清除中断标志向S2MM_DMASR写入0x1000重新配置DMA进行下一次传输6. 常见问题与解决方案6.1 溢出问题分析实验中观察到一个现象当DMA向PS端写地址的次数≥3次时会出现overflow标记。可能的原因包括AXI总线的CACHE配置不当DDR控制器带宽不足内存访问冲突解决方案尝试调整AXI事务的CACHE属性增加FIFO深度以吸收更长的延迟优化DMA突发长度6.2 DMA不接收数据问题当DMA的TREADY信号持续为低时检查以下几点DMA是否已正确配置特别是S2MM_DMACR寄存器目标地址是否有效S2MM_DA传输长度是否已设置S2MM_LENGTHDMA是否处于运行状态S2MM_DMASR的Halted位7. 优化建议7.1 提高传输效率增大突发长度在DMA配置中使用更大的突发长度如64或128双缓冲机制配置两个缓冲区当一个缓冲区传输时另一个缓冲区处理数据时钟优化在时序允许的情况下提高AXI总线时钟频率7.2 调试技巧ILA触发设置使用TLAST或特定数据模式作为触发条件多时间基准对慢速控制信号和高速数据信号使用不同的采样率标记关键事件在波形中添加标记如DMA配置完成、中断触发等在实际项目中这种AXI STREAMDMA的架构非常适合视频处理、高速AD采集等场景。我曾在一个图像处理项目中采用类似架构实现了稳定的1080p60fps视频流处理。关键是要充分理解各组件的工作机制并通过ILA等工具验证实际时序是否符合预期。