Hi All,
I searched alot that why AXI 4 is having 4k boundary , but I didn't get the answer . Can any one explain deeply for this ???
A popular question!
4k boundary in AXI
It's a compromise between wanting to keep interconnect logic address decoding as simple as possible (so wanting bigger slave boundaries to involve fewer address MSBs), and not wanting to waste address space for small slaves (so wanting smaller slave boundaries).
As the AXI protocol only gives you a starting address for a burst of transfers, you must ensure that the burst can only address one physical slave. That way the single slave that is selected will see the full burst.
If you allowed bursts to cross from one physical slave to the next, the new slave wouldn't see the AW or AR channel transfer indicating what the transaction request is, and each slave would not see the AWLEN or ARLEN Indicated number of transfers.
So the AXI protocol states that bursts must not cross 4Kbyte boundaries, that way ensuring that they will never cross from one physical slave to another.
The MINIMUM address space then allocated to a slave is 4Kbytes. Slaves larger than 4Kbytes will simply occupy multiples of 4Kbytes. Slaves smaller than 4Kbytes must still respond to any access within that assigned 4Kbytes, either returning SLVERR responses to the accesses outwith its physical size, or just mirroring itself multiple times throughout the 4Kbyte space (i.e. a 2Kbyte slave would appear to be addressable twice in that space).
Getting back to "why 4K ?", bursts cannot cross over this boundary. The longest burst supported by AXI3 is a 16-beat burst, so considering perhaps a typical data bus width of 128 bits (16 bytes), 16x16=256bytes, so 4Kbytes means that most max length/width bursts would not hit one of these 4Kbyte boundaries. AXI4 does allow INCR bursts of up to 256 transfers, so these will be impacted by this boundary more often, although it could be that these longer bursts will start on "aligned" addresses that will potentially run up to the boundary.
Looking back, AHB and AHB-lite stipulated slave boundaries of 1Kbytes. We still had 16-beat bursts then, but data bus widths were typically smaller, typically 32-bits (4 bytes), so 16x4=64 bytes, meaning 1Kbyte boundaries were a sensible compromise size at that time.
I hope that makes some sense.
excellent answer :-)
http://bit.ly/2Cerius