一、资料列表

本文主要参考正点原子ZYNQ系列学习视频和相关手册
vivado的手册的各种手册很重要

  1. 很细的一个代码移植操作,移植了一个中断的示例代码
  2. AXI 详细介绍

二、知识点记录

PART1 AXI接口–可以实现PS-PL的高速便捷交互

AXI4 协议支持以下三种类型的接口

1、 AXI4:高性能存储映射接口。支持突发传输256字节,一个地址写256个
2、 AXI4-Lite:简化版的 AXI4 接口,用于较少数据量的存储映射通信。读写配置操作,不支持突发传输
3、 AXI4-Stream:用于高速数据流传输,非存储映射接口。流数据处理。突发数量不受限制

存储映射(Meamory Map)这一概念。如果一个协议是存储映射的,那么主机所发出的会话(无论读或写)就会标明一个地址。这个地址对应于系统存储空间中的一个地址,表明是针对该存储空间的读写操作。

AXI4:
接口和 ==AXI-Lite ==差不多,只是增加了一项功能就是批量传输,可以连续对一片地址进行一次性读写。也就是说具有数据读写的 burst 功能。上面两种均采用内存映射控制方式,即 ARM 将用户自定义 IP 编入某一地址进行访问,读写时就像在读写自己的片内 RAM,编程也很方便,开发难度较低。代价就是资源占用过多,需要额外的读地址线、写地址线、读数据线、写数据线、写应答线这些信号线。
AXI4-Stream:
这是一种连续流接口,不需要地址线(很像 FIFO,一直读或一直写就行)。对于这类 IP,ARM 不能通过上面的内存映射方式控制(FIFO 根本没有地址的概念),必须有一个转换装置,例如 AXI-DMA 模块来实现内存映射到流式接口的转换。AXI-Stream 适用的场合有很多:视频流处理;通信协议转换;数字信号处理;无线通信等。其本质都是针对数值流构建的数据通路,从信源(例如 ARM 内存、DMA、无线接收前端等)到信宿(例如 HDMI 显示器、高速 AD 音频输出,等)构建起连续的数据流。这种接口适合做实时信号处理。
在这里插入图片描述
读地址通道,写地址通道,读数据通道,写数据通道,写响应通道

几个常用的 AXI 接口 IP 的功能介绍

  1. AXI-DMA:实现从 PS 内存到 PL 高速传输高速通道 AXI-HP<---->AXI-Stream 的转换
  2. AXI-FIFO-MM2S:实现从 PS 内存到 PL 通用传输通道 AXI-GP<----->AXI-Stream 的转换
  3. AXI-Datamover:实现从 PS 内存到 PL 高速传输高速通道 AXI-HP<---->AXI-Stream 的转换,只不过这次是完全由 PL 控制的,PS 是完全被动的。
  4. AXI-VDMA:实现从 PS 内存到 PL 高速传输高速通道 AXI-HP<---->AXI-Stream 的转换,只不过是专门针对视频、图像等二维数据的。
  5. AXI-CDMA:这个是由 PL 完成的将数据从内存的一个位置搬移到另一个位置,无需 CPU 来插手。关于如何使用这些 IP,我们会在后面的章节中举例讲到。
    用户需要开发自己定义的IP 同 PS 进行通信,这时可以利用向导生成对应的 IP。用户自定义 IP 核可以拥有 AXI4-Lite
      AXI4,AXI-Stream,PLB 和 FSL 这些接口。后两种由于 ARM 这一端不支持,所以不用。有了上面的这些官方 IP 和向导生成的自定义 IP,用户其实不需要对 AXI 时序了解太多(除非确实遇到问题),因为 Xilinx 已经将和 AXI 时序有关的细节都封装起来,用户只需要关注自己的逻辑实现即可。ARM 不支持stream接口

示例
AXI_GPIOIP核的使用参考Xilinx手册,写的很详细
基本硬件连接框图
在这里插入图片描述
  AXI 协议严格的讲是一个点对点的主从接口协议,当多个外设需要互相交互数据时,我们需要加入一个 AXI Interconnect 模块,也就是 AXI 互联矩阵,作用是提供将一个或多个 AXI 主设备连接到一个或多个 AXI 从设备的一种交换机制(有点类似于交换机里面的交换矩阵)。这个 AXI Interconnect IP 核最多可以支持 16 个主设备、16 个从设备,如果需要更多的接口,可以多加入几个 IP 核。AXI 互联 IP(AXI Interconnect) 用于连接 AXI 存储器映射(memory-mapped)读写操作处理为一种寄存器读写的方式,根据地址进行主器件和从器件的数据读写。通用中断控制器(GIC)用于管理来自 PS 或者 PL 的中断,并把这些中断发送到 CPU。还有一种叫 AXI SmartConnect的模块,也是用于连接多个AXI主从模块的,这个模块可以提供低延时和高带宽的传输。
