ZYNQ学习--AXI_Stream_FIFO

参考资料
B站正点原子ZYNQ学习视频–SDK篇
AXI4-Stream FIFO v4.2 LogiCORE IP Product Guide
ZYNQ的硬核(PS部分)使用不多介绍,网上有很多教程,本文主要介绍AXI4-Stream FIFO,利用这个IP核实现ARM对FIFO的读写(PS端的代码根据SDK提供的样例进行修改)

一、实验说明

ZYNQ的 PS部分核和PS部分的交互需要使用AXI总线进行下图所示。
ZYNQ学习--AXI_Stream_FIFO_第1张图片
简单介绍AXI总线
AXI总线的三种基本接口
1、 AXI4:高性能存储映射接口。支持突发传输256字节,一个地址写256个。
2、 AXI4-Lite:简化版的 AXI4 接口,用于较少数据量的存储映射通信。读写配置操作,不支持突发传输。
3、 AXI4-Stream:用于高速数据流传输,非存储映射接口。流数据处理。突发数量不受限制。
前两种均采用内存映射控制方式(PS端接口只支持这两种模式)
ARM 将用户自定义 IP 编入某一地址进行访问,读写时就像在读写自己的片内 RAM,编程也很方便,开发难度较低。代价就是资源占用过多,需要额外的读地址线、写地址线、读数据线、写数据线、写应答线这些信号线。
AXI4-Stream这是一种连续流接口,不需要地址线(一直读或一直写就行)。对于这类 IP,ARM 不能通过上面的内存映射方式控制(FIFO 根本没有地址的概念),必须有一个转换装置,例如 AXI-DMA 模块来实现内存映射到流式接口的转换。从信源(例如 ARM 内存、DMA、无线接收前端等)到信宿(例如 HDMI 显示器、高速 AD 音频输出,等)构建起连续的数据流。这种接口适合做实时信号处理。

AXI-FIFO 是stream类型的存储器,VIVADO提供了AXI-DMA 模块来实现内存映射到流式接口的转换,DMA配置相对麻烦,而且更适合应用在一些高速处理场景中。这时我们还是需要PS读写FIFO就可以使用AXI4-Stream FIFO进行数据转换了。

二、AXI4-Stream FIFO介绍

网上有很多资料介绍的是AXI4-Stream DATA FIFO,本实验的FIFO可以说是PS和AXI4-Stream DATA FIFO之间的一个桥梁。
根据该IP核手册的描述,它是用来代替DMA连接AXI_ETH的。下图是它的内部结构图,使用时我们只需配置好寄存器就可以使用了。
ZYNQ学习--AXI_Stream_FIFO_第2张图片
使用该IP核首先要注意的是它的两种模式存储转发模式核直通模式,弄清楚这两个模式才能知道怎么使用该IP核
1、存储传递模式
该模式下,无论是MM2S,还是S2MM,得到的数据都会暂存到内部的FIFO中,只有当设置长度信息,数据完整了才会开始传递数据,并且该模式下的能转发的最大包的容量是与设置的FIFO有关系的。
2、直通模式
在接受到数据后的第3个周期转发数据,但是最后一个数据是需要输入长度信息后才转发的。
不同模式下的寄存器是如何具体操作的,可以查找手册的
Programing Sequence这一章节进行学习,手册中举例了收发所有情况的寄存器变化很详细。

三、AXI4-Stream FIFO 使用

下图是IP核的设置界面,分为4部分,最上面是设置AXI端接口,最下面是设置AXI_Stream接口。中间部分是设置内部FIFO的大小与FIFO读写的差异(这里我也不还太明白),stream端一共可以设置3种接口
AXI4-Stream TXD : 流数据发送接口
AXI4-Stream TXC : stream形式的控制信号
AXI4-Stream RXD : 流数据接受接口
ZYNQ学习--AXI_Stream_FIFO_第3张图片
PS端需要有M_AXI的输出接口,外设仅需要打开串口即可。
测试IP核的功能,写数据为例
ZYNQ学习--AXI_Stream_FIFO_第4张图片
综合、实现、生成比特流和生成硬件信息包

硬件信息包: 应该包含生成的比特流,SDK和ILA的联调官方推荐是统一使用SDK下载,因为使用整个系统的时钟是PS提供的,统一下载系统的时钟不会混乱。

PS端读写流程–参考IP核官方手册
ZYNQ学习--AXI_Stream_FIFO_第5张图片

四、实验仿真

ILA触发设置
设计中的ILA0,WDATD的数据在直通模式下不用设置触发,存储转发模式需要设置在最后几个数据上,否则可能会因为采用深度不够而无法抓取到信号。
ZYNQ学习--AXI_Stream_FIFO_第6张图片
设计中的ILA1
ZYNQ学习--AXI_Stream_FIFO_第7张图片

使用system ILA抓取实验波形
序号1对应的窗口是指要抓取的信号。
序号2中信号是PS和AXI Interconnec 传输的信号,这里的信号只要保证PS的输出的数据正确,信号对应的时序是不会乱的。
序号3对应的信号就是经过AXI Stream FIFO后输出的信号,每次在TReady信号高电平的下降沿输出下一个信号。
ZYNQ学习--AXI_Stream_FIFO_第8张图片
观察截断输出后的数据
32位信号被截断为4个8位信号依次输出所以存在着3个周期的0信号。(这里的valid值需要外部输入可以使用VIO实现)
在这里插入图片描述

你可能感兴趣的:(ZYNQ学习笔记,学习)