摘要: 現(xiàn)代信號處理系統(tǒng)通常需要在不同處理器之間實現(xiàn)高速數(shù)據(jù)通信,SRIO協(xié)議由于高效率、低延時的特性被廣泛使用。本文研究了在FPGA和DSP兩種處理器之間實現(xiàn)SRIO協(xié)議的方法,并通過電路設(shè)計和利用處理器的開發(fā)工具編程實現(xiàn)了兩種處理器間的高速通信。經(jīng)測試,該系統(tǒng)具有較高的傳輸效率。
引言
隨著高性能信號處理系統(tǒng)對運算速度、通信速率等要求的不斷提高,單獨的處理器(如FPGA或DSP)無法滿足高速實時信號處理的需求。TI公司的多核DSP處理性能強大,但是并行性不強,難以適應(yīng)計算異常密集的應(yīng)用,另外集成性的DSP接口也影響了數(shù)據(jù)傳輸?shù)撵`活性;FPGA具有極強的并行性,適合密集計算應(yīng)用,而且可配置I/O和IP核支持多種數(shù)據(jù)傳輸接口,但FPGA的內(nèi)部邏輯資源和存儲資源有限,并且開發(fā)難度大,實現(xiàn)復(fù)雜算法也比較困難。
因此,結(jié)合多核DSP和FPGA的優(yōu)勢,構(gòu)建基于異構(gòu)處理器的信號處理系統(tǒng)成為當(dāng)前一種發(fā)展趨勢。異構(gòu)處理器間的高速通信成為高速信號處理系統(tǒng)的關(guān)鍵問題之一,本文基于SRIO協(xié)議設(shè)計和實現(xiàn)了DSP與FPGA之間的高速數(shù)據(jù)通信。
異構(gòu)處理器電路
1.1DSP處理器
在處理器領(lǐng)域,多核DSP在處理性能、功耗和面積上都有很大優(yōu)勢,得到了廣泛應(yīng)用。TI公司的8核處理器TMS320C6678,基于KeyStone多核結(jié)構(gòu),具有高性能的浮點、定點計算能力,單核具有1 GHz的主頻,運算速度可達(dá)320 GMACS/160 GFLOPS。該DSP采用同構(gòu)多核架構(gòu),每個核可以獨立地執(zhí)行不同的計算任務(wù),具有512 KB的私有內(nèi)存。芯片具有4 MB共享內(nèi)存供8個核心訪問,而且具有SRIO、PCIe等多種接口,能夠滿足各種數(shù)據(jù)傳輸?shù)男枨蟆?/span>
1.2FPGA處理器
FPGA因其功能強大、接口靈活,成為當(dāng)前的主流處理器之一,F(xiàn)PGA與DSP芯片有機結(jié)合不僅能夠高效地實現(xiàn)復(fù)雜算法,而且還可以提高系統(tǒng)數(shù)據(jù)傳輸?shù)男屎徒Y(jié)構(gòu)的靈活性。Xilinx公司Virtex6 LXT系列FPGA芯片XC6VLX550T,是一款具有高級串行數(shù)據(jù)傳輸功能的高性能邏輯器件,基于硬件GTX串行收發(fā)器,可以實現(xiàn)多種高速數(shù)據(jù)傳輸接口。采用SRIO IP核可以實現(xiàn)FPGA和DSP之間的SRIO協(xié)議通信。
1.3異構(gòu)處理器電路互連
RapidIO[3]協(xié)議是一個開放的點對點分組交換標(biāo)準(zhǔn),是面向嵌入式系統(tǒng)開發(fā)提出的高可靠、高性能、基于包交換的互連技術(shù)。串行RapidIO[4](SRIO)是采用串行差分模擬信號傳輸?shù)腞apidIO協(xié)議,基于SerDes(Serialize Deserialize)技術(shù),采用差分交流耦合信號(具有抗干擾能力強、速率高、傳輸距離較遠(yuǎn)等優(yōu)點),所以SRIO是一個針對嵌入式系統(tǒng)應(yīng)用的高性能、低引腳數(shù)的高速互連接口。
SRIO協(xié)議分為3層:邏輯層、傳輸層和物理層。邏輯層定義了操作協(xié)議;傳輸層定義了包交換、路由和尋址機制;物理層定義了電氣特性、鏈路控制和糾錯重傳等。SRIO是基于包交換的高速互連技術(shù),其數(shù)據(jù)包是由包頭、有效的數(shù)據(jù)載荷和16位CRC校驗組成。包頭的長度根據(jù)包類型不同,可能為十幾到二十幾個字節(jié),最大的有效載荷長度為256字節(jié)。由于包長度短,所以傳輸延時較小,硬件上也易于實現(xiàn),適合數(shù)字信號處理場合對傳輸延時要求較高的應(yīng)用。
TMS320C6678集成了支持SRIOv2.1通信協(xié)議的4通道SRIO接口,可以實現(xiàn)每條通路1.25 Gbps、2.5 Gbps、3.125 Gbps、5 Gbps的通信速率。XC6VLX550T的GTX模塊嵌入Serial RapidIO IP核,可支持線速率為1.25 Gbps,2.5 Gbps~3.125 Gbps,因此可實現(xiàn)異構(gòu)處理器DSP與FPGA之間的SRIO高速串行通信。
為了最大程度地體現(xiàn)RapidIO串行接口的性能,本設(shè)計中采用3.125 Gbps的線速率,處理器之間采用4xSRIO連接方式, 1個1x接口即是一個差分對的一對讀/寫信號,一個4x接口即4個此類差分對的結(jié)合,因此采用4x SRIO連接可實現(xiàn)最高12.5 Gbps的數(shù)據(jù)傳輸速率。電路連接方式如圖1所示,只需要將DSP的TX、RX端口與FPGA的RX、TX端口對應(yīng)相接,由于SRIO采用差分線對實現(xiàn)數(shù)據(jù)傳輸,所以需要在異構(gòu)處理器的RX端口的差分線上串聯(lián)一個0.1 μF的電容,做交流耦合使用。
圖1 異構(gòu)處理器連接方式
SRIO設(shè)計
DSP和FPGA作為SRIO連接的端點器件,兩者可互為從屬[5]。主設(shè)備需要管理通信的發(fā)起、配置、結(jié)束等一系列過程,從設(shè)備只需要被動地響應(yīng)通信?;贒SP的編程比FPGA簡便,為了降低開發(fā)難度和工作量,采用DSP作為主設(shè)備,是通信的發(fā)起端;FPGA作為從設(shè)備,是通信的目的端。
2.1 DSP端的SRIO配置
DSP端SRIO的軟件設(shè)計基于SYS/BIOS操作系統(tǒng),使用TI公司提供的多核軟件開發(fā)套件(MCSDK),主要組件是開發(fā)平臺中的芯片支持庫(CSL)工具。CSL是TI公司為其DSP產(chǎn)品提供的API函數(shù),提供了一個用于配置和控制片上外設(shè)的C語言接口,在程序設(shè)計過程中利用CSL庫函數(shù)可以方便地訪問DSP的寄存器和硬件資源,提高DSP軟件的開發(fā)效率和速度。
2.1.1 SRIO初始化
實現(xiàn)SRIO重要的一步是SRIO的初始化,一般分為以下幾步:
① 打開SRIO的電源和時鐘:為了降低功耗,默認(rèn)狀態(tài)下SRIO模塊的電源和時鐘是處于關(guān)閉狀態(tài)的,因此 SRIO 初始化首先要調(diào)用CSL_SRIO_OPEN函數(shù)將SRIO模塊的電源和時鐘打開。
② 配置SRIO的串并轉(zhuǎn)換器:將125 MHz的參考時鐘通過串并轉(zhuǎn)換器內(nèi)部的鎖相環(huán)倍頻至1.25 GHz,串并轉(zhuǎn)換器采用半速率時鐘模式,利用這個時鐘信號的上升沿和下降沿對4路8位數(shù)據(jù)分時移位輸出,即每個時鐘串并轉(zhuǎn)換器的串行輸出端將輸出2位的數(shù)據(jù),采用該模式降低了對時鐘信號的要求,降低了電路設(shè)計難度。
③ 設(shè)置4x工作模式:C6678有4個SRIO端口,將4路串并轉(zhuǎn)換器使能。定義SRIO通信鏈路端點器件的ID,C6678提供了8個LSU模塊用于SRIO數(shù)據(jù)操作的處理,每組LSU都有7個32位寄存器,通過配置LSUx_reg4將源器件DSP的ID設(shè)為0x00,目的器件FPGA的ID設(shè)計為0xFF。
④ 等待SRIO初始化完成:通過配置SP_ERR_STAT寄存器,檢測SRIO的端口狀態(tài)是否OK,如果OK,則表示可以進(jìn)行SRIO通信,否則提示初始化不成功或者其他情況導(dǎo)致不能通信。在SRIO初始化前需要FPGA端完成SRIO邏輯的配置,否則DSP在初始化SRIO期間無法和FPGA進(jìn)行握手,會導(dǎo)致初始化失敗。
2.1.2 SRIO的讀寫操作
SRIO初始化完成后,通過DSP對SRIO端口的讀寫操作實現(xiàn)和FPGA之間的數(shù)據(jù)傳輸。DSP讀寫支持的操作通過數(shù)據(jù)包格式中的Ftype和Ttype兩個字段描述,I/O邏輯操作是簡單實用的傳輸方式,使用該模式的前提是主設(shè)備要知道被訪問端的存儲器映射,可以直接讀寫從設(shè)備的存儲器。I/O邏輯操作在被訪問端的功能往往完全由硬件實現(xiàn),所以被訪問的器件不會有任何軟件負(fù)擔(dān)。表1所列為I/O操作的幾種事務(wù)類型。本文使用的讀操作事務(wù)是NREAD。在3種寫操作事務(wù)中:NWRITE_R是帶響應(yīng)的寫操作,效率較低;SWRITE要求數(shù)據(jù)載荷長度在8~256字節(jié)之間,且為8字節(jié)的整數(shù)倍。因此本文采用NWRITE寫操作,配置簡單且易于實現(xiàn)。
圖2 FPGA端的SRIO實現(xiàn)結(jié)構(gòu)
I/O邏輯操作使用了SRIO的功能模塊LSU(Load Store Unit)和MAU(Memory Access Unit)。LSU實現(xiàn)I/O邏輯操作數(shù)據(jù)包的讀寫;MAU提取數(shù)據(jù)包中的源地址、目的地址、數(shù)據(jù)長度等信息,從而將數(shù)據(jù)包的有效數(shù)據(jù)載荷寫入指定位置。DSP端SRIO的I/O邏輯操作可以分為4個部分:
① 鎖定LSU寄存器:CSL_SRIO_IsLSUFull函數(shù)讀取LSUx_reg6寄存器中的FULL位,為1,則LSU所有的影子寄存器已經(jīng)寫入配置文件等待數(shù)據(jù)發(fā)送,暫時沒有可用的影子寄存器。
② 配置寄存器:配置LSU寄存器0~4,獲取傳輸信息,包括源地址dspAddress、目的地址rapidIOLSB、數(shù)據(jù)長度bytecount等,程序使用的函數(shù)是CSL_SRIO_SetLSUTransfer。
圖3 RapidIO接口模塊實現(xiàn)方案
③ 釋放寄存器:完成鎖定和配置LSU寄存器后,最后配置LSU寄存器5,確定數(shù)據(jù)包的事務(wù)類型,配置完成后通過CSL_SRIO_IsLSUBusy函數(shù)檢測LSUx_reg6寄存器中的BUSY位。若BUSY為0,釋放LSU控制權(quán),該影子寄存器進(jìn)入等待狀態(tài),最終將數(shù)據(jù)發(fā)送出去;若BUSY為1,則將數(shù)據(jù)存放在影子寄存器中,等待LSU完成當(dāng)前傳輸至空閑再發(fā)送數(shù)據(jù)。
④ 等待傳輸完成:通過CSL_SRIO_GetLSUCompletionCode函數(shù)讀取寄存器SRIO_LSU_STAT_REG的狀態(tài),判斷是否所有數(shù)據(jù)均傳輸完畢。
2.1.3 通信流程
C6678使用中斷控制器(INTC)管理和分配多個外部中斷源,其中有來自FPGA的中斷源。本文中SRIO工作于主模式狀態(tài),F(xiàn)PGA通過GPIO向DSP發(fā)送中斷,當(dāng)DSP接收到來自FPGA的中斷后,對FPGA相應(yīng)的內(nèi)存區(qū)域進(jìn)行讀寫操作。本設(shè)計中,中斷使用了GPIO8和GPIO9兩個中斷觸發(fā)事件,分別將其映射到DSP的CPU中斷4和中斷5。在此狀態(tài)下程序主要執(zhí)行兩種操作:在 DSP 收到中斷4以后進(jìn)入中斷4服務(wù)函數(shù), 完成從FPGA端讀取數(shù)據(jù)的操作;在收到中斷5以后進(jìn)入中斷5 服務(wù)函數(shù),完成將數(shù)據(jù)寫入FPGA端的操作。
2.2 FPGA端的SRIO配置
FPGA端的SRIO基于Xilinx公司的Serial RapidIO IP核[6]來實現(xiàn),IP核底層硬件基于FPGA的GTX收發(fā)器。圖2所示為FPGA端的SRIO實現(xiàn)結(jié)構(gòu),SRIO IP核左側(cè)通過接口模塊與用戶邏輯相連,右側(cè)通過輸出引腳與DSP相連。IP核可劃分為5個部分:RapidIO邏輯和傳輸層(LOGIC)模塊、 RapidIO物理層(PHY)模塊、RapidIO緩沖區(qū)(Buffer)模塊、寄存器管理(Register Manager)模塊、參考時鐘和復(fù)位模塊。根據(jù)不同的需求,用戶可以選擇使用物理層包封裝(phy_wrapper)或者RapidIO包封裝(rio_wrapper),本文選擇使用RapidIO包封裝。
本文以IP核為基礎(chǔ),采用已有的整體框架,圍繞目標(biāo)用戶接口設(shè)計接口模塊。中斷作為FPGA和DSP之間的握手信號,F(xiàn)IFO作為用戶邏輯和IP核之間的數(shù)據(jù)緩沖接口。圖3所示為Rapid IO接口模塊實現(xiàn)方案。
由于FPGA在通信中作為從設(shè)備,因此接口模塊中不再需要IP核接口中發(fā)起用戶的功能,只保留目標(biāo)用戶的功能,其中目標(biāo)請求/響應(yīng)狀態(tài)機控制各模塊的時序變化。接口模塊左側(cè)與用戶邏輯接口相連,右側(cè)與IP核目標(biāo)用戶接口相連。
中斷機制部分,向DSP發(fā)送數(shù)據(jù)時采用發(fā)送FIFO的半滿標(biāo)志作為讀中斷,從DSP接收數(shù)據(jù)時采用接收FIFO的半空標(biāo)志作為寫中斷。發(fā)送FIFO中數(shù)據(jù)超過一定量時觸發(fā)DSP讀數(shù)據(jù),接收FIFO中數(shù)據(jù)低于一定量時觸發(fā)DSP寫數(shù)據(jù)。用戶及時有效地控制FIFO的狀態(tài),可以保證FIFO不會被寫滿或者被讀空。用戶也可以產(chǎn)生中斷邏輯,控制DSP對FPGA內(nèi)部存儲空間進(jìn)行讀寫。本文引入了中斷機制和數(shù)據(jù)緩沖FIFO,利于接口對接和功能拓展,實現(xiàn)數(shù)據(jù)在不同芯片之間的高效傳輸。
傳輸性能測試
本文對DSP與FPGA之間的SRIO通信進(jìn)行性能測試。DSP的工作頻率為1 GHz,SRIO 接口工作速率設(shè)置為3.125 Gbps,經(jīng)過物理層8B/10B編碼,數(shù)據(jù)包的實際傳輸速率為2.5 Gbps,傳輸方式設(shè)置為4x 模式,則理論數(shù)據(jù)傳輸速率應(yīng)為10 Gbps。由于數(shù)據(jù)包的打包和解包等操作,實際速率會小于理論值。
表2是使用NWRITE和NWREAD對不同數(shù)據(jù)包進(jìn)行通信速度測試的結(jié)果。在傳輸數(shù)據(jù)為32 字節(jié)時,考慮到數(shù)據(jù)包操作時的開銷,與理論值比率僅為1.1%,很大一部分時間被花費在數(shù)據(jù)包的打包和解包的處理中,隨著傳輸數(shù)據(jù)量的增加,SRIO的實際傳輸效率不斷增大,最終維持在7 800 Mbps。經(jīng)過多次反復(fù)實驗,該統(tǒng)計結(jié)果穩(wěn)定可靠,并且沒有出現(xiàn)丟包誤碼的情況。
結(jié)語
本文針對當(dāng)今高速信號處理系統(tǒng)對芯片間數(shù)據(jù)傳輸?shù)男枨?,研究異?gòu)處理器DSP和FPGA間的數(shù)據(jù)傳輸技術(shù)。DSP端基于CSL庫實現(xiàn)了SRIO的主設(shè)備通信,F(xiàn)PGA端基于RocketIO IP實現(xiàn)了從設(shè)備通信,并采用中斷實現(xiàn)異構(gòu)處理器之間的握手信號,經(jīng)測試達(dá)到較高的傳輸速率。本文研究內(nèi)容也適用于同系列的其他處理器之間的數(shù)據(jù)通信,具有較高的應(yīng)用價值。
掃描二維碼獲取
更多精彩
FPGA設(shè)計論壇
未來的高性能FPGA是否會優(yōu)于GPU?
歡迎關(guān)注至芯科技
至芯官網(wǎng):www.zxopen.com
至芯科技技術(shù)論壇:www.fpgaw.com
至芯科技淘寶網(wǎng)址:
https://zxopen.taobao.com
至芯科技FPGA初級課程(B站):
https://space.bilibili.com/521850676
至芯科技FPGA在線課程(騰訊課堂):
https://zxopenbj.ke.qq.com/
至芯科技-FPGA 交流群(QQ):282124839
更多資料下載歡迎注冊http://www.fpgaw.com
掃碼加微信回復(fù)加群
邀請您加入FPGA學(xué)習(xí)交流群
歡迎加入至芯科技FPGA微信學(xué)習(xí)交流群,這里有一群優(yōu)秀的FPGA工程師、學(xué)生、老師、這里FPGA技術(shù)交流學(xué)習(xí)氛圍濃厚、相互分享、相互幫助、叫上小伙伴一起加入吧!
原文標(biāo)題:在FPGA和DSP兩種處理器之間實現(xiàn)SRIO協(xié)議的方法
文章出處:【微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
FPGA
+關(guān)注
關(guān)注
1625文章
21623瀏覽量
601242
原文標(biāo)題:在FPGA和DSP兩種處理器之間實現(xiàn)SRIO協(xié)議的方法
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論