當前位置:網站首頁>AXI協議詳解

AXI協議詳解

2022-07-23 05:06:40IC碎碎念

AXI協議詳解

Created: July 11
Tags: ARM

amba_axi_protocol_spec.pdf

AMBA_axi.pdf

AXI基礎簡介

AXI總共分為5個通道,寫地址,寫數據,寫應答,讀地址,讀數據(讀應答在讀數據中體現)

特點:獨立的地址數據通道,通道傳輸為單方向。可同時做數據讀寫。

有三種傳輸模式,地址固定(fixed),地址等量增加(incr),地址等量增加循環(wrap),

每個AXI組件使用一個時鐘信號ACLK,所有輸入信號在ACLK上昇沿采樣,所有輸出信號必須在ACLK上昇沿後發生。

AXI使用一個低電平有效的複比特信號ARESETn,複比特信號是异步複比特,同步釋放

  • 什麼是burst傳輸的意思?

    突發傳輸。連續傳輸

  • FIXED模式下傳輸首地址後就可以不停傳輸數據嗎?

    是的,在配合每次傳輸的byte數,就可以確定下一個傳輸的地址。

  • 突發傳輸不能跨4KB邊界?

    因為AXI4協議規定主機上寄存器塊的最小分塊單元為4K Byte,每個從機的開始映射地址都是4KB的邊界。這也影響了AXI4的一個讀寫規則,那就是一個burst傳輸不能跨越4KB的界限,否則就會引入將數據錯誤寫入其他從機的風險。注意這個4KB的界限指的是MASTER的地址界限,例如一個burst中不能越過0xXXXX_X000的地址比特。FFF=4095,

    就是1024個寄存器,*4byte =4KB。

  • 非對齊傳輸。

    非對其傳輸指當傳輸的目標地址(byte)與寄存器的邊界(word對齊)未對齊時,可以使用非對齊傳輸,例如一個傳輸在0x3地址開始,而不是0x0或者0x4,非對其傳輸只會影響一個burst傳輸中的第一筆數據,可采用WSTRB信號來錶示第一個data中的哪幾個byte是有效的,其餘的數據還是正常的burst傳輸。

  • 複比特期間對接口有如下要求:valid(錶示地址/數據/應答輸出有效信號)驅動到低電平

    ①主機ARVALID,AWVALID,WVALID為低電平;

    ② 從機接口必須驅動RVALID,BVALID為低電平;

    ③ 所有其他信號可以被驅動到任意值。

    在複比特後,主機可以在時鐘上昇沿驅動ARVALID,AWVALID,WVALID為高電平

• 讀取地址,其信號名稱以AR 開頭。

• 讀取信號名稱以 R 開頭的數據。
• 寫入地址,信號名稱以AW 開頭。
• 寫入信號名稱以 W 開頭的數據。
• 寫入響應,其信號名稱以 B 開頭。

Write/Read address signal (功能信號都相似,可放在一起討論)

awid/arid寫地址ID.
awaddr/araddr寫地址,給出一次突發傳輸的寫地址
awready/aready從對主的寫地址做出有效應答,錶示已准備好可接收數據
awvalid/arvalid有效信號,錶示當前傳輸的地址控制信號有效
awsize/arzize該信號指示每次Burst傳輸的byte大小。就是數據比特寬,如011=8byte=32 bit
awlen/arlen一次傳輸任務中的傳輸數據包個數,在INCR傳輸類型下可以傳輸1至256個數據包,在其他傳輸類型下只能傳輸1-16個數據包,特別地,WRAP傳輸類型下只能傳輸2,4,8或16個固定的數據包個數。因此AWLEN與ARLEN的比特寬為8比特,其中LEN=0代錶傳輸一個數據包,
eg: len = ed = 238個數據包,size = 0,就是1byte。則這次總共需要傳輸數據個數為 238 *1byte
awburst/arburst突發類型
awlock/arlock總線鎖信號。AXI3協議中用於鎖定從機,占用總線,AXI4中取消了相關支持,留下一比特信號用作指示傳輸為正常傳輸(1’b0)還是獨有傳輸(1’b1)
awcache/arcache內存類型,錶明一次傳輸是怎樣通過系統的。
awprot/arprot保護類型,錶明一次傳輸的特權等級和安全等級。

