《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 多核DSP間基于SRIO數(shù)據(jù)傳輸?shù)脑O(shè)計(jì)與實(shí)現(xiàn)
多核DSP間基于SRIO數(shù)據(jù)傳輸?shù)脑O(shè)計(jì)與實(shí)現(xiàn)
2017年微型機(jī)與應(yīng)用第4期
魏智偉
重慶郵電大學(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ì)具有極大的參考性。
Abstract:
Key words :

  魏智偉

 ?。ㄖ貞c郵電大學(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ì)具有極大的參考性。

  關(guān)鍵詞多核;DSP;SRIO;DSP間數(shù)據(jù)傳輸

  中圖分類號(hào):TP368.2文獻(xiàn)標(biāo)識(shí)碼:ADOI: 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.

0引言

  伴隨著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è)試。

1DSP間通信所需功能模塊簡(jiǎn)介

  1.1Mailbox(郵箱)

  基于DSP_BIOS的開(kāi)發(fā)平臺(tái),TI提供了一個(gè)Mailbox(MBX)模塊,開(kāi)發(fā)者可以通過(guò)TI的用戶接口函數(shù)來(lái)進(jìn)行管理,使用該模塊。Mailbox用來(lái)圖1用Mailbox實(shí)現(xiàn)線程間通信實(shí)現(xiàn)DSP內(nèi)部的同一個(gè)核內(nèi)的不同進(jìn)程(TSK)間的相互通信[1]。MBX_post()用于發(fā)送端,MBX_pend()用于接收端,其實(shí)現(xiàn)示例如圖1所示。

001.jpg

  1.2Semaphore(信號(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寫1,以釋放對(duì)該資源使用的權(quán)利。

  1.3Rapid IO

  1.3.1Rapid 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.2Rapid IO架構(gòu)

  SRIO總線是一種開(kāi)放式的基于包交換的高速串行標(biāo)準(zhǔn)總線[5],Rapid IO協(xié)議采用三層分級(jí)體系結(jié)構(gòu):

 ?。?)邏輯層:規(guī)定了端點(diǎn)間傳輸?shù)膮f(xié)議和包格式。

 ?。?)傳輸層:定義了在系統(tǒng)中傳輸?shù)陌璧穆酚尚畔ⅰ?/p>

  (3)物理層:包含了硬件級(jí)接口的信息,比如電氣特性、錯(cuò)誤數(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的某個(gè)核進(jìn)入中斷響應(yīng)函數(shù),執(zhí)行相應(yīng)的操作,但門鈴包不攜帶數(shù)據(jù)信息,其門鈴包的結(jié)構(gòu)如圖3所示。

002.jpg

  其中包結(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:門鈴中斷觸發(fā)控制。

  1.3.4Rapid IO包傳輸

  包結(jié)構(gòu)(packets)是SRIO傳輸兩個(gè)端點(diǎn)之間傳輸?shù)膯挝唬鋫鬏斒腔谡?qǐng)求包和響應(yīng)包。圖4發(fā)送端和接收端分包交互流程

  其一次數(shù)據(jù)傳輸流程為:發(fā)送發(fā)起端產(chǎn)生一個(gè)請(qǐng)求包給接收端,接收端收到后返還一個(gè)響應(yīng)包給發(fā)送發(fā)起端[6]。圖4表明了發(fā)送端和接收端的包交互流程。

003.jpg

2DSP間通信的設(shè)計(jì)與實(shí)現(xiàn)

  2.1資源的配置

  2.1.1SRIO端口連接

  每片TMS320C6474芯片有兩個(gè)SRIO實(shí)體端口(分別命名為Port0,Port1),將其分別與另外兩片DSP的任意一端口相連,如圖5所示。通過(guò)該連接,可以保證任意一片DSP能與其他兩片DSP直接連接。當(dāng)發(fā)送端DSP和接收端DSP都已確定時(shí),相應(yīng)SRIO端口的選擇也就確定了。

004.jpg

  2.1.2DDR共享內(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)。

  2.1.3中斷的分配與運(yùn)用

  當(dāng)發(fā)送端將消息發(fā)送給接收端后,通知接收端相應(yīng)的核來(lái)處理該消息。此次設(shè)計(jì)的方案是通過(guò)SRIO口傳輸門鈴包(DOOEBELL Packet),門鈴包攜帶接收端相應(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)該中斷。

005.jpg

  每個(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所示。

006.jpg

  2.2.2具體實(shí)現(xiàn)流程

 ?。?)SRIO初始化。①SRIO電源模塊的初始化:對(duì)SRIO相關(guān)的模塊提供電源。②SRIO的SERDES模塊初始化:配置PLL,配置RX0、TX0和TX1、TX1的傳輸通道,配置SRIO的端口0和1。③檢查SRIO口是否配置完成。

 ?。?)選擇SRIO端口。根據(jù)發(fā)送端的DSP和接收端的DSP決定選擇SRIO口,即選擇數(shù)據(jù)傳輸?shù)奈锢礞溌贰?/p>

 ?。?)獲取向接收端的共享調(diào)度內(nèi)存寫入消息的信號(hào)量。通過(guò)Semaphore(信號(hào)通信)管理不同發(fā)送端對(duì)接收端DSP的共享調(diào)度內(nèi)存的訪問(wèn),若該信號(hào)量被占用,則一直等待該信號(hào)被釋放。

 ?。?)通過(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段。

007.jpg

  (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ù)。

 ?。?)接收端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)。

3數(shù)據(jù)傳輸測(cè)試

  本文對(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]。

008.jpg

  通過(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ì)小于理論值。

4結(jié)束語(yǔ)

  本文在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)作用。

參考文獻(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)[200810xx]http://www.ti.com.

 ?。?] 陳婷,岳強(qiáng),汪洋.FPGA和DSP間基于SRIO的高速通信系統(tǒng)設(shè)計(jì)[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)[20160920]http://www.ti.com.

 ?。?] 王磊,王輝球.基于高速串行總線SRIO的數(shù)據(jù)傳輸[J].電子制作,2015(5):16-18.

  [6] 黃克武,吳海洲.基于TMS320C6455的高速SRIO接口設(shè)計(jì)[J].電子測(cè)量技術(shù),2008,31(9) :143147.

 ?。?] 馮超,張濤.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.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。