搜索
您的当前位置:首页正文

AMBA 总线协议-AXI 协议

来源:欧得旅游网

AXI

组成部分:

AXI4 协议中包含五种信道,通道之间相互独立且存在差别,通过通道进行通信之前需要使用 VALID/READY 进行握手,Read 和 Write 根据 Master 定义:

  • 读地址信道(Read Address Channel)
  • 写地址信道(Write Address Channel)
  • 读数据信道(Read Data Channel)
  • 写数据信道(Write Data Channel)
  • 写响应信道(Write Response Channel)

还有两种 Component

  • Master component
  • Slave component

VALID/READY 握手机制

AXI 五个信道相互独立,但是使用同一个握手机制来实现信息传递。

在握手机制中,通信双方分别扮演发送方(Source) 和接收方(Destination),两者的操作(技能)并不相同。

接收方置高 READY 信号表示接收方已经做好接收的准备。

当双方的 VALID/READY 信号同时为高,在时钟 ACLK 上升沿,完成一次数据传输。所有数据传输完毕后,双方同时置低自己的信号。

每个通道都有自己的 VALID /READY 握手信号对:

在握手过程中,还会用到 LAST 信号。LAST 信号存在 Write Data Channel 和 Read Data Channel 中,分别表示为 WLAST 和 RLAST,用于标记 burst 的最后一次数据传输,当 slave 接收到 LAST 信号后,说明本次数据传输完成。

双向流控

所谓的双向流控机制,指的是发送方通过置起 VALID 信号控制发送的时机与速度,接收方也可以通过 READY 信号的置起与否控制接收速度。

发送方拥有传输的主动权,但接收方在不具备接收能力时,也能够置低信号停止传输,反压发送方。

握手过程分析

VALID 信号先到

发送方 VALID 信号早早就到了,但是接收方的 READY 信号在 T2 之前都没有发送。可能接收方在接收其他数据,或者被堵在数据通路上。

过了 T2 后,READY 信号到来,此时开始传输,直到 T3 结束,传输完成。

这里也体现了双向流控机制,发送方的 VALID 信号只要置高,再握手完成之前都不能置低,必须等到接收方 READY 信号置高。

READY 信号先到

READY 信号很自由,可以等待 VALID 信号到来再做响应,但也完全可以在 VALID 信号到来前就置高,表示接收端已经做好准备了。

而且,READY 信号与 VALID 不同,接收方可以置起 READY 之后在 VALID 置高之前都可以随时再置低 READY 信号。

信号同时同时到达

这个最简单,两个信号都等着一个时钟上升沿就完成传输了。

握手信号之间的依赖关系

为了防止死锁发生,信号之间要遵循一些规矩,举例来说,如上面提到的 READY 信号依赖 VALID 信号,但是 VALID 信号不能根据 READY 信号来判断是否数据已准备好,否则将会造成死锁。下面详细解释读写过程中需要遵循的依赖关系。

  • 单箭头指向的两个信号,信号的置高,低没有顺序要求。
  • 双箭头表示箭头所指对象应迟于箭头出发信号发送。

Read transaction dependencies

  • Master 不得等待 Slave 置高 ARREADY
  • Slave 可以在置高 ARREADY 之前等待 ARVALID 置高
  • Slave 能够在 ARVALID 置高之前先置高 ARREADY
  • Slave 必须等待 ARVALID 和 ARREADY 都被置高,然后才置高 RVALID 以表示有效数据可用
  • 在置高 RVALID 之前,Slave 不得等待 Master 置高 RREADY
  • Master 可以在置高 RREADY 之前等待 RVALID 被置高
  • Master 可以在 RVALID 被置高之前置高 RREADY

Write transaction dependencies

  • 在置高 AWVALID 或 WVALID 之前,Master 不得等待 Slave 置高 AWREADY 或 WREADY
  • Slave 可以在置高 AWREADY 之前等待 AWVALID 或 WVALID,或两者都等待
  • Slave 可以在 AWVALID 或 WVALID 或两者都被置高之前置高 AWREADY
  • 在置高 WREADY 之前,Slave 可以等待 AWVALID 或 WVALID,或两者都等待
  • Slave 可以在 AWVALID 或 WVALID 或两者都被置高之前置高 WREADY
  • 在置高 BVALID 之前,Slave 必须等待 WVALID 和 WREADY 都被置高
    • Slave还必须在置高 BVALID 之前等待 WLAST 被置高,因为写入响应 BRESP 必须在写入事务的最后一次数据传输之后才发出信号
  • 在置高 BVALID 之前,Slave 不得等待 Master 置高 BREADY
  • Master 可以在置高 BREADY 之前等待 BVALID
  • Master 可以在 BVALID 被置高之前置高 BREADY

