猝发(Burst)
拍(beat):在时钟采样沿valid和ready信号同时拉高持续一个时钟周期,即为一拍,持续两个时钟周期,即为两拍,依次类推。可以概括为在时钟采样沿握手信号同时拉高的时钟周期数。
猝发长度(burst_length):表示数据线上valid和ready信号握手次数,burst_length长度为多少,完成一次burst传输地址线就要握手多少次手(有几拍)。
猝发大小(burst_size):表示数据线上传输数据的宽度,单位通常是word(与cpu位宽有关,多少位的cpu,一个word就是多少位),地址线的valid和ready信号每握一次手就发送一个大小为burst_size的数据。
一次猝发传输的数据量:burst_length(一次猝发有多少拍)* burst_size(一拍传输的数据量)。
猝发的类型(burst_type):AXI协议中定义了三种猝发类型(一次猝发传输中如何计算地址)。文章来源:https://www.toymoban.com/news/detail-482132.html
- 固定式(Fixed burst):一次burst传输的地址固定,即每拍都从地址线的address处取数据。
- 递增式(Incrementing burst):相对于固定式,第一拍从地址线的address处取数据,其后的拍地址自动根据burst_size计算。如32位的CPU上,规定一次burst_length为8beats,burst_size为1个word的传输。第一拍读/写的地址为0x0000,第二拍读/写的地址为0x0004,第三拍读/写的地址为0x0008,最后一拍读/写的地址为0x001C。整个burst传输传输完毕,占据的内存空间为0x0000~0x001F(8*32bit=256bit,即32Byte)。
- 卷绕式(Wrapping burst):卷绕式猝发的地址与递增式的类似,也是第一拍从地址线的address处取数据,其后的拍地址自动根据burst_size计算。不同的是,当地址到达卷绕的边界后,其后的地址会从最低的地址开始递增,就像将最大的地址和最小的地址重合起来继续计算地址。如同钟表,最小的是0点,最大的是12点,12点和0点重合,当到达12点时也就意味着从0点重新计数,下一个小时是1点。以下讨论卷绕边界:
卷绕式猝发传输,每次进行传输前会根据地址和猝发的配置计算一个卷绕地址上边界和一个卷绕的下边界(地址线address,burst_length,burst_size等),猝发传输的每拍传输的数据会在卷绕地址下界~卷绕地址上界之间进行传输。卷绕的上/下边界地址计算公式如下:
下边界地址:Wrapaddr_low = (int(address/(number_byte*burst_len))) * (number_byte*burst_len)
上边界地址:Wrapaddr_high = Wrapaddr_low + number_byte*burst_len
注:number_byte即为每拍传输的数据字节数,根据burst_size计算。
address为猝发传输的起始地址。
int:为向下取整,即保留商的整数部分。
举例描述:对于Wrap类型的猝发传输, 32位CPU,burst_length为ddword(4Word,128bit),burst_length为4beat,起始地址address为0x00, 0x10, 0x20, 0x30的传输发生的卷绕情况如下:
number_byte=128/8=16Byte,起始地址0x00,0x10,0x20,0x30的卷绕上/下界都为0x00,0x40。
0x00:0x00,0x10,0x20,0x30(不发生卷绕)
0x10:0x10,0x20,0x30,0x00(发生一次地址越界,卷绕一次)
0x20:0x20,0x30,0x00,0x10(发生两次地址越界,卷绕两次)
0x30:0x30,0x00,0x10,0x20(发生三次地址越界,卷绕三次)
参考链接:
1.axi协议
2.https://blog.csdn.net/qq_28284627/article/details/120827729文章来源地址https://www.toymoban.com/news/detail-482132.html
到了这里,关于AXI协议相关概念(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!