对于AHB边界地址为1KB,元芳你怎么看?
扫描二维码
随时随地手机看文章
众所周知,AHB是ARM公司开发的一种高性能总线协议,属于AMBA(Advanced Microcontroller Bus Architecture)家族的一部分。在对应的AMBA总线手册中我们经常会看到这样的描述:
其中1KB(2^10)边界地址是一个重要的设计约束,AHB协议规定突发传输(burst transfer)不能跨越1KB地址边界,这意味着任何突发传输的地址范围必须限制在同一个1KB地址空间内(例如0x000-0x3FF, 0x400-0x7FF等),实际上这也是总线上设备地址空间的最小粒度和地址对齐单位。这里之所以定为1KB边界,通常与总线保护机制和地址空间划分有关,也有传说与早期操作系统对页(Page)大小的定义有关,但实际上内存页大小与1KB不是一回事。
在总线系统中设置1KB边界地址,可避免因为较长突发传输占用总线时间过长降低系统性能,导致其他设备或者组件挂死,有了这样的要求约定,从某种程度上也限制简化了地址译码等逻辑的构建(例如,只需要检查地址高位即可判断访问的是哪个设备),避免了非对齐地址访问带来的逻辑处理。
实际使用时,如果突发传输跨越1KB,可能就会导致部分数据访问到当前设备的地址相邻设备上,而此时相邻的设备可能并未收到完整的控制信息和数据信息,从而可能会产生错误。因此,从某种程度上来说,这样的规定可以防止跨设备访问产生错误,从而可能导致系统错误等。
那么,如果确实需要跨1KB边界传输,应该怎么处理呢?此时可以考虑对传输的数据进行拆分,拆分的块分别在各自的1KB地址空间内完成。或者通过主机重新发送非连续传输序列。例如:第一次传输起始地址为0x0F00,第二次传输起始地址为0x1000。
另外,在实际面对要访问的地址空间时,如何对1KB边界进行判断呢?比较简单的方式就是用当前地址除以1KB即可,如果能够整除,那么该地址即是1KB边界,例如0x0000-0x03FF就是1KB空间。
因此,1KB边界地址的设计可以为系统的稳定性和安全性提供重要保障,简化了设计系统和地址编解码的复杂度,确保了突发传输不会意外跨越到不同的外设地址空间,方便了设计人员进行地址空间和总线设备的管理。如果在实际使用中,如果确实需要进行跨边界访问,那么可以采取上述对应的措施,进行拆分传输。