地址结构(Address structure)

Burst

在介绍 Burst transfer 之前,需要解释一下什么是 Burst。在手册的术语表中,与 AXI 传输相关的有三个概念,分别是 transfer(beat)、burst、transaction。

  • AXI Transaction:the complete set of required operations on the AXI bus form the AXI Transaction.表示传输一段数据 (AXI burst) 所需的一整套操作;
  • AXI Burst:any required payload data is transferred as an AXI Burst.表示 AXI 待传数据;
  • AXI Beats:a burst can comprise multiple data transfers, or AXI Beats.表示 AXI burst 的组成,一个 Beat 就是一个 transfer。

三者的关系:在 AXI 传输事务(Transaction)中,数据以突发传输(Burst)的形式组织。一次突发传输中可以包含一至多个数据(Transfer)。每个 transfer 因为使用一个周期,又被称为一拍数据(Beat)。

Transaction = M ∗ Burst , M ≥ 1 Burst = N ∗ Transfer( or Beat) , N ≥ 1 \text{Transaction} = M *\text{Burst} ,M \geq 1 \\ \text{Burst} = N* \text{Transfer( or Beat)} ,N \geq 1 Transaction=MBurst,M1Burst=NTransfer( or Beat),N1

ARLEN(Burst Length)

指一次突发传输中包含的数据传输 (transfer) 数量,在协议中使用 AxLen 信号控制。在 AXI4 中,INCR 类型最大支持长度为 256,其他类型最大长度为 16。而 AXI3 中这一数字无论何种模式均为 16。因此 AXI4 中 AxLen 信号位宽为 8bit,AXI3 中的 AxLen 则仅需要 4bit。

ARSIZE(Burst Size)

指传输中的数据位宽,具体地,是每周期传输数据的字节数量,在协议中使用 AXSIZE 信号控制。突发传输数据宽度不能超过数据总线本身的位宽。而当数据总线位宽大于突发传输宽度时,将根据协议的相关规定,将数据在部分数据线上传输。

ARBURST(Burst Type)

Burst Type:AXI 协议中支持不同的 Burst 传输类型,主要分 FIXED、INCR、WRAP。

  • FIXED 传输为地址固定传输,所有传输都会写在同一个地址中。主要应用在 FIFO 的传输中,因为 FIFO 为先入先出,只需要往同一个地址写数据即可。
  • INCR 传输为地址递增传输,可根据具体的配置有固定长度递增和非定长递增。大部分的数据传输都是使用这种方式,尤其是在内存访问中,可以大大提高效率。
  • WRAP 传输为地址回环传输,在一定长度后会回环到起始地址。主要应用在 Cache 操作中,因为 cache 是按照 cache line 进行操作,采用 wrap 传输可以方便的实现从内存中取回整个 cache line。

数据结构(Data read and write structure)

读写数据结构中声明了几种数据传输方式。

在介绍这些传输方式之前,需要了解WSTRB(Write strobes) 写选通信号。写选通信号 WSTRB 允许在写数据总线上进行 稀疏数据 传输。每个写选通信号对应写数据总线上的一个字节。当写选通断言时,表示写数据总线上对应的字节通道中包含将被更新到 memory 的有效信息。

写数据总线上每 8 位具有一个写选通位,因此 WSTRB[n] 对应 WDATA[(8 x n) + 7 : (8 x n)]。默认情况下 WSTRB = 0xFFFF。也就是所有通路都是通的。

Narrow Transfer

当本次传输中数据位宽小于通道本身的数据位宽时,称为窄位宽数据传输,或者直接翻译成窄传输。如下图,传输总线为 32bit,但是每次只传了 8 bit。

窄传输就是通过 STRB 信号指定有效传输数据的位宽来实现。针对一些特定的寄存器读写,或者在不同数据位宽的总线传输中会使用窄传输操作。如图,第一次传输时,WSTRB 信号为 0x01,WSTRB = b’001,表示 WDATA[7:0] 数据有效。

Unaligned Transfer

下图是一些传输示例,有阴影的格子表示当前字节不会被传输。

图三同上,只是 Burst length 为 5。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top