AMBA总线学习(2)—— AXI


一、 传输通道

  • 写地址通道(write address channel, AW):传输地址和控制信息
  • 写数据通道(write data channel, W):写入slave的数据
  • 写响应通道(write response channel, B):slave 返回给 master 的写 RESP
  • 读地址通道(read address channel, AR):传输地址和控制信息
  • 读数据通道(read data channel, R):从 slave 读出的数据和 slave 返回给 master 的读 RESP

虽然但是,写的RESP为什么要单独分开???
各个通道相对独立,因此可以根据设计的具体要求选择是否需要在某一个通道上插入buffer来提高频率。这种操作不会影响其他通道的时序。

1.1 Write/Read address channel

SignalSourceDescription
AxIDMaster这个 ID 指的是 master 的 ID 吗
AxADDRMaster写数据的地址
AxLENMasterBurst 传输的长度,真实的传输长度是 AWLEN+1
AXI3:1-16
AXI4: INCR(1-256), 其他:1-16
AxSIZEMasterBurst 传输的有效位宽
AxBURSTMaster2’b00:FIXED 每次 transfer 的地址相同。用于 FIFO 的读写
2’b01:INCR 地址依次增加,增加的大小由 AWSIZE 决定 。用于一般的存储器访问
2’b10:WRAP 类似 INCR,只是在边界的时候需要将地址回转到初始值。用于 cache line 访问
AxLOCKMasterLOCK transfer 的类型,AXI3 支持 LOCK transfer, AXI4 不支持 LOCK transfer, 但是 AXI4 也有 AWLOCK 信号
AxCACHEMaster访存类型
AxPROTMasterprotection 类型
AxVALIDMaster握手信号
AxREADYSlave握手信号

除了表格上的这些信号之外,还有AxQOS,AxREGION,AxUSER,这些信号是AXI4独有的,后面再说

1.2 Write data channel

SignalSourceDescription
WIDMaster
WDATAMaster写的数据
WSTRBMaster用以表明当前数据总线上的哪些 Byte 是有效的
WVALIDMaster握手信号
WREADYSlave握手信号
WLASTMaster握手信号
WUSERMasteruser 自定义信号

1.3 Write response channel

SignalSourceDescription
BIDSlave
BRESPSlaveOKAY:一次普通 transfer 成功或者一次 exclusive access 失败
EXOKAY:exclusive write 或者 exclusive read 操作成功
SLVERR:相当于 AHB 的 ERROR?信号已经到了 slave,但是 slave 对这个信号无能为力,返回一个error
DECODER: 解码不成功,信号到都没到 slave
BVALIDSlave握手信号
BREADYMaster握手信号
BUSERSlaveuser 自定义信号

1.4 Read data channel

SignalSourceDescription
RIDSlave
RDATASlave写的数据
RRESPSlaveOKAY:一次普通 transfer 成功或者一次 exclusive access 失败
EXOKAY:exclusive write 或者 exclusive read 操作成功
SLVERR:相当于 AHB 的 ERROR?信号已经到了 slave,但是 slave 对这个信号无能为力,返回一个error
DECODER: 解码不成功,信号到都没到 slave
RVALIDSlave握手信号
RREADYSlave握手信号
RLASTSlave握手信号
RUSERMasteruser 自定义信号

二、传输

2.1 一些基本要求

  1. write transfer 之后 slave 需要返回一个 write response
  2. read data 必须发生在 read address 之后
  3. write data 不一定等到 write address
  4. 握手信号采用的是 ready & valid,valid的有效与否不能由收 ready 影响,也就是说产生 valid 信号的逻辑里面绝对不可以包括 ready。ready 信号可以在接受到 valid 信号之后再决定是否要拉高。一旦 valid 拉高,在数据没有被采走之前要一直处于拉高状态。ready 拉高之后,在 valid 拉高之前还可以拉低。
  5. slave 的读 RVALID 信号必须要在 AREADY 和 ARVALID 握手成功之后才能拉高。 slave 的 BVLID 信号必须要在 WVALID 和 WREADY 握手和 WLAST 拉高之后。
  6. AXI-4 额外的限制:
    • slave 必须要在 AWREADY,AWVALID,WREADY,WVALID,WLAST 拉高之后才能拉高

2.2 Byte invariance

