网上有很多介绍AXI的文章,本篇或多或少参考了一些,其中的一些内容是我自己的理解,我认为比较适合新手,希望能帮助到才接触FPGA的萌新。

一、AXI简介

AXI——Advanced eXtensible Interface,直译过来就是先进的可扩展接口,是由ARM公司提出的,是一种高性能、高带宽、低延迟的片内总线。FPGA工程师会发现其大量运用于FPGA设计中,Vivado中的接口类IP全部都配有AXI接口,可见其重要性。AXI包括AXI、AXI-Lite(轻量级、简化级)和AXI-Stream(Xilinx特有的高速数据流传输模式),其官方标准文档我已经上传,下载链接在这里,官方标准文档不建议从头看到尾,只需必要时查询使用。

AXI是多Master和多Slave的拓扑结构,如下图所示:

图1 AXI的拓扑结构

中间的Interconnect是指的AXI交换设备。上图需要特别注意的是,我们在设计过程中,有时同一个设备既可以作为Master,也可以作为Slave。

二、AXI总线的信号描述

AXI总线使用基于VALID/READY握手机制的数据传输协议,这是什么意思呢?就是无论是Master端,还是Slave端,要传输任何内容必须要确认对方给出了READY有效(不一定有效之后才传输,但是一定要等到有效,后面会有解释),且无论传输给对方的是数据还是地址,是控制信号还是状态信号,都要在VALID有效时进行传输。

1、AXI总线的通道和信号(AXI和AXI-Lite)

AXI总线一共分为6大通道,对于AXI和AXI-Lite,一般传输的信号线如下列出,对于AXI-Stream,后面单独讨论,对于猝发传输,会多几根信号线,也放在后面单独讨论。

(1)读地址通道,包含ARVALID, ARADDR, ARREADY信号。
(2)读数据通道,包含RVALID, RDATA, RREADY, RRESP信号。
(3)写地址通道,包含AWVALID,AWADDR, AWREADY信号。
(4)写数据通道,包含WVALID, WDATA,WSTRB, WREADY信号。
(5)写应答通道,包含BVALID, BRESP, BREADY信号。
(6)系统通道,包含ACLK,ARESETN信号。

可以看出,除了系统通道之外,每个通道都有VALID和READY。对于每个通道的信号名称,可以得到这样的一个规律:在前面加上一个字母R,表示读通道,加上一个字母W,表示写通道,加上一个字母B,表示应答通道(因为是VALID/READY机制,所以应答通道必然是写应答,表示写操作成功了,为什么没有读应答?读者请自己思考。),对于读通道和写通道,再在前面加上一个字母A表示地址通道,如果不加就是数据通道。根据这样的命名规律,大部分的信号线的意思就十分明白了,只有下面两种信号线需要说明。

RESP——表示Slave发出响应(response),其中BRESP是从设备发出的写响应,表示写操作的状态,RRESP是从设备发出的读响应,表示读操作的状态,这两个信号都是2位的,从00-11分别表示OKAY,EXOKAY,SLVERR,DECERR,一般情况下都是00,表示OKAY,就是说访问成功。EXOKAY是单独访问(exclusive)成功的意思,单独访问是AXI总线的一种访问模式,只允许一个Master对一个Slave进行访问。SLVERR表示访问错误,这时Master的地址和命令是已经给到了Slave了,但是Slave返回一个错误信息给Master。DECERR表示解码(decode)错误,其实是地址解码错误的意思,Master发出的访问地址如果不能被识别,则会由中间的交换设备Interconnect返回DECERR给Master。

WSTRB——写数据段有效,其每一位对应WDATA中的8位(1字节),用于标识对应字节是否有效,WSTRB的第0位为1表示WDATA的低8位有效,第1位为1表示WDATA的次低8位有效,以此类推。

AXI总线的R/WDATA的位宽可以选择32、64、128和256,一般32和64就满足于大部分设计了。当然,对于不同的数据位宽n,WSTRB的位宽是n/8。

2、AXI-Stream的信号和波形

可以不管这个小节直接跳到第三节。AXI4-Stream去掉了地址项,在这种模式下,其实就是简单的从Master发送数据到Slave,中间不经过交换设备,我认为就相当于一般的带着有效使能信号的大量数据传输,和AXI的理念相去甚远。除时钟和复位外,信号的命名规则以T开头,如下所示。

(1)TREADY信号:Slave告诉Master做好传输准备。
(2)TDATA信号:传输数据,可选宽度32、64、128、256bit。
(3)TSTRB信号:每一bit对应TDATA的一个有效字节,宽度为TDATA/8。
(4)TLAST信号:Master告诉Slave传输数据的结尾。
(5)TVALID信号:Master输出的传输有效使能。
(6)TUSER信号 :用户定义信号,宽度为128bit,一般用来给传输计数。