注意以上两个模块都是只支持地址映射的,不能连接 AXI Stream

AXI 通道定义(通道中包含完成操作的各种信号)

1、每一个独立的通道都包含一组信息信号,VALLD信号和READY信号,后两个信号实现握手机制。
2、这里的VALLD信号和READY信号不是指自从的响应,信息源端使用VALLD信号表示地址与控制信息什么时候有效。目的端使用READY信号表示什么时候可以开始接收信息。 读写通道还包含LAST信号表示什么时候传输最后一个数据。
3、读地址和写地址通道,地址通道包含了请求所需的地址信息
4、读数据通道,包含读取数据与读响应信息,读响应信号表示读操作是否完成。
5、写数据通道,主机发送给从机,包含写信息,通过wstrb信号表示数据那一部分有效
6、写响应通道,从机发送给主机,包含写响应信号,表示写操作是否完成

PART2 ZYNQ开发基本流程

在这里插入图片描述
1、前四步属于硬件开发
2、第五步是ARM上的软件开发

PART3 PS 基本资源简介

在这里插入图片描述
PS-PL通过预留的GP,HP或各种AXI接口进行数据交互,EMIO(EMIO是可以灵活定义的)也可以设计位PS-PL的数据交互接口。PS的常用资源SPI,UART之类的资源连接到MIO后与外设进行数据交互。
在这里插入图片描述
在这个界面选择使用的内存芯片型号,型号可以看出内存大小;还需要根据板子的DDR设计选择合适的数据位宽,7020是32位(两个16位)
在这里插入图片描述
根据开发板的PCB设计去选择使用的外设的IO引脚。不能乱选

7020 EMIO有64个,从54开始然后从PS端引出连接PL端的引脚,具体EMIO对应的哪一个PL引脚需要通过设置PL的硬件约束去设置。这里的EMIO可以近似去理解为一个FPGA的一个接口我们去设置它的引脚。

PART4 Zynq 中断系统

在这里插入图片描述
从图中(图来源于正点原子手册)可以看到,CPU 接收的中断来源有三种,分别是私有外设中断(private peripheral interrupts,PPI)软件生成的中断(software generated interrupts,SGI)和共享外设中断(shared peripheral interrupts、SPI)。
目前使用仅使用到了一些PS-PL的共享中断
在这里插入图片描述
在这里插入图片描述
(每次使用中断都需要清空状态寄存器并且还需要有开启和关闭中断的操作)
在这里插入图片描述

  1. 上半部分则是数据连接到了中断检测模块GIC
    中断响应连接到了IRQ(中断请求信号线)连接到了GIC 中断控制器,不同的中断源有不同的中断号用于识别中断源可以来自PL端。
    INT_TYPE :中断类型 边沿检测,电平检测
    INT_POLARITY : 电平触发类型 上升下降;高低电平
    INT_ANY :针对边沿触发,为1同时支持两种边沿变化
    INT_STAT:中断状态保持寄存器寄存,可以读写stat触发器也可以清0触发器
    中断使能可以使能个别中断也可以使用一个bank的中断,MASK为只读存储器,记录哪些被屏蔽那些被使用,可以用于查询中断请求来源
    在这里插入图片描述
  2. 下部分是外设通过MIO或者EMIO连接到了各种数据寄存器。

待整理

自定义IP核带AXI4 学习PS-PL端的数据交互

示例模板中的
init_platform 函数的作用是使能 caches 和初始化 uart;cleanup_platform 函数的作用是取消使
能 caches。实际上这两个函数在该工程中并没有启动任何作用,因为这两个函数是针对于特定平台如
Microblaze 的,对于我们使用的 ZYNQ 平台而言是不起作用的,

PL端设计IP核读取PS端的DDR3
自定义的IP核要符合器件型号,不然会导入失败或者用不了
自动连接后,按步骤生成硬件文件,打开SDK软件进行C程序设计
创建工程编写main函数,注意下载时要这种下载类型,并且选择重启设备

AXI_DMA 软件化的DMA,访问AXI_stream

AXI_DMA为内存到stream流外设提供了高带宽的内存访问,可以实现流数据访问与存储器映射访问之间的相互转换。可选S/G功能将ARM从读写数据中解放出来

AXI_DMA模块结构

MM2S,S2MM注意转换方向
存储器映射的设备读写使用的是AXI4-Full接口
流数据的设备读写使用的是AXI4-Stream接口
AXI-Lite用于读写IP核的状态,基本配置,使能等操作
在这里插入图片描述
stream中间的3个接口只有在,S/G功能下可以使用。
在这里插入图片描述

点击阅读全文
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