0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AXI总线知识点快速学习

FPGA设计论坛 来源:FPGA设计论坛 作者:FPGA设计论坛 2022-03-14 14:13 次阅读

一、AXI简介

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

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

f5d4d2ca-a22a-11ec-952b-dac502259ad0.jpg

图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都简单,后面不再讨论这个模式。

f5e9c5ae-a22a-11ec-952b-dac502259ad0.jpg

图2 AXI-Stream传输波形

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

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

1、非猝发传输

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

f5fce936-a22a-11ec-952b-dac502259ad0.jpg

图3 AXI读操作握手过程

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

f60f4e0a-a22a-11ec-952b-dac502259ad0.jpg

图4 AXI读操作实际波形

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

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

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

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

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

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

f625eee4-a22a-11ec-952b-dac502259ad0.png

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

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

从设备可以在ARVALID有效之后再给出ARREADY,也可以先给出ARREADY,再等待ARVALID有效。

从设备必须等待ARVALID和ARREADY都有效才能给出RVALID,并且同时开始给出数据传输。

主设备可以在RVALID有效之后再给出RREADY,也可以先给出RREADY,再等待RVALID有效。

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

f648f984-a22a-11ec-952b-dac502259ad0.jpg

图6 AXI写操作握手过程

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

f6591350-a22a-11ec-952b-dac502259ad0.jpg

图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了。

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

f67b2cb0-a22a-11ec-952b-dac502259ad0.jpg

图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相类似,分解成事务之后,所谓的"总线"这个概念其实就是某种“协议”,所谓的总线的管理过程就是事务的转发过程,其实没有什么看得见摸得着的“总线”,本质就是满足特定协议的一堆接口以及中间的交换设备,这是所有高速总线的一大特点。下面两图大概说明了猝发传输的过程。

f68f2d1e-a22a-11ec-952b-dac502259ad0.jpg

图9 AXI读猝发

f6a5c5ba-a22a-11ec-952b-dac502259ad0.jpg

图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保持一致。

f6c0a038-a22a-11ec-952b-dac502259ad0.jpg

图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连续给了两次写命令事务。

f6d5984e-a22a-11ec-952b-dac502259ad0.jpg

图12 AXI的burst写操作的波形

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 总线
    +关注

    关注

    10

    文章

    2706

    浏览量

    87211
  • AXI
    AXI
    +关注

    关注

    1

    文章

    126

    浏览量

    16286

原文标题:FPGA学习-AXI总线知识点快速学习

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机学习知识点全攻略

    本帖最后由 eehome 于 2013-1-5 09:53 编辑 单片机学习知识点全攻略
    发表于 08-15 20:46

    【信盈达】C语言知识点的总结

    、算法说明:学习单片机C一般只需要前9个知识点即可进行产品开发,但要学习嵌入式C还需要要掌握:指针、结构体、链表、宏定义等知识点。二、单片机C、嵌入式C、标准C区别:这三种C语言都来源
    发表于 10-08 14:41

    请问学习LLC电源需要掌握一些什么知识点

    我是一个刚学习电源的萌新,请问学习LLC电源需要掌握一些什么知识点
    发表于 03-05 21:42

    学习51单片机需要学习哪些知识点

    作为一名入门级的工程师,万事开头难,只要知道学习51单片机需要学习哪些知识点就万事大吉了。然后再系统的将知识点全部掌握即可。那么我们一起看看吧,到底要
    发表于 10-22 13:49

    电机与电气控制基础的知识点

    电机就是我们平时俗称的“马达”,电机是依据电磁感应定律实现电能转换或传递的一种电磁装置。电机的主要作用是产生驱动转矩,作为用电器或各种机械的动力源。而电机与电气控制技术的一些基础的知识点是不论是在学习还是工作中都是需要牢记的。今天分享的就是关于电机与电气控制基础的一些基本
    发表于 01-22 06:54

    电机与拖动知识点及其试题

    电机与拖动知识点分析一、基本知识与基础知识知识点常考题目二、直流电机一、基本知识与基础知识
    发表于 06-29 07:10

    学习STM32F407的必备知识点电源,复位和时钟系统

    第14章 STM32F407的电源,复位和时钟系统本章教程继续为大家讲解学习STM32F407的必备知识点电源,复位和时钟系统。掌握这三方面的知识点对后面的学习大有裨益。目录第14章
    发表于 08-10 06:57

    STM32外部中断知识点概述

    STM32外部中断概述知识点(1)知识点(2)知识点(3)中断服务函数外部中断常用库函数外部中断的一般配置步骤知识点(1)STM32的每个IO都可以作为外部中断输入。STM32的中断控
    发表于 08-16 07:43

    学习STM32H7的必备知识点电源,复位和时钟系统

    第14章 STM32H7的电源,复位和时钟系统本章教程继续为大家讲解学习STM32H7的必备知识点电源,复位和时钟系统。掌握这三方面的知识点对后面的学习大有裨益。目录第14章 STM3
    发表于 08-18 07:46

    I2C总线传输协议的知识点,总结的太棒了

    I2C总线传输协议的知识点,总结的太棒了
    发表于 11-04 07:14

    学习STM32H7的必备知识点是什么

    学习STM32H7的必备知识点是什么
    发表于 11-23 06:44

    IIC总线知识点汇总,不看肯定后悔

    IIC总线知识点汇总,不看肯定后悔
    发表于 11-23 07:10

    IIC通信总线寻址的知识点分享,绝对实用

    IIC通信总线寻址的知识点分享,绝对实用
    发表于 02-07 07:47

    AMBA AXI总线学习笔记

    AMBA AXI 总线学习笔记,非常详细的AXI总线操作说明
    发表于 11-11 16:49 11次下载

    AXI总线协议的简单知识

    关于AXI总线协议的一些简单知识,通过阅读Xilinx的使用指导手册(UG1037),结合正点原子的ZYNQ视频进行梳理总结。
    的头像 发表于 07-15 09:16 2304次阅读