传输波形如下图所示,我个人认为就像使用FIFO存取数据的那种波形,AXI-Stream的传输波形比AXI和AXI-Lite都简单,后面不再讨论这个模式。

图2 AXI-Stream传输波形

三、AXI总线的数据传输过程

一般情况下,AXI-Lite用于配置寄存器和低速数据传输,AXI用于大量数据高速传输,所以AXI-Lite一般不支持猝发传输(也叫突发式传输,burst传输,即一次命令传输大量数据),所以下面分为猝发和非猝发来讨论。

1、非猝发传输

读操作握手过程如下图所示:

图3 AXI读操作握手过程

图3是一个比较好理解的图,但是实际的FPGA仿真波形中不是按这个图的上下顺序给出的信号,下面给出实际仿真的波形。

图4 AXI读操作实际波形

从上图可以看出在FPGA内部,过程是这样子的:

1、主设备有效ARVALID,这个时候必须保证ARADDR已经有效,表示主设备已经准备好地址,等待从设备响应。

2、从设备有效ARREADY,表示从设备已将接收地址和相关的控制信号锁存,告诉主设备不需要再维持这个读地址了,之后主设备可以把ARVALID拉低。

3、从设备有效RVALID,表示读数据可用,这个时候必须保证读数据RDATA已经有效,主设备监控该信号有效就可以读取数据了。

4、这时由于RRESP为0也表示读取数据正确,主设备则有效RREADY,表示主设备读操作完成,从设备这时可以拉低RVALID了。

为什么握手过程图和实际仿真波形会有差异?这时需要查阅标准文档,在标准文档中第三章有一个信号依赖关系图可以说明这个问题。

图5 AXI读操作信号依赖关系

上图中一个箭头表示弱依赖关系,两个箭头表示强依赖关系。

  • 从设备可以在ARVALID有效之后再给出ARREADY,也可以先给出ARREADY,再等待ARVALID有效。
  • 从设备必须等待ARVALID和ARREADY都有效才能给出RVALID,并且同时开始给出数据传输。
  • 主设备可以在RVALID有效之后再给出RREADY,也可以先给出RREADY,再等待RVALID有效。

写操作握手过程如下图所示:

图6 AXI写操作握手过程

同样的,实际的写操作的波形和这个过程图是有差异的。

图7 AXI写操作实际波形

这个过程的描述如下:

1、主设备有效AWVALID和WVALID,这个时候主设备的AWADDR和WDATA必须确保也已经有效,这两个信号不一定同时有效,但我根据经验发现一般情况下都表现为同时有效。表示主设备已经把地址和数据准备好了,等待从设备的AWREADY和WREADY。

2、从设备有效AWREADY和WREADY,这两个信号不一定同时有效。表示从设备已经准备好接收地址和数据,同时告诉主设备可以拉低AWVALID和WVALID了。

3、从设备有效BVALID,表示从设备已经完成了在指定地址接收数据的操作。这个信号虽然大多数情况下会先于BREADY拉高,但是允许其在BREADY之后拉高,也就是说BVALID和BREADY严格意义上讲并没有先后顺序,谁先完成谁先有效,并且拉高时和拉高之后就监控对方是否已经也拉高了,如果对方拉高,则己方在下一个时钟节拍拉低。

4、主设备有效BREADY,表示主设备已经完成了其余工作,此时可以接收来自从设备的BVALID,由于大多数情况下BVALID已经拉高,此时主设备拉高这个信号也是为了告诉从设备可以拉低BVALID了。

和读操作类似,写操作的信号依赖关系图如下。

图8 AXI写操作信号依赖关系
  • 主设备不一定得等待AWREADY或WREADY有效后再给出AWVALID或WVLAID。
  • 从设备可以等待AWVALID或WVALID有效或者两个都有效之后再给出AWREADY,也可以不用等待这两个信号有效就给出AWREADY。
  • 从设备可以等待AWVALID或WVALID有效或者两个都有效之后再给出WREADY,也可以不用等待这两个信号有效就给出WREADY。
  • 从设备必须等待WVALID和WREADY都有效之后,才能给出BVALID,这里需要注意的是对于猝发传输,从设备除了要等待前面两个信号有效之外还要等待WLAST有效之后才能给出BVALID。
  • 主设备可以等待BVALID有效之后再给出BREADY,也可以不用等待BVALID有效直接给出BREADY。

信号依赖关系是不是有点晕,其实不用记这么多,在使用过程中看实际波形就可以了。

2、猝发传输(Burst传输)

