关于axi协议里面burst的4k问题

本文探讨了AXI总线Burst操作在不同边界条件下的行为规范,特别是关于4K边界的问题。解释了为何协议规定Burst操作不可跨越4K边界,并介绍了如何处理可能跨越边界的情况。

AXI总线,burst操作,不能跨4K边界问题! 在Master_A设计中,假如Master_A只操作一块64M SDRAM(此Master_A不操作任何其他Slave),读写的数据量远远大于4K。因此其中某个Burst的操作可能 会出现在4K边界上。 请问: 在这样的情况下,Master_A设计的Burst操作是否需要遵守4k边界的约定?

       协议中之所以规定一个burst不能跨越4K边界是为了避免一笔burst交易访问两个slave(每个slave的地址空间是4K/1K对齐的)。假如一个burst交易访问了两个slave A 和B(A在前B在后),那么只有A收到了地址和控制信息,而B不会收到地址和控制信息,因此只有A响应B并无响应,这就会导致此笔burst交易无法完成(B无法返回最后一笔transfer)。因此如果你必须确定系统中所有slave中地址空间最小的那一个,假设是1M,这样你的burst边界可以大于4K至1M。但还是不建议这么做,毕竟一个burst跨越4K边界的概率还是较低的,如果真的跨越了就拆分。

 Q1:不是一个burst的最长是16(len)×128byte(size)=2Kbyte吗,所以一个burst怎么超过4K的边界?

 Q2:“4K/1K对齐的”是什么意思?

 Q3:“如果真的跨越了就拆分”是什么意思?

所谓的4K边界是指低12bit为0的地址,例如32'h00001000, 32'h00002000... 这些特殊的地址我们称之为4k边界;同理1k边界是指低10bit为0的地址,例如32'h00000400,32'h00000800...

4K对齐最大原因是系统中定义一个page大小是4K。所以,为了更好的设定每个slave的访问attribue,就给一个slave划分4K空间。 4K对齐,以32位地址为例,[31:12]相等的地址都是同一个page,没有跨4K边界。 即[11:0] 可以为0~0xFFF. 例如0x1000和0x2000就是在不同的page,跨了4K边界。0x1000和0x1FFF则是在同一个page,没有跨4K边界。同理,0x1FFF和0x2000则跨了4K边界,虽然他们是相邻的byte。 再说到一次burst没有4K大小,但是如果起始地址是0x1FFC, INCR模式,会跨边界吧? 1K对齐,就是说 [31:10]相等的地址都是在一个1K对齐的空间内。 至于真的跨越了,就拆分。例如处理器load多个数据,就是跨页访问,到了接口控制模块,也会把这一个访问拆分成两个访问。在interfere上的都是符合协议的transaction。例如,core要访问0x1FF0-0x200C共32byte的数据(每次beat 4B)。系统会自动给拆分成0x1FF0-0x1FFC和0x2000-0x200C两个transaction。

ARM对AHB burst这样设计的目的是在于,SLAVE的地址访问空间基本都是以1KB为单位的,当AHB以burst方式传输时,为了避免错误的访问到其他的Slave空间而造成系统致命错误,因此在burst传输时限制1KB,若需要跨1KB边界时,需要重新initial一个新的传输。

在AHB划分系统时,最小的地址空间为1KB,即slave至少地址空间是1k,或者2K,或者1M等。这样,当AHB访问地址空间时,因为地址空间对其的原因,就不会恶意的访问到其他的地址空间。

cpu发出这样的请求时,AHB会自动的将其转换为1KB,1KB的传输格式,可以根据其地址区间是否跨越对齐的000来判断。

 

                                                                                                                            ————欢迎关注我的公众号《处理器与AI芯片》

 

### 4KB边界限制的原因 AXI4协议中突发传输不能跨越4KB地址边界,这一限制主要源于系统设计的多个方面。首先,4KB是操作系统中常见的页面大小,这一设计选择使得AXI4协议能够与操作系统的内存管理机制保持一致,从而简化了系统设计和提高了兼容性[^2]。具体来说,4KB对齐的原因在于系统中定义的一个页面大小为4KB,因此为了更好地设定每个从设备(slave)的访问属性,给每个从设备划分4KB的空间[^4]。 此外,4KB边界限制还有助于确保内存保护和地址映射的有效性。通过避免突发传输跨越不同的内存页面或设备地址空间,可以防止未经授权的访问,从而提高系统的安全性。同时,这一限制也简化了地址解码逻辑,减少了硬件设计的复杂性,提升了系统的性能和稳定性[^2]。 ### 4KB边界限制的影响 4KB边界限制对AXI4协议的实际应用产生了多方面的影响。首先,它确保了数据传输的正确性和可靠性,避免了一个突发操作同时访问多个设备,从而防止设备冲突。其次,这一限制使得系统设计更加简单,因为不需要处理跨越多个页面或设备的数据传输问题[^2]。 在实际的数据传输过程中,如果一个突发传输请求跨越了4KB边界,系统会自动将这个请求拆分为两个或多个符合协议规定的传输请求。例如,当处理器需要访问从0x1FF0到0x200C的32字节数据(每次beat为4字节)时,系统会将其拆分为两个事务:0x1FF0到0x1FFF和0x2000到0x200C。这样,每个事务都在同一个4KB页面内进行,符合AXI4协议的要求[^4]。 ### 示例代码 以下是一个简单的AXI4突发传输示例,展示了如何在不跨越4KB边界的情况下进行数据传输: ```c #include <stdio.h> #define BUFFER_SIZE 16 void axi4_burst_transfer(int *base_address, int offset, int length) { int *start = base_address + offset; for (int i = 0; i < length; i++) { start[i] = i; // Simulate data transfer } } int main() { int buffer[BUFFER_SIZE]; int *base_address = buffer; // Perform a burst transfer within the same 4KB page axi4_burst_transfer(base_address, 0, 16); // Offset 0 to 15 (64 bytes) return 0; } ``` ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值