AXI 4K边界问题
4K边界是指低12bit全是0的地址,如32'h00001000,32'h00002000,这些特殊的地址就是4K边界
4K边界对齐的最大原因就是系统中定义一个page大小为4K bytes,为了更好的设定每个slave访问atttribute,就给一个slave划分4K空间。AXI协议不能跨越4K空间是为了避免一笔传输访问两个slave,因为每一个slave都是4K对齐,如果一次burst传输访问大于4K,就有可能造成slave1的地址增加到了slave2上,但是每次对接的时候仲裁器只会让一个slave接入,使得slave2虽然有地址,但是没有控制指令,就不会发生响应,导致传输无法进行。
以32bit地址为例,[31:12]相等的地址都同属于一个page,没有跨越4K边界。例如0x1000和0x2000,这两个就在不同page,跨越4K边界。0x1000和0x1fff、0x2000和0x2fff之间的地址都同属于一个page,没有跨越4K边界。但是如果将地址范围确定在0x1fff和0x2xxx(x代表任意数值,注意:此时的高位地址已经不再相同,也就不属于一个page),就拿0x1fff和0x2000来讲,虽然数值上相邻,但是在page上来讲,并不属于一个page,就跨越了4K边界。
AXI-full协议的突发长度支持1、2、4、8、16、32、64、128、256,都是2的幂次,如果突发长度始终为这些的一种,就会不会出现跨越4K边界的情况。如果突发长度不定,就有可能出现跨越4K边界的情况。例如,第一次突发长度是1,数据位宽128,则突发后的地址为16,当第二次突发的长度为256时,那么第二低突发的地址需要加4096,也就是4112,4096就刚好是32'h00001000,也就是4K边界的地方,也就是说,在第二次传输还未结束的时候,就到达了4K边界,但是AXI的传输不会因为到了4K边界就停下来,master和slave都无权结束一次传输,这个时候AXI传输会含泪走完传输流程,到达4K边界后的传输都是错误传输。