MicroBlaze在Vitis中如何使用AXI Stream接口实现通信
Vitis环境下MicroBlaze AXI Stream接口通信的头文件与对应函数
基础必带头文件
不管你用哪种方式连接AXI Stream设备,首先必须包含BSP根据硬件配置自动生成的xparameters.h,该文件内定义了所有流接口、外设的基地址、设备ID等硬件参数宏,你连接自定义IP的2个流端口的地址宏也在这个文件里,命名一般为XPAR_MICROBLAZE_0_S<N>_AXIS_BASEADDR(发送端口)、XPAR_MICROBLAZE_0_M<N>_AXIS_BASEADDR(接收端口),N为端口序号0~15,对应你配置的16个流接口。
分场景使用的头文件与操作函数
场景1:直接使用MicroBlaze原生引出的AXI Stream端口连接自定义IP(无中间IP)
这是当前配置最常用的方式,不需要额外引入专用外设驱动,包含通用IO头文件xil_io.h即可。
对应操作函数:- 流发送:根据传输位宽选择
Xil_OutByte(端口基地址, 发送数据)、Xil_OutHalfWord(端口基地址, 发送数据)、Xil_OutWord(端口基地址, 发送数据) - 流接收:根据传输位宽选择
Xil_InByte(端口基地址)、Xil_InHalfWord(端口基地址)、Xil_InWord(端口基地址),函数返回值即为接收到的流数据
这类操作是阻塞式的:发送时如果对端自定义IP未拉高TREADY信号,函数会持续等待直到传输完成;接收时如果对端未拉高TVALID发送有效数据,读操作会一直阻塞直到数据到达。
- 流发送:根据传输位宽选择
场景2:MicroBlaze和自定义IP之间串接了AXI Stream FIFO/AXI DMA等中间IP
需要引入对应IP的官方驱动头文件,调用对应驱动函数完成通信:- 串接AXI Stream FIFO时,头文件为
xaxis_fifo.h,核心操作函数为XAxiFifo_Initialize()(初始化FIFO实例)、XAxiFifo_Send()(批量发送流数据)、XAxiFifo_Recv()(批量接收流数据) - 串接AXI DMA做高速流传输时,头文件为
xaxidma.h,核心操作函数为XAxiDma_Initialize()(初始化DMA实例)、XAxiDma_SimpleTransfer()(启动简单模式DMA传输)
- 串接AXI Stream FIFO时,头文件为
注意:使用原生流接口时不需要手动配置编译选项,Vitis根据XSA硬件文件生成BSP时会自动开启MicroBlaze流指令支持,手动修改编译参数移除对应指令选项会导致流通信异常。
内容的提问来源于stack exchange,提问作者Ethan Link
相关产品推荐
相关产品推荐

