AXI是ARM在1996年提出的微控制器总线家族AMBA中的一部分。AXI是高级扩展接口,在AMBA3.0中提出,AMBA4.0将其修改升级为AXI4.0。AMBA4.0 包括
AXI4:主要面向高性能地址映射通信的需求,允许最大256轮的数据突发传输;
AXI4-Lite:是一个简单地吞吐量地址映射性通信总线,是一个轻量级的地址映射单次传输接口,占用很少的逻辑单元;
AXI4-Stream:面向高速流数据传输,去掉了地址项,允许无限制的数据突发传输规模;
AXI4总线分为主、从两端,两者间可以连续的进行通信。其优势:
适合高带宽低延时设计, 无需复杂的桥就能实现高频操作,能满足大部分器件的接口要求,适合高初始延时的存储控制器,提供互联架构的灵活性与独立性,向下兼容已有的AHB和APB接口
AXI 能够使SoC 以更小的面积、更低的功耗,获得更加优异的性能。AXI 获得如此优异性能的一个主要原因,就是它的单向通道体系结构。
- 单向通道体系结构使得片上的信息流只以单方向传输,简化时钟域间的桥接,减少门数量。当信号经过复杂的片上系统时,减少延时。
- 支持多项数据交换。通过并行执行猝发操作,极大地提高了数据吞吐能力,可在更短的时间内完成任务,在满足高性能要求的同时,又减少了功耗。使用字节线来支持非对齐的数据传输,使用基于burst的传输,只需传输首地址,支持多种寻址方式,支持乱序传输。
- 独立的地址和数据通道,分离的地址/控制、数据相位。地址和数据通道分开,能对每一个通道进行单独优化,可以根据需要控制时序通道,将时钟频率提到最高,并将延时降到最低。分离的读、写数据通道,能提供低功耗DMA。
- 增强的灵活性。AXI技术拥有对称的主从接口,无论在点对点或在多层系统中,都能十分方便地使用AXI技术, 允许容易的添加寄存器级来进行时序收敛。
- AXI总线还定义了在进出低功耗节电模式前后的握手协议。规定如何通知进入低功耗模式,何时关断时钟,何时开启时钟,如何退出低功耗模式。这使得所有IP在进行功耗控制的设计时,有据可依,容易集成在统一的系统中。
AXI4的工作模式
1、 总线的两端可以分为master和slave,他们直接一般通过interconnect连接,如果是一对一的话,interconnect可以没有。
2、 AXI协议是基于burst的传输,并且定义了以下5个独立的传输通道:读地址通道、读数据通道、写地址通道、写数据通道、写响应通道,极大的提高了AXI的传输性能。
读地址通道,包含ARVALID, ARADDR, ARREADY信号;
写地址通道,包含AWVALID,AWADDR, AWREADY信号;
读数据通道,包含RVALID, RDATA, RREADY, RRESP信号;
写数据通道,包含WVALID, WDATA,WSTRB, WREADY信号;
写应答通道,包含BVALID, BRESP, BREADY信号;其中ACLK为axi总线时钟,ARESETN是axi总线复位信号,低电平有效;读写数据与读写地址类信号宽度都为32bit;READY与VALID是对应的通道握手信号;WSTRB信号为1的bit对应WDATA有效数据字节,WSTRB宽度是32bit/8=4bit;BRESP与RRESP分别为写回应信号,读回应信号,宽度都为2bit,‘h0代表成功,其他为错误。
地址通道携带控制消息用于描述被传输的数据属性,数据传输使用写通道来实现“主”到“从”的传输,“从”使用写响应通道来完成一次写传输;读通道用来实现数据从“从”到“主”的传输。
写地址通道:当主机驱动有效的地址和控制信号时,主机可以断言AWVALID,一旦断言,需要保持AWVALID的断言状态,直到时钟上升沿采样到从机的AWREADY。AWREADY默认值可高可低,推荐为高(如果为低,一次传输至少需要两个周期,一个用来断言AWVALID,一个用来断言AWREADY);当AWREADY为高时,从机必须能够接受提供给它的有效地址。
写数据通道:在写突发传输过程中,主机只能在它提供有效的写数据时断言WVALID,一旦断言,需要保持断言状态,知道时钟上升沿采样到从机的WREADY。WREADY默认值可以为高,这要求从机总能够在单个周期内接受写数据。主机在驱动最后一次写突发传输是需要断言WLAST信号。
写响应通道:从机只能它在驱动有效的写响应时断言BVALID,一旦断言需要保持,直到时钟上升沿采样到主机的BREADY信号。当主机总能在一个周期内接受写响应信号时,可以将BREADY的默认值设为高。
读地址通道:当主机驱动有效的地址和控制信号时,主机可以断言ARVALID,一旦断言,需要保持ARVALID的断言状态,直到时钟上升沿采样到从机的ARREADY。ARREADY默认值可高可低,推荐为高(如果为低,一次传输至少需要两个周期,一个用来断言ARVALID,一个用来断言ARREADY);当ARREADY为高时,从机必须能够接受提供给它的有效地址。
读数据通道:只有当从机驱动有效的读数据时从机才可以断言RVALID,一旦断言需要保持直到时钟上升沿采样到主机的BREADY。BREADY默认值可以为高,此时需要主机任何时候一旦开始读传输就能立马接受读数据。当最后一次突发读传输时,从机需要断言RLAST。
读写时序传输内容:
AXI传输首先发出burst的长度(burst-len),最大是16,burst长度就代表有多少个transfer或者beat,一个transfer就代表一个数据位宽的数据,所以一个burst最大的传输数据长度为burst_len*transfer_width;
在发出burst长度时会同时发出当前这个burst中第一个transfer的首地址,后面其它的transfer不会有地址,slave要根据地址递增的方式自己去进行相应的处理,这个地址可以是非对齐的;在发出burst长度时会同时发出burst_size,这个size代表当前burst中所有transfer中最大的字节个数,在发出burst长度时会同时发出地址递增方式burst-type,是不变地址(non-incr),是递增(incr增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。)还是wrap(回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN)),或者FIXED(突发传输过程中地址固定,用于FIFO访问)例如:当前要传输11个字节,地址是2,数据位宽是4B,所以传输方式是:2B-4B-4B-1B,burst_len=4,burst_size=4(所有transfer中size最大的),地址是2(因为支持非对齐传输),burst-type=incr;对于写会有strobe代表当前transfer中哪几个字节是有效的,所以上面的strobe为:1100-1111-1111-0001,对于读则没有,但是Master自己清楚哪些数据是有效的,所以可以将整个4B都读出来,master自己去除无用的数据。
注意:不同人对burst_size(也就是英文手册中AWsize和ARsize的理解)的理解可能不同,手册中在table-4-2中有解释,它表示一个burst中transfer中max-num,注意最大,所以不是表示当前burst中所有transfer的num,只是表示最大。如果表示所有transfer的num,那么也就是所有transfer的大小是一样的(AHB就是这样的,每个burst中的transfersize是一样的),那么上面的例子就必须分成3个burst,第一个burst_len=1, size=2, addr=2, 第二个burst_len=2, size=4,addr=4, 第三个burst_len=1,size=1,addr=12,显然这个效率要比上面的低。
通道间关系
AXI协议要求通道间满足如下关系:
写响应必须跟随最后一次burst的的写传输
读数据必须跟随数据对应的地址
通道握手信号需要确认一些依赖关系
4、 握手机制
AXI4所采用的是一种READY,VALID握手通信机制,即主从模块进行数据通信前,新根据操作对各所用到的数据、地址通道进行握手。主要操作包括传输发送者A等到传输接受者B的READY信号后,A将数据与VALID信号同时发送给B。
AXI中关于valid和ready的关系在3.3节中有很好的解释,在设计时一定不能设计一方依赖另一方,否则会出现死锁的现象,valid可以优先于ready拉高,也可以在ready之后拉高,它们并无先后关系,其实只要是master准备好就可以valid,slave准备好就可以ready,并无绝对的先后顺序,但是当两者同时为高则表示当前的data或者cmd结束或者开始下一个data或者cmd。
由于上面的不确定性会出现一种奇葩的现象,以写为例,会出现写数据比写地址先到达slave的现象,原因如下:假如AWREADY和WREADY被slave提前拉高了,虽然master那边肯定是先发地址再发数据,但是master会误以为slave能够立即接收地址,所以地址发送完立即发送数据,但是地址通道和数据通道是分开的,axi允许单独对各个通道进行优化,所以,如果地址通道被插入了多个reg,那么就会造成延时,可能出现数据先被slave收到。
为了避免上面的现象该怎么办呢,首先slave最好不要在接收到地址之前就将WREADY拉高(但是AWREADY建议提前拉高,这样address握手可能就会在一个周期内完成,否则至少需要两个周期,就像上图),要在收到地址后才进行WREADY的处理,或者slave先buffer住收到的数据,然后等到收到地址后再做处理。不过我觉得AXI interconnect应该会处理这种情况,不会让数据先于地址到达slave的,所以ARM公司的AXI产品肯定是不会有问题的,但是如果不购买相应的AXI interconnect而自己开发时就要注意上面的问题。
5、AXI最多支持16个master,16个slave,它们可以通过AXI interconnect连接,不同的master发出的id可能相同,但是经过AXI interconnect处理后会变得唯一,所以自己开发AXI interconnect也要注意这个问题。同一个master发出的id可以相同也可以不同,相同的id数据传输必须按照先后顺序否则会出现错误,不能乱序和交叉。AXI 支持ID方式,这也是该总线效率较高的一个原因。
6、AXI支持out-standing或者multi-issue(即当前传输没结束就发起下一个传输)乱序和交叉传输,依靠ID进行区分。这也是AXI总线协议效率较高的一个原因。
7、这块的理解是参考别的网站的,并不确定正确性,cachalbe和 bufferable的概念比较复杂,具体可以看看ARM cache相关文档。简单说,这两个概念都是围绕master访问的slave的请求来说的。例如该请求时cacheable的写话,那么实际的写数据不一定更新了主存内容,可以只更新了cache,以后再通过write back方式更新;bufferable也类似,如果是写,那么写数据响应返回给master时,实际写数据不一定到达了slave设备。这个写数据可能被buffer了,而时间未知。如果不是bufferable则写响应反映了slave实际接收到数据的时刻。说的比较笼统,具体可以参考相应文档。
8、低功耗的理解(参考):AXI的低功耗接口本身也是数据传输协议的扩展。它针对自身具有低功耗处理的设备和自身不具有低功耗处理的设备都是通用的。
AXI低功耗控制接口包括两类信号:
设备给出表示当前时钟是否可以被gated的信号。外设使用CACTIVE信号表明它希望时钟,时钟控制模块必须马上给设置时钟。
对于系统时钟控制模块,提供可以进入或退出低功耗状态的握手信号。CSYSREQ表明了系统请求设备进入低功耗状态,而设备使用CSYSACK信号来握手低功耗状态请求和退出。
在CSYSREQ和CSYSACK信号为高的时候,也就是T1时刻之前,设备处于正常状态。在T1时刻,系统拉低了CSYSREQ信号,在T2时刻,外设 拉低CSYSACK信号。在T3时刻系统拉高CSYSREQ表示系统要求设备从低功耗状态退出。T4时刻设备握手拉高CSYSACK表明已经退出。在握手 中,CACTIVE可以作为拒绝或者同意的标志。下图中CATIVE一直拉高,来表示当前不接受这种低功耗的请求,而不是依靠ACK信号。可以看出,ACK 信号只是表示状态迁移的完整性,而对于是否进入低功耗状态,需要CACTIVE信号表示。同时该信号也表示了设备在低功耗状态需要退出。
在系统层面的操作:
有两种方法进行设备的低功耗控制。
第一种是系统不断的轮询设备,一旦某个设备可以进入低功耗状态,就把相应的CATIVE 拉低,然后把CSYSACK信号拉低。这样做的效率不是很高,系统并不知道哪个设备已经可以提前进入低功耗状态,而是简单的按照时间进行查询,并不能精确 的控制。这一种方案主要强调系统与设备的强耦合性。只有系统需要的时候才开始轮询,系统不需要,就不能进入低功耗模式。
第二种方法是系统被动接受设备发出来的CATIVE,然后开始低功耗处理流程。这样可以提高效率。但是可能系统由于预测到马上需要使用该device,不发起低功耗请求。值得注意的是,两种低功耗管理是可以混合使用的。
axis工作模式
axis分为:
tready信号:从告诉主做好传输准备;
tvalid信号:主告诉从数据传输有效;
tlast信号:主告诉从该次传输为突发传输结尾;
tdata信号:数据,可选宽度32,64,128,256bit
tstrb信号:为1的bit为对应tdata有效字节,宽度为tdata/8
tuser信号 :用户定义信号,宽度为128bit
aclk信号:总线时钟,上升沿有效;
aresetn信号:总线复位,低电平有效;
AXI Stream接口方式,该接口对于用户来说,不需要关心地址。仅需要:帧开始(tuser),行结束(tlast),输出数据(tdata),输出有效(tvalid),输出准备好(tready)这五个信号。
但是AXI Interconnect IP只能连接memory map传输,并不能直接连接AXI Stream接口数据,所以只能继续加一个AXI Stream转接到memory map的DMA,这就是官方的也有的Video DMA IP。
VDMA的结构如下图:
其实大概可以看出这么几个接口,AXI-lite,AXI Memory Map write,AXI Memory Map read,AXI Stream Write(S2MM),AXI Stream Read(MM2S)。
AXI-lite:作用是通过PS来配置VDMA ip。
AXI Memory Map write: 映射到存储器写
AXI Memory Map read:映射到存储器读
AXI Stream Write(S2MM):AXI Stream视频流写入图像
AXI Stream Read(MM2S):AXI Stream视频流读出图像
这样我们基本上大概知道视频流怎么进入到内存中了,先采集图像,然后图像数据转换成AXI Stream接口,然后通过VDMA转换成memory map,通过AXI Interconnect进入到HP口,通过HP口进入到Programmable Logic to Memory Interconnect,然后通过内存控制器进入到内存。
axi与axis是AXI4总线中通信复杂度较低的两条总线,最大开发难度存在于axi的控制平面向axis的数据平面下发参数时,由于axi与axis时钟频率不同而产生的跨时钟域数据传输问题。
更详细的内容参见http://www.bubuko.com/infodetail-1072453.html
AXI总线信号描述文件见http://download.csdn.net/detail/chuhang_zhqr/9456746