AXI4总线

在现代SoC设计或者FPGA中,基本都会和ARM有所关联,而用到ARM的场景基本离不开AXI总线。而AXI-4总线针对不同的用途,分化出了三种不同的类型:AXI-Full(完整版)、AXI-Stream、AXI-Lite,本文中将依次介绍这三种类型的AXI用途和具体技术细节。

Attention:本文中讨论的是ARM公司AMBA4中的AXI-4

AXI(Full)

场景:高性能地址映射通信

完整版的AXI-4总线特性:允许最大256轮的数据突发传输,支持多域。与其他大部分总线一样,AXI也分主机端(M:Manager/Master)和从机端(S:Subordinate/Slave),而特色就是AXI-4里除了全局的时钟复位信号外还有5个通道。下图展示了AXI主机向从机写、读数据时各通道传输的信息和工作流程。

写传输

读传输

出来点对点的读写操作外,AXI-4是支持多主机多从机,这很符合现代SoC的多协处理器设计理念需求,比如手机的CPU芯片除了常规多核CPU外肯定还有DMA和GPU等(2020年之后手机芯片上顺带个DPU都是很常见的了),这些协处理器都需要作为主机访问共同的一段内存。而多主从机设计到总线仲裁,AXI-4规范了下图所示的总线互联器(Interconnect),在后面介绍ID时会看到互联器的另一重要功能——提供口令地址映射转换。

多主从机

下表是完整版的AXI-4总线中各个通道的信号线,并概况性地注明了每个信号的功能,同时用,分隔一个信号中的不同缩写以方便阅读(如AWLEN中隔开了地址通道A、写操作W、长度LEN)。

全局信号 写地址通道 写数据通道 写响应通道 读地址通道 读数据通道
A,CLK(AXI时钟) A,W,ID(口令) B,ID A,R,ID R,ID
A,RESETn(复位) A,W,ADDR(地址) W,DATA(数据) B,RESP A,R,ADDR R,DATA
A,W,LEN(突发写长度) W,STRB(有效字节通道标识) B,USER A,R,LEN R,RESP
A,W,SIZE(数据宽度) W,LAST(最后传输数据标识) B,VALID A,R,SIZE R,LAST
A,W,BURST(突发模式) W,USER B,READY A,R,BURST R,USER
A,W,LOCK(通道锁定) W,VALID A,R,LOCK R,VALID
A,W,CACHE(存储器类型) W,READY A,R,CACHE R,READY
A,W,PROT(保护属性) A,R,PORT
A,W,QOS(优先级指示器) A,R,QOS
A,W,REGION(域标识) A,R,REGION
A,W,USER(用户扩展) A,R,USER
A,W,VALID(有效) A,R,VALID
A,W,READY(空闲) A,R,READY

本文不对AXI-4中的常规总线信号进行解释(如:地址ADDR、数据DATA),仅介绍特色信号和不好理解的信号。

ID

ID这个玩意是每个通道都有的,为了更好地理解这个信号,我将其翻译为“口令”。
在读数据时,从机必须确保所有返回数据的RID与其响应的主机请求地址时的ARID相匹配;写数据时,同样要确保WIDBIDAWID相匹配。

来自同一个主机,同一个序号的指令只能顺序执行;来自同一主机不同序号的或来自不同主机的传输任务没有执行顺序的要求。
因此传输任务ID的作用是指定某些特殊传输任务的顺序,当存在明确的先后顺序时,可以用相同的任务ID标识。

上面讲到互联器的时候,提到了口令地址映射转换,这个过程就像是路由器在NAT的时候对IP包的处理一样。连接在同一个互联器上的每个主机,在请求从机读写数据的时候,都会自己生成ID,但是主机并不保证自己发出的ID不会与其他主机的ID冲突(一样)。互联器在工作时负责在每个主机的原始ID上加额外ID;并且在收到从机数据时,从机发来的ID是带额外ID的,互联器将负责解析ID对应的主机并将额外ID去除后转发给主机。

LOCK

当主机挂起LOCK信号(ARLOCK表示读锁定,AWLOCK表示写锁定)时,表示主机对目标从机的通信进入“锁定占有”状态,此时在该主从机间的互联交互器上的其他主机将无法对该从机发起通信;这个状态一直持续到该主机对从机发起一次“不LOCK”通信,其他主机才能对目标从机进行通信。这个LOCK机制是互联器中的总线仲裁器(arbiter)来实现的。

但是请注意:主机发出锁定时,读(W)和写(W)通道之间是分开的。

CACHE

AXI-4协议中对不同类型的存储器进行编码的信号就叫做CACHE(写通道的AWCACHE、读通道的ARCACHE)。

存储类型编码

PROT

AXI总线提供防御非法访问的访问权限信号,读(R)通道和写(W)通道都有该功能,具体位定义如下图所示。

范围权限

一些处理器支持多种级别的访问特权,但是在AXI4总线中,只区分是否特权模式(Unprivilegedprivileged);
同时AXI4中的安全模式与ARM的安全扩展设计信号一致,这一位信号官方的说明是可以用来分离两个地址空间分别表示安全地址(Secure)和普通地址(Non-secure);最后一位用于标明总线传输的是指令(Instruction)还是数据(Data),但是现代CPU支持带数据指令,所以官方表示这玩意只起到提示作用🤔。

AXI-Lite

场景:节省IC资源的简单地址映射通信

Lite版AXI-4总线特性:不突发传输,所有数据宽度保持不变(阉割版AXI)。

全局信号 写地址通道 写数据通道 写响应通道 读地址通道 读数据通道
A,CLK A,W,VALID W,VALID B,VALID A,R,VALID R,VALID
A,RESETn A,W,READY W,READY B,READY A,R,READY R,READY
A,W,ADDR W,DATA B,RESP A,R,ADDR R,DATA
A,W,PROT W,STRB A,R,PROT R,RESP

看信号线就知道Lite有多简单直接了,主机VALID和从机READY握手成功,就可以发东西了。

AXI-Stream

高速流数据传输,没有地址,无限制数据突发传输

Stream版AXI4总线还是挺不一样的,设计目的是被用作连接交换数据的组件的标准接口,这个接口可以用来连接一个产生数据的主机和一个接收数据的从机。该协议也可用于连接较多的主、从机,支持使用同一组共享线路的多个数据流,允许构建一个通用互连,可以执行放大、缩小和路由操作。

所以AXI-Stream就不区分读写通道了,数据是单向高速流动的。正如下表中笔者对信号的分类,依据主从机分。

AXI-Stream是主机发数据,从机收数据!这一点在开发输入数据流类外设时要注意不要混淆方向

全局信号 主机信号 从机信号
A,CLK T,VALID T,READY
A,RESETn T,DATA
      | T,STRB(有效字节标志)
      | T,KEEP(字节限定符)
      | T,LAST(结束)
      | T,ID(区别不同流)
      | T,DEST(目的路由)
      | T,USER

讲一下AXI-Stream中的两个特色信号TSTRBTKEEP,每一位都标志着TDATA数据线中的一个字节范围(比如:TKEEP[$x$]标识TDATA[$(8x+7)$:$8x$];TSTRB[$x$]标识TDATA[$(8x+7)$:$8x$])。这两个位是组合起来使用的,表示的控制信号如下表所示。

TKEEP TSTRB 数据类型 详解
1 1 数据 关联的字节包含必须在源和目标之间传输的有效信息。
1 0 位置 关联字节表示数据字节在流中的相对位置,但不包含任何相关的数据值。
0 0 Null 啥都没有,可以删掉
0 1 保留 不许使用

参考文献

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2022-2023 RY.J
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信