AXI3和AXI4协议详细说明
本文基于ARM官方文檔《AMBA AXI and ACE Protocol Specification》
因為AXI3和AXI4協議大部分相同,小部分不同,在官方文檔中也是一起介紹的,所以本文將一起說明AXI3和AXI4,在兩個協議不同的地方,會突出顯示。
AMBA AXI 協議支持高性能高頻率系統間主從元件間的通訊。AXI協議特征如下:
- 適合高帶寬、低時延設計
- 無用復雜即可提供高頻操作<
- 可滿足多種組件的接口要求
- 適用于初始訪問時延較高的內存控制器
- 提供了實施互連架構的靈活性
- 向后兼容AHB和APB接口
AXI協議的主要特征如下:
- 地址/控制階段 與 數據階段分離
- 使用字節選通脈沖支持未對齊的數據傳輸
- 使用基于突發的事務,僅發布起始地址
- 獨立的讀寫數據通道,可提供低成本的直接存儲器訪問(DMA)
- 支持發布多個未完成的地址
- 支持無序事務完成
- 允許輕松添加寄存器級,以提供定時關閉
一. AXI架構
AXI有五個獨立的通道:
寫/讀地址通道包含控制信息。
寫操作過程:
讀操作過程:
二. 各通道信號
2.1 全局信號
| ACLK | 時鐘源 | 全局時鐘信號,所有輸入信號均在ACLK上升沿采樣,所有輸出信號的更改只能在ACLK上升沿之后。主從接口上的所有輸入和輸出信號間不允許有組合路徑 |
| ARESETn | 復位源 | 全局復位信號,為異步復位同步置位信號,即ARESETn在任意時刻變為低電平可立刻生效,但置位為1時只能在ACLK的下一個上升沿生效 |
協議規定,在ARESETn低電平有效時
ARESETn置位為1后,VALID最快能在ARESETn置位后的下一個ACLK時鐘上升沿置高,如下圖:
2.2 寫地址通道信號
| AWID | 主 | 可選 | 可變,協議未定義位寬, Xilinx使用0, 1, 2, … 32,一般為4 | 全0 | 寫地址識別ID |
| AWADDR | 主 | 必需 | 可變,協議未定義位寬, Xilinx使用12, 13, … 64,一般為32/64 | - | 要寫入數據的內存地址 |
| AWLEN | 主 | 可選 | 8(AXI4是8位) 4(AXI3是4位) | 8’h00 4’h0 | 數據是按份傳輸的,此信號表示接下來要寫入的數據份數即數據量, 實際傳輸數據量 = AWLEN + 1 |
| AWSIZE | 主 | 可選 | 3 | 數據總線寬度 | 表示每份數據占幾個字節,如3‘b000對應1字節,3’b001對應2字節,… ,3‘b111對應2^7=128字節 n對應2^n直接 |
| AWBURST | 主 | 可選 | 2 | 2‘b01, INCR | 突發類型,指示在寫事務中每次傳輸之間地址如何變化 |
| AWLOCK | 主 | 可選 | 1(AXI4是1位) 2(AXI3是2位) | 1’b0 2’b00 | 0表示Normal access, 定義主機訪問叢機的是否是獨占的 |
| AWCACHE | 主 | 可選 | 4 | 4’b0000 | 指示不同的內存類型 |
| AWPROT | 主 | 必須 | 3 | 3’b000 | 寫事務的保護屬性:特權,安全級別和訪問類型 提供用于禁止非法傳輸事務的訪問權限信號 |
| AWQOS | 主 | 可選 | 4 | 4’b0000 | 服務質量標識符,在AXI3中未實現 AXI4中未指定AxQOS的確切用途,但建議用做讀/寫優先級指示符,QOS值越大優先級越高 |
| AWREGION | 主 | 可選 | 4 | 4’b0000 | 寫入事務的區域指示器,在AXI3中未實現 |
| AWUSER | 主 | 可選 | 可變,協議未定義位寬,xilinx使用0, 1, 2, … 1024 | 全0 | AXI4一般不建議使用用戶字段 在AXI3中未實現 |
| AWVALID | 主 | 必須 | 1 | - | valid |
| AWREADY | 從 | 必須 | 1 | - | ready |
2.2.1 xID
xID包括AWID、WID(僅在AXI3中實現)、BID、ARID、RID。
當AXI Master連接到AXI Interconnect IP或是AXI SmartConnect IP時,Connect IP會將一個附加位加到該主機側的ARID,AWID和WID上。這有兩個效果:
-
主機不必知道其他主機使用哪些ID值,因為Connect IP通過將主機號附加到原始標識符上,使每個主機使用的ID值唯一
-
從接口上的ID標識符比主接口上的ID標識符寬
對于寫響應,Connect IP使用BID的附加位來確定寫響應所針對的主端口。在將BID值傳遞到正確的主端口之前,互連模塊會刪除BID的附加位。
對于讀取數據,Connect IP使用RID的附加位來確定讀取數據的目標主機端口。在將RID值傳遞到正確的主端口之前,互連模塊會刪除RID的附加位。
所以,當Master連接了Connect IP后(幾乎是必連的,主從AXI接口間都必須加Connect IP),Master不需要關心其它Master的ID值,即使多個使用相同ID值的Master通過Connect IP連到Slave也不會造成錯亂,因為Connect IP會使用附加位來唯一標識每個Master的ID。
2.2.2 AxBURST
| 2’b00 | FIXED | 在固定突發中, 1. 每次傳輸的地址都相同。 2. 有每份數據的有效字節通道是固定的,但與已聲明WSTRB的實際字節可能不同。 此突發類型用于重復訪問同一位置,例如在加載或清空FIFO時。 |
| 2‘b01 | INCR | 遞增。在遞增突發中,突發中每次傳輸的地址都是前一次傳輸的地址的增量。增量值取決于傳輸的大小。例如,對于對齊的起始地址,突發大小為4字節的每次傳輸的地址為前一個地址加4。此突發類型用于訪問常規順序存儲器 |
| 2’b10 | WRAP | 包裝,包裝突發與增量突發類似,不同之處在于,如果達到地址上限,地址會繞到一個較低的地址。 以下限制適用于包裝突發: ? 起始地址必須與每次傳輸的大小對齊。 ? 突發長度必須為2、4、8或16,即AWLEN必須為1、3、7或者15 |
| 2’b11 | 保留 | - |
2.2.3 AxSIZE
AWSIZE不能超過整數據傳輸路徑中任意一條總線的寬度。如果AWSIZE對應的數據寬度比AXI數據總線寬度小,則稱這樣的傳輸是窄傳輸,顯然,窄傳輸需要約定數據總線的哪些位是有效數據位。
當主機產生比其數據總線窄的傳輸時,AWBURST的值將確定傳輸使用的字節通道:
- 在增加或包裝突發時,在突發傳輸中每份數據使用不同的字節通道。
- 在固定的脈沖串中,每份數據使用相同的字節通道。
下圖展示了窄傳輸中8位數據在32位總線中INCR傳輸的過程,可以看到實際數據的位序和在數據總線中所處的位序始終是一樣的,即字節不變序。8位為1字節,低字節在總線的低位,高字節在總線的高位。
2.2.4 AxLOCK
| 1‘b0 | Normal access 正常訪問 |
| 1’b1 | Exclusive access 獨占訪問 |
AXI3定義的AxLOCK[1:0],比AXI4定義的多了一個Locked access鎖定訪問, 如下表。AXI3只推薦用于舊設備之中。
| 2‘b00 | Normal access 正常訪問 |
| 2’b01 | Exclusive access 獨占訪問 |
| 2’b10 | Locked access 鎖定訪問 |
| 2’b11 | 保留 |
2.2.5 AxCACHE
AxCAHCE表明訪問的內存類型,AXI3與AXI4不同的編碼不同,括號()內是AXI3編碼。
2.2.6 AxPORT
AxPORT共3位,每一位的值代表不同的意義。一般可設置為3‘b000,表示非特權且安全的數據訪問。
| [0] | 0 | Unprivileged access 非特權訪問 | AXI主站可能支持多個級別的操作特權,并將這種特權概念擴展到內存訪問。 AxPROT [0]將訪問標識為非特權或特權 |
| [0] | 1 | Privileged access 特權訪問 | - |
| [1] | 0 | Secure access 安全訪問 | AXI主站可能支持安全和非安全操作狀態,并將這種安全性概念擴展到內存訪問。 AxPROT [1]將訪問標識為安全或不安全。 AxPROT [1]可以視為定義了兩個地址空間,一個安全地址空間和一個非安全地址空間。該信號可被視為附加地址位。安全和非安全地址空間之間的任何別名都必須正確處理。 |
| [1] | 1 | Non-secure access 非安全訪問 | - |
| [2] | 0 | Data access 數據訪問 | 該位指示事務是指令訪問還是數據訪問。 AXI協議將此指示定義為提示。并非在所有情況下都是準確的,例如,當事務包含指令和數據項的混合時。本規范建議主機將AxPROT [2]設置為LOW,以指示數據訪問,除非已知該訪問是指令訪問。 |
| [2] | 1 | Instruction access 指令訪問 | - |
2.3 寫數據通道信號
| WID | 主 | 可選 | 可變,協議未定義位寬 | - | 寫數據識別ID, 僅在AXI3中實現, 通過AWID,WID與BID一致來對應地址和數據,故AXI3可支持亂序傳輸,而AXI4去除了WID信號,故AXI4只能順序傳輸,數據緊跟地址,或者地址緊跟數據。 |
| WDATA | 主 | 必需 | 與AWSIZE指定的數據位寬保持一致 = 2^AWSIZE * 8 | - | 要寫入的數據 |
| WSTRB | 主 | 可選 | 數據總線位寬 / 8 = 2^AWSIZE | 全0 | 寫選通,指示哪些字節通道保存有效數據 WSTRB為高表示數據總線的哪一/幾字節是有效數據, 具體的WSTRB [n]為高對應于WDATA [(8n+7:8n]這一字節的數據有效 |
| WLAST | 主 | 必需 | 1 | - | 指示寫事務中的最后一次數據傳輸 WLAST置1表明此時刻的數據是最后一份數據 |
| WUSER | 主 | 可選 | 可變,協議未定義位寬,xilinx使用0, 1, 2, … 1024 | - | 一般不建議使用用戶字段 在AXI3中未實現 |
| WVALID | 主 | 必需 | 1 | - | valid |
| WREADY | 從 | 必需 | 1 | - | ready |
2.4 寫響應通道信號
| BID | 主 | 可選 | 可變,協議未定義位寬 | - | 寫響應ID,與AWID保持一致 |
| BRESP | 從 | 可選 | 2 | 2‘b00 | 寫響應,指示寫事務狀態 |
| BUSER | 主 | 可選 | 可變,協議未定義位寬,xilinx使用0, 1, 2, … 1024 | 全0 | 一般不建議使用用戶字段 在AXI3中未實現 |
| BVALID | 主 | 必需 | 1 | - | valid |
| BREADY | 從 | 必需 | 1 | - | ready |
2.4.1 BRESP 與 RRESP
寫響應和讀響應功能是一樣的,都是指示寫/讀交易是否成功,
| 2’b00 | OKAY | 下面三種情況,叢機將回應OKAY: 1. 正常訪問成功 2. 獨占訪問失敗 3. AxLOCK為1表明獨占訪問,但叢機不支持獨占訪問 |
| 2’b01 | EXOKAY | 獨占訪問成功 |
| 2’b10 | SLVERR | 叢機反映錯誤,協議建議此信號只用于出現錯誤的情況而不用于正常情況 例如以下情況: 1. FIFO或緩存區溢出 2. 不支持的AxSIZE,數據位寬大于總線位寬 3. 對只讀區域發出寫請求 4. 叢機響應超時 5. 嘗試訪問被禁用的或低功耗模式下的功能 |
| 2’b11 | DECERR | DECERR指示互連模塊無法成功解碼從屬訪問。 如果互連無法成功解碼從屬訪問,則它必須返回DECERR響應。規范建議互連將訪問路由到默認從站,并且默認從站返回DECERR響應。 即使發生了錯誤情況,AXI協議也要求完成事務的所有數據傳輸。任何提供DECERR響應的組件都必須滿足此要求。 |
注意:AXI協議要求無論是否出現錯誤,主從機都必須把一次寫/讀交易走完。對于寫交易,是在最后數據全部傳輸完成后才通過寫應答知道傳輸是否有錯誤,所以無論錯誤與否,寫交易總是能走完;而對于讀交易,讀應答位于每份讀數據的后面,所以可能第一份數據傳到主機,主機就知道交易錯誤了,但是下面的數據主機要繼續讀完,叢機也要繼續發完。
2.5 讀地址通道信號
| ARID | 主 | 可選 | 可變,協議未定義位寬, Xilinx使用0, 1, 2, … 32,一般為4 | 全0 | 寫地址識別ID |
| ARADDR | 主 | 必需 | 可變,協議未定義位寬, Xilinx使用12, 13, … 64,一般為32/64 | - | 讀數據地址,同AWADDR |
| ARLEN | 主 | 可選 | 8(AXI4是8位) 4(AXI3是4位) | 8’h00 4‘h0 | 實際傳輸數據量 = ARLEN + 1,同AWLEN |
| ARSIZE | 主 | 可選 | 3 | 數據總線寬度 | 表示每份數據占幾個字節,同AWSIZE |
| ARBURST | 主 | 可選 | 2 | 2‘b01, INCR | 突發類型,指示在寫事務中每次傳輸之間地址如何變化, 同AWBURST |
| ARLOCK | 主 | 可選 | 1(AXI4是1位) 2(AXI3是2位) | 1’b0, 2’b00 | 見 2.2.4 AxLock |
| ARCACHE | 主 | 可選 | 4 | 4’b0000 | 指示不同的內存類型,同AWCHACE |
| ARPROT | 主 | 必須 | 3 | - | 寫事務的保護屬性:特權,安全級別和訪問類型 提供用于禁止非法傳輸事務的訪問權限信號,同AWPROT |
| ARQOS | 主 | 可選 | 4 | 4’b0000 | 服務質量標識符,AXI4中未指定AxQOS的確切用途,但建議用做讀/寫優先級指示符,QOS值越大優先級越高,同AWQOS 在AXI3中未實現 |
| ARREGION | 主 | 可選 | 4 | 4’b0000 | 寫入事務的區域指示器,同AWREGION 在AXI3中未實現 |
| ARUSER | 主 | 可選 | 可變,協議未定義位寬,xilinx使用0, 1, 2, … 1024 | 全0 | 一般不建議使用用戶字段,同AWUSER 在AXI3中未實現 |
| ARVALID | 主 | 必須 | 1 | - | valid |
| ARREADY | 叢 | 必須 | 1 | - | ready |
2.6 讀數據通道信號
| RID | 從 | 可選 | 可變,協議未定義位寬 | - | 寫數據識別ID, 與ARID保持一致用來對應地址和數據 |
| RDATA | 從 | 必需 | 可變,協議未定義位寬, Xilinx使用12, 13, … 64,一般為32/64 | - | 讀數據 |
| RRESP | 從 | 可選 | 2 | 2’b00 | 讀響應,指示讀事務狀態,同BRESP |
| RLAST | 從 | 必需 | 1 | - | 指示讀事務中的最后一次數據傳輸 RLAST置1表明此時刻的數據是最后一份數據,同WLAST |
| RUSER | 從 | 可選 | 可變,協議未定義位寬,xilinx使用0, 1, 2, … 1024 | 全0 | 一般不建議使用用戶字段 在AXI3中未實現 |
| RVALID | 從 | 必需 | 1 | - | valid |
| RREADY | 主 | 必需 | 1 | - | ready |
三. AXI協議其它關鍵點
3.1 通道間的時序關系
AXI協議規定各通道間需要保證以下三種關系:
- 寫回復必須在最后一個寫數據完成后
- 讀數據必須在接收到讀地址信號后產生
- 通道間的握手需要滿足通道間的依存關系
除了這三種聯系外,協議未定義通道間的任何其它關系。這意味著寫數據可在寫地址之前位于數據總線上,或者寫數據與寫地址也可出現在相同的周期中,等等這些情況都是合乎協議的。
前兩種聯系很好理解,接下來我們討論第三種情況:通道間的握手信號依賴。
3.2 VALID與READY的握手機制
AXI協議的五個通道都通過VALID和READY進行握手。VALID由數據發送端驅動,VALID置1表示發送數據有效,接收端可以接收了;READY由數據接收端驅動,READY置1表示接收端已準備好接收數據。數據總在VALID與READY同時為高的時鐘信號的上升沿完成傳輸,同時為高持續一個時鐘周期,數據就傳輸一次。
為避免出現死鎖的情況,VALID與READY需要滿足以下條件:
- 發送信息的AXI接口的VALID信號不得依賴于接收該信息的AXI接口的READY信號。
- 接收信息的AXI接口應該可以等待,直到檢測到VALID信號后再聲明其對應的READY信號。當然接收端也可以不等待VALID有效,而根據自身情況置高READY。
可見,READY信號的置高是靈活的,可以在檢測到VALID有效后再置高,也可以在自身準備好接收信息后置高而不依賴于VALID信號。即READY允許依賴VALID。VALID則不允許依賴READY。
握手信號之間的先后順序:
-
在讀交易時,RVALID必須在ARVALID與ARREADY有效后才置高,也就是說必須在讀地址確定后,才能發送要讀的數據。
-
在寫交易中,BVALID必須在AWVALID與AWREADY,WVALID與WREADY都有效后才置高,也就是說必須在寫地址和寫數據都確定后,才能發送寫響應。
總結
以上是生活随笔為你收集整理的AXI3和AXI4协议详细说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AXI4总线协议的发展历史
- 下一篇: AXI4-Lite协议详解