不管大端小端组件,所有的数据都是以 Byte 为单位进行存储。如下图所示:
在这里插入图片描述
假设现在要存放一个数据 0A0B0C0D,左边的是大端存储,右边的是小端存储。可以看到,虽然存储的地址有差异,但是每个地址中存储的 Byte是一样的。

2.3 非对齐传输(Unaligned transfers)

手册上咔咔写了一大堆,但是其实很简单。我还是从硬件设计的角度说明一下。

  • 假设现在有个假设现在有一个 INCR 传输,起始地址’h39(11_1101),length = 8(传输次数), size = 4(传输数据位宽),总线宽度为 8
  • 在非对齐传输中,只有第一个传输是非对齐的。同时需要给出正确的 strobe 信号。
  • 在这个例子中,起始地址:’h3D(11_1101)。因为总线宽度为 8,所以看地址的最低3-bit(’b101 = ‘d5),因此,strobe[7 : 5] = 3’b111,其他比特位为 0;如果起始地址变为’h39(11_1001),看地址的最低3-bit(001),但是因为 size =4,所以 strobe 为‘1’的个数是不能超过4的,此时 strobe = 8‘b0000_1110;
  • 在之后的周期中,所有的传输都类似于对齐传输。对齐传输的特点就是所有的地址都是 size 大小的整数倍。在此时,基准地址是将起始地址的一部分位截断得到的地址。在这个例子中,因为 size = 4,所以之后的传输地址是将 ’h3D(11_1101)的最低 2-bit 截断即’h3C(11_1100)(如果 size 是8,就截断最低 3-bit),
  • 所以在第二个周期,地址为 ’h3C(11_1100)+ 4 = 100_0000;

2.3 Burst 传输

2.2.1. WRAP边界值的计算

情况一:对齐传输(AXI 的 WRAP 只支持对齐传输)

  • 假设现在有一个 burst 传输,起始地址’h3C,length = 8(传输次数), size = 4(传输数据位宽)

  • 按照协议规定,每传输一次数据,地址需要在上一周期地址的基础上 +4(size 长度),加到边界的时候,地址会发生回转。其实就是根据 length 和 size 得到一个地址的范围,在这个例子中,该范围是0-31(5-bit 数据可表示的范围)。WRAP 模式下的地址累加就只发生在原地址的 [4:0]上。如果超过了这个范围,地址就发生截断。

  • 按照上述给出的例子,地址(二进制)会按照下列规律变化。在 T1 的时候,按照地址 +4 的规律,地址应该是 100_0000,但是因为超过第 5 位的地址不会发生变化,因此,实际的地址应该是 10_0000

      T0:111100 -> T1:100000 -> T2:100100 -> T3:101000 ......
    

2.2.2. 一个基本的Burst传输

  1. AXI 中的 Burst 传输不允许传输中断,发起一次 Burst 传输,就需要将所有的数据全部传输完。
    • 对于 write transfer,可以通过将 strobe 信号拉低使写操作无效
    • 对于 read transfer,master 可以直接将读取到的数据丢弃(不推荐)
  2. 关于 Burst 的边界值

2.3 Bufferable 和 Cacheable

以下内容是网上查到的:

我的理解,不一定对,相互探讨,呵呵。
Bufferable意思是说不必把结果写进最终目的地而只是写进中间某个buffer就可以回response,而non-bufferable则是把结果要写进最终的目的地才能回response。		
non-bufferable一般用于device的读写,也就是SOC里讲的MMR。
Cacheable说的是进行读写的时候要去cache里查看(noncacheable就是不用去cache里查看,直接送往memory)。在AXI4的协议里面,cacheable改成了另外modifiable,还有两个特性就是read prefetch和write merge。
详细的请参考AXI4的protocol文档。

三、 Memory 类型