AWSIZE/ARSIZE:傳輸數據包大小,比特寬為3比特,(Bytes=2^Burst_size):

AxSIZE傳輸字節數AxSIZEAxSIZE
3’b00013’b10016
3’b00123’b10132
3’b01043’b11064
3’b01183’b111128

AWBURST/ARBURST: 傳輸類型,比特寬為2比特,具體含義如下

AxBURST傳輸類型
2’b00固定(FIXED)
2’b01遞增(INCR)
2’b10回環(WRAP)
2’b11未定義

FIXED傳輸為地址固定傳輸,所有傳輸都會寫在同一個地址中。主要應用在FIFO的傳輸中,因為FIFO為先入先出,只需要往同一個地址寫數據即可。

INCR傳輸為地址遞增傳輸,可根據具體的配置有固定長度遞增和非定長遞增。大部分的數據傳輸都是使用這種方式,尤其是在內存訪問中,可以大大提高效率。

WRAP傳輸為地址環回傳輸,在一定長度後會回環到起始地址。主要應用在Cache操作中,因為cache是按照cache line進行操作,采用wrap傳輸可以方便的實現從內存中取回整個cache line。

AWLOCK/ARLOCK:這個信號在AXI3協議中用於鎖定從機,占用總線,但在AXI4中取消了相關支持,僅留下一比特信號用作指示傳輸為正常傳輸(1’b0)還是獨有傳輸(1’b1)。

AWPROT/ARPROT:指明訪問是否被允許,比特寬為3比特,與slave相關,不同的訪問回產生不同的Respect。

AxPROT功能
AxPROT[0]0/1非優先訪問/優先訪問
AxPROT[1]0/1安全訪問/非安全訪問
AxPROT[2]0/1數據訪問/指令訪問

AWCACHE/ARCACHE:該信號指明了總線中的存儲類型,信號比特寬為4比特

AWQoS/ARQoS:Quality of Service, 比特寬為4比特,手册中並沒有固定該信號的確切用途,但是建議將該信號用於優先級聲明信號,值越高代錶優先級越高。

**AWREGION/ARREGION:**區域標記,比特寬為4比特。4比特的區域標記信號可以標記16個區域。當從機有很多分離的地址空間時,使用這個信號可以僅僅使用一個物理總線就能實現多個邏輯總線的功能。經典的應用是一個外設控制寄存器與數據寄存器分離的時候,使用該信號可以在不對地址解碼的情况下訪問到兩塊地址空間

例如,當一個外設控制寄存器的地址空間為0x0000 - 0x00FF,數據寄存器的地址空間為0x1000 - 0x1FFF,就可以將地址比特設置為12比特(0x000-0xFFF),控制寄存器的區域標記為4’b0000,數據寄存器的區域標記為4’b0001,實際尋址的地址為區域標記+地址比特,其中區域標記比特作為高比特加在地址比特前就可以了,可理解為優先級更高的ID。

Writer/Read data signal

rid一次傳輸的id tag. AXI4取消了對Wid的支持,所以寫通道的寫順序必須與寫地址通道保持一致
wdata/rdata讀寫數據
wuser/ruser用戶自定義信號
wvalid/rvalid有效信號,錶明通道傳輸數據有效
wready/rready錶明從機可以接收寫數據/讀數據和響應信號
wlast/rlast錶示此次傳輸是最後一個突發傳輸
寫事務傳輸的最後一個數據。與最後一個寫數據的WVALID信號同步拉高。只有當WLAST由高變為低,一個傳輸任務才完成。在此之前無法中斷傳輸過程。RLAST信號也類似。
wstrbWSTRB為寫選通信號,指示當前傳輸的有效數據段。有效數據段單比特是8bit,也就是32bit數據比特寬的總線的WSTRB信號會有4比特,WSTRB[3]指示WDATA[31:24]的有效性。
rresp讀響應信號,錶明讀傳輸的狀態

Writer resp signal

BID寫響應ID tag
BRESP寫響應,錶明寫傳輸狀態
BUSER用戶自定義
BVALID寫響應有效
BREADY錶明主機能够接收寫響應

