AXI是ARM在1996年提出的微控制器總線家族AMBA中的一部分。AXI是高級(jí)擴(kuò)展接口,在AMBA3.0中提出,AMBA4.0將其修改升級(jí)為AXI4.0。AMBA4.0 包括:
AXI4:主要面向高性能地址映射通信的需求,允許最大256輪的數(shù)據(jù)突發(fā)傳輸;
AXI4-Lite:是一個(gè)簡單地吞吐量地址映射性通信總線,是一個(gè)輕量級(jí)的地址映射單次傳輸接口,占用很少的邏輯單元;
AXI4-Stream:面向高速流數(shù)據(jù)傳輸,去掉了地址項(xiàng),允許無限制的數(shù)據(jù)突發(fā)傳輸規(guī)模;
AXI4總線分為主、從兩端,兩者間可以連續(xù)的進(jìn)行通信。其優(yōu)勢:
適合高帶寬低延時(shí)設(shè)計(jì), 無需復(fù)雜的橋就能實(shí)現(xiàn)高頻操作,能滿足大部分器件的接口要求,適合高初始延時(shí)的存儲(chǔ)控制器,提供互聯(lián)架構(gòu)的靈活性與獨(dú)立性,向下兼容已有的AHB和APB接口。
AXI 能夠使SoC 以更小的面積、更低的功耗,獲得更加優(yōu)異的性能。AXI 獲得如此優(yōu)異性能的一個(gè)主要原因,就是它的單向通道體系結(jié)構(gòu)。
1、單向通道體系結(jié)構(gòu)使得片上的信息流只以單方向傳輸,簡化時(shí)鐘域間的橋接,減少門數(shù)量。當(dāng)信號(hào)經(jīng)過復(fù)雜的片上系統(tǒng)時(shí),減少延時(shí)。
2、支持多項(xiàng)數(shù)據(jù)交換。通過并行執(zhí)行猝發(fā)操作,極大地提高了數(shù)據(jù)吞吐能力,可在更短的時(shí)間內(nèi)完成任務(wù),在滿足高性能要求的同時(shí),又減少了功耗。使用字節(jié)線來支持非對齊的數(shù)據(jù)傳輸,使用基于burst的傳輸,只需傳輸首地址,支持多種尋址方式,支持亂序傳輸。
3、獨(dú)立的地址和數(shù)據(jù)通道,分離的地址/控制、數(shù)據(jù)相位。地址和數(shù)據(jù)通道分開,能對每一個(gè)通道進(jìn)行單獨(dú)優(yōu)化,可以根據(jù)需要控制時(shí)序通道,將時(shí)鐘頻率提到最高,并將延時(shí)降到最低。分離的讀、寫數(shù)據(jù)通道,能提供低功耗DMA。
4、增強(qiáng)的靈活性。AXI技術(shù)擁有對稱的主從接口,無論在點(diǎn)對點(diǎn)或在多層系統(tǒng)中,都能十分方便地使用AXI技術(shù), 允許容易的添加寄存器級(jí)來進(jìn)行時(shí)序收斂。
AXI總線還定義了在進(jìn)出低功耗節(jié)電模式前后的握手協(xié)議。規(guī)定如何通知進(jìn)入低功耗模式,何時(shí)關(guān)斷時(shí)鐘,何時(shí)開啟時(shí)鐘,如何退出低功耗模式。這使得所有IP在進(jìn)行功耗控制的設(shè)計(jì)時(shí),有據(jù)可依,容易集成在統(tǒng)一的系統(tǒng)中。
AXI4的工作模式
1、 總線的兩端可以分為master和slave,他們直接一般通過interconnect連接,如果是一對一的話,interconnect可以沒有。
2、 AXI協(xié)議是基于burst的傳輸,并且定義了以下5個(gè)獨(dú)立的傳輸通道:讀地址通道、讀數(shù)據(jù)通道、寫地址通道、寫數(shù)據(jù)通道、寫響應(yīng)通道,極大的提高了AXI的傳輸性能。
讀地址通道,包含ARVALID, ARADDR, ARREADY信號(hào);
寫地址通道,包含AWVALID,AWADDR, AWREADY信號(hào);
讀數(shù)據(jù)通道,包含RVALID, RDATA, RREADY, RRESP信號(hào);
寫數(shù)據(jù)通道,包含WVALID, WDATA,WSTRB, WREADY信號(hào);
寫應(yīng)答通道,包含BVALID, BRESP, BREADY信號(hào);
其中ACLK為axi總線時(shí)鐘,ARESETN是axi總線復(fù)位信號(hào),低電平有效;讀寫數(shù)據(jù)與讀寫地址類信號(hào)寬度都為32bit;READY與VALID是對應(yīng)的通道握手信號(hào);WSTRB信號(hào)為1的bit對應(yīng)WDATA有效數(shù)據(jù)字節(jié),WSTRB寬度是32bit/8=4bit;BRESP與RRESP分別為寫回應(yīng)信號(hào),讀回應(yīng)信號(hào),寬度都為2bit,‘h0代表成功,其他為錯(cuò)誤。
地址通道攜帶控制消息用于描述被傳輸?shù)臄?shù)據(jù)屬性,數(shù)據(jù)傳輸使用寫通道來實(shí)現(xiàn)“主”到“從”的傳輸,“從”使用寫響應(yīng)通道來完成一次寫傳輸;讀通道用來實(shí)現(xiàn)數(shù)據(jù)從“從”到“主”的傳輸。
3、讀寫時(shí)序:
寫地址通道:當(dāng)主機(jī)驅(qū)動(dòng)有效的地址和控制信號(hào)時(shí),主機(jī)可以斷言AWVALID,一旦斷言,需要保持AWVALID的斷言狀態(tài),直到時(shí)鐘上升沿采樣到從機(jī)的AWREADY。AWREADY默認(rèn)值可高可低,推薦為高(如果為低,一次傳輸至少需要兩個(gè)周期,一個(gè)用來斷言AWVALID,一個(gè)用來斷言AWREADY);當(dāng)AWREADY為高時(shí),從機(jī)必須能夠接受提供給它的有效地址。
寫數(shù)據(jù)通道:在寫突發(fā)傳輸過程中,主機(jī)只能在它提供有效的寫數(shù)據(jù)時(shí)斷言WVALID,一旦斷言,需要保持?jǐn)嘌誀顟B(tài),知道時(shí)鐘上升沿采樣到從機(jī)的WREADY。WREADY默認(rèn)值可以為高,這要求從機(jī)總能夠在單個(gè)周期內(nèi)接受寫數(shù)據(jù)。主機(jī)在驅(qū)動(dòng)最后一次寫突發(fā)傳輸是需要斷言WLAST信號(hào)。
寫響應(yīng)通道:從機(jī)只能它在驅(qū)動(dòng)有效的寫響應(yīng)時(shí)斷言BVALID,一旦斷言需要保持,直到時(shí)鐘上升沿采樣到主機(jī)的BREADY信號(hào)。當(dāng)主機(jī)總能在一個(gè)周期內(nèi)接受寫響應(yīng)信號(hào)時(shí),可以將BREADY的默認(rèn)值設(shè)為高。
讀地址通道:當(dāng)主機(jī)驅(qū)動(dòng)有效的地址和控制信號(hào)時(shí),主機(jī)可以斷言ARVALID,一旦斷言,需要保持ARVALID的斷言狀態(tài),直到時(shí)鐘上升沿采樣到從機(jī)的ARREADY。ARREADY默認(rèn)值可高可低,推薦為高(如果為低,一次傳輸至少需要兩個(gè)周期,一個(gè)用來斷言ARVALID,一個(gè)用來斷言ARREADY);當(dāng)ARREADY為高時(shí),從機(jī)必須能夠接受提供給它的有效地址。
讀數(shù)據(jù)通道:只有當(dāng)從機(jī)驅(qū)動(dòng)有效的讀數(shù)據(jù)時(shí)從機(jī)才可以斷言RVALID,一旦斷言需要保持直到時(shí)鐘上升沿采樣到主機(jī)的BREADY。BREADY默認(rèn)值可以為高,此時(shí)需要主機(jī)任何時(shí)候一旦開始讀傳輸就能立馬接受讀數(shù)據(jù)。當(dāng)最后一次突發(fā)讀傳輸時(shí),從機(jī)需要斷言RLAST。
讀寫時(shí)序傳輸內(nèi)容:
AXI傳輸首先發(fā)出burst的長度(burst-len),最大是16,burst長度就代表有多少個(gè)transfer或者beat,一個(gè)transfer就代表一個(gè)數(shù)據(jù)位寬的數(shù)據(jù),所以一個(gè)burst最大的傳輸數(shù)據(jù)長度為burst_len*transfer_width;
在發(fā)出burst長度時(shí)會(huì)同時(shí)發(fā)出當(dāng)前這個(gè)burst中第一個(gè)transfer的首地址,后面其它的transfer不會(huì)有地址,slave要根據(jù)地址遞增的方式自己去進(jìn)行相應(yīng)的處理,這個(gè)地址可以是非對齊的;在發(fā)出burst長度時(shí)會(huì)同時(shí)發(fā)出burst_size,這個(gè)size代表當(dāng)前burst中所有transfer中最大的字節(jié)個(gè)數(shù),在發(fā)出burst長度時(shí)會(huì)同時(shí)發(fā)出地址遞增方式burst-type,是不變地址(non-incr),是遞增(incr增量突發(fā),傳輸過程中,地址遞增。增加量取決AxSIZE的值。)還是wrap(回環(huán)突發(fā),和增量突發(fā)類似,但會(huì)在特定高地址的邊界處回到低地址處?;丨h(huán)突發(fā)的長度只能是2,4,8,16次傳輸,傳輸首地址和每次傳輸?shù)拇笮R。最低的地址整個(gè)傳輸?shù)臄?shù)據(jù)大小對齊?;丨h(huán)邊界等于(AxSIZE*AxLEN)),或者FIXED(突發(fā)傳輸過程中地址固定,用于FIFO訪問)
例如:當(dāng)前要傳輸11個(gè)字節(jié),地址是2,數(shù)據(jù)位寬是4B,所以傳輸方式是:2B-4B-4B-1B,burst_len=4,burst_size=4(所有transfer中size最大的),地址是2(因?yàn)橹С址菍R傳輸),burst-type=incr;對于寫會(huì)有strobe代表當(dāng)前transfer中哪幾個(gè)字節(jié)是有效的,所以上面的strobe為:1100-1111-1111-0001,對于讀則沒有,但是Master自己清楚哪些數(shù)據(jù)是有效的,所以可以將整個(gè)4B都讀出來,master自己去除無用的數(shù)據(jù)。
注意:不同人對burst_size(也就是英文手冊中AWsize和ARsize的理解)的理解可能不同,手冊中在table-4-2中有解釋,它表示一個(gè)burst中transfer中max-num,注意最大,所以不是表示當(dāng)前burst中所有transfer的num,只是表示最大。如果表示所有transfer的num,那么也就是所有transfer的大小是一樣的(AHB就是這樣的,每個(gè)burst中的transfersize是一樣的),那么上面的例子就必須分成3個(gè)burst,第一個(gè)burst_len=1, size=2, addr=2, 第二個(gè)burst_len=2, size=4,addr=4, 第三個(gè)burst_len=1,size=1,addr=12,顯然這個(gè)效率要比上面的低。
通道間關(guān)系
AXI協(xié)議要求通道間滿足如下關(guān)系:
寫響應(yīng)必須跟隨最后一次burst的的寫傳輸
讀數(shù)據(jù)必須跟隨數(shù)據(jù)對應(yīng)的地址
通道握手信號(hào)需要確認(rèn)一些依賴關(guān)系
4、 握手機(jī)制
AXI4所采用的是一種READY,VALID握手通信機(jī)制,即主從模塊進(jìn)行數(shù)據(jù)通信前,新根據(jù)操作對各所用到的數(shù)據(jù)、地址通道進(jìn)行握手。主要操作包括傳輸發(fā)送者A等到傳輸接受者B的READY信號(hào)后,A將數(shù)據(jù)與VALID信號(hào)同時(shí)發(fā)送給B。
AXI中關(guān)于valid和ready的關(guān)系在3.3節(jié)中有很好的解釋,在設(shè)計(jì)時(shí)一定不能設(shè)計(jì)一方依賴另一方,否則會(huì)出現(xiàn)死鎖的現(xiàn)象,valid可以優(yōu)先于ready拉高,也可以在ready之后拉高,它們并無先后關(guān)系,其實(shí)只要是master準(zhǔn)備好就可以valid,slave準(zhǔn)備好就可以ready,并無絕對的先后順序,但是當(dāng)兩者同時(shí)為高則表示當(dāng)前的data或者cmd結(jié)束或者開始下一個(gè)data或者cmd。
由于上面的不確定性會(huì)出現(xiàn)一種奇葩的現(xiàn)象,以寫為例,會(huì)出現(xiàn)寫數(shù)據(jù)比寫地址先到達(dá)slave的現(xiàn)象,原因如下:假如AWREADY和WREADY被slave提前拉高了,雖然master那邊肯定是先發(fā)地址再發(fā)數(shù)據(jù),但是master會(huì)誤以為slave能夠立即接收地址,所以地址發(fā)送完立即發(fā)送數(shù)據(jù),但是地址通道和數(shù)據(jù)通道是分開的,axi允許單獨(dú)對各個(gè)通道進(jìn)行優(yōu)化,所以,如果地址通道被插入了多個(gè)reg,那么就會(huì)造成延時(shí),可能出現(xiàn)數(shù)據(jù)先被slave收到。
為了避免上面的現(xiàn)象該怎么辦呢,首先slave最好不要在接收到地址之前就將WREADY拉高(但是AWREADY建議提前拉高,這樣address握手可能就會(huì)在一個(gè)周期內(nèi)完成,否則至少需要兩個(gè)周期,就像上圖),要在收到地址后才進(jìn)行WREADY的處理,或者slave先buffer住收到的數(shù)據(jù),然后等到收到地址后再做處理。不過我覺得AXI interconnect應(yīng)該會(huì)處理這種情況,不會(huì)讓數(shù)據(jù)先于地址到達(dá)slave的,所以ARM公司的AXI產(chǎn)品肯定是不會(huì)有問題的,但是如果不購買相應(yīng)的AXI interconnect而自己開發(fā)時(shí)就要注意上面的問題。
5、AXI最多支持16個(gè)master,16個(gè)slave,它們可以通過AXI interconnect連接,不同的master發(fā)出的id可能相同,但是經(jīng)過AXI interconnect處理后會(huì)變得唯一,所以自己開發(fā)AXI interconnect也要注意這個(gè)問題。同一個(gè)master發(fā)出的id可以相同也可以不同,相同的id數(shù)據(jù)傳輸必須按照先后順序否則會(huì)出現(xiàn)錯(cuò)誤,不能亂序和交叉。AXI 支持ID方式,這也是該總線效率較高的一個(gè)原因。
6、AXI支持out-standing或者multi-issue(即當(dāng)前傳輸沒結(jié)束就發(fā)起下一個(gè)傳輸)亂序和交叉?zhèn)鬏?,依靠ID進(jìn)行區(qū)分。這也是AXI總線協(xié)議效率較高的一個(gè)原因。
7、這塊的理解是參考別的網(wǎng)站的,并不確定正確性,cachalbe和 bufferable的概念比較復(fù)雜,具體可以看看ARM cache相關(guān)文檔。簡單說,這兩個(gè)概念都是圍繞master訪問的slave的請求來說的。例如該請求時(shí)cacheable的寫話,那么實(shí)際的寫數(shù)據(jù)不一定更新了主存內(nèi)容,可以只更新了cache,以后再通過write back方式更新;bufferable也類似,如果是寫,那么寫數(shù)據(jù)響應(yīng)返回給master時(shí),實(shí)際寫數(shù)據(jù)不一定到達(dá)了slave設(shè)備。這個(gè)寫數(shù)據(jù)可能被buffer了,而時(shí)間未知。如果不是bufferable則寫響應(yīng)反映了slave實(shí)際接收到數(shù)據(jù)的時(shí)刻。說的比較籠統(tǒng),具體可以參考相應(yīng)文檔。
8、低功耗的理解(參考):AXI的低功耗接口本身也是數(shù)據(jù)傳輸協(xié)議的擴(kuò)展。它針對自身具有低功耗處理的設(shè)備和自身不具有低功耗處理的設(shè)備都是通用的。
AXI低功耗控制接口包括兩類信號(hào):
設(shè)備給出表示當(dāng)前時(shí)鐘是否可以被gated的信號(hào)。外設(shè)使用CACTIVE信號(hào)表明它希望時(shí)鐘,時(shí)鐘控制模塊必須馬上給設(shè)置時(shí)鐘。
對于系統(tǒng)時(shí)鐘控制模塊,提供可以進(jìn)入或退出低功耗狀態(tài)的握手信號(hào)。CSYSREQ表明了系統(tǒng)請求設(shè)備進(jìn)入低功耗狀態(tài),而設(shè)備使用CSYSACK信號(hào)來握手低功耗狀態(tài)請求和退出。
在CSYSREQ和CSYSACK信號(hào)為高的時(shí)候,也就是T1時(shí)刻之前,設(shè)備處于正常狀態(tài)。在T1時(shí)刻,系統(tǒng)拉低了CSYSREQ信號(hào),在T2時(shí)刻,外設(shè) 拉低CSYSACK信號(hào)。在T3時(shí)刻系統(tǒng)拉高CSYSREQ表示系統(tǒng)要求設(shè)備從低功耗狀態(tài)退出。T4時(shí)刻設(shè)備握手拉高CSYSACK表明已經(jīng)退出。在握手 中,CACTIVE可以作為拒絕或者同意的標(biāo)志。下圖中CATIVE一直拉高,來表示當(dāng)前不接受這種低功耗的請求,而不是依靠ACK信號(hào)。可以看出,ACK 信號(hào)只是表示狀態(tài)遷移的完整性,而對于是否進(jìn)入低功耗狀態(tài),需要CACTIVE信號(hào)表示。同時(shí)該信號(hào)也表示了設(shè)備在低功耗狀態(tài)需要退出。
在系統(tǒng)層面的操作:
有兩種方法進(jìn)行設(shè)備的低功耗控制。
第一種是系統(tǒng)不斷的輪詢設(shè)備,一旦某個(gè)設(shè)備可以進(jìn)入低功耗狀態(tài),就把相應(yīng)的CATIVE 拉低,然后把CSYSACK信號(hào)拉低。這樣做的效率不是很高,系統(tǒng)并不知道哪個(gè)設(shè)備已經(jīng)可以提前進(jìn)入低功耗狀態(tài),而是簡單的按照時(shí)間進(jìn)行查詢,并不能精確 的控制。這一種方案主要強(qiáng)調(diào)系統(tǒng)與設(shè)備的強(qiáng)耦合性。只有系統(tǒng)需要的時(shí)候才開始輪詢,系統(tǒng)不需要,就不能進(jìn)入低功耗模式。
第二種方法是系統(tǒng)被動(dòng)接受設(shè)備發(fā)出來的CATIVE,然后開始低功耗處理流程。這樣可以提高效率。但是可能系統(tǒng)由于預(yù)測到馬上需要使用該device,不發(fā)起低功耗請求。值得注意的是,兩種低功耗管理是可以混合使用的。
axis工作模式
axis分為:
tready信號(hào):從告訴主做好傳輸準(zhǔn)備;
tvalid信號(hào):主告訴從數(shù)據(jù)傳輸有效;
tlast信號(hào):主告訴從該次傳輸為突發(fā)傳輸結(jié)尾;
tdata信號(hào):數(shù)據(jù),可選寬度32,64,128,256bit
tstrb信號(hào):為1的bit為對應(yīng)tdata有效字節(jié),寬度為tdata/8
tuser信號(hào) :用戶定義信號(hào),寬度為128bit
aclk信號(hào):總線時(shí)鐘,上升沿有效;
aresetn信號(hào):總線復(fù)位,低電平有效;
AXI Stream接口方式,該接口對于用戶來說,不需要關(guān)心地址。僅需要:幀開始(tuser),行結(jié)束(tlast),輸出數(shù)據(jù)(tdata),輸出有效(tvalid),輸出準(zhǔn)備好(tready)這五個(gè)信號(hào)。
但是AXI Interconnect IP只能連接memory map傳輸,并不能直接連接AXI Stream接口數(shù)據(jù),所以只能繼續(xù)加一個(gè)AXI Stream轉(zhuǎn)接到memory map的DMA,這就是官方的也有的Video DMA IP。
VDMA的結(jié)構(gòu)如下圖:
其實(shí)大概可以看出這么幾個(gè)接口,AXI-lite,AXI Memory Map write,AXI Memory Map read,AXI Stream Write(S2MM),AXI Stream Read(MM2S)。
AXI-lite:作用是通過PS來配置VDMA ip。
AXI Memory Map write: 映射到存儲(chǔ)器寫
AXI Memory Map read:映射到存儲(chǔ)器讀
AXI Stream Write(S2MM):AXI Stream視頻流寫入圖像
AXI Stream Read(MM2S):AXI Stream視頻流讀出圖像
這樣我們基本上大概知道視頻流怎么進(jìn)入到內(nèi)存中了,先采集圖像,然后圖像數(shù)據(jù)轉(zhuǎn)換成AXI Stream接口,然后通過VDMA轉(zhuǎn)換成memory map,通過AXI Interconnect進(jìn)入到HP口,通過HP口進(jìn)入到Programmable Logic to Memory Interconnect,然后通過內(nèi)存控制器進(jìn)入到內(nèi)存。
axi與axis是AXI4總線中通信復(fù)雜度較低的兩條總線,最大開發(fā)難度存在于axi的控制平面向axis的數(shù)據(jù)平面下發(fā)參數(shù)時(shí),由于axi與axis時(shí)鐘頻率不同而產(chǎn)生的跨時(shí)鐘域數(shù)據(jù)傳輸問題。
評論