一、4K边界
1.在AXI4协议中,一个burst传输是不能跨越4K边界的,这个是由于slave设备通常是4KB对齐的,为了
避免一次burst传输跨越了两个slave的风险,所以有了这个规范
2.操作系统设计按照page分页来设计,确保数据传输和缓存操作遵循4K边界对齐可以提高系统性能,减少缓存一致性问题,并简化内存管理。这是因为许多缓存系统是基于缓存行进行操作的,如果数据跨越了缓存行边界,可能需要额外的处理来确保数据的一致性。
二、4K边界之于地址还是数据
AXI4的4K边界指的是地址,还是数据量,比如一组DDR有两片16bit位宽DDR芯片,这时候4K边界应该怎么算?
注意AXI的4K边界指的是地址,而不是数据量。
4K边界指的是地址的低12bit为全0的地址,这个是系统一个page的大小通常是4Kbytes.
对于一组DDR内存,如果有两片16位宽的DDR芯片,计算4K边界还是基于整个DDR内存的物理地址空间来考虑,而不是单个芯片的位宽或容量。一组两片DDR芯片是并行的,所以它们在逻辑上应该被视为一个连续的地址空间。
每个DDR芯片的地址空间中的4K边界地址点是由其物理地址决定的,而不是由芯片的位宽决定的。换句话说,无论数据总线宽度是多少,4K边界始终是由地址的低12位决定的。
三、设计跨越4K边界怎么样理解呢?
假设如果我们有一个起始地址0x00010000,那么4K边界地址将是0x00010000(低12位为000000000000),0x00020000,0x00030000等,这些都是4K对齐的地址点。
在进行突发传输时,我们必须确保起始地址和结束地址都在同一个4K页面内。
判断原则就是:
Start_Address / 4096 == (Start_address + (burst_size * burst_length)) / 4096
代码可以这样写:
wire assert_valid_transaction = start_ar_addr[ MSB : 12 ] == end_ar_addr[ MSB : 12 ];
注意:一个burst传输的首地址和结束地址要在一个4kbyte的page页内。
四、PL的DDR和PS的DDR
1.pl的ddr不需要遵守4Kbyte边界,PS的ddr需要,ps的ddr是要过arm,arm操作系统有限制。
参考:https://www.cnblogs.com/xtt1993/p/19111276