AXI总线的最大特点就是其猝发传输(一次命令多个数据的传输形式),猝发传输时比上面的情况多了几根信号线,猝发传输的起始地址最好以4KB对齐。猝发传输的过程以事务为单位,分为读命令事务、写命令事务、读数据事务、写数据事务、写应答事务,分别对应上面的5个通道。以下是我个人的理解:AXI总线的这种将总线操作分解为事务的特点和PCI、PCIE相类似,分解成事务之后,所谓的"总线"这个概念其实就是某种“协议”,所谓的总线的管理过程就是事务的转发过程,其实没有什么看得见摸得着的“总线”,本质就是满足特定协议的一堆接口以及中间的交换设备,这是所有高速总线的一大特点。下面两图大概说明了猝发传输的过程。

图9 AXI读猝发

图10 AXI写猝发

从上面两图,套用事务的概念,可以看出,对于读操作的过程,事务的顺序就是读命令事务—>读数据事务,对于写操作的过程,事务的顺序就是写命令事务—>写数据事务—>写应答事务。

除了第二节中的6个通道包含的信号线以外的AXI信号线如下。

读/写地址通道:

猝发传输相关的信号线:

ARLEN/AWLEN:猝发传输的长度。此长度决定本次猝发传输的数据的个数,每个数据的大小以下面的SIZE决定,为0表示传输1个数据,为1表示传输2个数据,以此类推。
ARSIZE/AWSIZE:猝发传输的大小,为0表示取低8位,即数据大小为1byte,为1表示取低16位,即数据大小为2byte,以此类推,这个数值不能超过总线位宽所决定的最大byte数。
ARBURST/AWBURST:猝发传输的类型(注1)。

其他不常用的信号线:
ARLOCK/AWLOCK:锁类型。原子操作相关(注2),初学者不用考虑,一般为0。
ARCACHE/AWCACHE:用于描述存储类型。AXI总线支持访问多种类型的存储设备,一般不用考虑,由IP核自动填写,存储器类型见图11。
ARPROT/AWPROT:保护类型,指明访问优先级、是否采用安全访问等信息,初学者不用考虑,一般为0。

读/写数据通道:

RLAST/WLAST:指示猝发传输的最后一个数据,不一定是一个节拍,但是一定是在本次需要传输的最后一个数据有效时才有效,如果其从有效变到无效,说明本次传输已经完成。

读/写/地址/数据/应答通道的ID信号线:

ARID/AWID:地址ID,交换设备转发事务的标记。

WID/RID/BID:与前面的ARID/AWID保持一致。

图11 AXI存储类型指示信号的含义

注1:

AXI协议用ARBURST/AWBURST[1:0]信号线定义了三种猝发传输的类型:固定式(FIXED,00)、递增式(INCR,01)、回卷式(WRAP,10)。
(1)固定式是指地址是固定的,每一次传输的地址都不变。这样的猝发传输是重复地对一个固定的位置进行存取,例如FIFO。
(2)递增式是指每一次读写的地址都比上一次的地址增加一个固定的值,就是通常的顺序存储器,这是最常见的猝发传输形式。
(3)回卷式跟递增式类似,当地址递增到边界时,自动返回到起始地址(起始地址必须按ARSIZE/AWSIZE对齐,猝发长度只能是2、4、8、16)。

注2:

原子操作是不可分割的,在执行完毕之前不会被任何其它任务或事件中断。一般在单处理系统中的单条指令中可完成的操作都认为是原子操作。

AXI是一个比较复杂的协议,猝发传输时不一定是一次完成之后再进行下一次,经常会出现重叠式猝发,即同时给出两次以上的命令事务,之后才进行数据事务,或者第一次数据事务还没有完成就给出第二次的命令事务。此外还有窄带传输和不对齐传输,我就不讲了,新手只需掌握非猝发时的AXI握手规则,看懂仿真波形就可以了。在FPGA设计中,对于复杂程度比较高的协议我们通常是利用官方IP核,AXI的猝发传输只需大概看懂波形就可以了,有兴趣可以深究,对于学习其他高速接口很有帮助。

下图是我截取的一段AXI重叠式猝发写的波形图供大家参考,图中Master连续给了两次写命令事务。

图12 AXI的burst写操作的波形

本文内容较多,难免有错,如有错误欢迎在留言区指出。

