1、設(shè)計(jì)AXI接口IP的考慮
1.1、AXI Feature回顧
首先我們看一下針對(duì)AXI接口的IP設(shè)計(jì),在介紹之前我們先回顧一下AXI所具有的一些feature。
首先是Cache相關(guān)的問(wèn)題,Cache是提高系統(tǒng)Performance的一種很好的方式,AXI通過(guò)AxCache信號(hào)來(lái)決定是否可以訪問(wèn)Cache,是否可以分配Cache。
然后是原子操作,原子操作我專門花了一篇文章進(jìn)行講解,大家使用的時(shí)候盡量只使用Exclusive Access,Locked Access會(huì)阻塞總線,導(dǎo)致帶寬無(wú)法充分利用,對(duì)系統(tǒng)性能影響較大。其實(shí)諸如此類的設(shè)計(jì),對(duì)性能及吞吐量敏感的地方都應(yīng)該避免使用,我們稱為阻塞性xxx。為了支持Exclusive Access,我們自然需要Exclusive Monitor,來(lái)滿足協(xié)議的要求,如何進(jìn)行設(shè)計(jì)之前的文章也有提及,不再細(xì)說(shuō)。
然后我們看一下AXI是如何提高性能的,這也是面試比較喜歡問(wèn)的。如上面的圖所示,主要有三種方式,我稱之為提高AXI性能的三板斧,排名分先后。
Outstanding對(duì)性能影響最顯著,尤其是主從之間通訊需要多拍的時(shí)候,它充分利用了這段時(shí)間發(fā)起別的傳輸。其實(shí)就是通過(guò)這些操作去掩蓋原本的訪存延時(shí)。
然后是亂序(Out of Order),這個(gè)提高性能主要體現(xiàn)在Slave無(wú)法及時(shí)響應(yīng),就可以讓后發(fā)起的請(qǐng)求先完成。就比如你去超市買菜,你前面的人剛好手機(jī)沒(méi)電了,你是等他充好電還是先讓你付款?
最后是Interleave,即交織讀寫,這個(gè)其實(shí)就是在空閑的Cycle中(氣泡Cycle)插入讀寫事務(wù),其實(shí)有點(diǎn)像亂序,可以理解成更加細(xì)粒度的亂序。當(dāng)然粒度這么細(xì),導(dǎo)致設(shè)計(jì)很復(fù)雜,所以在AXI4中寫交織就被移除了
最后是Memory Type的不同,基于Memory類型的不同,可以決定你的讀寫是否可以Bufferable或者Cacheable。比如某些外設(shè)寄存器,你寫完是希望直接改變系統(tǒng)當(dāng)前的運(yùn)行狀態(tài)的,希望即刻生效,這種當(dāng)然幾不可以Cacheable也不可以Bufferable。而有些外設(shè)寄存器,比如寫Flash Controller的寄存器,你寫完以后,稍微延遲一些Cycle或者有亂序是可以接受的,這種情況就可以Bufferable。
1.2、Ordering consideration
首先我們看一下Write Channel和Read Channel之間的一個(gè)Order,AXI協(xié)議并沒(méi)有對(duì)它們之間的Order有一個(gè)約束,如果想要實(shí)現(xiàn)該機(jī)制,就應(yīng)該在之前的transaction收到最后的response以后才允許發(fā)起新的transaction。
你可以通過(guò)配置某個(gè)寄存器,來(lái)開(kāi)啟該功能。這個(gè)設(shè)計(jì)起來(lái)不是很復(fù)雜。如果你使用的是ARM或者X86或者主流的商用CPU,你可以使用memory barrier指令來(lái)確保這個(gè)順序。
然后我們看一下對(duì)于Master而言,對(duì)于來(lái)自Slave的Response,是可以亂序的,通過(guò)ID來(lái)區(qū)分好就行。此外對(duì)于Read response而言,是可以Interleave的。讀交織如下圖所示。
而對(duì)于同一ID而言,即Master發(fā)出的同一AWID/ARID而言,相應(yīng)的數(shù)據(jù)必須是順序的,如果不是順序的,怎么知道哪個(gè)數(shù)據(jù)對(duì)應(yīng)于哪一個(gè)地址?
我們看一下Slave的實(shí)現(xiàn),Slave想實(shí)現(xiàn)Order Model,比Master要復(fù)雜的多。我們想象一下這樣的一個(gè)例子,一個(gè)Master去訪問(wèn)一個(gè)Slave,而這個(gè)Slave有很多不同的Memory Type,比如既有訪問(wèn)較快的寄存器,也有相對(duì)慢一點(diǎn)的SRAM,甚至還有DDR/FLASH。比如你去寫一個(gè)DDR Controller,你去寫它的配置寄存器,很快,你去寫DDR,其實(shí)也要走這個(gè)DDR Controller,這樣一次訪問(wèn)就非常非常的慢。
但是,由于是同一個(gè)Master的訪問(wèn),其ID是相同的,相同ID要保序,那難不成每次寫DDR,都要等著數(shù)據(jù)回來(lái)?顯然非常的不合理,那么在其內(nèi)部就可以做一個(gè)轉(zhuǎn)換表,如下圖所示,來(lái)的時(shí)候是同樣的ID,但Slave可以將其轉(zhuǎn)換成不同的ID,這樣就可以O(shè)utstanding了,也可以亂序了,非常的Amazing啊。注意,Slave內(nèi)部是可以O(shè)ut of Order返回的,但你返回給Master還是得順序的。需要一塊額外的存儲(chǔ)空間來(lái)緩存這些需要返回的數(shù)據(jù)及相關(guān)信息,當(dāng)來(lái)了,你就返回給Master。
我們?cè)倏匆幌翸aster的實(shí)現(xiàn),當(dāng)Master有多個(gè)Engine,比如DMA。每個(gè)DMA發(fā)出的ID是不一樣的,當(dāng)發(fā)出多個(gè)Outstanding的請(qǐng)求,Slave也相應(yīng)的根據(jù)請(qǐng)求把數(shù)據(jù)拿回來(lái)了。相應(yīng)的準(zhǔn)備若干個(gè)Queue,當(dāng)ID為0的返回的時(shí)候送給Queue0,當(dāng)ID為0的最后一筆返回的時(shí)候即RLAST拉高的時(shí)候,做相應(yīng)的處理返回給發(fā)出請(qǐng)求的Engine。其實(shí)就是需要一定的緩沖機(jī)制,來(lái)避免接不到數(shù)據(jù)等情況。
Master需要數(shù)據(jù)queue來(lái)支持out of order;
Master需要buffer來(lái)支持outstading;
1.3、Debugging
大多數(shù)的時(shí)候,都認(rèn)為各自是遵循總線協(xié)議的,但還是需要一定的能力,來(lái)做Debugging,畢竟某些IP會(huì)不遵守協(xié)議,會(huì)出錯(cuò)。
使用counter來(lái)監(jiān)視發(fā)起了多少次傳輸事務(wù)(transaction),以Master那邊為例,當(dāng)發(fā)出一次outstading請(qǐng)求,相應(yīng)的counter+1,當(dāng)收到最后的response,counter-1。這樣系統(tǒng)掛死以后,發(fā)現(xiàn)某個(gè)Master的monitor記錄counter不為0,這樣就可以快速定位錯(cuò)誤;
axvalid&axready=1,cnt+1
對(duì)于寫,當(dāng)bvalid&bready=1,cnt-1
對(duì)于讀,當(dāng)rvalid&rready&rlast,cnt-1
還可以記錄transfer數(shù)量
還可以記錄更多的信息,如axlen、axid、axsize等;
使用timeout機(jī)制;
2、Interconnect拓?fù)浣Y(jié)構(gòu)
假設(shè)基于AXI的Master和Slave已經(jīng)設(shè)計(jì)好了,如何對(duì)它們進(jìn)行連接呢?當(dāng)多個(gè)Master和Slave進(jìn)行通信的時(shí)候,就需要Interconnect。
Interconnect的拓?fù)浣Y(jié)構(gòu)多種多樣,基于AXI的Interconnect一般采用Crossbar,如ARM-NIC400,這里我們也只講這種方式。
我們看一下基于Crossbar的方式,首先是最簡(jiǎn)單的點(diǎn)對(duì)點(diǎn)方式,這種情況比較少見(jiàn),比較典型的如ACP接口,Master需要直接訪問(wèn)Slave的cache(此時(shí)CPU作為Slave,并且是唯一的Slave),這種情況就可以點(diǎn)對(duì)點(diǎn),而不用走多對(duì)多的總線。
然后是一對(duì)多的情況,如下圖所示,這種情況也很常見(jiàn),比如一個(gè)CPU要去訪問(wèn)多個(gè)Slave外設(shè)。
然后是多個(gè)Master訪問(wèn)多個(gè)Slave,這種情況就需要引入仲裁邏輯了,相對(duì)的設(shè)計(jì)也會(huì)更加復(fù)雜,此時(shí)多個(gè)Master共享Interconnect,相應(yīng)的會(huì)影響到帶寬。
然后我們看一下下面的例子,左邊是完全映射,即Master可以訪問(wèn)所有的Slave。右圖則是部分映射,可以看到一個(gè)Master只能訪問(wèn)指定的Slave。部分映射可以簡(jiǎn)化邏輯設(shè)計(jì),節(jié)約面積,讓能跑的主頻更高一點(diǎn)。實(shí)際上也不需要每個(gè)Master都能訪問(wèn)每個(gè)Slave。根據(jù)自己的需求來(lái)就行。
接下來(lái)我們看一下如果想設(shè)計(jì)一個(gè)好的互連,需要滿足以下的特點(diǎn):
支持多個(gè)Master和多個(gè)Slave
擴(kuò)展靈活,可復(fù)用性強(qiáng)
時(shí)序好,從Interconnect本身去解決timing violation的問(wèn)題
3、仲裁和時(shí)序收斂問(wèn)題
接下來(lái)我們看一下仲裁相關(guān)的問(wèn)題。仲裁本身是個(gè)很復(fù)雜的問(wèn)題,這里只簡(jiǎn)單介紹。當(dāng)多個(gè)Master需要訪問(wèn)同一個(gè)Slave的時(shí)候,這個(gè)時(shí)候就需要選擇其中的一個(gè)。這里講兩種仲裁機(jī)制,Least Recently Granted和Round Robin仲裁機(jī)制。
首先看一下Least Recently Granted仲裁:這個(gè)和Cache替換中的LRU差不多,我們一開(kāi)始會(huì)分好組,組和組之間是有固定優(yōu)先級(jí)區(qū)別的,高優(yōu)先級(jí)的總是會(huì)獲得仲裁。對(duì)于同一個(gè)組的而言,我們會(huì)讓最近沒(méi)有被授權(quán)的Master獲得仲裁權(quán),因此我們需要有一個(gè)寄存器去記錄歷史信息,也可以用狀態(tài)機(jī)實(shí)現(xiàn)。
然后是Round Robin仲裁機(jī)制,這種仲裁機(jī)制下所有的Master的優(yōu)先級(jí)都是相同的,采用輪詢的方式進(jìn)行仲裁,相應(yīng)的也要進(jìn)行記錄歷史信息,以決定如何獲得仲裁。如下圖所示,我們甚至可以用移位寄存器實(shí)現(xiàn),下圖是帶Weight的Round Robin,可以看到M1占據(jù)了2個(gè)SLOT。因此使用頻率是其它Master的兩倍。
我們?cè)倏匆幌聲r(shí)序如何收斂,因?yàn)锳XI本身采用握手機(jī)制,因此實(shí)際上非常靈活,晚了一個(gè)周期早了一個(gè)周期都無(wú)所謂,只要滿足基本的各通道間依賴關(guān)系即可。沒(méi)有AHB和APB那樣的硬性1T Cycle delay的要求。因此我們可以在critical path上插入寄存器,以優(yōu)化時(shí)序。
一般是有三種方式,打斷Valid,打斷Ready或者都打斷。在IC設(shè)計(jì)中,無(wú)論使用的是否是AXI總線,只要用Valid和Ready握手機(jī)制來(lái)傳遞數(shù)據(jù),都可以使用該方法讓時(shí)序收斂,不一定是局限于某個(gè)總線協(xié)議。大家完全可以將其用在模塊內(nèi)部和模塊與模塊間的流傳輸。
上面這種機(jī)制用在總線上,一般稱之為Register Slice。先說(shuō)說(shuō)Slice的作用,在SoC中,如果Master和Slave的距離比較遠(yuǎn),那么它們之間的bus信號(hào)要滿足timing就可能有點(diǎn)困難,比如AXI中的 ARADDR、ARVALID這些信號(hào)從Master出來(lái),要去很遠(yuǎn)的Slave,那么中間就要加很多的buffer,這引入的buffer delay就可能導(dǎo)致我們希望的timing不滿足。這個(gè)時(shí)候就需要插入slice,給每個(gè)控制信號(hào)在中間加一級(jí)寄存器,把較長(zhǎng)的走線縮短。當(dāng)然插入的slice依然要保持bus的協(xié)議標(biāo)準(zhǔn)。簡(jiǎn)單來(lái)說(shuō),一個(gè)slice就是下面中間的那個(gè)模塊。
我們看一下在Register插入的位置,可以如下圖所示(其實(shí)有很多可以插入的位置)。一般AXI各個(gè)通道是分開(kāi)的,我們?cè)谀膫€(gè)通道加入register slice,相應(yīng)的就會(huì)晚了一拍,實(shí)際上晚了一拍完全不影響邏輯功能。
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124462 -
DDR
+關(guān)注
關(guān)注
11文章
732瀏覽量
66814 -
Cache
+關(guān)注
關(guān)注
0文章
130瀏覽量
29074 -
ACP
+關(guān)注
關(guān)注
0文章
5瀏覽量
7972 -
AXI總線
+關(guān)注
關(guān)注
0文章
66瀏覽量
14555
原文標(biāo)題:深入理解AMBA總線之AXI設(shè)計(jì)的關(guān)鍵問(wèn)題
文章出處:【微信號(hào):Rocker-IC,微信公眾號(hào):路科驗(yàn)證】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
AMBA總線概述

學(xué)習(xí)架構(gòu)-AMBA AXI簡(jiǎn)介
AMBA3.0 AXI總線接口協(xié)議的研究與應(yīng)用
AMBA AXI總線學(xué)習(xí)筆記
AMBA總線概述(二)
AXI 總線交互分為 Master / Slave 兩端
AMBA3.0 AXI總線接口協(xié)議的研究與應(yīng)用

AMBA 3.0 AXI總線接口協(xié)議的研究與應(yīng)用
基于AMBA總線介紹?

深度解讀AMBA、AHB、APB、AXI總線介紹及對(duì)比
AMBA總線知識(shí)之AHB(上)

Xilinx FPGA AXI4總線(一)介紹【AXI4】【AXI4-Lite】【AXI-Stream】

漫談AMBA總線-AXI4協(xié)議的基本介紹

評(píng)論