2.5-AHB(数据总线)
资料来源:
(1) amba bus spec翻译.pdf
(2) 字节序(byte order)、比特序(bit order)、MSB/LSB、大端模式/小端模式 概念误混淆_光明磊的博客-CSDN博客_lsb和msb的区别 【未阅】
(3) 大小端模式_侵蚀昨天的博客-CSDN博客_大小端模式 【未阅】
6.数据总线
6.1数据总线
(1) 数据总线分为读数据总线和写数据总线; 推荐最小总线宽度是32;
(2) HWDATA: 写传输中,master驱动写数据总线;如果传输拓展,即不能及时完成,master必须保持数据有效直至传输完成;对于小于总线宽度的数据传输,如16比特数据在32位总线上传输,master只需要驱动合适的部分lane,不需要的宽度可以不管,slave选择正确的字节找到写数据;
(3) HRDATA: 合适的slave在读传输中驱动读数据总线;如果slave通过将HREADYOUT拉低拓展读传输,只需要在传输的最后一个周期提供有效数据; 对于传输宽度小于总线宽度的情况,slave只需在激活的字节通道提供有效数据; slave只需要在传输完成回应OKAY时提供有效数据; ERROR回应不需要提供有效读数据;
6.2字节顺序
(1) AHB同时支持大端和小端系统,支持两种大端数据存储方法;
6.2.1小端方式
(1) 当一个小端组件访问一个字节,下面的方程展示了使用的总线位,数据会转移至DATA[(8*Byte_Lane)+7 : (8*Byte_Lane)];
6.2.2字节不变大端方式(BE8, byte-invariant big-endian) (???)
(1) 和小端一样,对于一个字节而言,大小端都一样;
(2) 当更大的大端传输发生,高字节放在低地址,低字节放在高地址;这是字节不变大端和字不变大端方式的区别;
6.2.3字不变大端(BE32, word-invariant big-endian)
(1) 数据传输至DATA[(8*(Word_Offset+3-Byte_Offset))+7 : 8*(Word_Offset+3-Byte_Offset)];
(2) 对于32bit总线,Data_Bus_Bytes=4, Word_Offset总是0,方程式可以简化为:DATA[(8*(3-Byte_Offset))+7 : 8*(3-Byte_Offset)];
6.2.4字节不变性
(1) 字节不变大端数据结构简化了在一片内存中访问混合端的数据访问,既有大端方式,也有小端方式;
6.3数据总线宽度
(1) 将片上总线数据通道变宽,可以不提高操作频率而提高总线带宽;
(2) AHB支持8、16、32、64、128、256、512和1024位数据总线宽度;
6.3.1宽总线与窄slave
(1) 上图展示了工作在32位总线上的slave,可以转变在64位总线上工作,这只需要增加外部逻辑,而不改变内部设计;
(2) 对于输出,当将窄总线转为宽总线时,做下面的事情: a)在宽度总线一半的数据位复制数据,也就是高、低32位都是HRDATA; b)使用额外的逻辑确保总线上合适的一半被修改,这样可以减少功耗;
(3) slave只接受和它本身一样宽的传输;
6.3.2窄总线与宽slave
6.3.3宽总线与master
(1) 和slave一样,可以通过复用数据总线以及复制输出总线实现在宽总线上运行master;
6.3.4窄总线与master
(1) master不能工作在比本身更窄的总线上,除非包含一些机制限制master尝试的传输宽度;
(2) master不能试图进行传输大小大于总线宽度的传输;