張 浩,魏敬和,2
(1.江南大學 物聯(lián)網(wǎng)工程學院,江蘇 無錫 214122; 2.中國電子科技集團公司第五十八研究所,江蘇 無錫 214035)
片上系統(tǒng)(System on Chip,SoC)主要采用第三方的IP核進行設(shè)計,其將不同功能的IP核集成到一個芯片上,以此來實現(xiàn)系統(tǒng)級的功能。因此,實現(xiàn)系統(tǒng)中不同IP核之間的高效通信成為集成過程中的關(guān)鍵問題[1]。在SoC中,不同模塊通過總線進行通信,對此,各種總線協(xié)議相繼被提出,如AMBA協(xié)議[2]、Core Connect協(xié)議等[3]。然而,每一種總線協(xié)議都有其優(yōu)勢和不足,為提高系統(tǒng)的整體性能,研究者往往會權(quán)衡不同協(xié)議的優(yōu)缺點并加以結(jié)合,設(shè)計高能效的多總線系統(tǒng)。多總線系統(tǒng)中的協(xié)議轉(zhuǎn)換是通過總線橋來實現(xiàn)的,一方面將兩種總線的不同接口信號進行轉(zhuǎn)換,另一方面對兩種總線信號的時序進行調(diào)整[4]。
面向總線橋性能要求較高的應(yīng)用場景,本文設(shè)計一種從PLB總線到AXI總線的橋,用以高效完成兩種總線之間的協(xié)議轉(zhuǎn)換和信息傳遞。該設(shè)計支持流水傳輸、讀寫重疊傳輸以及高帶寬的數(shù)據(jù)傳輸,能夠?qū)崿F(xiàn)兩種協(xié)議的精確轉(zhuǎn)換,并且滿足SoC系統(tǒng)對于帶寬和傳輸速率的要求。
PLB總線的讀寫數(shù)據(jù)通道相互獨立,支持讀寫重疊傳輸和突發(fā)傳輸。一個完整的PLB總線傳輸包括地址周期和數(shù)據(jù)周期2個部分[5]。其中,地址周期分為請求、傳輸和地址應(yīng)答3個階段,數(shù)據(jù)周期分為傳輸和數(shù)據(jù)應(yīng)答2個階段[6]。
分立的PLB地址數(shù)據(jù)總線不但允許地址周期與數(shù)據(jù)周期重疊,而且還允許寫數(shù)據(jù)周期與讀數(shù)據(jù)周期重疊[7]。同時,PLB協(xié)議允許地址和數(shù)據(jù)總線擁有不同的主設(shè)備,這使得系統(tǒng)的靈活性得到顯著增強,極大地提高了數(shù)據(jù)吞吐能力。
與PLB總線相比,AXI總線具有以下3個特點:
1)AXI總線分為5個獨立的信息通道,即讀地址通道、寫地址通道、讀數(shù)據(jù)通道、寫數(shù)據(jù)通道和寫響應(yīng)通道。這樣的總線結(jié)構(gòu)有2個優(yōu)點:(1)設(shè)立獨立的數(shù)據(jù)和地址通道便于對每一個通道進行單獨優(yōu)化;(2)獨立的讀寫數(shù)據(jù)通道使AXI總線上的讀數(shù)據(jù)和寫數(shù)據(jù)可以在同一時間進行傳輸,帶寬得到顯著提高[8]。
2)AXI總線每個通道中的信息流都以單方向進行傳輸,彼此的信息傳輸互不干擾[9]。
3)AXI總線上的主設(shè)備與從設(shè)備在進行通信時采用的是Valid/Ready握手機制。主設(shè)備通過Valid信號來指示通道中的信息何時有效,從設(shè)備通過Ready信號來指示是否已準備好接收這些信息。只有當Valid信號和Ready信號同時有效,主從設(shè)備握手成功,通道中的信息才能正確傳輸[10]。
本文設(shè)計的PLB2AXI總線橋是單向的,只允許PLB總線上的主設(shè)備對AXI設(shè)備進行讀寫,而AXI設(shè)備無法發(fā)起針對PLB總線的傳輸。PLB2AXI橋在PLB/AXI系統(tǒng)中的位置如圖1所示。
圖1 PLB/AXI系統(tǒng)架構(gòu)Fig.1 PLB/AXI system architecture
因為總線橋同時掛接在兩條總線上, 所以擁有PLB與AXI 2種接口。在設(shè)計橋的過程中,本文將其分為讀模塊和寫模塊2個部分來分別實現(xiàn),然后根據(jù)讀寫選擇信號PLB_RNW對2個模塊進行片選。
PLB2AXI總線橋中寫模塊由請求處理(REQ)、地址傳輸(ADT)、控制處理(CTP)、數(shù)據(jù)傳輸/轉(zhuǎn)換(DTT)、響應(yīng)處理(RSP)5個功能模塊組成,如圖2所示。
圖2 寫模塊架構(gòu)與信號接口Fig.2 Write module architecture and signal interface
2.2.1 請求處理模塊
在傳輸?shù)刂窌r,請求處理模塊首先要完成AXI地址傳輸通道的握手。PLB總線上的主設(shè)備在發(fā)起跨總線傳輸時會發(fā)出PLB_Request信號,請求占用總線資源進行地址和控制信號的傳輸。如果此時總線空閑且地址傳輸模塊流量允許,則當前傳輸?shù)膶懙刂酚行?AXI_AWValid信號被斷言;如果AXI上的從設(shè)備就緒,則AXI_AWReady信號即被斷言。此時地址通道Valid/Ready握手成功。
2.2.2 地址傳輸模塊
地址傳輸模塊是控制流水線傳輸?shù)闹匾糠?該模塊中設(shè)有地址信息存儲單元。在請求處理模塊完成握手后,開始傳輸?shù)?個地址[11]。當該地址傳輸完畢,地址應(yīng)答信號PLB_AddrAck有效,這標志著從設(shè)備已經(jīng)成功接收地址,地址傳輸周期結(jié)束,數(shù)據(jù)傳輸周期開始。此時,無需等待上一個數(shù)據(jù)傳輸周期結(jié)束,主設(shè)備就可以發(fā)起下一次傳輸請求,并將相關(guān)地址數(shù)據(jù)寫入地址信息存儲單元直至存儲單元滿[12]。待總線允許發(fā)送下一個地址數(shù)據(jù)時,再將存儲單元中的地址信息轉(zhuǎn)換并發(fā)送到AXI總線上,通過此方式實現(xiàn)流水線傳輸。
如圖3所示,PLB_AddrAck信號對于地址傳輸模塊的流水線控制具有十分重要的意義。在該模塊中設(shè)置一個初值為0的寄存器變量outstanding,以此來表示存儲單元中待傳地址的數(shù)目。若PLB_Request有效,則意味著一個新的傳輸被發(fā)起,待傳輸?shù)牡刂窋?shù)outstanding加1;若PLB_AddrAck信號被斷言,則意味著地址已被從設(shè)備成功接收,outstanding的值減1。只要待傳地址數(shù)目小于存儲單元容量,主設(shè)備就可以發(fā)起新的傳輸請求。
圖3 流水線控制機制工作流程Fig.3 Work flow of pipeline control mechanism
2.2.3 控制處理模塊
控制處理模塊的主要功能是對與Burst傳輸有關(guān)的控制信號進行轉(zhuǎn)換。如果PLB_Wburst有效,則當前傳輸為Burst傳輸。在本文設(shè)計中,控制處理模塊的AXI_Wburst信號恒為2’b10,因此,突發(fā)類型被設(shè)置為地址遞增的Burst傳輸。與突發(fā)長度(即突發(fā)次數(shù))和突發(fā)尺寸有關(guān)的控制信號PLB_BE與PLB_Size被轉(zhuǎn)換為AXI_ALen與AXI_Size,具體編碼方式如表1和表2所示[13]。
表1 PLB_BE編碼Table 1 Coding of PLB_BE
表2 PLB_Size編碼Table 2 Coding of PLB_Size
2.2.4 數(shù)據(jù)傳輸/轉(zhuǎn)換模塊
本文設(shè)計中的數(shù)據(jù)傳輸/轉(zhuǎn)換模塊需要完成3個基本任務(wù):1)實現(xiàn)數(shù)據(jù)傳輸通道的Valid/Ready握手;2)完成數(shù)據(jù)的大小端轉(zhuǎn)換(PLB總線上的數(shù)據(jù)按照大端模式進行傳輸,在傳到AXI總線時數(shù)據(jù)要由數(shù)據(jù)傳輸/轉(zhuǎn)換模塊轉(zhuǎn)換成小端模式);3)根據(jù)控制信號進行數(shù)據(jù)傳輸。
數(shù)據(jù)傳輸方式分為突發(fā)傳輸和非突發(fā)傳輸,這些控制信息都由控制處理模塊指定。當接到響應(yīng)處理模塊發(fā)出的PLB_WrDAck信號時,說明該數(shù)據(jù)已被AXI從設(shè)備成功接收。
2.2.5 響應(yīng)處理模塊
在AXI從設(shè)備成功接收地址和數(shù)據(jù)后,傳輸進入應(yīng)答反饋階段。響應(yīng)處理模塊首先完成響應(yīng)通道的握手,然后對AXI從設(shè)備發(fā)來的應(yīng)答信號AXI_BResp進行處理,最后將其轉(zhuǎn)換為PLB應(yīng)答信號反饋給主設(shè)備。
1)處理應(yīng)答信號AXI_BResp:如果應(yīng)答信號AXI_BResp為“OKAY”(2’b00),說明從設(shè)備成功接收地址和數(shù)據(jù),響應(yīng)處理模塊分別將PLB_AddrAck和PLB_WrDAck斷言并發(fā)送給主設(shè)備,以此作為本次傳輸?shù)膽?yīng)答;如果應(yīng)答信號AXI_BResp為不是“OKAY”,說明地址或數(shù)據(jù)傳送出現(xiàn)錯誤,響應(yīng)處理模塊將PLB_WrIrq信號拉高作為本次傳輸?shù)膽?yīng)答。
2)如果總線正在進行傳輸,響應(yīng)處理模塊會將PLB_Busy發(fā)送給主設(shè)備,這意味著數(shù)據(jù)通道正在被占用。
如圖4所示,本文中讀模塊與寫模塊的架構(gòu)基本相同。
圖4 讀模塊架構(gòu)與信號接口Fig.4 Read module architecture and signal interface
兩者的主要區(qū)別為:
1)數(shù)據(jù)傳輸方向不同。寫模塊中的數(shù)據(jù)是從PLB發(fā)往AXI總線的,而讀模塊中的數(shù)據(jù)傳輸方向是從AXI到PLB總線的。因此,讀模塊中的數(shù)據(jù)傳輸/轉(zhuǎn)換模塊需要對數(shù)據(jù)傳輸方向進行相應(yīng)調(diào)整,而且數(shù)據(jù)應(yīng)從AXI總線的小端模式轉(zhuǎn)換為PLB總線的大端模式。
2)讀模塊沒有響應(yīng)通道。讀模塊中的響應(yīng)信息是伴隨著數(shù)據(jù)一起從AXI發(fā)往PLB總線的,無需設(shè)立專用的“讀響應(yīng)通道”。因此,在讀模塊中無需進行AXI_BValid與AXI_BReady的握手,而是直接由AXI總線將反饋信息AXI_Resp發(fā)送給讀響應(yīng)處理模塊進行處理。
本文設(shè)計充分利用了高性能總線PLB和AXI的性能優(yōu)勢,通過采用流水線傳輸和實施PLB與AXI協(xié)議所支持的讀寫重疊傳輸來提高總線橋的轉(zhuǎn)換和傳輸效率。
傳統(tǒng)總線橋的數(shù)據(jù)通道和地址通道之間存在相互等待反饋的問題。在圖5(a)所示的傳統(tǒng)總線橋設(shè)計中,必須等待上一次的地址和數(shù)據(jù)傳輸完成后,下一個地址數(shù)據(jù)才能開始傳輸,這無形中增加了各環(huán)節(jié)的等待時間,降低了系統(tǒng)的效率[14]。在圖5(b)所示的流水線總線橋設(shè)計中,主設(shè)備可以連續(xù)向從設(shè)備發(fā)送多個訪問請求,在進行一個訪問的同時也可以發(fā)布新的訪問請求,直至暫存地址數(shù)據(jù)FIFO滿[15]。本文設(shè)計的總線橋不僅支持流水線傳輸,還充分利用了PLB與AXI總線讀寫數(shù)據(jù)通道分離的結(jié)構(gòu)優(yōu)勢,加入了讀寫重疊傳輸機制。在圖5(c)所示的設(shè)計中,主設(shè)備向從設(shè)備連續(xù)發(fā)起多次讀寫操作請求,各個讀寫地址依次進行傳輸,在進入數(shù)據(jù)周期后,讀寫數(shù)據(jù)分別利用各自的讀寫數(shù)據(jù)通道進行傳送[16],讀數(shù)據(jù)傳輸和寫數(shù)據(jù)傳輸可以并發(fā)執(zhí)行而無需相互等待,此讀寫重疊機制可在流水線傳輸?shù)幕A(chǔ)上進一步縮短傳輸時間,大幅提高帶寬利用率和系統(tǒng)傳輸效率。
圖5 總線橋高性能策略Fig.5 Bus bridge transmission performance strategy
本文使用Synopsys公司的VCS工具對PLB2AXI橋進行功能仿真,然后通過Verdi工具對得到的波形進行處理和查看。寫突發(fā)傳輸、讀突發(fā)傳輸以及流水線與重疊傳輸波形分別如圖6~圖8所示。地址周期開始后,總線橋開始進行表3所示地址與傳輸控制信號的傳輸。
表3 地址與傳輸控制信號Table 3 Address and transmission control signals
在AXI端成功接收相關(guān)信號后,地址應(yīng)答信號PLB_AddrAck被拉高,地址周期結(jié)束,數(shù)據(jù)周期開始,數(shù)據(jù)在經(jīng)過大小端轉(zhuǎn)換后,通過128位數(shù)據(jù)總線PLB_WrDBus/AXI_WData開始依次傳輸[17]。每成功接收到一個數(shù)據(jù),PLB_WrDAck信號都被拉高一次。在寫突發(fā)傳輸中,完成數(shù)據(jù)接收的從設(shè)備會在寫響應(yīng)通道握手后發(fā)送反饋信號“OKEY”[18];而在讀突發(fā)傳輸中,數(shù)據(jù)應(yīng)答伴隨讀數(shù)據(jù)一同發(fā)往PLB主設(shè)備。在圖6與圖7中,完成寫突發(fā)共用16個時鐘周期,完成讀突發(fā)共用18個時鐘周期。
圖7 讀突發(fā)傳輸波形Fig.7 Read burst transmission waveform
圖6 寫突發(fā)傳輸波形Fig.6 Write burst transmission waveform
在圖8中,總線橋通過流水線和讀寫重疊的方式進行傳輸,PLB端總共發(fā)起4次讀寫請求,分別是“寫”-“讀”-“寫”-“讀”請求。PLB_BURST信號為“1”說明本次傳輸為突發(fā)傳輸。4次讀寫操作的地址分別為32’hc000_0000、32’hc000_0030、32’hc000_0038和32’hc000_0010,并且PLB_BE和PLB_Size為16’h3000和4’b1100,說明此次傳輸為固定長度的四字突發(fā)傳輸,突發(fā)次數(shù)為4次。在上一次地址傳輸完畢之后,無需等待數(shù)據(jù)周期結(jié)束即可進行下一個地址的傳輸,每次地址傳輸間隔一個時鐘周期。在每個地址傳輸完成后,讀寫數(shù)據(jù)分別通過讀寫傳輸通道并發(fā)傳輸,讀寫數(shù)據(jù)周期相互重疊,大幅縮短了數(shù)據(jù)的傳輸時間[7]。第1次讀寫數(shù)據(jù)傳輸完成后4個時鐘周期,第2次讀寫數(shù)據(jù)的傳輸并發(fā)進行,讀寫數(shù)據(jù)周期仍然重疊,完成4次讀寫操作共需要37個時鐘周期。
圖8 流水線與重疊傳輸波形Fig.8 Pipeline and overlap transmission waveforms
本文設(shè)計的PLB2AXI總線橋與傳統(tǒng)不進行流水線傳輸和重疊傳輸?shù)目偩€橋的對比如表4所示??梢钥闯?引入流水線傳輸和重疊傳輸?shù)腜LB2AXI方案總耗時僅為傳統(tǒng)方案的54.41%,驗證了PLB2AXI總線橋的優(yōu)越性。
表4 不同傳輸方案的耗時對比Table 4 Time consuming comparison of different transmission schemes ms
為驗證SoC的功能,進而測試總線橋在系統(tǒng)中是否正常工作,搭建由HAPS及相關(guān)外設(shè)子板構(gòu)成的FPGA系統(tǒng)驗證平臺,如圖9所示。
圖9 FPGA系統(tǒng)驗證環(huán)境Fig.9 FPGA system verification environment
HAPS Prototyping Solution是Synopsys基于FPGA的原型驗證解決方案[19],其是一個完整的FPGA系統(tǒng)驗證環(huán)境。該平臺不僅提供高性能的FPGA平臺硬件,而且提供與之緊密配套的自動化調(diào)試環(huán)境HAPS Proto Compiler[20]。在本文設(shè)計中,PLB總線上的PowerPC內(nèi)核通過PLB2AXI總線橋進行協(xié)議轉(zhuǎn)換,然后對用戶IP Main controller的寄存器進行如表5所示的配置。
表5 對用戶IP寄存器的配置值Table 5 Configuration value of user’s IP register
執(zhí)行配置程序后,PowerPC成功完成了對Main controller中各寄存器的的配置,配置后的寄存器結(jié)果如圖10所示。測試結(jié)果不僅驗證了PLB2AXI總線橋協(xié)議轉(zhuǎn)換功能的正確性,還驗證了SoC系統(tǒng)的跨總線配置功能的正確性。
圖10 寄存器配置結(jié)果與FPGA驗證實物圖Fig.10 Register configuration result and physical diagram of FPGA verification
本文通過引入流水線傳輸和讀寫重疊機制,設(shè)計PLB2AXI高性能總線橋,以實現(xiàn)SoC中各模塊協(xié)議的精確轉(zhuǎn)換,提升傳輸效率。實驗結(jié)果表明,對于同樣的傳輸任務(wù),PLB2AXI用時僅為傳統(tǒng)總線橋的54.41%,時間開銷大幅降低。此外,系統(tǒng)級的FPGA驗證也進一步證明了該設(shè)計的正確性。后續(xù)將優(yōu)化本文PLB2AXI總線橋的傳輸性能,并將其應(yīng)用于多總線SoC系統(tǒng)的設(shè)計中,以此提升系統(tǒng)的整體工作效率。