帶寬/BandWidth?和延遲/Latency?是衡量總線性能最重要的兩個因素。
1.1 What is AMBA??
AMBA全稱Advanced Microcontroller Bus Architecture(高級微控制總線架構(gòu)),是一種開放的、標(biāo)準(zhǔn)的片上互聯(lián)總線規(guī)范協(xié)議簇。從本質(zhì)上來說,AMBA協(xié)議簇定義了片上功能模塊是如何進行相互通信。同時隨著時間演化,已經(jīng)從AMBA到現(xiàn)在的AMBA5。協(xié)議簇的演化路徑如下圖所示:
1.2?Example for AMBA
如上圖所示的SoC設(shè)計實例。通過AMBA協(xié)議連接了各個功能模塊,比如CPU、GPU、DMA、DDR等。AMBA協(xié)議通過簡化和規(guī)范了模塊接口信號,使得IP設(shè)計更加靈活兼容的同時也促進了IP的多次復(fù)用。
1.3 This text Focus on
本文主要集中在AMBA協(xié)議中的AXI4協(xié)議。之所以選擇AXI4作為講解,是因為這個協(xié)議在SoC、IC設(shè)計中應(yīng)用比較廣泛。
2.1?Brief Introduction of?AXI4?
AXI協(xié)議描述了單向數(shù)據(jù)傳輸的過程,在使用AXI協(xié)議構(gòu)建的系統(tǒng)中,有兩種AXI接口:Manager(Master)、Subordinate(Slave)。AXI Manager接口只能和AXI Subordinate接口連接。AXI Manager(AXI_M)接口發(fā)起AXI讀寫命令,AXI?Subordinate接口接收到AXI讀寫命令之后給出響應(yīng)。
AXI協(xié)議是一個點對點接口規(guī)范,而不是SoC互聯(lián)總線協(xié)議。所以如果想要連接多個AXI Master和多個AXI Slave時,就需要實現(xiàn)互聯(lián)總線結(jié)構(gòu)。如下圖所示:
上文提到,AXI協(xié)議本身只規(guī)定了點對點接口之間的信號個數(shù)、時序特性。所以上圖多個Master的AXI Interconnect模塊只是在接口上遵守了AXI協(xié)議,互聯(lián)總線內(nèi)部的拓撲結(jié)構(gòu)、仲裁機制、路由機制、流控機制等和AXI協(xié)議本身沒有關(guān)系,取決于設(shè)計者的思路和應(yīng)用場景。
PS : 可以用Synopsys?DesignWare?、Arm Socrates等工具生成符合應(yīng)用場景(PPA)的AXI接口的互聯(lián)總線。
2.2?AXI Channel Overview
AXI協(xié)議規(guī)定了AXI Manager和AXI Subordinate之間點對點的信號個數(shù)、時序特性。AXI協(xié)議用于AXI?Manager和AXI?Subordinate接口之間數(shù)據(jù)的傳輸。AXI協(xié)議將所有的信號分成五個通道,分別是寫地址通道(AW)、寫數(shù)據(jù)通道(W)、寫響應(yīng)通道(B)、讀地址通道(AR)、讀數(shù)據(jù)通道(R)。如下圖所示:
寫數(shù)據(jù): 1. Manager 通過Write Address(AW)通道向Subordinate發(fā)出想要寫數(shù)據(jù)的地址 2. Manager 通過Write Data(W)通道向Subordinate發(fā)出寫數(shù)據(jù)
3. Subordinate收到地址和數(shù)據(jù)后完成寫入操作,并通過Write Response(B)通道告訴Manager當(dāng)前的地址和數(shù)據(jù)寫入是否成功(寫響應(yīng)) ? ? 讀數(shù)據(jù): 1.?Manager 通過Read?Address(AR)通道向Subordinate發(fā)出想要讀數(shù)據(jù)的地址
2.?Subordinate收到地址后,通過Read Data(R)通道向Manager返回需要的數(shù)據(jù)(讀數(shù)據(jù))。
PS?: AXI?Manager在發(fā)起寫操作的時候,可以先發(fā)寫地址,再發(fā)寫數(shù)據(jù),最后等待寫響應(yīng)。同時,AXI?Manager也可以同時發(fā)出寫地址和寫數(shù)據(jù),最后等待寫響應(yīng),如上圖所示。 PS?: AXI協(xié)議所定義的讀寫通道并不對稱,可以看到寫數(shù)據(jù)包含三個通道(AW、W、B),讀數(shù)據(jù)包含兩個通道(AR、R)。因為Slave返回的讀命令響應(yīng)可以伴隨著數(shù)據(jù)一起返回。 ? 2.2?AXI Channel Transfer Overview ? 上文提到,AXI協(xié)議將信號分為五個通道。讀寫操作需要五個通道的配合完成;對于寫操作,需要AW、W、B通道配合。對于讀操作,需要AR、R通道配合。 而對于每個通道的數(shù)據(jù)傳輸,需要通道內(nèi)信號在時間上組合來完成數(shù)據(jù)傳輸。如下圖示,AXI協(xié)議中的五個通道,每個通道中都有相同的握手機制。 ?
2.3?AXI Channel Transfer Timing Overview ? 上文提到,AXI協(xié)議中的通道的數(shù)據(jù)傳輸是依靠握手機制。source通過拉高Valid信號指示有數(shù)據(jù)發(fā)送。而destination拉高Ready信號表示可以接收數(shù)據(jù)。只有source和destination同時有效,數(shù)據(jù)才能完成傳輸。 ?
如圖1所示,source有數(shù)據(jù)發(fā)送,在T2周期拉高valid信號并保持發(fā)送的數(shù)據(jù)。在T4周期,destination拉高ready信號表示可以接收數(shù)據(jù)。數(shù)據(jù)在T5周期被完整傳輸。這里的valid和ready同時為1且時長1周期的握手,稱為1次Transfer。
如圖2所示,在T2周期,destination拉高ready信號表示可以接收數(shù)據(jù),此時source并沒有數(shù)據(jù)發(fā)送,直到T4周期source有數(shù)據(jù)發(fā)送便拉高valid信號,在T5周期完成一次數(shù)據(jù)傳輸(Transfer)。
如圖3所示,source和destination同時在T4周期作用,完成一次數(shù)據(jù)傳輸(Transfer)。
PS?:?source和destination之間沒有任何關(guān)系。當(dāng)source有數(shù)據(jù)發(fā)送,拉高valid信號;當(dāng)destination可以接受數(shù)據(jù),拉高ready信號。source和destination根據(jù)自己的情況拉高信號向?qū)Ψ奖砻饕鈭D。
PS?: 為了避免死鎖產(chǎn)生,需要遵從source不能根據(jù)destination的ready信號來操作valid信號,但是ready信號可以根據(jù)valid信號來設(shè)置。舉例來說,source和destination可以認為是談戀愛的雙方:
1. source可以主動表達自己心意,destination也可以主動表示自己心意,兩者沒有依賴關(guān)系可以達到目的。
2. source可以向destination表達自己心意,destination根據(jù)source表達過來的心意可以回復(fù)source也能達到目的。
3. 當(dāng)source等待destination主動表達心意,destination也等待source主動表達心意,沒有人主動表達自己的心意,那么就會陷入互相等待形成死鎖(事則不成)。
PS?: source有數(shù)據(jù)發(fā)送時,拉高valid信號。此時source只有等待destination接受這筆數(shù)據(jù)才可以拉低valid信號(圖1)(發(fā)數(shù)據(jù)要慎重,一旦發(fā)起必須等到對方接受才能恢復(fù),即valid:?發(fā)數(shù)據(jù),須慎重,一旦發(fā),必須接,接完后,才能動)
PS?:?destination比較靈活,可以根據(jù)自身情況拉高拉低ready信號。但是當(dāng)valid為1時,destination拉高ready信號時,必須接受這筆數(shù)據(jù)才可以拉低ready信號(ready:?接數(shù)據(jù),隨意動,源有效,必須接,接完后,才能動)。如下圖,在T2、T4周期使用ready表示自己可以接收數(shù)據(jù),但在下一周期又認為自己接受不了而拉低ready信號。在T6周期,valid和ready都拉高的時候,必須接收這筆數(shù)據(jù)才能進行下面操作。
?
2.4?AXI Channel Transcation?Timing Overview
2.41 Write Transcation : single data
寫操作時序圖1:單數(shù)據(jù)
如上文所示,Manager向Subordinate寫數(shù)據(jù)時,Manager先發(fā)送寫地址,再發(fā)送寫數(shù)據(jù),最后等待Subordinate的響應(yīng)。時序圖如下:
如上圖所示,每個通道傳輸?shù)臄?shù)據(jù)不一致,但是都通過相似的握手信號來完成數(shù)據(jù)的交互。從AW通道的地址信號開始,接著W通道的數(shù)據(jù)到最后的B通道的響應(yīng),這一完整的過程稱為一次Transaction。
寫操作時序圖2:單數(shù)據(jù)
如上文所示,Manager向Subordinate寫數(shù)據(jù)時,Manager同時發(fā)送寫地址和寫數(shù)據(jù),最后等待Subordinate的響應(yīng)。時序圖如下:
2.42?Read?Transcation : single data
讀操作時序圖:單數(shù)據(jù)
如上文所示,Manager向Subordinate讀數(shù)據(jù)時,Manager先發(fā)送讀地址,然后等待Subordinate的響應(yīng)。時序圖如下:
2.43?Write?Transcation : multi?data
寫操作時序:多數(shù)據(jù)
如上文所示,Manager向Subordinate寫多個數(shù)據(jù),Manager發(fā)送寫地址和寫數(shù)據(jù),等待Subordinate的響應(yīng)。時序圖如下:
在這里,從第一個寫數(shù)據(jù)到最后一個寫數(shù)據(jù)(data1~data8),在一個Transaction中,整個W通道的數(shù)據(jù)過程稱為一次寫B(tài)urst;寫B(tài)urst內(nèi)部每一拍的數(shù)據(jù)稱為一個寫B(tài)eat。
?
2.44 Read?Transcation : multi?data
讀操作時序:多數(shù)據(jù)
如上文所示,Manager向Subordinate讀數(shù)據(jù)時,Manager先發(fā)送讀地址,然后等待Subordinate的響應(yīng)。時序圖如下:
對比讀操作和寫操作的波形可以明顯看出讀寫通道的不對稱??梢钥吹?strong>每一個讀數(shù)據(jù)都有一個匹配的讀響應(yīng)伴隨,讀響應(yīng)借助讀數(shù)據(jù)通道返回。而寫操作波形圖中,有專門的通道(B通道)進行寫操作的響應(yīng)。
寫響應(yīng)在寫數(shù)據(jù)操作完成之后返回一個寫響應(yīng),而對讀操作來說,伴隨著每個數(shù)據(jù)都有一個讀響應(yīng)。這也能體現(xiàn)兩者不對稱。
在這里,從第一個讀數(shù)據(jù)到最后一個讀數(shù)據(jù)(data0~data5),在一個Transaction中,整個R通道的數(shù)據(jù)過程稱為一次讀Burst;讀Burst內(nèi)部每一拍的數(shù)據(jù)稱為一個讀Beat。
這也就是AMBA spec提到的AXI協(xié)議是基于Burst的傳輸(The AXI protocol is burst-based)。
3.?AXI Channel dependencies
雖然這一節(jié)會提及通道依賴性,但其實來說,通道依賴性已經(jīng)在上文中完整體現(xiàn),即:
1.寫通道的依賴性:寫操作由地址和數(shù)據(jù)開始,到寫響應(yīng)完成。這就定義了第一條依賴性:寫響應(yīng)要在地址和數(shù)據(jù)之后。
2.讀通道的依賴性:讀操作由讀地址開始,到讀數(shù)據(jù)和讀響應(yīng)完成。這就定義了第二條依賴性:讀數(shù)據(jù)和讀響應(yīng)要在讀地址之后。
上面通道依賴性很好理解,只有當(dāng)slave收到命令之后才能給出響應(yīng):對于寫通道的依賴性就是寫地址和寫數(shù)據(jù)都到達slave,這時候slave完成寫操作并給出寫響應(yīng)。對于讀通道的依賴性就是讀地址到達slave后,slave返回讀取的數(shù)據(jù)和讀響應(yīng)。如下AMBA spec原圖所示:
除過上圖所示的依賴特性,在AXI4協(xié)議里面沒有規(guī)定其他任何的依賴關(guān)系。
審核編輯:黃飛
評論
查看更多