石 敏 莫錦輝 易清明
暨南大學信息科學與技術(shù)學院, 廣州 510632
隨著芯片集成度越來越高,基于知識產(chǎn)權(quán)(Intellectual Property,IP)進行片上系統(tǒng)(System on Chip,SoC)芯片設計的能力和技術(shù)得到了迅速提高。有關IP核復用的SoC設計方法學已成為解決設計成本高、開發(fā)周期長以及功能復雜等問題的有效手段[1]。在IP核復用過程中,SoC系統(tǒng)需要片上總線實現(xiàn)各個IP核之間的互聯(lián)。不同的總線技術(shù)會對系統(tǒng)的傳輸效率造成差異,從而影響系統(tǒng)的整體性能。目前市面上仍然有許多串行外設接口(Serial Peripheral Interface,SPI)和通用異步收發(fā)傳輸器(Universal Asynchronous Receiver /Transmitter,UART)用于串行通信總線,因其低速傳輸?shù)木窒拊斐蒘oC系統(tǒng)傳輸效率低和CPU指令執(zhí)行效率低的問題[2]。AXI4(Advanced eXtensible Interface)總線作為ARM公司于2010年推出的一種最新總線規(guī)范,因其高效的傳輸效率和可靠性能,廣泛應用在工程上。本文在研究AXI4最新協(xié)議的基礎上,通過擴展ARMv4自定義指令和提出支持全雙工通信的AXI4協(xié)議轉(zhuǎn)換接口,實現(xiàn)一個由主機CPU、AXI4總線和從機SPI、UART組成的互聯(lián)模型。
目前絕大多數(shù)的AXI4總線互聯(lián)模型[3-5]采用APB轉(zhuǎn)換橋?qū)崿F(xiàn)總線與外設的互聯(lián),但由于APB 協(xié)議的局限,兩者之間不能同時進行讀和寫操作;它也沒有指出主機與總線之間具體的互聯(lián)方式。本文設計的互聯(lián)模型采用支持AXI4協(xié)議的從機接口,實現(xiàn)了總線與從機之間的全雙工通信,具有較高的傳輸效率。另外,提供了主機與總線互聯(lián)的具體方案,具有較強的實用性。
如圖1互聯(lián)模型所示,CPU分別通過AXI4總線與UART和SPI互聯(lián)。AXI4總線模塊內(nèi)部分為主機接口、AXI4接口、中繼模塊和從機接口。下面分別介紹CPU與AXI4總線互聯(lián)和AXI4總線與SPI、UART互聯(lián)。
圖1 支持AXI4總線協(xié)議的IP核互聯(lián)模型
1.1.1 AXI4總線概述
ARM公司推出的AXI4總線標準可以滿足目前SoC系統(tǒng)對總線帶寬和通訊復雜度等要求,它已成為業(yè)界片上總線的首選及學術(shù)界的研究熱點[6-11]。AXI4總線包含讀地址、讀數(shù)據(jù)、寫地址、寫數(shù)據(jù)和寫響應5個獨立通道。采用獨立傳輸通道可以避免信號阻塞和錯誤冗余,且允許讀和寫傳輸同時進行,提高了讀寫效率。AXI4總線增強了猝發(fā)模式的支持和多個設備互聯(lián)的利用率,為保證數(shù)據(jù)傳輸?shù)男侍岢鰜y序操作,對于不同的訪問可以亂序進行(如圖2所示),使用 ID標記訪問的歸屬。
圖2 AXI4總線亂序操作示意圖
1.1.2 AXI4主機接口
SoC系統(tǒng)內(nèi)部的各個IP核之間必須都要具備時序要求一致的接口才能實現(xiàn)互聯(lián)。如果時序要求不一致,需要在原來的IP上擴展轉(zhuǎn)換接口。CPU與AXI4總線需要通過主機接口(圖3所示)才能實現(xiàn)互聯(lián)。主機接口的作用是將CPU產(chǎn)生的地址、數(shù)據(jù)和控制信號進行協(xié)議轉(zhuǎn)換,并按照一定的時序邏輯提供給AXI4總線。
圖3 主機接口
如圖4和5主機操作時序圖所示,主機先提供一次地址/控制信息(addr/length,type,rd_req,wr_req)給AXI4總線發(fā)起讀寫操作請求。在從機回應rd_addack /wr_addrack,主機發(fā)起的讀/寫操作分別通過獨立的通道進行數(shù)據(jù)傳輸,主機最后根據(jù)rd_cmplt/wr_cmplt信號確認傳輸完成。當主機在發(fā)送讀地址ADDR1后立即發(fā)送下一個讀地址ADDR2,AXI4總線就存在兩個待被讀傳輸,即交疊傳輸。交疊傳輸能支持該流水傳輸,可以減少傳輸延遲,提高數(shù)據(jù)傳輸效率。
圖4 AXI4主機接口讀操作時序圖
圖5 AXI4主機接口寫操作時序圖
1.1.3 支持AXI4主機接口的CPU設計
互聯(lián)模型的嵌入式CPU支持ARMv4指令集,具有體積小、功耗低及執(zhí)行效率高等優(yōu)點。如圖6所示,CPU按照功能劃分為3個主要模塊:控制模塊、數(shù)據(jù)通路模塊和運算器模塊[12]。
圖6 CPU內(nèi)核結(jié)構(gòu)
控制模塊負責對指令進行譯碼操作,分析出當前指令所要實現(xiàn)的功能,并將指令執(zhí)行操作涉及的相關寄存器和存儲器選擇信號發(fā)送給數(shù)據(jù)通路模塊。數(shù)據(jù)通路模塊產(chǎn)生數(shù)據(jù)通路信號對指定的寄存器或存儲器進行讀寫操作,同時配合運算模塊的數(shù)據(jù)運算操作,對寄存器進行回寫操作,從而完成指令的執(zhí)行功能。
CPU內(nèi)核能夠?qū)崿F(xiàn)5大類指令功能:分別是數(shù)據(jù)處理指令、乘法指令、跳轉(zhuǎn)指令、加載/存儲指令和傳輸指令。一條典型的32位ARM指令編碼格式如圖7所示。
如表1所示,本文擴展3條ARMv4自定義指令用于實現(xiàn)CPU與AXI4之間的數(shù)據(jù)傳輸。MRB指令用于CPU讀取AXI4總線的數(shù)據(jù),實現(xiàn)將主機接口的數(shù)據(jù)讀取到CPU寄存器堆的功能;MBR指令用于CPU對AXI4總線寫數(shù)據(jù),實現(xiàn)將CPU寄存器堆的內(nèi)容寫到主機接口的功能。MBI指令用于設置AXI4總線猝發(fā)的地址、長度和類型,實現(xiàn)將立即數(shù)直接寫到主機接口的功能。
表1擴展的ARMv4自定義指令
AXI4總線的中繼模塊將AXI4接口通過路由的方式拓展為2個AXI4接口,它通過尋址的方式選擇與SPI、UART中的1個進行通信。
1.2.1 AXI4從機轉(zhuǎn)接口
如圖8所示,從機接口的作用是實現(xiàn)AXI4總線與SPI、UART之間的地址、數(shù)據(jù)和控制信號的轉(zhuǎn)換。
圖8 從機接口
從機接口AXI4總線對外圍設備的讀和寫操作時序圖與主機接口CPU對AXI4的讀和寫操作時序相似。
1.2.2 AXI4從機接口的SPI設計
SPI是一種同步串行接口,可以同時驅(qū)動串行數(shù)據(jù)的發(fā)送和接收[12]。它有SCK同步串行時鐘線,SDI串行數(shù)據(jù)輸入線,SDO 串行數(shù)據(jù)輸出線,和SS從器件選擇線??梢酝ㄟ^對時鐘極性和時鐘相位的配置來選擇SPI四種傳輸模式的一種。
SPI具有接口少、時序簡單及功能強大等優(yōu)點。但它缺點也比較明顯:沒有傳輸需求和應答機制,不能夠很好地確定數(shù)據(jù)收發(fā)是否正確。本文設計的支持AXI4從機接口的SPI(如圖9所示)可以解決這些問題,并且實現(xiàn)了高速總線與低速設備的兼容。
圖9 支持AXI4從機接口的SPI結(jié)構(gòu)圖
它主要包含以下幾個模塊:收發(fā)控制模塊、時鐘模塊、接收FIFO、發(fā)送FIFO和總線接口控制模塊。收發(fā)控制模塊的功能是時刻檢測發(fā)送FIFO和接收FIFO中數(shù)據(jù)的存儲狀態(tài),控制數(shù)據(jù)的發(fā)送和接收。接收FIFO用于存儲SPI接口收到的數(shù)據(jù),而發(fā)送FIFO用于存儲SPI接口要發(fā)送出去的數(shù)據(jù),兩者都會同時向收發(fā)控制模塊和總線接口控制模塊發(fā)送FIFO存儲信息??偩€接口控制模塊的功能是實現(xiàn)AXI4總線與SPI的讀寫操作:當AXI4總線要對外發(fā)送數(shù)據(jù)時,總線接口控制模塊會向發(fā)送FIFO發(fā)送寫信號,并將數(shù)據(jù)寫入到發(fā)送FIFO中,然后等待SPI將FIFO中的數(shù)據(jù)發(fā)送出去;當AXI4總線要接收數(shù)據(jù)時,總線接口控制模塊會向接收FIFO發(fā)送讀信號,并讀出FIFO中的數(shù)據(jù)。
1.2.3 支持AXI4從機接口的UART設計
UART 是一種異步通信接口,支持串行鏈路上的全雙工通信[13]。 通信的發(fā)送方和接收方各自有獨立的時鐘,傳輸?shù)乃俾视呻p方約定。它的作用是將接收到的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)或者將并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)發(fā)送。
UART有2根信號線:發(fā)送信號txd和接收信號rxd。通常情況下,一幀數(shù)據(jù)包括起始位、數(shù)據(jù)位、奇偶校驗位和停止位。UART的數(shù)據(jù)傳輸格式以低電平作為起始位,可傳輸從低位到高位順序排列的8 比特數(shù)據(jù),1 比特奇偶校驗位,最后以高電平作為停止位。
由于UART采用串行通信,一幀只能傳輸8比特有效數(shù)據(jù),傳送效率非常低。本文設計支持AXI4從機接口的UART能夠利用AXI4總線的優(yōu)勢減少傳輸延遲,實現(xiàn)CPU與UART之間快速的數(shù)據(jù)傳輸。
如圖10所示,UART可分為發(fā)送單元、接收單元、波特率產(chǎn)生器和總線接口控制模塊。
圖10 支持AXI4從機接口的UART的結(jié)構(gòu)圖
UART的發(fā)送單元由發(fā)送模塊、發(fā)送控制模塊及發(fā)送FIFO組成。發(fā)送模塊的主要功能是接收來自FIFO的有效數(shù)據(jù)信號,將并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù),并添加起始位、奇偶校驗位和停止位后通過發(fā)送端口按位發(fā)送出去。發(fā)送控制模塊的作用是檢測FIFO中數(shù)據(jù)的存儲狀態(tài),控制發(fā)送模塊對FIFO的讀操作。同樣,UART的接收單元由接收模塊、接收控制模塊以及接收FIFO組成。接收模塊的主要功能是檢測接收信號線上的數(shù)據(jù)是否有效,并將接收到的串行有效數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)寫入到FIFO。接收控制模塊的作用是根據(jù)FIFO的存儲情況來控制接收模塊對FIFO的寫操作。UART總線接口控制模塊的功能是實現(xiàn)AXI4總線與SPI的讀寫操作。
編寫CPU測試指令(表2所示),并用Modelsim -Altera 10.1a對整個互聯(lián)模型進行仿真驗證,通過判斷主機CPU、AXI4總線和從機SPI、UART之間的數(shù)據(jù)傳輸與指令測試內(nèi)容的預期值是否一致,驗證模型的正確性。Modelsim需要提供激勵源,其中包括對SPI的MISO輸入端提供數(shù)據(jù)35h、69h、92h和UART的rxt輸入端提供數(shù)據(jù)8fh、89h和b3h。
表2ROM存儲的測試指令
指令測試主要內(nèi)容是:CPU申請地址為00000400h,長度為3的寫猝發(fā),并依次將R0、R5和R3上的數(shù)據(jù)發(fā)給AXI4總線;CPU申請對地址為00000400h,長度為3的讀猝發(fā)操作,并將讀數(shù)據(jù)存放在R3;CPU申請地址為00000000h,長度為3的寫猝發(fā),并依次將R2、R6、和R7上的數(shù)據(jù)發(fā)給AXI4總線;將R0~R5上數(shù)據(jù)批量加載到以地址0x40000020為開始的RAM;CPU申請地址為00000000h,長度為3的讀猝發(fā)操作,并將讀數(shù)據(jù)存放在R2上。
圖11和12分別是CPU發(fā)起讀寫操作時主機接口和從機接口的時序圖,從中可以觀察到兩者均有與測試指令相對應的傳輸數(shù)據(jù)。
從圖13模型的系統(tǒng)仿真圖可以看到:CPU執(zhí)行數(shù)據(jù)處理和存儲加載指令后,R0~R7的數(shù)據(jù)分別為00000037、00000045、000000ef、0000007c、0000406b、00000ed3、40000020和00000406,均與預算值相符;CPU執(zhí)行完所有指令后,R2上的數(shù)據(jù)依次出現(xiàn)00000035、00000069和00000092,R3上的數(shù)據(jù)依次出現(xiàn)0000008f、00000089和000000b3,并且以上6個數(shù)據(jù)以交叉的形式出現(xiàn),表明CPU能充分利用AXI4總線亂序傳輸、交疊傳輸?shù)臋C制,同時讀取了SPI和UART數(shù)據(jù),并且所讀數(shù)據(jù)與Modelsim提供的數(shù)據(jù)一致;UART的txd信號輸出00000037、00000ed3和0000007c,SPI的MOSI信號輸出000000ef、40000020和0000406b,表明UART、SPI能正確接收CPU發(fā)出的數(shù)據(jù)。
圖11 主機接口仿真圖
從MOSI、MISO、txd和rxd的波形可以看出,CPU可同時與SPI、UART進行全雙工通信。另外,當CPU與SPI、UART傳輸數(shù)據(jù)時,CPU已經(jīng)提前執(zhí)行耗時較多的批量加載指令E8A6003F,這說明CPU高速的指令執(zhí)行與系統(tǒng)低速的數(shù)據(jù)傳輸是相互獨立的。由仿真圖測得:CPU執(zhí)行所有的測試指令需要36個時鐘周期,SPI數(shù)據(jù)傳輸需要60個時鐘周期,UART數(shù)據(jù)傳輸需要192個時鐘周期。CPU可以充分利用系統(tǒng)數(shù)據(jù)傳輸延遲的156個時鐘周期去處理系統(tǒng)的其它事務,具有很高的指令執(zhí)行效率。
圖12 從機接口的仿真圖
圖13 模型系統(tǒng)功能仿真圖
圖14 自定義SPI讀寫時序圖
文獻[2]模型采用的是幀長固定為32個比特的自定義SPI串行總線讀寫時序(圖14所示),需要主機先提供控制和地址字段,才能傳輸一個16比特的數(shù)據(jù),即總線數(shù)據(jù)傳輸利用率僅僅為50%。文獻[3]模型采用APB轉(zhuǎn)換橋?qū)崿F(xiàn)AXI4總線與SPI的互聯(lián),但兩者之間不能同時進行讀和寫操。將本文模型與文獻[2]和[3]涉及的模型在傳輸性能上做比較。在CPU時鐘頻率為100MHz,AXI4總線和SPI的時鐘頻率都為25MHz的條件下 ,CPU對SPI先后發(fā)起100個字節(jié)數(shù)據(jù)的讀和寫操作,其結(jié)果如表3所示。
表3 不同模型的傳輸性能比較
從表3中可以看出,本文設計的互聯(lián)模型相較于文獻[2]的帶寬提高127倍,傳輸時間減少97.2%;比文獻[2]的帶寬提高33.3%,傳輸時間減少56.1%,說明本文互聯(lián)模型的帶寬和傳輸速率都得到了很好的優(yōu)化和提升。
在研究ARM公司最新的AXI4協(xié)議基礎上,通過擴展ARMv4自定義指令和提出一種基于AXI4總線協(xié)議的轉(zhuǎn)換接口,設計并實現(xiàn)了一種支持多個從機同時全雙工通信的IP核互聯(lián)模型。該模型能夠克服市面上大多數(shù)SoC主機與多個從機進行通信、需要長時間排隊等待和讀寫操作不能同時進行的問題,具有廣泛的應用前景和市場需求。仿真及實驗結(jié)果表明,該模型能夠大幅度地提高數(shù)據(jù)傳輸效率并且CPU具備較高的指令執(zhí)行效率。