資料來源:
(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不能試圖進行傳輸大小大於總線寬度的傳輸;