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