ZYNQ-AXI总线简介

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: ZYNQ-AXI总线简介

学习内容


关于AXI总线协议的一些简单知识,通过阅读Xilinx的使用指导手册(UG1037),结合正点原子的ZYNQ视频进行梳理总结。

AXI


AXI(Advanced eXtensible Interface) 高级扩展接口是ARM AMBA的一部分。(AMBA(Advanced Microcontroller Bus Architecture) 高级微控制器总线架构)

AMBA:高级微控制器总线架构,是1996年首次引用的一组微控制器总线协议。开放的片内互联的总线标准,能在多主机设计中实现多个控制器和外围设备之间的连接和管理。在Xilinx公司的芯片也广泛地使用AXI接口用于开发和设计。使用axi总线接口可以提高效率、开发的灵活性,以及可移植性。

AXI4 三种类型


AXI4(AXI4-Full)


AXI4(AXI4-Full):用于高性能的存储器映射需求;(存储器映射:主机在对丛机进行读写操作时,指定一个目标地址,这个地址对应系统存储空间的地址,表示对该空间进读写操作。)AXI4用于存储器映射接口,允许高达256个数据的的高吞吐量突发传输,并且传输周期只需要一个地址。

AXI4-Lite


AXI4-Lite:简化版的AXI4接口。用于低吞吐率存储器映射的通信。 AXI4-Lite是一个轻量级、单次传输存储器映射接口。 它使用了少量的逻辑器件进行实现总线功能,AXI4-Lite接口简单,在设计开发中简单易用。

AXI4-Stream


AXI4-Stream:用于高速的流数据通信。 AXI4-Stream完全去除了对地址的需求,并允许无限制数据大小的数据突发的数据传输。AXI4-Stream接口在传输时没有使用地址单元,所以不是存储器映射。 所以在对于那些只关心数据,对地址不关心或者没有地址需求的接口,可以采用AXI4-Stream接口。

AXI的工作方式


AXI4和AXI4-Lite包含5个独立的通道:

  1. 写地址通道
  2. 读地址通道
  3. 写数据通道
  1. 读数据通道
  2. 写响应通道

数据可以同时在主机和从机之间双向移动,并且数据传输大小可以不同。AXI4中的限制是一个突发传输最多可以传输256个数据。AXI4-Lite只允许单次传输一个数据。

读取数据


下图演示了AXI总线如何进行读取数据的操作:

image.png

首先由主机通过读取地址通道发送地址和读操作的指令,在从机接收到读操作,并正确读取从主机发送的地址,通过读取数据通道将数据由从机发送到主机。

写入数据


下图演示了AXI总线如何进行写入数据的操作:

image.png

首先由主机通过写入地址通道发送地址和写操作的指令,在从机接收到写操作,开始接收主机从读取数据通道发送的数据信息并写入从机,当完成写入操作后,写响应通道将回应写响应。

存储器映射协议


通过赋予每个任务不同的虚拟–物理地址转换映射,支持不同任务之间的保护。地址转换函数在每一个任务中定义,在一个任务中的虚拟地址空间映射到物理内存的一个部分,而另一个任务的虚拟地址空间映射到物理存储器中的另外区域。就是把一个地址连接到另一个地址。

AXI4-Stream协议


AXI4-Stream协议用于通常用于以数据为主和数据流的应用实例中,其中不存在或不需要地址的概念。 每个AXI4-Stream都充当一个单向通道,并带有一个握手数据流。

连接存储器映射和 AXI4-Stream


一种常见的方法是构建将AXI4-Stream和AXI内存映射IP结合在一起的系统。通常,DMA的IP可用于将数据流移入或移出内存。例如,处理器可以与DMA一起工作来解码数据包,或者在流数据之上实现一个协议栈,从而构建更复杂的系统,使数据在不同的应用程序空间或不同的IP之间移动。

使用HLS添加AXI接口


在HLS中支持函数自动综合生成下面的AXI总线接口:

• AXI4-Stream (axis)

• AXI4-Lite slave (s_axilite)

• AXI4 master (m_axi)

HLS AXI4-Stream Interface


你可以将AXI4-Stream接口(axis模式)应用于任何输入参数和任何数组或指针输出参数。

因为axis 4- stream接口以顺序流的方式传输数据,所以不能与既可读又可写的参数一起使用。

在设计时候又分为带side-channel和不带side-channel。

带side-channel:使用带有边通道的axis4 - stream接口提供了额外的功能,允许作为组件的一部分的可选side-channel AXI4-Stream标准,可直接用于C代码。(这里我的理解是使用axi接口做了拓展功能)

