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