AXI总线的Burst Type以及地址计算 您所在的位置:网站首页 递增怎么算的 AXI总线的Burst Type以及地址计算

AXI总线的Burst Type以及地址计算

2024-07-02 05:52| 来源: 网络整理| 查看: 265

目录 AXI总线的Burst Type以及地址计算一、概念1. Transaction/Burst/Transfer/Beat2、对齐 二、Burst Type介绍三、地址计算1. aligned_addr的计算2. WRAP的上下界地址计算3. Byte Lane的计算 参考文献

AXI总线的Burst Type以及地址计算

AXI总线的transaction是burst-based的,因此有必要好好研究一下不同burst type的工作原理。此处略过burst的定义以及burst size、burst length等信号的介绍。

一、概念 1. Transaction/Burst/Transfer/Beat

Transaction指一次传输事务,实际上包括了address phase, data phase与response phase,但由于AXI协议主要为data的传输服务,且AXI的data传输为burst-based,因此通常将Transaction与Burst等同。 Transfer是Burst的组成元素,一个Burst可以由一个或多个Transfer构成。而一个Beat指一拍,如果一个Transfer只需一拍,那么Transfer也可以等同于Beat。

总结:Transaction ≈ Burst > Transfer ≈ Beat。

2、对齐

根据对齐长度的不同,分为几类:

对单个transfer的num_of_bytes对齐,即start_addr可以被num_of_bytes整除,称为对齐传输、否则为非对齐传输。在非对齐传输中,可能会存在某些Byte无效的情况,通过STRB进行byte valid的标识。一般所说的对齐指的就是这种对齐。对单个burst的总byte量(num_of_bytes * burst_len)对齐,此时WRAP传输的start_addr = lower_bound_addr。即不存在到达上界回卷的情况,与INCR无异。这种对齐通常是用于计算WRAP的边界地址的。 二、Burst Type介绍

AXI总线中,读写地址通道AR/AW的AxBURST[1:0]信号用于定义该transaction的burst type。

AxBURST[1:0]Burst Type2’b00FIXED2’b01INCR2’b10WRAP2’b11Reserved

FIXED

同一个burst内每个transfer的地址保持一致。同一个burst内byte lanes保持一致,但可以通过WSTRB选择每个transfer的有效bytes。常用于对同一位置的重复访问,例如读或清空FIFO。

INCR

同一个burst内地址随transfer递增。地址递增量为一个transfer的大小。常用于对normal sequential memory的访问。

WRAP

start address需按照transfer的大小进行对齐(Align)。

burst length只能从2,4,8,16中取值。

地址递增达到upper boundary时回卷到lower boundary。upper boundary与lower boundary的地址计算在后文介绍。

通常用于从memory中读取cache line。

因为master对cache的访问通常是cache line中的某些bytes,但当发生cache miss时,从memory读回来的是整个cache line。而此时master发送的地址却不一定是cache line的起始地址,而可能位于中间,因此递增到upper boundary时需要回卷到lower boundary,才能将该cache line读完。

三、地址计算 1. aligned_addr的计算

aligned_addr = Floor(start_addr/num_of_bytes) * num_of_bytes

其中,num_of_bytes为单个transfer的字节数,start_addr即master发起transaction的地址,aligned_addr则是对齐地址,如果两者相同代表该transaction是对齐传输,否则就是非对齐传输。

2. WRAP的上下界地址计算

lower_bound_addr = Floor(start_addr/ (num_of_bytes * burst_len)) * (num_of_bytes * burst_len)

即下界要根据transaction的总bytes对齐得到下界。

upper_bound_addr = lower_bound_addr + (num_of_bytes * burst_len)

上界则是由下界加上总bytes得到。 在WRAP transaction中,start_addr依次递增num_of_bytes,达到upper_bound_addr后,下一个transfer地址回到lower_bound_addr。

3. Byte Lane的计算

总线宽度data_bus_bytes包括多个bytes,每个byte称为一个byte lane,STRB就是用来标记byte lane是否valid的信号。在某些情况下,data bus中并非每个byte lane都是valid的,例如:

单个transfer的bytes ≠ data bus size;非对齐传输,即start_addr ≠ aligned_addr;master逻辑主动丢弃某些bytes。

第三种与master功能模块的设计逻辑有关,不在协议讨论范围,只讨论前两种情况。在前两种情况中,data bus中有效的最低byte lane与最高byte lane可以通过如下方式进行计算:

Lower_Byte_Lane = addr - Floor(addr/data_bus_bytes) * data_bus_bytes

data_bus_bytes指的是总线宽度,因为STRB决定的是data bus上的byte lane,所以要对data_bus_bytes对齐。

Upper_Byte_Lane : 若为对齐传输(addr = aligned_addr), Upper_Byte_Lane = Lower_Byte_Lane + num_of_bytes - 1 否则 Upper_Byte_Lane = aligned_addr + num_of_bytes - 1 - Floor(addr/data_bus_bytes) * data_bus_bytes

总结来说,单纯的原因一不会导致Lower_Byte_Lane偏移,但可能造成Upper_Byte_Lane不对齐。而单纯的原因二就会导致Upper与Lower的Byte Lane都不对齐。

Byte Lane的计算不只是针对上述原因,事实上任何Burst传输都可以计算,只是规整的传输计算出来的Byte Lane上下限一般就是data bus的最大最小byte lane。

参考文献

[1] AMBA® AXI and ACE Protocol Specification



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有