不带side-channel:使用AXI4-Stream 时候,数据类型不包含任何AXI4 side-channel的参数。(这里我的理解是仅仅使用数据流的交互)

下面给出一个HLS设计的实例:

image.png

综合后对于A、B两个端口,都被定义为了AXI4-Stream的接口。而多了VALID和READY用于检测数据的是否有效和准备状态。

image.png

HLS AXI4-Lite Interface


AXI4-Lite slave接口通常用于可以被微控制器和处理器控制的外设和设备接口。AXI4-Lite slave接口的Vivado HLS特性(s_axilite模式):

  • 将多个端口分组到同一个AXI4-Lite从接口。
  • 将设计导出到Vivado IP目录时,输出C函数和头文件以与处理器上运行的代码一起使用。
    下面给出一个多个不同端口分配到一个接口的实例:
void example(char *a, char *b, char *c)
{
#pragma HLS INTERFACE s_axilite port=return bundle=BUS_A
#pragma HLS INTERFACE s_axilite port=a bundle=BUS_A
#pragma HLS INTERFACE s_axilite port=b bundle=BUS_A
#pragma HLS INTERFACE s_axilite port=c bundle=BUS_A
*c += *a + *b;
}

综合后的结果:

image.png

HLS AXI4 Master Interface


您可以在任何数组或指针/引用参数、实现HLS AXI4 Master接口(m_axi模式)。 该接口使用两种模式:一是单独的数据传输,二是使用C memcpy功能的突发模式数据传输。

单独的数据传输模式:

image.png

在这两个例子中,通过AXI4 Master接口进行的数据传输都是简单的读或写操作:一次传输一个地址和一个数据值。

突发模式传输: 突发模式使用一个单一的基址传输数据,该基址后面跟着多个连续的数据样本,并且能够实现更高的数据吞吐量。只有在使用C memcpy函数将数据读入或读出用于合成的顶级函数时,才可能使用突发模式。

下面给出一个具体实例:

void example(volatile int *a){
#pragma HLS INTERFACE m_axi depth=50 port=a
#pragma HLS INTERFACE s_axilite port=return bundle=AXILiteS
//Port a is assigned to an AXI4-master interface
int i;
int buff[50];
// memcpy creates a burst access to memory
memcpy(buff,(const int*)a,50*sizeof(int));
for(i=0; i < 50; i++){
buff[i] = buff[i] + 100;
}
memcpy((int *)a,buff,50*sizeof(int));
}

当你用前面的例子合成一个设计时,它会产生如下图所示的接口(AXI接口):

image.png

Reference


  1. Xilinx的使用指导手册(UG1037)
  2. 正点原子ZYNQ视频教程

Vuko公众号同步更新~


欢迎大家关注我的公众号。如果需要工程微信后台留言即可~

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
目录
相关文章
|
存储 网络性能优化 vr&ar
深入理解AMBA总线(十七)AXI是如何提高性能的
深入理解AMBA总线(十七)AXI是如何提高性能的
1688 1
|
芯片
深入理解AMBA总线(一)APB总线入门(上)
深入理解AMBA总线(一)APB总线入门
932 0
|
安全 物联网 数据安全/隐私保护
深入理解AMBA总线协议(AXI总结篇)
深入理解AMBA总线协议(AXI总结篇)
1385 1
|
存储 安全
深入理解AMBA总线(四)AHB-lite总线
深入理解AMBA总线(四)AHB-lite总线
913 0
|
存储 SoC
深入理解AMBA总线(十一)AXI协议导论
深入理解AMBA总线(十一)AXI协议导论
1494 0
|
SoC
深入理解AMBA总线(七)AHB设计要点和AHB2APB同步桥设计前言
深入理解AMBA总线(七)AHB设计要点和AHB2APB同步桥设计前言
421 0
深入理解AMBA总线(七)AHB设计要点和AHB2APB同步桥设计前言
|
vr&ar 内存技术
深入理解AMBA总线(十八)一个简单的AXI2SRAM设计
深入理解AMBA总线(十八)一个简单的AXI2SRAM设计
528 0
|
网络性能优化
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
604 0
|
vr&ar SoC 内存技术
深入理解AMBA总线(十二)AXI突发传输和AXI控制信号
深入理解AMBA总线(十二)AXI突发传输和AXI控制信号
1254 0
深入理解AMBA总线(一)APB总线入门(下)
深入理解AMBA总线(一)APB总线入门(下)
746 0