Vitis中FIFO初始化与数据传输问题求助(Kria KV260平台)
问题解决方案(Kria KV260 + Vitis环境)
一、AWValid/WValid始终为低的排查与解决
- 检查AXI握手信号:用ILA监控
AWReady和WReady信号,若这两个信号始终为低,说明接收端(DMA或FIFO的AXI接口)未准备好接收数据。确认DMA是否完成初始化并使能,或FIFO的AXI接口是否正确配置为接收模式。 - 核对地址映射:打印代码中写入的基地址,对比硬件设计的地址映射表,确保地址在FIFO/DMA的有效地址范围内,无超出总线宽度或偏移写错的情况。
- 验证AXI接口时序:确认发送数据的核使用AXI Full接口,且时序符合协议要求——AWValid和WValid需配合AWReady/WReady完成握手,若核侧未正确等待握手信号,可能导致信号持续为低。
二、FIFO满状态检查的实现
- 硬件侧引出状态信号:将FIFO IP的
full或prog_full信号连接到ILA,可实时监控FIFO状态;若需软件读取,可添加一个AXI Lite寄存器模块,将full信号锁存到寄存器中,软件通过Xil_In32读取该寄存器值即可判断。 - 利用FIFO IP自带寄存器:部分AXI Stream FIFO IP提供AXI Lite接口,可读取内部状态寄存器(通常包含满状态位),直接通过寄存器地址读取即可,无需额外硬件修改。
- 配置可编程满阈值:若使用
prog_full信号,可在硬件IP配置时设置阈值(比如FIFO深度的70%),提前触发状态信号,避免数据溢出。
三、Vitis平台缺失xllfifo驱动的处理
- 明确FIFO类型:xllfifo是针对Local Link FIFO的驱动,当前AXI Stream FIFO无需该驱动。若你的硬件使用AXI Stream FIFO,直接通过硬件配置参数(深度、宽度)即可,多数情况下无需软件初始化。
- 手动操作寄存器:若FIFO有AXI Lite控制接口,直接用
Xil_Out32/Xil_In32操作寄存器。比如复位FIFO的示例代码:// 假设复位寄存器偏移为0x00,复位位为bit0 Xil_Out32(FIFO_BASE_ADDR + 0x00, 0x01); Xil_Out32(FIFO_BASE_ADDR + 0x00, 0x00); - 重新生成Vitis平台:创建平台时,在硬件设置中确保FIFO的AXI Lite接口被识别,勾选生成对应的BSP组件。若自动生成失败,可手动添加自定义寄存器操作代码到应用工程中。
内容的提问来源于stack exchange,提问作者Dresult
相关产品推荐
相关产品推荐

