FPGA中的AXI总线知识点快速学习(适合新手)
网上有很多介绍AXI的文章,本篇或多或少参考了一些,其中的一些内容是我自己的理解,我认为比较适合新手,希望能帮助到才接触FPGA的萌新。
一、AXI简介
AXI——Advanced eXtensible Interface,直译过来就是先进的可扩展接口,是由ARM公司提出的,是一种高性能、高带宽、低延迟的片内总线。FPGA工程师会发现其大量运用于FPGA设计中,Vivado中的接口类IP全部都配有AXI接口,可见其重要性。AXI包括AXI、AXI-Lite(轻量级、简化级)和AXI-Stream(Xilinx特有的高速数据流传输模式),其官方标准文档我已经上传,下载链接在这里,官方标准文档不建议从头看到尾,只需必要时查询使用。
AXI是多Master和多Slave的拓扑结构,如下图所示:
中间的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都简单,后面不再讨论这个模式。
三、AXI总线的数据传输过程
一般情况下,AXI-Lite用于配置寄存器和低速数据传输,AXI用于大量数据高速传输,所以AXI-Lite一般不支持猝发传输(也叫突发式传输,burst传输,即一次命令传输大量数据),所以下面分为猝发和非猝发来讨论。
1、非猝发传输
读操作握手过程如下图所示:
图3是一个比较好理解的图,但是实际的FPGA仿真波形中不是按这个图的上下顺序给出的信号,下面给出实际仿真的波形。
从上图可以看出在FPGA内部,过程是这样子的:
1、主设备有效ARVALID,这个时候必须保证ARADDR已经有效,表示主设备已经准备好地址,等待从设备响应。
2、从设备有效ARREADY,表示从设备已将接收地址和相关的控制信号锁存,告诉主设备不需要再维持这个读地址了,之后主设备可以把ARVALID拉低。
3、从设备有效RVALID,表示读数据可用,这个时候必须保证读数据RDATA已经有效,主设备监控该信号有效就可以读取数据了。
4、这时由于RRESP为0也表示读取数据正确,主设备则有效RREADY,表示主设备读操作完成,从设备这时可以拉低RVALID了。
为什么握手过程图和实际仿真波形会有差异?这时需要查阅标准文档,在标准文档中第三章有一个信号依赖关系图可以说明这个问题。
上图中一个箭头表示弱依赖关系,两个箭头表示强依赖关系。
- 从设备可以在ARVALID有效之后再给出ARREADY,也可以先给出ARREADY,再等待ARVALID有效。
- 从设备必须等待ARVALID和ARREADY都有效才能给出RVALID,并且同时开始给出数据传输。
- 主设备可以在RVALID有效之后再给出RREADY,也可以先给出RREADY,再等待RVALID有效。
写操作握手过程如下图所示:
同样的,实际的写操作的波形和这个过程图是有差异的。
这个过程的描述如下:
1、主设备有效AWVALID和WVALID,这个时候主设备的AWADDR和WDATA必须确保也已经有效,这两个信号不一定同时有效,但我根据经验发现一般情况下都表现为同时有效。表示主设备已经把地址和数据准备好了,等待从设备的AWREADY和WREADY。
2、从设备有效AWREADY和WREADY,这两个信号不一定同时有效。表示从设备已经准备好接收地址和数据,同时告诉主设备可以拉低AWVALID和WVALID了。
3、从设备有效BVALID,表示从设备已经完成了在指定地址接收数据的操作。这个信号虽然大多数情况下会先于BREADY拉高,但是允许其在BREADY之后拉高,也就是说BVALID和BREADY严格意义上讲并没有先后顺序,谁先完成谁先有效,并且拉高时和拉高之后就监控对方是否已经也拉高了,如果对方拉高,则己方在下一个时钟节拍拉低。
4、主设备有效BREADY,表示主设备已经完成了其余工作,此时可以接收来自从设备的BVALID,由于大多数情况下BVALID已经拉高,此时主设备拉高这个信号也是为了告诉从设备可以拉低BVALID了。
和读操作类似,写操作的信号依赖关系图如下。
- 主设备不一定得等待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相类似,分解成事务之后,所谓的"总线"这个概念其实就是某种“协议”,所谓的总线的管理过程就是事务的转发过程,其实没有什么看得见摸得着的“总线”,本质就是满足特定协议的一堆接口以及中间的交换设备,这是所有高速总线的一大特点。下面两图大概说明了猝发传输的过程。
从上面两图,套用事务的概念,可以看出,对于读操作的过程,事务的顺序就是读命令事务—>读数据事务,对于写操作的过程,事务的顺序就是写命令事务—>写数据事务—>写应答事务。
除了第二节中的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保持一致。
注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连续给了两次写命令事务。
本文内容较多,难免有错,如有错误欢迎在留言区指出。
FPGA中的AXI总线知识点快速学习(适合新手)相关推荐
- ZYNQ中的AXI总线时序详解
AXI总线是一种高性能.高带宽.低延迟的片内总线,AXI协议描述了主从设备数据传输的方式.主设备和从设备通过握手信号建立连接(VALID和READY),握手信号包括主机发送的VALID信号,表示数据有 ...
- AXI总线之AXI-LITE总线分析与实现
AXI是由ARM公司提供的一种总线协议,Xilinx从6系列的FPGA开始对AXI总线提供支持,现如今已经发展到AXI4这个版本.在Xilinx的ZYNQ系列中,AXI是经常用的一种接口.AXI有3个 ...
- 余宏波 计算机网络,快速学习技术的理论构建与实证研究
摘要: 本研究分理论构建和实证研究两个部分.快速学习技术的理论由如下五部分构成:(1)快 速学习技术是由元认知,学习策略,学习方法三要素共同组成.(2)快速学习技术要解决快速摄取学习信息,快速理解和重 ...
- AXI总线学习-------从零开始详细学-------------连载(9)读数据通中字节不变性
AXI总线学习连载(9) 鲁迅曾经说过: 学硬件,不是学哪里查哪里,有一些东西是必须系统的学的,不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的. 我也曾经说过: 英文手册非常重要,这是学习硬件 ...
- AXI总线学习-------从零开始详细学-------------连载(8)读数据通中字节通路,narrow transfer
AXI总线学习连载(8) 鲁迅曾经说过: 学硬件,不是学哪里查哪里,有一些东西是必须系统的学的,不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的. 我也曾经说过: 英文手册非常重要,这是学习硬件 ...
- vue中集合取第一个_快速学习Vue框架(知识点集合)
学习Vue的小伙伴速度看过来,快速学习Vue框架知识点集合贴来啦.建议收藏,尤其基础并不是很扎实的同学,本篇集合贴就是你日后工作的参考手册. 基础知识: ·vue的生命周期:beforeCreate/ ...
- PCI总线的基础知识快速学习(一)(适合新手)
本系列文章仅介绍在FPGA设计中我们一般需要了解的PCI知识点,完整的PCI协议远比本系列文章介绍的复杂,所以本系列适合新手快速学习,让不了解PCI的初学者对PCI有个概念,进而学习PCIe,如果我们 ...
- AXI 总线协议学习笔记(2)
引言 从本文开始,正式系统性学学习AXI总线. 如何获取官方协议标准? 第一步:登陆官网:armDeveloper 第二步:登录,无账号需要注册 第三步:点击文档 第四步: 第五步:浏览页面建议下载下 ...
- AXI总线学习(AXI34)
AXI总线学习 AXI协议的主要特征 主要结构 通道定义 读写地址通道 读数据通道 写数据通道 写操作回应信号 接口和互联 寄存器片 基本传输 Read burst Overlapping read ...
- AXI 总线协议学习笔记(4)
引言 前面两篇博文从简单介绍的角度说明了 AXI协议规范. AXI 总线协议学习笔记(2) AXI 总线协议学习笔记(3) 从本篇开始,详细翻译并学习AXI协议的官方发布规范. 文档中的时序图说明: ...
最新文章
- 探究rh6上mysql5.6的主从、半同步、GTID多线程、SSL认证主从复制
- iOS 无限后台运行
- collections python_python: collections
- ABAddressBookSave关于保存到通讯录失败的问题
- C++多态,虚函数,纯虚函数
- 工业机器人智能发展:视觉和触觉感应简化
- Spring Boot -Shiro配置多Realm 1
- sqlbulkcopy能用于mysql吗_混凝土自动上料搅拌车能用于农村盖房吗?
- DBParameter比拼接字符串慢的解决办法
- (原創) 如何在Ubuntu上啟動ADSL連線? (OS) (Linux) (Ubuntu)
- SNIC超像素分割python代码
- 公司项目上线正规流程
- 【隐形的翅膀】基于钉钉工作流的人事评价信息采集案例(2):钉钉智能表单、OA审批、自动任务功能对比
- OpenGL MFC单文档 实现轨迹球
- XCTF-PWN pwn-200(使用DynELF利用write泄露system地址)
- java poi打印excel_POI打印Excel报表
- 计算机基础课程高质量公开课程整理(长期整理)
- LeeCode 5454 前缀和 + 暴力
- 计算机科学学院晚会主题,《2014计算机科学与工程学院迎新晚会策划书》.doc
- 2021年中式烹调师(初级)最新解析及中式烹调师(初级)免费试题