说一说AXI协议中的4K边界问题

4K边界:

        是指12bit全为0的地址,如32’h00001000,32‘h00002000,32’h00003000等这些特殊的地址,这些地址均为4K边界。

4K边界对齐的最大原因是系统中定义一个page大小为4K bytes,为了更好的设定每个slave的访问attribute,就给一个slave划分4K空间,AXI协议中一次突发不能越过4K边界是为了避免一笔burst访问两个slave(每个slave都是4K空间),如果一次burst传输访问大于4K,则可能会造成地址从slave1增加到了slave2上,但是slave2又不响应,导致传输无法完成。

以32bit地址为例,[31:12]相等的地址都是同一个page,没有跨越4K边界。

      例如:0x1000和0x1FFF,0x2000和0x2FFF,0x3000和0x3FFF则是在同一个page(同一个4K内部)没有跨越4K边界;

      例如:0x1000和0x2000就是在不同的page,跨越了4K边界;

但是例如0x1FFF和0x2000,0x2FFF和0x3000,虽然他们是相邻的地址,但是他们却跨越了4K边界。

在axi协议中,支持的burst lenth为1,2,4,8,16,32,64,128,256,其均为2的幂次,若突发长度始终为以上的一种,则不会出现跨越4K边界的情况,但是如果突发长度不定,则有可能出现跨越4K边界的情况,例如第一次突发长度为1,数据位宽为16byte,则突发后的地址为16,当第二次突发len=255时候,则地址需要在16的基础上加4096,则为4112,此时就涉及到了跨越32‘b00001000(4096)这个4K边界的情况。

所以一般csr中通过axi配置寄存器,都选用4K(或者4K的倍数)作为slave的地址空间,且数据位宽都是4byte,寄存器的地址分配步长都是4(1K=1024空间能开出256个寄存器),一个地址对应1byte数据。

顺便附一份地址空间与addr位宽的表格:

1Kaddr[9:0]——10bit000-3FF
4Kaddr[11:0]——12bit000-FFF
8Kaddr[12:0]——13bit0000-1FFF
16Kaddr[13:0]——14bit0000-3FFF
32Kaddr[14:0]——15bit0000-7FFF
64Kaddr[15:0]——16bit0000-FFFF
128Kaddr[16:0]——17bit0_0000-1_FFFF
1Maddr[19:0]——20bit0_0000-F_FFFF

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值