在AXI4协议中,一个突发传输(burst transfer)不能跨越4KB的边界,为啥呢,因为我们认为每个slave设备通常是4KB对齐的,为了避免一次burst的传输可能越过目的slave这个风险,所以就定了这个规矩
更深的说,确保数据传输和缓存操作遵循4K边界对齐可以提高系统性能,减少缓存一致性问题,并简化内存管理。这是因为许多缓存系统是基于缓存行进行操作的,如果数据跨越了缓存行边界,可能需要额外的处理来确保数据的一致性。
1、AXI4的4K边界指的是地址,还是数据量,比如一组DDR有两片16bit位宽DDR芯片,这时候4K边界应该怎么算?
AXI4的4K边界指的是地址,而不是数据量。4K边界是指地址的低12位全为0的地址点,这是因为系统通常定义一个页面(page)的大小为4KBytes。
对于一组DDR内存,如果有两片16位宽的DDR芯片,计算4K边界还是基于整个DDR内存的物理地址空间来考虑,而不是单个芯片的位宽或容量。一组两片DDR芯片是并行的,所以它们在逻辑上应该被视为一个连续的地址空间。
每个DDR芯片的地址空间中的4K边界地址点是由其物理地址决定的,而不是由芯片的位宽决定的。换句话说,无论数据总线宽度是多少,4K边界始终是由地址的低12位决定的。
2、不跨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 ];