魏智偉
?。ㄖ貞c郵電大學(xué),重慶400065)
摘要:在使用Digital Signal Processor (DSP)芯片進(jìn)行數(shù)字信號處理時,由于數(shù)據(jù)量大,線程較多,通常采用多片DSP協(xié)同處理。本文旨在研究DSP間數(shù)據(jù)和信息傳輸?shù)膶崿F(xiàn),并以三片TI的 TMS320C6474芯片為例,基于SRIO協(xié)議,設(shè)計一種傳輸架構(gòu),實現(xiàn)了DSP間的數(shù)據(jù)傳輸。最終實現(xiàn)DSP間2.520 Gb/s的數(shù)據(jù)傳輸速率,為理論值的50.40%,但如果除去線程調(diào)度和DSP間同步所用時間,其SRIO接口的數(shù)據(jù)傳輸速率可達(dá)到3.886 Gb/s,為理論值的77.72%。該設(shè)計具有較大的通用性,對其他同類型的芯片間的數(shù)據(jù)傳輸設(shè)計具有極大的參考性。
關(guān)鍵詞:多核;DSP;SRIO;DSP間數(shù)據(jù)傳輸
中圖分類號:TP368.2文獻(xiàn)標(biāo)識碼:ADOI: 10.19358/j.issn.1674-7720.2017.04.011
引用格式:魏智偉.多核DSP間基于SRIO數(shù)據(jù)傳輸?shù)脑O(shè)計與實現(xiàn)[J].微型機(jī)與應(yīng)用,2017,36(4):36-39.
0引言
伴隨著DSP所需處理的數(shù)據(jù)量和開發(fā)的功能模塊的增多,單片DSP運(yùn)行的進(jìn)程數(shù)增多,負(fù)載過大,系統(tǒng)越來越難以滿足實時處理的要求。如果選擇多片DSP協(xié)同運(yùn)行,不僅可以減少單片DSP的負(fù)載,提高系統(tǒng)的處理性能和響應(yīng)速度,從而達(dá)到實時處理的要求,還能進(jìn)行更多功能模塊的開發(fā),對于數(shù)字信號處理系統(tǒng)來說定是有益的。但多片DSP進(jìn)行協(xié)同運(yùn)行時,DSP間需要設(shè)計完成數(shù)據(jù)交互的功能。本文依據(jù)Rapid IO協(xié)議的標(biāo)準(zhǔn),結(jié)合TI的TMS320C6474芯片的特點,在Digital Signal Processor_Basic Input Output System(DSP_BIOS)的開發(fā)平臺上,設(shè)計和實現(xiàn)了多核DSP間的數(shù)據(jù)傳輸。本文首先介紹了該設(shè)計所需的各個功能模塊,然后闡述整體設(shè)計的流程和具體實現(xiàn)的方式,最后對DSP間數(shù)據(jù)傳輸性能進(jìn)行了測試。
1DSP間通信所需功能模塊簡介
1.1Mailbox(郵箱)
基于DSP_BIOS的開發(fā)平臺,TI提供了一個Mailbox(MBX)模塊,開發(fā)者可以通過TI的用戶接口函數(shù)來進(jìn)行管理,使用該模塊。Mailbox用來圖1用Mailbox實現(xiàn)線程間通信實現(xiàn)DSP內(nèi)部的同一個核內(nèi)的不同進(jìn)程(TSK)間的相互通信[1]。MBX_post()用于發(fā)送端,MBX_pend()用于接收端,其實現(xiàn)示例如圖1所示。
1.2Semaphore(信號通信)
TI提供了一個Semaphore[2]模塊,該模塊可以用于管理對共享資源的訪問。其訪問模式有三種:直接模式,間接模式,綜合模式。本文采用的是直接模式:讀取寄存器DIRECT的值,如果DIRECT的值為1,則表明該共享資源可用,允許訪問,并獲得該信號量;反之如果DIRECT的值為0,則表明該共享資源正在被其他進(jìn)程訪問。當(dāng)對共享資源操作完成后,需要對DIRECT寫1,以釋放對該資源使用的權(quán)利。
1.3Rapid IO
1.3.1Rapid IO簡介
Rapid IO協(xié)議是一個開放的點對點分組交換標(biāo)準(zhǔn),是面向嵌入式系統(tǒng)開發(fā)提出的高可靠、高性能、基于包交換的互聯(lián)技術(shù)[3],傳輸速率能達(dá)到1 Gb/s以上。其最主要的特點包括:(1)有錯誤檢測機(jī)制; (2)低負(fù)載高帶寬;(3)引腳少[4]。
1.3.2Rapid IO架構(gòu)
SRIO總線是一種開放式的基于包交換的高速串行標(biāo)準(zhǔn)總線[5],Rapid IO協(xié)議采用三層分級體系結(jié)構(gòu):
?。?)邏輯層:規(guī)定了端點間傳輸?shù)膮f(xié)議和包格式。
(2)傳輸層:定義了在系統(tǒng)中傳輸?shù)陌璧穆酚尚畔ⅰ?/p>
(3)物理層:包含了硬件級接口的信息,比如電氣特性、錯誤數(shù)據(jù)管理、基本數(shù)據(jù)流控制。
1.3.3SRIO包結(jié)構(gòu)
在SRIO的包結(jié)構(gòu)中,包的種類有很多,主要用到的為數(shù)據(jù)包和門鈴包。數(shù)據(jù)包用于在源地址和目的地址間進(jìn)行數(shù)據(jù)傳輸,其結(jié)構(gòu)如圖2所示。門鈴包主要用于觸發(fā)相應(yīng)的中斷,通知相應(yīng)DSP的某個核進(jìn)入中斷響應(yīng)函數(shù),執(zhí)行相應(yīng)的操作,但門鈴包不攜帶數(shù)據(jù)信息,其門鈴包的結(jié)構(gòu)如圖3所示。
其中包結(jié)構(gòu)各個段的含義是:AckID:交換結(jié)構(gòu)期間將使用控制符號來確認(rèn)是哪一個包;Prio:表明該包的優(yōu)先級;tt:指定Device ID是用8 bit或16 bit表示;fftyp:表示包的類型;destID:包傳送的目的地址ID;sourceID:發(fā)送包的源地址ID;CRC:包結(jié)構(gòu)的校驗保護(hù);Info:門鈴中斷觸發(fā)控制。
1.3.4Rapid IO包傳輸
包結(jié)構(gòu)(packets)是SRIO傳輸兩個端點之間傳輸?shù)膯挝?,其傳輸是基于請求包和響?yīng)包。圖4發(fā)送端和接收端分包交互流程
其一次數(shù)據(jù)傳輸流程為:發(fā)送發(fā)起端產(chǎn)生一個請求包給接收端,接收端收到后返還一個響應(yīng)包給發(fā)送發(fā)起端[6]。圖4表明了發(fā)送端和接收端的包交互流程。
2DSP間通信的設(shè)計與實現(xiàn)
2.1資源的配置
2.1.1SRIO端口連接
每片TMS320C6474芯片有兩個SRIO實體端口(分別命名為Port0,Port1),將其分別與另外兩片DSP的任意一端口相連,如圖5所示。通過該連接,可以保證任意一片DSP能與其他兩片DSP直接連接。當(dāng)發(fā)送端DSP和接收端DSP都已確定時,相應(yīng)SRIO端口的選擇也就確定了。
2.1.2DDR共享內(nèi)存的分配與管理
每塊DSP上都外掛一片DDR存儲器。DSP的任意一個核Core0、Core1、Core2都能訪問該存儲器(TMS320C6474 為三核處理器,將三個核依次命名為Core0、Core1、Core2)。在DSP0,DSP1,DSP2的DDR存儲器里指定一塊內(nèi)存用于存儲DSP間任務(wù)調(diào)度的信息(以下稱該段內(nèi)存為共享調(diào)度內(nèi)存),如圖5所示。每片DSP上分配的公共調(diào)度內(nèi)存的規(guī)劃與管理如圖6所示。對每個DSP三個核的內(nèi)存分別分配一個Semaphore(信號通信)用于管理對接收端DSP的共享調(diào)度內(nèi)存的訪問。
2.1.3中斷的分配與運(yùn)用
當(dāng)發(fā)送端將消息發(fā)送給接收端后,通知接收端相應(yīng)的核來處理該消息。此次設(shè)計的方案是通過SRIO口傳輸門鈴包(DOOEBELL Packet),門鈴包攜帶接收端相應(yīng)核的信息, 觸發(fā)接收端相應(yīng)核的中斷。
當(dāng)發(fā)送端發(fā)送DOORBELL包時,此包被用作初始化CPU中斷,包結(jié)構(gòu)中INFO段表明相關(guān)DOORBELL寄存器的相關(guān)中斷位被設(shè)置,如圖3所示。一個DSP有4個DOOEBELL寄存器,每個寄存器有16 bit,有64個中斷源產(chǎn)生中斷。通過ICR(Interrupt Condition Routing)寄存器,可以將每位路由給任意核。本文將DOORBELL寄存器的最低的三位分別分配給DSP的三個核(Core0,Core1,Core2)。即若DOOEBELL的最低位為1,則DSP的Coer0響應(yīng)該中斷。
每個DSP都有兩個SRIO口,如圖5所示,前面已經(jīng)將DSP互連的SRIO口進(jìn)行了編號(0,1),按照SRIO口的編號(0,1)分別分配以DOOEBELL 0和DOOEBELL 1寄存器,DOOEBELL 0和DOORBELL 1寄存器又分別映射到SRIO的兩個中斷通道(71~RapidIO Interrupt(2n),72~ RapidIO Interrupt(2n+1)),將此兩個中斷分別分配給兩個SRIO口,使之分別響應(yīng)SRIO口的中斷。該Rapid IO Interrupt主要用于判斷發(fā)送端的DSP的編號。如圖7所示,接收端為DSP0,若中斷通道71~RIOINT被觸發(fā),則判斷發(fā)送端為DSP1,若中斷通道72~RIOINT被觸發(fā),則判斷發(fā)送端為DSP2。
通過以上中斷的配置,可以保證發(fā)送端的任意DSP都能通過DOOEBELL消息包通知到消息接收端的任意核,同時接收端也能判斷出發(fā)送端為哪個DSP。
2.2設(shè)計思路與具體實現(xiàn)
2.2.1設(shè)計思路
實現(xiàn)多核DSP間的數(shù)據(jù)交互主要完成兩方面的工作:(1)實現(xiàn)數(shù)據(jù)的搬移;(2)通知接收端的DSP數(shù)據(jù)存儲的位置和長度。其實現(xiàn)流程圖如圖8所示。
2.2.2具體實現(xiàn)流程
?。?)SRIO初始化。①SRIO電源模塊的初始化:對SRIO相關(guān)的模塊提供電源。②SRIO的SERDES模塊初始化:配置PLL,配置RX0、TX0和TX1、TX1的傳輸通道,配置SRIO的端口0和1。③檢查SRIO口是否配置完成。
?。?)選擇SRIO端口。根據(jù)發(fā)送端的DSP和接收端的DSP決定選擇SRIO口,即選擇數(shù)據(jù)傳輸?shù)奈锢礞溌贰?/p>
(3)獲取向接收端的共享調(diào)度內(nèi)存寫入消息的信號量。通過Semaphore(信號通信)管理不同發(fā)送端對接收端DSP的共享調(diào)度內(nèi)存的訪問,若該信號量被占用,則一直等待該信號被釋放。
?。?)通過SRIO口傳輸數(shù)據(jù)包。配置Load/Store Register完成消息包的組成。其關(guān)鍵配置有:配置LSUn_REG2中的DSP Address,完成待傳輸數(shù)據(jù)(payload)的源地址和目的地址的配置;配置LSUn_REG3中的Byte_count完成待傳輸數(shù)據(jù)的長度;配置LSUn_REG5中的Packet Type完成包種類的配置。配置完成后,使能傳輸。其Load/Store Register相應(yīng)字段的配置會映射到數(shù)據(jù)包中,待傳輸數(shù)據(jù)通過SRIO口存到了公共調(diào)度內(nèi)存中。
?。?)通過SRIO口傳輸DOOEBELL包:該包用于通知接收端DSP的相應(yīng)核的共享調(diào)度內(nèi)存有消息待處理。通過對LSUn_REG5的Drbll Info段進(jìn)行配置,使之映射到DOORBELLn_ICRR寄存器中,本文將DOOEBELLn_ICRR的第0位、第1位和第2位,通過ICR(Interrupt Condition Routing)寄存器使之分別路由到核0、核1、核2。則通過DOOEBELL包就能在接收端DSP相應(yīng)的核上產(chǎn)生中斷。第(2)步已經(jīng)獲得了相應(yīng)的SRIO的端口號,通過SRIO端口號為0或1決定DOORBELLn_ICRR為DOORBELL0_ICRR或DOORBELL1_ICRR。該DOORBELL0_ICRR和DOORBELL1_ICRR分別對應(yīng)著接收端DSP相應(yīng)核上的兩個SRIO_INT中斷。在2.1.3節(jié)中已經(jīng)介紹,借此來判斷發(fā)送端的DSP的編號。由此接收端能判斷出數(shù)據(jù)在共享調(diào)度內(nèi)存中的存儲位置,如圖9所示。以發(fā)送端為DSP0_Core0、接收端為DSP1_Core1為例,其消息應(yīng)存儲在DSP1的共享內(nèi)存中的DSP0、Core1段。
?。?)接收端DSP相應(yīng)的核讀取共享調(diào)度內(nèi)存的數(shù)據(jù),解析收到的消息并通過Mailbox(郵箱)模塊,在接收端DSP相應(yīng)的核內(nèi)進(jìn)行核內(nèi)線程調(diào)度,觸發(fā)相應(yīng)的任務(wù)。
?。?)接收端DSP執(zhí)行完相應(yīng)的任務(wù)后,給發(fā)送端返回相應(yīng)的數(shù)據(jù),發(fā)送端DSP和Core的編號都會在傳輸?shù)倪^程中保存,所以接收端往發(fā)送端返回消息時按照前幾個步驟的逆過程進(jìn)行數(shù)據(jù)傳輸。
通過以上幾個步驟后,多核DSP間的數(shù)據(jù)傳輸已經(jīng)實現(xiàn)。
3數(shù)據(jù)傳輸測試
本文對多核DSP間的數(shù)據(jù)傳輸進(jìn)行測試[7],SRIO口的工作速率設(shè)置為3.125 Gb/s,經(jīng)過物理層8B/10B編碼,數(shù)據(jù)包實際傳輸速率為2.5 Gb/s,使用兩個1x通道,理論傳輸數(shù)據(jù)為5 Gb/s。
數(shù)據(jù)傳輸正確性的測試:從DSP0Core0發(fā)送2k次的數(shù)據(jù)給DSP1Core2,DSP1Core2收到數(shù)據(jù)后將數(shù)據(jù)轉(zhuǎn)發(fā)給DSP2Core1,DSP2Core1收到數(shù)據(jù)后再發(fā)送回DSP0Core0,DSP0Core0最后將收到的數(shù)據(jù)與最初發(fā)送的數(shù)據(jù)進(jìn)行對比,檢測數(shù)據(jù)有無錯誤。本文采用每隔1 s發(fā)送一次數(shù)據(jù),測試一星期未發(fā)現(xiàn)出錯。
傳輸性能的測試:任意選取兩片DSP的任意核進(jìn)行不同數(shù)據(jù)長度的回環(huán)測試。例如數(shù)據(jù)從DSP1發(fā)送至DSP2,DSP2收到數(shù)據(jù)后將數(shù)據(jù)返回給DSP1。從DSP1剛開始發(fā)送數(shù)據(jù)和剛接收完數(shù)據(jù)后分別利用_itoll(TSCH,TSCL)函數(shù)獲取CPU的Cycle值,計算兩次值之差,即可測出速率[8]。
通過數(shù)據(jù)分析可以得出,數(shù)據(jù)的傳輸速率為2.520 Gb/s左右,為理論值的50.4%。但傳輸長度為64 B時,傳輸?shù)臄?shù)據(jù)較少,可近似為線程調(diào)度和DSP間同步所需的時間,若將傳輸32 000 B的時間減去傳輸64 B時間(線程調(diào)度和DSP間同步所需時間),再計算傳輸速率的值為3.886 Gb/s,為理論值的77.72%。由于數(shù)據(jù)包的組包和解包,以及DDR上讀取數(shù)據(jù)的開銷等,實際數(shù)據(jù)會小于理論值。
4結(jié)束語
本文在DSP_BIOS操作平臺上,基于Rapid IO協(xié)議,實現(xiàn)了多核DSP間的數(shù)據(jù)傳輸。此次設(shè)計不僅適用于2個多核DSP間的數(shù)據(jù)傳輸,同時也適用于3個甚至3個以上多核DSP間的數(shù)據(jù)傳輸。該架構(gòu)能協(xié)同多個DSP進(jìn)行大量的數(shù)據(jù)處理,相對減少了單個DSP處理的時延和負(fù)擔(dān),提高了系統(tǒng)的處理能力和響應(yīng)速度,對數(shù)字信號處理系統(tǒng)的發(fā)展具有一定的推動作用。
參考文獻(xiàn)
?。?] Texas Instruments Group. TMS320 DSP/BIOS v5.42 User’s Guide (SPRU4231) [EB/OL].(2013-08-xx)[2016-09-20]http://www.ti.com.
?。?] Texas Instruments Group. TMS320C6474 DSP Semaphore User’s Guide (SPRUG14)[EB/OL].(2016-09-20)[200810xx]http://www.ti.com.
?。?] 陳婷,岳強(qiáng),汪洋.FPGA和DSP間基于SRIO的高速通信系統(tǒng)設(shè)計[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2016(3):37-40.
?。?] Texas Instruments Group. TMS320C6474 DSP Serial Rapid IO(SRIO) User’s Guide (SPRUG230) [EB/OL].(2011-10-xx)[20160920]http://www.ti.com.
?。?] 王磊,王輝球.基于高速串行總線SRIO的數(shù)據(jù)傳輸[J].電子制作,2015(5):16-18.
?。?] 黃克武,吳海洲.基于TMS320C6455的高速SRIO接口設(shè)計[J].電子測量技術(shù),2008,31(9) :143147.
?。?] 馮超,張濤.TMS320C6678高速串行接口的傳輸性能研究[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2015,15(11):52-55.
?。?] 侯普.基于TI KeyStoneⅡ多核DSP技術(shù)的研究與運(yùn)用LTEA基帶板處理板設(shè)計與實現(xiàn)[D].北京:北京郵電大學(xué),2015.