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

IIC通信總線(xiàn)尋址的知識(shí)點(diǎn)分享,絕對(duì)實(shí)用
AMBA AXI總線(xiàn)學(xué)習(xí)筆記
高一數(shù)學(xué)知識(shí)點(diǎn)總結(jié)
PHP基礎(chǔ)學(xué)習(xí)知識(shí)點(diǎn)詳細(xì)資料匯總免費(fèi)下載

PHP基礎(chǔ)學(xué)習(xí)知識(shí)點(diǎn)匯總免費(fèi)下載

嵌入式知識(shí)點(diǎn)總結(jié)

17個(gè)PCB布局的知識(shí)點(diǎn)
AXI總線(xiàn)協(xié)議的簡(jiǎn)單知識(shí)
高速電路設(shè)計(jì)常見(jiàn)的知識(shí)點(diǎn)
數(shù)字電路知識(shí)點(diǎn)總結(jié)

評(píng)論