AXI_Write

在這裏插入圖片描述

寫通道分為寫地址,寫數據,寫應答三個通道,三個通道數據互不幹擾,但有一定的先後順序。

下圖單箭頭錶示無先後依賴關系,雙箭頭錶示有先後依賴關系。

在這裏插入圖片描述

  1. 三個通道的vaild和ready信號沒有先後關系,vaild可以先於或晚於或同時與ready信號拉高。
  2. 寫數據通道的數據可以先於寫地址通道數據出現在總線上。
  3. 寫通道的寫順序必須與寫地址通道保持一致
  4. 因為axi通道分離,所以可支持outstanding操作,即不需要等待前一筆傳輸完成就可以發送下一筆操作。master不需要等待前一筆操作A響應完成就可以發送下一筆操作請求B,這樣可以有效提昇通路利用率,提昇系統性能
  5. 傳輸地址和傳輸數據都是在valid和ready信號同時為高時傳輸。

下面來分析一筆axi 寫傳輸操作:
在這裏插入圖片描述

  • T0時刻:mst發出寫地址信號,同時vaild信號拉高。但ready信號並沒有拉高(這時候允許ready信號為高)
  • T1時刻:slv采樣到寫地址和vaild信號,將ready信號拉高,對寫地址通道做一次握手。
  • T2時刻。mst采樣到slv的ready信號為高。握手成功。並驅動寫數據通道傳輸數據。同時vaild拉高。錶示數據有效。開始一次burst傳輸。
  • T3時刻slv開始采樣mst傳輸的數據。只有在valid和ready同時為高的時候采樣數據才有效。
  • T8時刻mst發送最後一筆burst出書的數據,同時WLAST信號拉高,錶示此次Burst發送數據完成
  • T9時刻,mst采樣到所有數據和WLAST信號,並給出resp信號,同時拉高valid信號。READY信號早已拉起
  • T10,slcv采樣到resp並valid ready信號有效,一次burst傳輸完成。

注意項:

  • 寫數據通道的數據信息被認為是緩沖(buffered)了的,“主”無需等待“從”對上次寫傳輸的確認即可發起一次新的寫傳輸。寫通道包括數據總線(8/16…1024bit)和字節線(用於指示8bit 數據信號的有效性)
  • Burst傳輸:多個數據傳輸,一個burst內部可以被打斷的。 Valid信號是源,一個數據傳輸,一旦valid信號為高就不能拉低,直到此次傳輸完成。slave的ready信號可以中斷,但是最終還是要高起來傳完一個burst. 對於master來說,一旦開始傳數,一個burst之間的valid應該是不會低的
  • READY 信號很自由,可以等待 VALID 信號到來再做響應,但也完全可以在 VALID 信號到來前就置高,錶示接收端已經做好准備了。READY 信號與 VALID 不同,接收方可以置起 READY 之後發現:其實我好像還挺忙,然後拉低 READY 信號。只要此時 VALID 信號沒有置起,這種操作是完全可以。
  • 上圖寫時序中,Wdata可以早於Awaddr出現在接口上。寫響應信號必須出現在與其相關聯的寫事務最後
  • 在寫回應BVALID有效前,必須要使得寫地址通道與寫數據通道的握手信號均有效,且寫數據通道的WVALID信號必須為最後一個寫入數據的有效信號。BREADY信號可在BVALID信號前後有效。而寫地址通道與寫數據通道的四個握手信號之間無必須要求的時間前後關系。

AXI_Read

在這裏插入圖片描述

讀架構沒有讀響應信息,讀響應信息指明讀事務的完成。讀取每個數據過後均會進行讀回應。寫傳輸過程中只會在一個Burst完成的時候進行寫回應。寫應答與謝寫數據流相反,讀應答與讀數據流同相。

在這裏插入圖片描述

同寫數據通道一樣。讀地址通道和讀數據通道的valid和ready也沒有先後關系,但是讀地址和讀數據有先後關系(廢話)讀數據操作需要在給出讀地址操作之後才能執行,但讀數據通道與讀地址通道中的握手信號無規定的先後順序。設備必須等待ARVALID和ARREADY信號都有效才能給出RVALID信號,開始數據傳輸。

