AXI4的4K边界
一、什么是4k边界?
主机每一次写突发或者读突发传输,地址偏移量(或叫地址增加量),不能超过4K,也不能跨域4K。4K=4096。
举个例子:数据位宽m_axi_wdata=128bit,突发长度为100。可以计算出突发长度的字节数量:128÷8×100=1600。
第一次:突发开始的地址是0,结束地址(最后一个字节的地址)是1599。axi总线规定一个字节对应一个地址。
第二次:突发开始的地址是1600,结束地址(最后一个字节的地址)是3199。axi总线规定一个字节对应一个地址。
第三次:突发开始的地址是3200,结束地址(最后一个字节的地址)是4799。axi总线规定一个字节对应一个地址。这个就有问题了,地址超过了4096(4k)
如下图,4k区间即0-4095,或者4096-8191,读写的时候不能跨越4k区间
二、计算最大的突发长度发
计算公式:最大的突发长度发=4096÷(axi数据位宽÷8)。
1)m_axi_wdata=128bit:可以计算出最大突发长度:4096/(128÷8)=256。4096是4k边界,128÷8为字节数
2)m_axi_wdata=256bit:可以计算出最大突发长度:4096/(256÷8)=128。
3)m_axi_wdata=512bit:可以计算出最大突发长度:4096/(512÷8)=64。
4)m_axi_wdata=64bit:可以计算出最大突发长度:256。按照上面的计算的话4096/(64÷8)=512,但是axi总线规定突发长度在0到256之间,所以此时最大只能是256
三、如何避免4k边界
1)如果突发长度固定,每次突发的地址偏移量可被4096整除,比如axi4写数据位宽为128bit,突发长度为128,则地址偏移量:128*(128/8)=2048。4096÷2048=2,地址偏移量可以被整除,这可以避免跨越4k边界。地址偏移量就是结束地址减去起始地址。
2)如果突发长度不固定,可以给每次突发分配4k地址空间。
假设数据位宽m_axi_wdata=128bit。第一次突发长度为100,起始地址是0,结束地址是128/8*100 - 1=1599。第二次突发长度是200的话,起始地址是1600,结束地址是1600+(128/8 * 200)-1=4799,此时跨越了4k边界,会出现错误。为了避免跨越4k边界,可以在第二次时,初始地址给4096,那么结束地址就是4096+(128/8 * 200)-1=7295。同理,第三次突发时,起始地址可以从8192开始。
--晓凡 2024年2月22日于武汉书