目录
一、问题背景
对于一个RTL工程师,我一直对读写DDR时的两个规则很迷惑。它们分别是:
1、同一次burst访问不可跨256Byte
2、同一次burst访问不可跨4K Byte
一旦出现上述的访问请求,我必须将地址向前跳“多读数据”来进行规避,现在我终于搞明白这两个规则的来历,本篇将详细进行描述。
二、“不跨256B”
理解“不跨256B”首先要理解DDR交织的概念,此处不赘述。
DDR较为通用的做法是按照256B进行交织,即逻辑上相邻的两块256B大小空间划分到不同channel,从而在DDR串行访问时可以多个channel同时工作,用以提升效率。
即如下图:
因此如果同一笔访问跨越了2个256B,则必须拆分为两笔访问(因为每个channel管辖区域已经定死了),效率减半。为了提升DDR访问效率,一般要求IP自己提前拆好访问请求,避免跨256B。
三、“不跨4KB”
AMBA AXI4协议规定同一次burst不能跨4KB,因为AXI各个slave端的地址空间都是4KB的整数