??大家好,歡迎來到今天的總線學習時間!如果你對電子設計、特別是FPGA和SoC設計感興趣,那你絕對不能錯過我們今天的主角——AXI4總線。作為ARM公司AMBA總線家族中的佼佼者,AXI4以其高性能和高度可擴展性,成為了現代電子系統中不可或缺的通信橋梁。
? ? ? ? 上幾課時我們了解了AMBA和AXI的歷史,也知道AXI4有5個獨立的管道,并且有獨立的握手機制,本章節更細致的講一下AXI的尋址選項深入解析。
? ? ? ? 這里會有一系列的課程,和大家分享AMBA總線家族,歡迎大家一起學習,收藏點贊。
?系列文章
【總線】AMBA總線架構的發展歷程-CSDN博客
【總線】設計fpga系統時,為什么要使用總線?-CSDN博客
【總線】AXI總線:FPGA設計中的通信骨干-CSDN博客
【總線】AMBA總線家族的明星成員:AXI協議簡介-CSDN博客
【總線】AXI4第一課時:揭秘AXI4總線的五大獨立通道-CSDN博客
【總線】AXI4第二課時:深入AXI4總線的基礎事務-CSDN博客
【總線】AXI4第三課時:握手機制-CSDN博客
【總線】AXI4第五課時:信號描述-CSDN博客
【總線】AXI4第六課時:尋址選項深入解析-CSDN博客
目錄
概念
關于尋址選項
突發長度
突發大小
突發類型
突發地址
升華!?
尋址選項的重要性
突發長度的實際應用
突發大小對性能的影響
突發類型的選擇
突發地址的計算方法
結論
????????在深入理解AMBA AXI協議的尋址選項之前,我們需要明確幾個基本概念:突發傳輸、地址計算、以及如何利用這些選項來優化數據訪問。
????????第一章節直接翻譯的官方文檔。第二章對官方文檔進行說明解釋,幫助大家理解。
概念
關于尋址選項
AXI協議是基于突發的,主設備通過驅動傳輸控制信息和突發傳輸的第一個字節的地址來開始每個突發。隨著突發事務的進展,計算突發內連續傳輸地址的責任在于從設備。突發不得跨越4KB邊界,以防止它們跨越不同從設備之間的邊界,并限制從設備內部所需的地址增量器的大小。
突發長度
AWLEN或ARLEN信號指定了每個突發中發生的數據傳輸的數量。如表4-1所示,每個突發可以包含1到16個傳輸。對于包裝突發,突發長度必須為2、4、8或16個傳輸。每個事務必須完成ARLEN或AWLEN指定的傳輸數量。任何組件都不能提前終止突發以減少數據傳輸的數量。在寫入突發期間,如果主設備通過取消所有寫入使能信號來禁用進一步的寫入,它必須完成突發中的剩余傳輸。在讀取突發期間,主設備可以丟棄不需要的進一步讀取數據,但它必須完成突發中的剩余傳輸。
注意: 丟棄不需要的讀取數據可能導致在訪問諸如FIFO之類的讀取敏感設備時丟失數據。主設備在使用比需要的更長的突發長度訪問此類設備時,絕不能這樣做。
表 突發長度編碼
ARLEN[3:0] | AWLEN[3:0] | 數據傳輸數量 |
b0000 | 1 | |
b0001 | 2 | |
... | ... | ... |
b1101 | 14 | |
b1110 | 15 | |
b1111 | 16 |
突發大小
表4-2展示了ARSIZE或AWSIZE信號如何指定突發傳輸中每個節拍傳輸的最大數據字節數。AXI根據傳輸地址確定數據總線上使用的字節道。
對于增量或包裝突發,如果傳輸大小小于數據總線寬度,則每個節拍的數據傳輸在不同的字節道上進行。固定突發的地址保持不變,每個傳輸使用相同的字節道。任何傳輸的大小都不能超過事務中組件的數據總線寬度。
表 突發大小編碼
ARSIZE[2:0] | AWSIZE[2:0] | 傳輸中的字節數 |
b000 | 1 | |
b001 | 2 | |
b010 | 4 | |
b011 | 8 | |
b100 | 16 | |
b101 | 32 | |
b110 | 64 | |
b111 | 128 |
突發類型
AXI協議定義了三種突發類型:
- 固定突發(Fixed Burst):在固定突發中,突發內每個傳輸的地址都保持不變。這種突發類型適用于對同一位置的重復訪問,例如加載或清空外圍FIFO。
- 增量突發(Incrementing Burst):在增量突發中,突發內每個傳輸的地址是前一個傳輸地址的增量。增量值取決于傳輸的大小。例如,在大小為四個字節的突發中,每個傳輸的地址是前一個地址加四。
- 包裝突發(Wrapping Burst):包裝突發類似于增量突發,但是當達到包裝邊界時,地址會回繞到較低的地址。包裝邊界是突發中每個傳輸的大小乘以突發的總傳輸數量。
表 突發類型編碼
ARBURST[1:0] | AWBURST[1:0] | 突發類型 | 訪問類型 |
b00 | b00 | FIXED | 固定地址突發 |
b01 | b01 | INCR | 增量地址突發 |
b10 | b10 | WRAP | 包裝地址突發 |
b11 | b11 | Reserved | 保留 |
突發地址
本節提供了一些簡單的公式,用于確定突發傳輸中的地址和字節道。這些公式使用了以下變量:
- Start_Address:主設備發出的起始地址。
- Number_Bytes:每個數據傳輸的最大字節數。
- Data_Bus_Bytes:數據總線的字節道數。
- Aligned_Address:起始地址的對齊版本。
- Burst_Length:突發內總的數據傳輸數量。
- Address_N:突發內第N個傳輸的地址。N是2到16之間的整數。
- Wrap_Boundary:包裝突發內的最低地址。
- Lower_Byte_Lane:傳輸中的最低地址字節的字節道。
- Upper_Byte_Lane:傳輸中的最高地址字節的字節道。
- INT(x):x的向下取整整數值。
使用這些方程來確定突發內傳輸的地址:
- 起始地址:Start_Address = ADDR
- 每個數據傳輸的字節數:Number_Bytes = 2^SIZE
- 突發長度:Burst_Length = LEN + 1
- 對齊的起始地址:Aligned_Address = INT(Start_Address / Number_Bytes) * Number_Bytes
使用這些方程來確定突發內第一個傳輸的地址:
- 第一個傳輸的地址:Address_1 = Start_Address
使用這些方程來確定突發內第一個傳輸后的任何傳輸的地址:
- Address_N = Aligned_Address + (N – 1) * Number_Bytes
對于包裝突發,使用以下方程來確定包裝邊界:
- Wrap_Boundary = INT(Start_Address / (Number_Bytes * Burst_Length)) * (Number_Bytes * Burst_Length)
如果Address_N等于Wrap_Boundary加上Number_Bytes乘以Burst_Length,則使用以下方程:
- Address_N = Wrap_Boundary
使用這些方程來確定突發內第一個傳輸使用的字節道:
- Lower_Byte_Lane = Start_Address - INT(Start_Address / Data_Bus_Bytes) * Data_Bus_Bytes
- Upper_Byte_Lane = Aligned_Address + (Number_Bytes - 1) * INT(Start_Address / Data_Bus_Bytes) * Data_Bus_Bytes
使用這些方程來確定突發內第一個傳輸后所有傳輸使用的字節道:
- Lower_Byte_Lane = Address_N – INT(Address_N / Data_Bus_Bytes) * Data_Bus_Bytes
- Upper_Byte_Lane = Lower_Byte_Lane + Number_Bytes – 1
數據在以下位置傳輸:
- DATA[(8 * Upper_Byte_Lane) + 7 : (8 * Lower_Byte_Lane)]
升華!?
尋址選項的重要性
????????尋址選項在AXI協議中扮演著至關重要的角色。它們不僅決定了數據如何被傳輸,還影響著系統的性能和效率。通過合理配置尋址選項,可以確保數據傳輸的準確性,并最大化利用系統資源。
突發長度的實際應用
????????突發長度是指在一個突發傳輸中包含的數據傳輸次數。這個參數直接影響到數據傳輸的總量。例如,在內存密集型應用中,較長的突發長度可以減少訪問次數,從而提高效率。
示例說明: 假設一個系統使用32位寬的數據總線,并且ARLEN
設置為b0100
,表示突發長度為4。如果每次數據傳輸是32位,那么整個突發將傳輸128位(16字節)的數據。
突發大小對性能的影響
????????突發大小定義了每次數據傳輸中包含的字節數。這個參數對于確保數據在總線上正確傳輸至關重要。較大的突發大小可以減少傳輸相同數量數據所需的總線周期數。
示例說明: 如果AWSIZE
設置為b110
,表示每次數據傳輸包含64字節。在上述相同的4次傳輸突發中,總共將傳輸256字節的數據,這比b100
(16字節每次)的配置效率更高。
突發類型的選擇
????????突發類型的選擇取決于具體的應用場景和數據訪問模式。固定突發適用于對同一地址的連續訪問,增量突發適用于順序訪問,而包裝突發則適用于需要在特定邊界回繞的場景。
示例說明: 考慮一個需要連續讀取多個緩存行的應用,可以使用包裝突發來優化訪問模式。如果緩存行大小為64字節,并且數據總線寬度為128字節,則可以使用b111
(128字節)的AWSIZE
和b10
(包裝)的AWBURST
來實現高效的數據傳輸。
突發地址的計算方法
????????正確的地址計算對于確保數據被傳輸到正確的位置至關重要。AXI協議提供了一套公式來計算突發內每個傳輸的地址和使用的字節道。
示例說明: 如果一個突發操作的起始地址是0x1000,數據總線寬度為128字節,ARSIZE
為b111
(128字節),突發長度為4次傳輸(ARLEN
為b0100
),那么第一個傳輸的地址是0x1000,第二個是0x1080,第三個是0x1100,第四個是0x1180。
通過這些公式,設計者可以精確控制數據傳輸的地址,從而實現對系統內存的高效訪問。
結論
AXI協議的尋址選項為設計者提供了強大的工具,以實現高效、靈活的數據傳輸。理解并正確應用這些選項,可以顯著提高系統的整體性能。通過上述示例和說明,我們可以看到尋址選項在實際應用中的重要性,以及如何利用它們來滿足不同的設計需求。