FPGA中的AXI总线知识点快速学习(适合新手)相关推荐

  1. ZYNQ中的AXI总线时序详解

    AXI总线是一种高性能.高带宽.低延迟的片内总线,AXI协议描述了主从设备数据传输的方式.主设备和从设备通过握手信号建立连接(VALID和READY),握手信号包括主机发送的VALID信号,表示数据有 ...

  2. AXI总线之AXI-LITE总线分析与实现

    AXI是由ARM公司提供的一种总线协议,Xilinx从6系列的FPGA开始对AXI总线提供支持,现如今已经发展到AXI4这个版本.在Xilinx的ZYNQ系列中,AXI是经常用的一种接口.AXI有3个 ...

  3. 余宏波 计算机网络,快速学习技术的理论构建与实证研究

    摘要: 本研究分理论构建和实证研究两个部分.快速学习技术的理论由如下五部分构成:(1)快 速学习技术是由元认知,学习策略,学习方法三要素共同组成.(2)快速学习技术要解决快速摄取学习信息,快速理解和重 ...

  4. AXI总线学习-------从零开始详细学-------------连载(9)读数据通中字节不变性

    AXI总线学习连载(9) 鲁迅曾经说过: 学硬件,不是学哪里查哪里,有一些东西是必须系统的学的,不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的. 我也曾经说过: 英文手册非常重要,这是学习硬件 ...

  5. AXI总线学习-------从零开始详细学-------------连载(8)读数据通中字节通路,narrow transfer

    AXI总线学习连载(8) 鲁迅曾经说过: 学硬件,不是学哪里查哪里,有一些东西是必须系统的学的,不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的. 我也曾经说过: 英文手册非常重要,这是学习硬件 ...

  6. vue中集合取第一个_快速学习Vue框架(知识点集合)

    学习Vue的小伙伴速度看过来,快速学习Vue框架知识点集合贴来啦.建议收藏,尤其基础并不是很扎实的同学,本篇集合贴就是你日后工作的参考手册. 基础知识: ·vue的生命周期:beforeCreate/ ...

  7. PCI总线的基础知识快速学习(一)(适合新手)

    本系列文章仅介绍在FPGA设计中我们一般需要了解的PCI知识点,完整的PCI协议远比本系列文章介绍的复杂,所以本系列适合新手快速学习,让不了解PCI的初学者对PCI有个概念,进而学习PCIe,如果我们 ...

  8. AXI 总线协议学习笔记(2)

    引言 从本文开始,正式系统性学学习AXI总线. 如何获取官方协议标准? 第一步:登陆官网:armDeveloper 第二步:登录,无账号需要注册 第三步:点击文档 第四步: 第五步:浏览页面建议下载下 ...

  9. AXI总线学习(AXI34)

    AXI总线学习 AXI协议的主要特征 主要结构 通道定义 读写地址通道 读数据通道 写数据通道 写操作回应信号 接口和互联 寄存器片 基本传输 Read burst Overlapping read ...

  10. AXI 总线协议学习笔记(4)

    引言 前面两篇博文从简单介绍的角度说明了 AXI协议规范. AXI 总线协议学习笔记(2) AXI 总线协议学习笔记(3) 从本篇开始,详细翻译并学习AXI协议的官方发布规范. 文档中的时序图说明: ...

最新文章

  1. 探究rh6上mysql5.6的主从、半同步、GTID多线程、SSL认证主从复制
  2. iOS 无限后台运行
  3. collections python_python: collections
  4. ABAddressBookSave关于保存到通讯录失败的问题
  5. C++多态,虚函数,纯虚函数
  6. 工业机器人智能发展:视觉和触觉感应简化
  7. Spring Boot -Shiro配置多Realm 1
  8. sqlbulkcopy能用于mysql吗_混凝土自动上料搅拌车能用于农村盖房吗?
  9. DBParameter比拼接字符串慢的解决办法
  10. (原創) 如何在Ubuntu上啟動ADSL連線? (OS) (Linux) (Ubuntu)
  11. SNIC超像素分割python代码
  12. 公司项目上线正规流程
  13. 【隐形的翅膀】基于钉钉工作流的人事评价信息采集案例(2):钉钉智能表单、OA审批、自动任务功能对比
  14. OpenGL MFC单文档 实现轨迹球
  15. XCTF-PWN pwn-200(使用DynELF利用write泄露system地址)
  16. java poi打印excel_POI打印Excel报表
  17. 计算机基础课程高质量公开课程整理(长期整理)
  18. LeeCode 5454 前缀和 + 暴力
  19. 计算机科学学院晚会主题,《2014计算机科学与工程学院迎新晚会策划书》.doc
  20. 2021年中式烹调师(初级)最新解析及中式烹调师(初级)免费试题

热门文章

  1. 抑郁症患者自述:从那天起,我走进了地狱
  2. tomcat中JSP跳转Servlet时卡白页的原因
  3. IT服务及相关概念界定
  4. 微课在小学计算机教学中的应用,微课技术在小学信息技术课堂中的应用
  5. xp系统搭建iscsi服务器,配置Microsoft Windows XP对MDS/IPS-8的iSCSI主机
  6. 20162312大二上学期总结博客
  7. windows下向GitHub上传代码
  8. java isprime函数_Java8函数式编程入门
  9. PID控制的现象与本质
  10. 计算机开机桌面文件丢失怎么办,电脑重启桌面文件丢失怎么办