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