在这里插入图片描述

  • Device:(关于Device memory 和 Normal memory 的区别
  • Normal:
  • Write-through:Master 写数据的时候,将数据同步更新到 Cache 和 主存,前提是当前的地址能在 Cache 中找到(hit)
  • Write-back:Master 写数据的时候,将数据只先更新到 Cache。
  • write-allocate:如果当前的地址不能在 Cache 中找到(miss),则先在 cache 中开辟一块地址空间,再将数据写进去。如果这块地址里面的数据被更改过(dirty),则需要先将数据写回到主存中,再写入新的数据同时 load 到 Cache ;一般和 write-back 搭配使用
  • no write-allocate:如果当前的地址不能在 Cache 中找到(miss),就只将数据写到主存;一般和 write-through 搭配使用
  • read-allocate:这个是针对读操作的,如果当前读的地址能在 Cache 中 hit,则直接从 Cache 中读取数据。如果miss,则需要将数据从主存取到 Cache 中,而 Cache 中原本存储的数据如果被更改过(dirty),则需要先写回到主存中,再 load 新的数据到 Cache;
  • no read-allocate:这个是针对读操作的,如果当前读的地址能在 Cache 中 miss,则直接从主存中读取数据;

四、outstanding transaction

AXI 协议用 ID 来表明一个 transaction 的顺序,这样就可以将总线利用率提高。包括AWID、WID(AXI-4不支持interleaving write,所以没有这个信号)、BID、ARID、RID
不同 Master 的 ID 建模机制是相互独立的,可以理解成一个 transaction 的 ID 其实是由 MasterID+TransactionID 共同决定的
具有相同 ID 的 transaction 可以理解成一个程序的不同行,必须按照顺序执行。从 master 那边看到的就应该是我按什么顺序把 transaction 发出去的,就应该按照什么样的顺序收回来(前提是 ID 相同的 transaction)。还有就是为了保证程序不出错,如果有不同的 master 对同一个 slave 的相同地址进行访问,那么也必须保序。

乱序机制(out of order)

参考的这篇博客 乱序机制
读乱序:对 master 而言 ID 不同的 transaction 数据都回来的顺序可以跟地址发出的顺序不一致
在这里插入图片描述
写乱序:对 slave 而言 ID 不同的 transaction 数据给出去的顺序可以跟接收到的地址的顺序不一致,处理的快的数据就可以先给出。但是如果访问到了同一个地址就不可以乱序了。

乱序是 burst 级别上的操作

交织机制 (read interleaving,AXI-4 没有写交织)

在这里插入图片描述
从这个图上可以看出来,ID2 还没有传输完成的时候就传输了 ID0 和 ID1。这就是 read interleaving。
interleaving 的最小操作粒度是 beat 级别上的

五、 exclusive access 的流程:exclusive read -> exclusive write

对于 monitor

  1. Master 先对某一个 slave 执行一次 exclusive read 操作;如果成功,则 slave 返回 EXOKAY,并由 slave 记录当前的独占地址;如果当前的 slave 不支持独占操作,则返回 OKAY。如果 Master 的 exclusive read 操作没有成功,那它就不能进行后续的 exclusive write 操作.
  2. exclusive read 操作成功后,master 经过一段时间对数据的处理之后,Master 将执行 exclusive write操作数据到刚刚被执行 exclusive read 操作的 slave 的同一个地址上;slave 如果返回 EXOKAY 则说明 exclusive write 操作成功。否则返回 OKAY。
  3. 如果在 Master 读走该 slave 这个数据的期间,有其他的 Master 对 Slave 的同一个地址进行了写操作,即改变了原地址中所存储的数据,则 exclusive write access 不成功

对于 slave

  1. exclusive read 操作发生后,支持 exclusive 的 slave 需要有 monitor 来记录对其进行 exclusive read 操作的 ARID 和读出的地址,有多少个能对其进行 exclusive 操作的 master 就要有几个 monitor。
  2. 此后,slave 就会一直监视该地址有没有被写入过。如果写入的 AWID 跟 monitor 中记录的 ARID 相同,则 exclusive write 操作成功,返回 EXOKAY;否则失败,返回 OKAY。

exclusive 操作的限制条件

  1. exclusive write 操作和exclusive read 操作的 burst size 和 burst length 必须保持一致
  2. exclusive write 操作和exclusive read 操作的地址、控制信号必须保持一致
  3. exclusive write 操作的 AWID 和exclusive read 操作的 ARID 必须保持一致
  4. exclusive 必须是地址对齐操作
  5. exclusive access 的 burst 传输的字节数必须是2的幂,即1,2,4,8,16,32,64或128 Byte
  6. exclusive access 的 burst 传输的字节数最大为128
  7. 在 AXI4 中, exclusive access 的 burst length 不可以超过 16
  8. The value of the AxCACHE signals must guarantee that the slave that is monitoring the exclusive access
    sees the transaction. For example, an exclusive access must not have an AxCACHE value that indicates that
    the transaction is Cacheable.(不理解,先写在这里)

这些其实主要就是帮助限制了 slave monitor 的硬件复杂度

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值