第六章
數據總線
本章描述了數據總線。它包含以下部分:
-- 數據總線 on page 6-60.
-- 大小端 on page 6-61.
-- 數據總線寬度 on page 6-65.
6.1 Data buses
實現AHB系統需要獨立的讀寫數據總線。雖然推薦的最小數據總線寬度被指定為32位,但可以按照第6-65頁的數據總線寬度進行更改。
數據總線描述如下:
-- HWDATA.
-- HRDATA.
-- Endianness on page 6-61.
6.1.1 HWDATA
在寫傳輸過程中,主機驅動寫數據總線。如果傳輸被擴展,那么主機必須保持數據有效,直到傳輸完成,傳輸完成用HREADY HIGH表示。關於保持信號在多個周期內有效的詳細信息,請參見7-68頁的時鍾。
對於小於總線寬度的傳輸,例如32位總線上的16位傳輸,主機只需要驅動適當的字節通道。從機從正確的字節通道中選擇寫數據。關於小端和大端系統中活躍的字節通道的詳細信息,請參見第6-61頁的Endianness。
6.1.2 HRDATA
在讀傳輸期間,合適的從機驅動讀數據總線。如果從機通過保持HREADY LOW來擴展讀傳輸,那么從機只需要在傳輸的最后一個周期中提供有效的數據,用HREADY HIGH表示。
對於小於總線寬度的傳輸,從機只需要在活躍字節通道上提供有效的數據。主機從正確的字節通道中選擇數據。
當傳輸以OKAY響應完成時,從機只需要提供有效的數據。錯誤響應不需要有效的讀數據。
6.2 Endianness
AHB同時支持大端和小端系統。支持兩種大端數據存儲方法。
AHB5引入了Endian屬性來定義支持哪種形式的大端數據訪問。
BE8--字節不變量大端格式. 這個詞語,字節不變量的大端字節,源於字節訪問(8位)使用相同的數據總線位作為小端訪問相同的地址。
BE32--字不符變量大端格式。術語“字不變大端格式”源於一個事實,即字訪問(32位)使用相同的數據總線位來訪問最重要(MS)和最不重要(LS)字節,就像訪問相同地址的小端序訪問一樣。
關於字節不變的大端字節數的更多信息可以在第6-63頁的字節不變一節中找到。
下面的方程組定義了哪些數據位用於小端、字節不變的大端和字不變的大端訪問。
方程使用以下變量:
Address--傳輸的地址.
Data_Bus_Bytes --8位數據總線字節通道的數量。
INT(x) --向下舍入x的整數值。
6.2.1 Little endian
當一個小端組件訪問一個字節時,下面的公式顯示使用哪些數據總線位:
Byte_Lane=Address–(INT(Address / Data_bus_Bytes))×Data_Bus_Bytes
數據在DATA[(8 × Byte_Lane) + 7 : (8 × Byte_Lane)]上傳輸。
當發生較大的小端傳輸時,數據的傳輸是這樣的:
-- LS字節被傳輸到傳輸地址。
-- 增長的高位字節被傳輸到順序遞增的地址。
6.2.2 Byte-invariant big-endian
當一個字節不變的大端格式組件訪問一個字節時,下面的公式顯示使用哪些數據總線位:
Byte_Lane=Address–(INT(Address / Data_bus_Bytes))×Data_Bus_Bytes
數據在DATA[(8 × Byte_lane) + 7 : (8 × Byte_lane)]上傳輸。
Note
這些方程與小端格式的方程是相同的。因為大端和小端訪問對於字節傳輸是相同的,所以術語字節不變量被用於這些傳輸。
當發生較大的字節不變的大端字節傳輸時,數據的傳輸是這樣的:
-- MS字節被傳輸到傳輸地址
-- 遞減的高位字節被傳輸到順序遞增的地址。
Note
這是字節不變的大端和小端組件之間的關鍵區別。
6.2.3 Word-invariant big-endian
當一個字不變的大端格式元件訪問一個字節時,下面的公式顯示使用哪些數據總線位:
Address_Offset=Address–(INT(Address/Data_Bus_Bytes))× Data_bus_Bytes
Word_Offset=(INT(Address_Offset/4)) × 4
Byte_Offset = Address_Offset – Word_Offset
數據在DATA[(8 × (Word_Offset + 3 – Byte_Offset)) + 7 : 8 × (Word_Offset + 3 – Byte_Offset)]上傳輸。
對於32位總線,Word_Offset總是0,因此方程簡化為:
DATA[(8 × (3 – Byte_Offset)) + 7 : 8 × (3 – Byte_Offset)]
Note
這顯示了字不變的大端和小端格式組件之間的關鍵區別。與小端和字節不變的大端組件相比,字不變的大端組件使用不同的數據總線位來傳輸字節數。
對於使用字不變大端格式的半字和字傳輸,數據的傳輸是這樣的:
-- 最高字節位被傳送到傳送地址。
-- 遞減的高位字節被轉移到順序遞增的地址。
對於使用字不變大端格式的大於一個字的傳輸,數據被分割成字大小的塊:
-- 最低位字節被傳輸到傳輸地址。
-- 遞增的字位被傳輸到遞增的地址。
表6-1、6-63頁的表6-2和6-63頁的表6-3中的32位數據總線可以擴展為更寬的數據總線實現。
傳輸大小小於數據總線寬度的突發傳輸對於突發的每個節拍有不同的有效字節通道。
第6-63頁的表6-1和表6-2顯示了在小端或字節不變的大端系統中有效的32位總線上的字節通道。在這兩種情況下,有效的字節通道是相同的,但最高有效字節和最低有效字節的位置不同。
表6-3顯示了32位總線上有效的字不變大端系統的字節通道。
6.2.4 Byte invariance
字節不變大端數據結構的使用簡化了對單一內存空間中混合端數據結構的訪問。
使用字節不變的大端和小端格式意味着,對於數據結構中的任何多字節元素:
-- 該元素使用相同的連續內存字節,而不考慮數據的大小端。
-- 大小端決定了這些字節在內存中的順序,這意味着它決定了內存中的第一個字節是元素的MS字節還是LS字節。
-- 到給定地址的任何字節傳輸都將同一數據總線上的8位數據傳遞到相同的地址位置,而不考慮字節所在的數據元素的字節順序。
圖6-1展示了一個需要字節不變訪問的數據結構示例。在這個例子中,報頭字段使用小端順序,而數據負載使用大端順序。
例如,在這個結構中,Count是一個兩字節的小端元素,這意味着它的最低地址是它的LS字節。字節不變性的使用確保了對負載的大端訪問不會破壞小端元素。
6.3 Data bus width
在不增加操作頻率的情況下提高總線帶寬的一種方法是使片上總線的數據路徑更寬。 金屬層的增加和嵌入式DRAM等大型片上內存塊的使用是鼓勵更寬片上總線使用的驅動因素。
指定總線的固定寬度意味着,在許多情況下,總線的寬度對應用程序來說不是最佳的。因此,采用了一種方法,使總線寬度具有靈活性,但仍然確保模塊在設計之間具有高度可移植性。
該協議允許數據總線寬度為8、16、32、64、128、256、512或1024位。 但是,建議使用最小32位的總線寬度。 256位的最大總線寬度對於幾乎所有的應用都是足夠的。
對於讀和寫傳輸,接收模塊必須從總線上正確的字節通道中選擇數據。不需要跨所有字節通道復制數據。
以下部分將介紹:
-- 在寬總線上實現窄從從機.
-- 在6--66頁上在窄總線上實現一個寬從機
-- 在6-66頁實現寬總線上的主機
6.3.1 Implementing a narrow slave on a wide bus
圖6-2顯示了原本設計用於32位數據總線的從機模塊如何轉換到64位總線上操作。這只需要添加外部邏輯,而不需要進行任何內部設計更改,因此該技術適用於硬宏單元格。
對於輸出,當將窄總線轉換為寬總線時,請執行以下操作之一:
-- 在寬總線的兩個半寬總線復制數據,如圖6-2所示。
-- 使用附加邏輯確保只更改適當的一半總線部分。這導致了電力消耗的減少。
從機只能接受與其自然接口一樣寬的傳輸。如果主機嘗試的傳輸寬度超過了從機的支持范圍,那么從機可以使用ERROR傳輸響應。
6.3.2 Implementing a wide slave on a narrow bus
通過使用外部邏輯,預先設計或導入的從機可以適應在較窄的數據總線上工作。圖6-3是在窄總線上實現的寬從機。
6.3.3 Implementing a master on a wide bus
主機可以被修改為工作在比原來更寬的總線上,就像從機被修改為工作在更寬的總線上一樣。通過:
-- 輸入總線復用。
-- 復制輸出總線。
Note
主機不能在比最初計划的更窄的總線上工作,除非在主機中包含某種機制來限制主機嘗試的傳輸寬度。主機絕不能嘗試在HSIZE指示的寬度比它連接的數據總線寬的地方進行傳輸。