在這裏插入圖片描述

  • T0時刻:mst讀地址通道給出讀地址並將valid拉高。
  • T1時刻:slv檢測到讀地址和vaild信號,將ready信號拉高。
  • T2時刻:mst采樣到valid和ready信號同時為高,第一筆讀地址通道握手完成。同時mst驅動第二筆讀地址到讀地址通道總線上。
  • T3時刻:slv讀出第一筆讀地址burst傳輸的讀數據驅動到總線,同時拉高RVALID信號,等待mst接收並完成握手。同時slv讀地址通道采樣到第二筆讀地址總線數據,拉高ARREADY信號。等待mst握手。
  • T4時刻:mst采樣到AREADY和ARVALID信號同時為高,第二筆讀地址傳輸完成。等待
  • T8時刻:完成第一次burst讀數據的最後一筆數據,並拉高Rlast信號,錶示第一筆讀Burst完成。

:Q&A

  • AXI3與AXI4之間的區別是什麼?

    1、AXI3只支持多達16拍的burst 。而AXI4支持高達256拍的burst 。

    2、AXI3支持write interleave。AXI4不支持write interleave(去掉了wid)

    3、AXI3支持locked 傳輸,AXI4不支持locked 傳輸

    4、AXI4支持QoS,AXI3不支持QoS。

  • 為什麼沒有單獨的read 響應通道?

    VALID/READY握手機制只允許一個方向的數據流,所以對於讀事務,數據(data和resp)從slave流向master,而對於寫事務,數據從master流向slave,所以就需要單獨的響應通道

  • 為什麼在burst 寫中,不是每拍都有寫響應。但是在burst 讀中,每拍都有一個單獨的讀響應?

    所有的AXI信道只在1個方向傳遞信息 ,所以才需要一個單獨的寫響應通道。在大多數應用中不管slave能不能接受完整的數據這個burst傳輸都會執行完成,slave無需在每一拍都返回ERROR響應

  • 如何終止burst 傳輸?

    不能。AXI不能够提前終止burst傳輸。對於寫事務,master可以完成burst 傳輸,通過WSTRB信號丟弃掉無效數據即可,對於讀事務同樣也可以將讀回的數據丟弃。

  • master 可以在burst 傳輸中間給WLAST嗎?

    不行。只有在burst 傳輸的最後一拍才能拉高WLAST,在burst傳輸的中間拉高WLAST是違反協議的行為。此外,許多slave設計不會使用WLAST信號,而是自己計數,所以master拉高WLAST也不會提前終止burst傳輸。

  • Slave能在burst傳輸完成之前置起rlast麼?

    和上題一樣,slave在burst傳輸的未完成就拉起RLAST是違反協議的行為。master同樣也有可能不依賴RLAST

  • 既然WLAST和RLAST可能不被使用,那為什麼需要支持這兩個信號?

    為了支持所有的master和slave,無論其是否依賴這兩個信號傳輸數據。

  • Exclusive 讀寫事務是什麼?在哪裏使用?

    如果一個內存區域被多個master共享,某個master需要希望確保在沒有其他master更改共享內存的情况下完成讀然後寫的序列,就可以使用Exclusive 傳輸

  • 讀取事務是否有可能在一個周期內完成?

    需要至少1個時鐘周期傳遞地址(從master到slave),然後至少1個時鐘周期傳遞數據(從slave到master)。

  • axi slave是如何支持Exclusive 訪問的?

    假設 AXI Master1(M1)已經啟動了對地址比特置12h100到12h10F的exclusive 讀寫。那麼相應的salve將開始監視由M1給出的這些地址。如果此時該地址被其他master執行寫操作,此時會返回Exclusive error

  • 發送給slave的讀寫地址和讀寫數據是如何關聯的?

    AR總線和AW總線是獨立的,不管讀寫請求的地址是否順序發出的,響應的數據都可能是無序的,他們之間是通過awid和arid對應配對的(axi3)axi4去掉了wid,所以寫通道的寫順序必須與寫地址通道保持一致

版權聲明
本文為[IC碎碎念]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/204/202207221753241084.html

隨機推薦