一、AXI簡介
AXI——Advanced eXtensible Interface,直譯過來就是先進(jìn)的可擴(kuò)展接口,是由ARM公司提出的,是一種高性能、高帶寬、低延遲的片內(nèi)總線。FPGA工程師會發(fā)現(xiàn)其大量運(yùn)用于FPGA設(shè)計中,Vivado中的接口類IP全部都配有AXI接口,可見其重要性。AXI包括AXI、AXI-Lite(輕量級、簡化級)和AXI-Stream(Xilinx特有的高速數(shù)據(jù)流傳輸模式),其官方標(biāo)準(zhǔn)文檔我已經(jīng)上傳,下載鏈接在這里,官方標(biāo)準(zhǔn)文檔不建議從頭看到尾,只需必要時查詢使用。
AXI是多Master和多Slave的拓?fù)浣Y(jié)構(gòu),如下圖所示:
圖1 AXI的拓?fù)浣Y(jié)構(gòu)
中間的Interconnect是指的AXI交換設(shè)備。上圖需要特別注意的是,我們在設(shè)計過程中,有時同一個設(shè)備既可以作為Master,也可以作為Slave。
二、AXI總線的信號描述
AXI總線使用基于VALID/READY握手機(jī)制的數(shù)據(jù)傳輸協(xié)議,這是什么意思呢?就是無論是Master端,還是Slave端,要傳輸任何內(nèi)容必須要確認(rèn)對方給出了READY有效(不一定有效之后才傳輸,但是一定要等到有效,后面會有解釋),且無論傳輸給對方的是數(shù)據(jù)還是地址,是控制信號還是狀態(tài)信號,都要在VALID有效時進(jìn)行傳輸。
1、AXI總線的通道和信號(AXI和AXI-Lite)
AXI總線一共分為6大通道,對于AXI和AXI-Lite,一般傳輸?shù)男盘柧€如下列出,對于AXI-Stream,后面單獨(dú)討論,對于猝發(fā)傳輸,會多幾根信號線,也放在后面單獨(dú)討論。
(1)讀地址通道,包含ARVALID, ARADDR, ARREADY信號。
(2)讀數(shù)據(jù)通道,包含RVALID, RDATA, RREADY, RRESP信號。
(3)寫地址通道,包含AWVALID,AWADDR, AWREADY信號。
(4)寫數(shù)據(jù)通道,包含WVALID, WDATA,WSTRB, WREADY信號。
(5)寫應(yīng)答通道,包含BVALID, BRESP, BREADY信號。
(6)系統(tǒng)通道,包含ACLK,ARESETN信號。
可以看出,除了系統(tǒng)通道之外,每個通道都有VALID和READY。對于每個通道的信號名稱,可以得到這樣的一個規(guī)律:在前面加上一個字母R,表示讀通道,加上一個字母W,表示寫通道,加上一個字母B,表示應(yīng)答通道(因為是VALID/READY機(jī)制,所以應(yīng)答通道必然是寫應(yīng)答,表示寫操作成功了,為什么沒有讀應(yīng)答?讀者請自己思考。),對于讀通道和寫通道,再在前面加上一個字母A表示地址通道,如果不加就是數(shù)據(jù)通道。根據(jù)這樣的命名規(guī)律,大部分的信號線的意思就十分明白了,只有下面兩種信號線需要說明。
RESP——表示Slave發(fā)出響應(yīng)(response),其中BRESP是從設(shè)備發(fā)出的寫響應(yīng),表示寫操作的狀態(tài),RRESP是從設(shè)備發(fā)出的讀響應(yīng),表示讀操作的狀態(tài),這兩個信號都是2位的,從00-11分別表示OKAY,EXOKAY,SLVERR,DECERR,一般情況下都是00,表示OKAY,就是說訪問成功。EXOKAY是單獨(dú)訪問(exclusive)成功的意思,單獨(dú)訪問是AXI總線的一種訪問模式,只允許一個Master對一個Slave進(jìn)行訪問。SLVERR表示訪問錯誤,這時Master的地址和命令是已經(jīng)給到了Slave了,但是Slave返回一個錯誤信息給Master。DECERR表示解碼(decode)錯誤,其實是地址解碼錯誤的意思,Master發(fā)出的訪問地址如果不能被識別,則會由中間的交換設(shè)備Interconnect返回DECERR給Master。
WSTRB——寫數(shù)據(jù)段有效,其每一位對應(yīng)WDATA中的8位(1字節(jié)),用于標(biāo)識對應(yīng)字節(jié)是否有效,WSTRB的第0位為1表示W(wǎng)DATA的低8位有效,第1位為1表示W(wǎng)DATA的次低8位有效,以此類推。
AXI總線的R/WDATA的位寬可以選擇32、64、128和256,一般32和64就滿足于大部分設(shè)計了。當(dāng)然,對于不同的數(shù)據(jù)位寬n,WSTRB的位寬是n/8。
2、AXI-Stream的信號和波形
可以不管這個小節(jié)直接跳到第三節(jié)。AXI4-Stream去掉了地址項,在這種模式下,其實就是簡單的從Master發(fā)送數(shù)據(jù)到Slave,中間不經(jīng)過交換設(shè)備,我認(rèn)為就相當(dāng)于一般的帶著有效使能信號的大量數(shù)據(jù)傳輸,和AXI的理念相去甚遠(yuǎn)。除時鐘和復(fù)位外,信號的命名規(guī)則以T開頭,如下所示。
(1)TREADY信號:Slave告訴Master做好傳輸準(zhǔn)備。
(2)TDATA信號:傳輸數(shù)據(jù),可選寬度32、64、128、256bit。
(3)TSTRB信號:每一bit對應(yīng)TDATA的一個有效字節(jié),寬度為TDATA/8。
(4)TLAST信號:Master告訴Slave傳輸數(shù)據(jù)的結(jié)尾。
(5)TVALID信號:Master輸出的傳輸有效使能。
(6)TUSER信號 :用戶定義信號,寬度為128bit,一般用來給傳輸計數(shù)。
傳輸波形如下圖所示,我個人認(rèn)為就像使用FIFO存取數(shù)據(jù)的那種波形,AXI-Stream的傳輸波形比AXI和AXI-Lite都簡單,后面不再討論這個模式。
圖2 AXI-Stream傳輸波形
三、AXI總線的數(shù)據(jù)傳輸過程
一般情況下,AXI-Lite用于配置寄存器和低速數(shù)據(jù)傳輸,AXI用于大量數(shù)據(jù)高速傳輸,所以AXI-Lite一般不支持猝發(fā)傳輸(也叫突發(fā)式傳輸,burst傳輸,即一次命令傳輸大量數(shù)據(jù)),所以下面分為猝發(fā)和非猝發(fā)來討論。
1、非猝發(fā)傳輸
讀操作握手過程如下圖所示:
圖3 AXI讀操作握手過程
圖3是一個比較好理解的圖,但是實際的FPGA仿真波形中不是按這個圖的上下順序給出的信號,下面給出實際仿真的波形。
圖4 AXI讀操作實際波形
從上圖可以看出在FPGA內(nèi)部,過程是這樣子的:
1、主設(shè)備有效ARVALID,這個時候必須保證ARADDR已經(jīng)有效,表示主設(shè)備已經(jīng)準(zhǔn)備好地址,等待從設(shè)備響應(yīng)。
2、從設(shè)備有效ARREADY,表示從設(shè)備已將接收地址和相關(guān)的控制信號鎖存,告訴主設(shè)備不需要再維持這個讀地址了,之后主設(shè)備可以把ARVALID拉低。
3、從設(shè)備有效RVALID,表示讀數(shù)據(jù)可用,這個時候必須保證讀數(shù)據(jù)RDATA已經(jīng)有效,主設(shè)備監(jiān)控該信號有效就可以讀取數(shù)據(jù)了。
4、這時由于RRESP為0也表示讀取數(shù)據(jù)正確,主設(shè)備則有效RREADY,表示主設(shè)備讀操作完成,從設(shè)備這時可以拉低RVALID了。
為什么握手過程圖和實際仿真波形會有差異?這時需要查閱標(biāo)準(zhǔn)文檔,在標(biāo)準(zhǔn)文檔中第三章有一個信號依賴關(guān)系圖可以說明這個問題。
圖5 AXI讀操作信號依賴關(guān)系
上圖中一個箭頭表示弱依賴關(guān)系,兩個箭頭表示強(qiáng)依賴關(guān)系。
從設(shè)備可以在ARVALID有效之后再給出ARREADY,也可以先給出ARREADY,再等待ARVALID有效。
從設(shè)備必須等待ARVALID和ARREADY都有效才能給出RVALID,并且同時開始給出數(shù)據(jù)傳輸。
主設(shè)備可以在RVALID有效之后再給出RREADY,也可以先給出RREADY,再等待RVALID有效。
寫操作握手過程如下圖所示:
圖6 AXI寫操作握手過程
同樣的,實際的寫操作的波形和這個過程圖是有差異的。
圖7 AXI寫操作實際波形
這個過程的描述如下:
1、主設(shè)備有效AWVALID和WVALID,這個時候主設(shè)備的AWADDR和WDATA必須確保也已經(jīng)有效,這兩個信號不一定同時有效,但我根據(jù)經(jīng)驗發(fā)現(xiàn)一般情況下都表現(xiàn)為同時有效。表示主設(shè)備已經(jīng)把地址和數(shù)據(jù)準(zhǔn)備好了,等待從設(shè)備的AWREADY和WREADY。
2、從設(shè)備有效AWREADY和WREADY,這兩個信號不一定同時有效。表示從設(shè)備已經(jīng)準(zhǔn)備好接收地址和數(shù)據(jù),同時告訴主設(shè)備可以拉低AWVALID和WVALID了。
3、從設(shè)備有效BVALID,表示從設(shè)備已經(jīng)完成了在指定地址接收數(shù)據(jù)的操作。這個信號雖然大多數(shù)情況下會先于BREADY拉高,但是允許其在BREADY之后拉高,也就是說BVALID和BREADY嚴(yán)格意義上講并沒有先后順序,誰先完成誰先有效,并且拉高時和拉高之后就監(jiān)控對方是否已經(jīng)也拉高了,如果對方拉高,則己方在下一個時鐘節(jié)拍拉低。
4、主設(shè)備有效BREADY,表示主設(shè)備已經(jīng)完成了其余工作,此時可以接收來自從設(shè)備的BVALID,由于大多數(shù)情況下BVALID已經(jīng)拉高,此時主設(shè)備拉高這個信號也是為了告訴從設(shè)備可以拉低BVALID了。
和讀操作類似,寫操作的信號依賴關(guān)系圖如下。
圖8 AXI寫操作信號依賴關(guān)系
主設(shè)備不一定得等待AWREADY或WREADY有效后再給出AWVALID或WVLAID。
從設(shè)備可以等待AWVALID或WVALID有效或者兩個都有效之后再給出AWREADY,也可以不用等待這兩個信號有效就給出AWREADY。
從設(shè)備可以等待AWVALID或WVALID有效或者兩個都有效之后再給出WREADY,也可以不用等待這兩個信號有效就給出WREADY。
從設(shè)備必須等待WVALID和WREADY都有效之后,才能給出BVALID,這里需要注意的是對于猝發(fā)傳輸,從設(shè)備除了要等待前面兩個信號有效之外還要等待WLAST有效之后才能給出BVALID。
主設(shè)備可以等待BVALID有效之后再給出BREADY,也可以不用等待BVALID有效直接給出BREADY。
信號依賴關(guān)系是不是有點暈,其實不用記這么多,在使用過程中看實際波形就可以了。
2、猝發(fā)傳輸(Burst傳輸)
AXI總線的最大特點就是其猝發(fā)傳輸(一次命令多個數(shù)據(jù)的傳輸形式),猝發(fā)傳輸時比上面的情況多了幾根信號線,猝發(fā)傳輸?shù)钠鹗嫉刂纷詈靡?KB對齊。猝發(fā)傳輸?shù)倪^程以事務(wù)為單位,分為讀命令事務(wù)、寫命令事務(wù)、讀數(shù)據(jù)事務(wù)、寫數(shù)據(jù)事務(wù)、寫應(yīng)答事務(wù),分別對應(yīng)上面的5個通道。以下是我個人的理解:AXI總線的這種將總線操作分解為事務(wù)的特點和PCI、PCIE相類似,分解成事務(wù)之后,所謂的"總線"這個概念其實就是某種“協(xié)議”,所謂的總線的管理過程就是事務(wù)的轉(zhuǎn)發(fā)過程,其實沒有什么看得見摸得著的“總線”,本質(zhì)就是滿足特定協(xié)議的一堆接口以及中間的交換設(shè)備,這是所有高速總線的一大特點。下面兩圖大概說明了猝發(fā)傳輸?shù)倪^程。
圖9 AXI讀猝發(fā)
圖10 AXI寫猝發(fā)
從上面兩圖,套用事務(wù)的概念,可以看出,對于讀操作的過程,事務(wù)的順序就是讀命令事務(wù)—>讀數(shù)據(jù)事務(wù),對于寫操作的過程,事務(wù)的順序就是寫命令事務(wù)—>寫數(shù)據(jù)事務(wù)—>寫應(yīng)答事務(wù)。
除了第二節(jié)中的6個通道包含的信號線以外的AXI信號線如下。
讀/寫地址通道:
猝發(fā)傳輸相關(guān)的信號線:
ARLEN/AWLEN:猝發(fā)傳輸?shù)拈L度。此長度決定本次猝發(fā)傳輸?shù)臄?shù)據(jù)的個數(shù),每個數(shù)據(jù)的大小以下面的SIZE決定,為0表示傳輸1個數(shù)據(jù),為1表示傳輸2個數(shù)據(jù),以此類推。
ARSIZE/AWSIZE:猝發(fā)傳輸?shù)拇笮?,?表示取低8位,即數(shù)據(jù)大小為1byte,為1表示取低16位,即數(shù)據(jù)大小為2byte,以此類推,這個數(shù)值不能超過總線位寬所決定的最大byte數(shù)。
ARBURST/AWBURST:猝發(fā)傳輸?shù)念愋停ㄗ?)。
其他不常用的信號線:
ARLOCK/AWLOCK:鎖類型。原子操作相關(guān)(注2),初學(xué)者不用考慮,一般為0。
ARCACHE/AWCACHE:用于描述存儲類型。AXI總線支持訪問多種類型的存儲設(shè)備,一般不用考慮,由IP核自動填寫,存儲器類型見圖11。
ARPROT/AWPROT:保護(hù)類型,指明訪問優(yōu)先級、是否采用安全訪問等信息,初學(xué)者不用考慮,一般為0。
讀/寫數(shù)據(jù)通道:
RLAST/WLAST:指示猝發(fā)傳輸?shù)淖詈笠粋€數(shù)據(jù),不一定是一個節(jié)拍,但是一定是在本次需要傳輸?shù)淖詈笠粋€數(shù)據(jù)有效時才有效,如果其從有效變到無效,說明本次傳輸已經(jīng)完成。
讀/寫/地址/數(shù)據(jù)/應(yīng)答通道的ID信號線:
ARID/AWID:地址ID,交換設(shè)備轉(zhuǎn)發(fā)事務(wù)的標(biāo)記。
WID/RID/BID:與前面的ARID/AWID保持一致。
圖11 AXI存儲類型指示信號的含義
注1:
AXI協(xié)議用ARBURST/AWBURST[1:0]信號線定義了三種猝發(fā)傳輸?shù)念愋停汗潭ㄊ剑‵IXED,00)、遞增式(INCR,01)、回卷式(WRAP,10)。
(1)固定式是指地址是固定的,每一次傳輸?shù)牡刂范疾蛔儭_@樣的猝發(fā)傳輸是重復(fù)地對一個固定的位置進(jìn)行存取,例如FIFO。
(2)遞增式是指每一次讀寫的地址都比上一次的地址增加一個固定的值,就是通常的順序存儲器,這是最常見的猝發(fā)傳輸形式。
(3)回卷式跟遞增式類似,當(dāng)?shù)刂愤f增到邊界時,自動返回到起始地址(起始地址必須按ARSIZE/AWSIZE對齊,猝發(fā)長度只能是2、4、8、16)。
注2:
原子操作是不可分割的,在執(zhí)行完畢之前不會被任何其它任務(wù)或事件中斷。一般在單處理系統(tǒng)中的單條指令中可完成的操作都認(rèn)為是原子操作。
AXI是一個比較復(fù)雜的協(xié)議,猝發(fā)傳輸時不一定是一次完成之后再進(jìn)行下一次,經(jīng)常會出現(xiàn)重疊式猝發(fā),即同時給出兩次以上的命令事務(wù),之后才進(jìn)行數(shù)據(jù)事務(wù),或者第一次數(shù)據(jù)事務(wù)還沒有完成就給出第二次的命令事務(wù)。此外還有窄帶傳輸和不對齊傳輸,我就不講了,新手只需掌握非猝發(fā)時的AXI握手規(guī)則,看懂仿真波形就可以了。在FPGA設(shè)計中,對于復(fù)雜程度比較高的協(xié)議我們通常是利用官方IP核,AXI的猝發(fā)傳輸只需大概看懂波形就可以了,有興趣可以深究,對于學(xué)習(xí)其他高速接口很有幫助。
下圖是我截取的一段AXI重疊式猝發(fā)寫的波形圖供大家參考,圖中Master連續(xù)給了兩次寫命令事務(wù)。
圖12 AXI的burst寫操作的波形
審核編輯 :李倩
-
總線
+關(guān)注
關(guān)注
10文章
2817瀏覽量
87697 -
AXI
+關(guān)注
關(guān)注
1文章
127瀏覽量
16510
原文標(biāo)題:FPGA學(xué)習(xí)-AXI總線知識點快速學(xué)習(xí)
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論