????????大家好,歡迎來到今天的總線學習時間!如果你對電子設計、特別是FPGA和SoC設計感興趣,那你絕對不能錯過我們今天的主角——AXI4總線。作為ARM公司AMBA總線家族中的佼佼者,AXI4以其高性能和高度可擴展性,成為了現代電子系統中不可或缺的通信橋梁。
? ? ? ? 上課時我們講了AXI的額外的控制信息,本章節繼續講解AXI的 "原子訪問" :獨占訪問(Exclusive Access)和鎖定訪問(Locked Access)。
? ? ? ? 這里會有一系列的課程,和大家分享AMBA總線家族,歡迎大家一起學習,收藏點贊。
??系列文章
【總線】AMBA總線架構的發展歷程-CSDN博客
【總線】設計fpga系統時,為什么要使用總線?-CSDN博客
【總線】AXI總線:FPGA設計中的通信骨干-CSDN博客
【總線】AMBA總線家族的明星成員:AXI協議簡介-CSDN博客
【總線】AXI4第一課時:揭秘AXI4總線的五大獨立通道-CSDN博客
【總線】AXI4第二課時:深入AXI4總線的基礎事務-CSDN博客
【總線】AXI4第三課時:握手機制-CSDN博客
【總線】AXI4第五課時:信號描述-CSDN博客
【總線】AXI4第六課時:尋址選項深入解析-CSDN博客
【總線】AXI4第七課時:AXI的額外的控制信息(PROT和CACHE)-CSDN博客
【總線】AXI4第八課時:介紹AXI的 “原子訪問“ :獨占訪問(Exclusive Access)和鎖定訪問(Locked Access)-CSDN博客
?????????這些機制對于實現復雜的內存操作和確保數據的一致性非常重要。下面我先通過舉例來幫助理解這些概念。
舉例理解
獨占訪問(Exclusive Access)
????????獨占訪問是一種機制,允許一個主設備(如CPU)告訴系統它想要對某個內存位置進行一系列操作,而這些操作不希望被其他設備干擾。這種訪問通常用于實現信號量(semaphore)或鎖(lock)的邏輯。
????????例子:假設有兩個CPU核心,它們都需要修改內存中的同一個變量。如果第一個核心開始讀取這個變量并計劃更新它,它可以使用獨占訪問來確保在它完成更新之前,第二個核心不能訪問這個變量。這樣,第一個核心就可以執行如下操作:
- 發送一個獨占讀取請求到內存。
- 內存響應并記錄這個核心的請求。
- 第一個核心隨后發送一個獨占寫入請求,如果在此期間沒有其他核心訪問過這個地址,內存就會接受這個寫入請求并更新數據。
????????如果第二個核心嘗試訪問這個地址,它會收到一個失敗的響應,因為它不是第一個發出獨占請求的核心。
鎖定訪問(Locked Access)
????????鎖定訪問是一種機制,確保一系列操作在沒有其他干擾的情況下完成。這通常用于需要順序執行多個步驟的場景,例如,當一個核心需要更新多個連續的內存位置時。
????????例子:假設有一個核心需要更新一個結構體中的幾個字段,這些字段位于內存中的連續位置。為了避免在更新過程中其他核心讀取或修改這些字段,核心可以使用鎖定訪問:
- 核心發送一個鎖定讀取請求到內存。
- 內存響應并確保在鎖定序列完成之前,不會接受來自其他核心的訪問請求。
- 核心按順序發送鎖定寫入請求來更新每個字段。
- 一旦所有更新完成,核心發送一個解鎖請求,內存隨后解除鎖定狀態。
????????在這個鎖定序列中,即使其他核心嘗試訪問這些內存位置,它們也會被告知當前這些位置被鎖定,不能進行訪問。
原理
原子訪問
關于原子訪問
為了支持原子訪問原語的實現,ARLOCK[1:0] 或 AWLOCK[1:0] 信號提供了獨占訪問和鎖定訪問。表顯示了ARLOCK[1:0] 和 AWLOCK[1:0] 信號的編碼。
原子訪問編碼
ARLOCK[1:0] | AWLOCK[1:0] | 訪問類型 |
b00 | b00 | 普通訪問 |
b01 | b01 | 獨占訪問 |
b10 | b10 | 鎖定訪問 |
b11 | b11 | 保留 |
獨占訪問
????????獨占訪問機制允許實現信號量類型的操作,而無需要求總線在整個操作期間被特定主設備鎖定。獨占訪問的優點是,信號量類型的操作不會影響關鍵的總線訪問延遲或可達到的最大帶寬。
????????ARLOCK[1:0] 或 AWLOCK[1:0] 信號選擇獨占訪問,RRESP[1:0] 或 BRESP[1:0] 信號指示獨占訪問的成功或失敗。
????????從設備必須有額外的邏輯來支持獨占訪問。AXI協議提供了一個故障安全機制,以指示當一個主設備嘗試對不支持它的從設備進行獨占訪問時。
獨占訪問過程
????????獨占訪問的基本過程如下:
????????主設備對地址位置執行獨占讀取。
????????在某個后續時間點,主設備嘗試通過在同一地址位置執行獨占寫入來完成獨占操作。
????????主設備的獨占寫入訪問被標記為:
????????如果在讀取和寫入訪問之間沒有其他主設備寫入該位置,則為成功。
????????如果在讀取和寫入訪問之間有其他主設備寫入了該位置,則為失敗。在這種情況下,地址位置不會被更新。
????????請注意,主設備可能不會完成獨占操作的寫入部分。獨占訪問監控硬件必須僅監控每個事務ID的一個地址。因此,如果主設備沒有完成獨占操作的寫入部分,隨后的獨占讀取將改變被監控的地址。
主設備視角的獨占訪問
????????主設備通過執行獨占讀取來啟動獨占操作。這通常會從從設備返回EXOKAY響應,表示從設備記錄了要監控的地址。
????????請注意,如果主設備嘗試對不支持獨占訪問的從設備執行獨占讀取,從設備將返回OKAY響應而不是EXOKAY響應。主設備可以將此視為錯誤情況,表示不支持獨占訪問。建議主設備不要執行這部分獨占操作的寫入部分。
????????在獨占讀取之后的一些時間點,主設備嘗試對同一位置執行獨占寫入。如果自獨占讀取以來該位置沒有變化,獨占寫入操作就會成功。從設備返回EXOKAY響應,獨占寫入更新內存位置。
????????如果自獨占讀取以來地址位置已經改變,獨占寫入嘗試將失敗,從設備返回OKAY響應而不是EXOKAY響應。獨占寫入嘗試不會更新內存位置。
????????主設備可能不會完成獨占操作的寫入部分。如果發生這種情況,從設備將繼續監控地址的獨占性,直到另一個獨占讀取啟動新的獨占訪問。
????????主設備在讀取部分完成后,不得開始獨占訪問的寫入部分。
從設備視角的獨占訪問
????????不支持獨占訪問的從設備可以忽略 ARLOCK[1:0] 和 AWLOCK[1:0] 信號。它必須為普通和獨占訪問提供OKAY響應。
????????支持獨占訪問的從設備必須具有監控硬件。建議這樣的從設備為每個可以訪問它的獨占功能主設備ID都有一個監控單元。單端口從設備可以有一個標準獨占訪問監控器在從設備外部,但多端口從設備可能需要內部監控。
????????獨占訪問監控器記錄任何獨占讀取操作的地址和 ARID 值。然后它監控該位置,直到對該位置發生寫入或直到另一個具有相同 ARID 值的獨占讀取將監控器重置為不同的地址。
????????當發生具有給定 AWID 值的獨占寫入時,監控器檢查是否該地址正在被監控獨占性。如果是,那么這意味著自獨占讀取以來該位置沒有發生寫入,獨占寫入繼續進行,完成獨占訪問。從設備返回EXOKAY響應給主設備。
????????如果地址在獨占寫入時不再被監控,這意味著以下之一:
????????自獨占讀取以來,該位置已被更新。
????????監控器已被重置為另一個位置。
????????在這兩種情況下,獨占寫入不得更新地址位置,從設備必須返回OKAY響應而不是EXOKAY響應。
獨占訪問限制
????????以下限制適用于獨占訪問:
????????具有給定ID的獨占寫入的大小和長度必須與具有相同ID的前一個獨占讀取的大小和長度相同。
????????獨占訪問的地址必須與事務中的總字節數對齊。
????????獨占讀取和獨占寫的地址必須相同。
????????獨占訪問的讀取部分的?ARID?字段必須與寫入部分的?AWID?匹配。
????????獨占訪問的讀取和寫入部分的控制信號必須相同。
????????獨占訪問突發中要傳輸的字節數必須是2的冪,即1、2、4、8、16、32、64或128字節。
????????獨占突發中可以傳輸的最大字節數是128。
????????ARCACHE[3:0]?或?AWCACHE[3:0]?信號的值必須保證監控獨占訪問的從設備能看到該事務。例如,被從設備監控的獨占訪問不能有?ARCACHE[3:0]?或?AWCACHE[3:0]?值,表明該事務是可緩存的。
????????未遵守這些限制將導致不可預測的行為。
不支持獨占訪問的從設備
????????響應信號 BRESP[1:0] 和 RRESP[1:0] 包括對成功普通訪問的OKAY響應和對成功獨占訪問的EXOKAY響應。這意味著不支持獨占訪問的從設備可以提供OKAY響應來指示獨占訪問失敗。
????????請注意,對不支持獨占訪問的從設備的獨占寫入總是更新內存位置。
????????對支持獨占訪問的從設備的獨占寫入只有在獨占寫入成功時才更新內存位置。
鎖定訪問
????????當交易的 ARLOCK[1:0] 或 AWLOCK[1:0] 信號顯示它是鎖定傳輸時,互連體必須確保只有在來自同一主設備的解鎖傳輸完成之前,才允許該主設備訪問從設備區域。互連體中的仲裁器用于執行此限制。
????????當主設備開始一系列鎖定的讀寫交易時,它必須確保沒有其他未完成的交易在等待完成。
????????任何將 ARLOCK[1:0] 或 AWLOCK[1:0] 設置為表示鎖定序列的交易都會強制互連體鎖定以下交易。因此,鎖定序列必須始終以沒有將 ARLOCK[1:0] 或 AWLOCK[1:0] 設置為表示鎖定訪問的最終交易結束。這個最終交易被包括在鎖定序列中,并有效地移除了鎖定。
????????在完成鎖定序列時,主設備必須確保所有先前的鎖定交易都已完成,然后再發出最終的解鎖交易。然后,它必須確保最終解鎖交易已完全完成,才能開始任何進一步的交易。
????????主設備必須確保鎖定序列中的所有交易都有相同的 ARID 或 AWID 值。
????????請注意,鎖定訪問要求互連體在鎖定序列進行時防止任何其他交易發生,因此可能會影響互連體性能。建議僅使用鎖定訪問來支持舊設備。
????????推薦但不是強制性的限制包括:
????????將所有鎖定交易序列保持在相同的4KB地址區域。
????????將鎖定交易序列限制為兩次交易。
為什么這些機制重要?
- 數據一致性:在多核心系統中,獨占訪問和鎖定訪問確保了數據操作的原子性,防止了數據不一致的問題。
- 性能優化:通過減少對共享資源的爭用,這些機制可以幫助提高系統的整體性能。
- 復雜操作支持:它們允許實現復雜的同步機制,這對于構建可靠的并發系統至關重要。
????????理解這些概念對于設計和理解現代多核心處理器中的內存一致性和同步機制非常重要。