駱國(guó)麗,張學(xué)健,肖 亮
(北京化工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,北京100029)
當(dāng)前B模式超聲成像 (B 超)技術(shù)處于活躍的發(fā)展態(tài)勢(shì)中,設(shè)備的小型化與便攜化是其中一個(gè)重要的方向,目的在于降低成本、拓展應(yīng)用面。為了保證設(shè)備的成像質(zhì)量,必須提高圖像分辨率并縮短成像時(shí)間,這必然會(huì)對(duì)成像過(guò)程中的數(shù)據(jù)處理和傳輸帶來(lái)很高的要求。目前B 模式超聲成像領(lǐng)域常用的圖像處理硬件架構(gòu)主要是:①基于PC機(jī)的架構(gòu)[1],單純由CPU 進(jìn)行數(shù)據(jù)處理,該方案簡(jiǎn)單易行,但CPU 的浮點(diǎn)處理速度較慢;②基于GPU (圖形處理器)的架構(gòu)[2],GPU 具有最快地處理速度,但難以集成到嵌入式設(shè)備中,并且面臨著數(shù)據(jù)傳輸瓶頸;③基于多處理器的架構(gòu)[3],由兩片處理器 (TI公司的C6455+OMAP3530)結(jié)合進(jìn)行數(shù)據(jù)處理,該方案具有較強(qiáng)的數(shù)據(jù)處理與傳輸性能,然而電路設(shè)計(jì)比較復(fù)雜。
本文討論了基于TMS320C6678的高速數(shù)據(jù)傳輸 (包括核間數(shù)據(jù)傳遞與網(wǎng)絡(luò)通信),以提高B模式超聲成像的實(shí)時(shí)性。TMS320C6678是TI公司于2010 年推出的一款多核DSP,擁有8 個(gè)核 (DSP core),單個(gè)核的速度為定點(diǎn)40 GMAC/s,浮點(diǎn)20GFLOP/s。片內(nèi)有4 MB 的共享內(nèi)存,片外最大8GB 的存儲(chǔ)空間 (DDR3)。此外,該DSP 擁有包括2個(gè)千兆以太網(wǎng)端口在內(nèi)的多種強(qiáng)大的數(shù)據(jù)通信接口。本研究的數(shù)據(jù)處理針對(duì)成像的中端 (前端包括數(shù)字解調(diào)與波束合成,一般由FPGA 完成;后端包括圖像濾波與坐標(biāo)轉(zhuǎn)換,可以由其它的核或PC 機(jī)完成),包括包絡(luò)檢測(cè)、動(dòng)態(tài)壓縮、頻率復(fù)合及行濾波。數(shù)據(jù)處理和傳輸任務(wù)分配在4個(gè)核上以流水的方式進(jìn)行,核與核之間通過(guò)Notify Model進(jìn)行通信,通過(guò)配置公用存儲(chǔ)區(qū)以實(shí)現(xiàn)數(shù)據(jù)共享,片內(nèi)外的數(shù)據(jù)交換通過(guò)EDMA (enhanced DMA)方式高速進(jìn)行。DSP與PC機(jī)之間通過(guò)千兆以太網(wǎng)相連,基于TCP/IP的網(wǎng)絡(luò)通信程序調(diào)用網(wǎng)絡(luò)開(kāi)發(fā)數(shù)據(jù)套件 (NDK),在SYS/BIOS嵌入式操作系統(tǒng)下運(yùn)行。程序已經(jīng)開(kāi)發(fā)完畢并進(jìn)行了大量的測(cè)試,結(jié)果表明,任意2個(gè)核傳遞數(shù)據(jù)的時(shí)間小于1ms(圖像大小為512×1024),網(wǎng)絡(luò)通信的傳輸速率可穩(wěn)定地達(dá)到60 MBps左右。這樣,結(jié)合以優(yōu)化的數(shù)據(jù)處理算法,DSP能夠每秒處理和傳輸40幀圖像,完全滿足實(shí)時(shí)成像的要求。
TI公司為多核DSP的開(kāi)發(fā)提供了豐富的軟件工具,重點(diǎn)包括:SYS/BIOS嵌入式操作系統(tǒng)、IPC (inter-processor communication)、NDK (network development kit)。
SYS/BIOS是TI公司開(kāi)發(fā)的嵌入式實(shí)時(shí)操作系統(tǒng),是DSP/BIOS的擴(kuò)展和增強(qiáng)。它支持有實(shí)時(shí)調(diào)度和同步需求的應(yīng)用程序開(kāi)發(fā),支持搶占式多線程、線程之間的通信和同步、硬件抽象和實(shí)時(shí)分析等。SYS/BIOS 的線程模型可為不同的情況提供不同的線程類型,操作者可以通過(guò)選擇不同的線程類型來(lái)控制線程的優(yōu)先級(jí)和阻塞特性?;赟YS/BIOS開(kāi)發(fā)DSP軟件,可以使所有的操作都在操作系統(tǒng)下得到有效的管理,有利于系統(tǒng)優(yōu)先處理緊急事件,提高了系統(tǒng)的實(shí)時(shí)響應(yīng)能力。
IPC組件用于多核處理器系統(tǒng)的核間通信和與外設(shè)間的通信。該組件是基于SYS/BIOS設(shè)計(jì)的,包含用于多核通信的組件和接口,可用于DSP 或其它處理器。IPC 能夠?qū)崿F(xiàn)以下通信:
(1)同一處理器核的不同線程間通信;
(2)同一處理器不同核上的線程間通信;
(3)不同處理器的線程間通信;
(4)處理器與外設(shè)之間的通信。
為了加速C6000系列DSP的網(wǎng)絡(luò)開(kāi)發(fā)進(jìn)程,TI公司提供了NDK。由于NDK 中內(nèi)置了常用的服務(wù)程序,因此對(duì)它的調(diào)用不僅可以有效地減少服務(wù)占用的資源,而且可以縮短開(kāi)發(fā)時(shí)間。NDK 為TCP/IP協(xié)議棧提供了完整的功能化環(huán)境,包括5 個(gè)主要的支持TCP/IP 協(xié)議棧的程序庫(kù),即:STACK.LIB,NETTOOL.LIB,OS.LIB,HAL.LIB,NETCTRL.LIB。
TMS320C6678實(shí)現(xiàn)核間數(shù)據(jù)高速傳遞的關(guān)鍵點(diǎn)在于:核間通信、數(shù)據(jù)共享以及高速訪問(wèn)。
Notify Model是主要的核間通信方式之一,為IPC 庫(kù)所支持,該方法使用中斷和回調(diào)函數(shù)來(lái)完成多核間的通信。Notify Model的配置方式如圖1所示。
圖1 Notify Model的配置
通知模塊 (notify module)用于對(duì)通知方案中用到的資源進(jìn)行靜態(tài)配置,調(diào)用多核處理器模塊 (multiproc module)配置需要啟用的DSP核個(gè)數(shù)及其名稱。需要在SYS/BIOS操作系統(tǒng)的靜態(tài)配置文件 (*.cfg)中進(jìn)行如下配置:
當(dāng)配置完成后,任意核CORE A 向CORE B 發(fā)送通知的基本流程如圖2所示。
圖2 基于Notify Model,CORE A 向CORE B發(fā)送消息的基本流程
Ipc_start()函數(shù)用于在各個(gè)DSP 核之間建立連接,為了接收其它核來(lái)的通知,接收核需要調(diào)用函數(shù)Notify_registerEvent()根據(jù)預(yù)定的事件號(hào)注冊(cè)一個(gè)或多個(gè)中斷;然后其它核通過(guò)調(diào)用函數(shù)Notify_sendEvent()觸發(fā)接收核中相應(yīng)的事件來(lái)完成通信;當(dāng)相應(yīng)事件被觸發(fā)后,預(yù)定義的一個(gè)或多個(gè)回調(diào)函數(shù)就開(kāi)始執(zhí)行。
TMS320C6678 中的每個(gè)核都能訪問(wèn)設(shè)備中的所有空間,這意味著每個(gè)核都能對(duì)存儲(chǔ)區(qū)的任意空間進(jìn)行讀寫(xiě)。因此,多核間的數(shù)據(jù)共享可通過(guò)設(shè)置公用存儲(chǔ)區(qū)實(shí)現(xiàn)。為了保證足夠的存儲(chǔ)空間,該公用存儲(chǔ)區(qū)位于外部DDR3內(nèi)存中,起始地址與大小固定。發(fā)送核將數(shù)據(jù)寫(xiě)入公用存儲(chǔ)區(qū),并使用核間通信方式通知接收核,接收核接收到通知后從公用存儲(chǔ)區(qū)內(nèi)讀取數(shù)據(jù)。發(fā)送核和接收核必須采用同樣的核間通信方案。對(duì)于地址確定的數(shù)據(jù)共享區(qū),采用Notify Model方案可以獲得最好的核間通信性能。
EDMA 主要用于實(shí)現(xiàn)設(shè)備中2個(gè)地址空間之間快速的數(shù)據(jù)傳輸。例如,數(shù)據(jù)從片外存儲(chǔ)區(qū)讀入到片內(nèi)存儲(chǔ)區(qū),或相反。
EDMA 應(yīng)用有2種模式,一種是事件觸發(fā),另一種是CPU 觸發(fā)。前一種一般應(yīng)用于需要由外部中斷信號(hào)或定時(shí)器等觸發(fā)EDMA 啟動(dòng),后一種是CPU 主動(dòng)啟動(dòng)EDMA的操作。
編程過(guò)程中使用到的主要函數(shù)及其功能:CSL_edma3Open()用于打開(kāi)EDMA模塊,CSL_edma3ChannelOpen()用于打開(kāi)相應(yīng)的通道,CSL_edma3ParamSetup()為傳輸通道填充參數(shù),參數(shù)填充完成后調(diào)用CSL_edma3HwChannel-Control()觸發(fā)通道開(kāi)始傳輸,CSL_edma3GetHwStatus()可以用來(lái)檢測(cè)傳輸是否完成,傳輸完成后調(diào)用CSL_edma3ChannelClose()和CSL_edma3Close()關(guān)閉傳輸通道和EDMA模塊。
在以NDK 為基礎(chǔ)的開(kāi)發(fā)環(huán)境中,一個(gè)套接字 (socket)應(yīng)用程序被執(zhí)行之前,堆棧必須預(yù)先配置和初始化。為了能幫助初始化過(guò)程更加的標(biāo)準(zhǔn)并且專用,網(wǎng)絡(luò)控制模塊的源代碼 (NETCTRL.LIB)包含在NDK 的每個(gè)版本中,它是NDK 堆棧初始化、配置和事件調(diào)度核心。網(wǎng)絡(luò)控制模塊使用的基本流程如下:
(1)預(yù)初始化 (NC_SystemOpen ()),它初始化堆棧和堆棧各組成信息所需要的內(nèi)存環(huán)境。
(2)系統(tǒng)配置
為了繼續(xù)使用NETCTRL API,必須創(chuàng)建系統(tǒng)配置。創(chuàng)建一個(gè)配置總是從調(diào)用CfgNew ()函數(shù)創(chuàng)建一個(gè)配置句柄開(kāi)始。一旦配置句柄被創(chuàng)建,配置信息可以通過(guò)調(diào)用CfgLoad ()或CfgAddEntry()函數(shù)裝入句柄或者它創(chuàng)建的條目。
(3)網(wǎng)絡(luò)啟動(dòng) (NC_NetStart())
一旦配置句柄加載完成正確的配置,網(wǎng)絡(luò)事件調(diào)度將通過(guò)調(diào)用的NETCTRL函數(shù)NC_NetStart()實(shí)現(xiàn)。函數(shù)NC_NetStart()不會(huì)返回,直到系統(tǒng)關(guān)機(jī),然后返回關(guān)機(jī)代碼作為它的返回值。
(4)調(diào)用NC_SystemClose(),關(guān)閉系統(tǒng)并退出。
socket應(yīng)用程序開(kāi)始于任務(wù)線程的創(chuàng)建。根據(jù)所提供的協(xié)議棧庫(kù),任務(wù)可以使用TaskCreate()來(lái)創(chuàng)建。它直接創(chuàng)建出擁有3個(gè)參數(shù) (參數(shù)不一定全部使用)的和SYS/BIOS具有相同基本任務(wù)屬性的線程。
用戶自定義的網(wǎng)絡(luò)服務(wù)線程從NC_NetStart()提供的 “NetworkOpen ()”回調(diào)函數(shù)中啟動(dòng)。
以下是使用NC_NetStart()啟動(dòng)網(wǎng)絡(luò)服務(wù)的代碼:
在SYS/BIOS環(huán)境下,NDK 堆棧支持標(biāo)準(zhǔn)的socket接口功能,由于這些功能要求文件描述符的支持,協(xié)議棧提供了自己的小文件系統(tǒng)。在這個(gè)系統(tǒng)中,每個(gè)任務(wù)都有它自己的文件描述符字段。堆棧的工作原理是將每個(gè)調(diào)用的線程與一個(gè)文件描述符關(guān)聯(lián)。最基本的方法是線程開(kāi)始前必須調(diào)用fdOpenSession ()函數(shù),然后面向文件描述符的函數(shù)才可以被調(diào)用,當(dāng)它們不再被需要時(shí)調(diào)用fdCloseSession ()函數(shù),程序示例:
網(wǎng)絡(luò)傳輸共創(chuàng)建了3個(gè)線程:
第1個(gè)線程StackTest在SYS/BIOS中靜態(tài)創(chuàng)建,用于啟動(dòng)網(wǎng)絡(luò)。通過(guò)對(duì)配置文件的設(shè)置,在main()函數(shù)中啟動(dòng)SYS/BIOS之后,程序跳轉(zhuǎn)執(zhí)行此線程。這個(gè)線程稱為NETCTRL線程,它不是真正的網(wǎng)絡(luò)任務(wù)線程,系統(tǒng)不必為它分配文件描述符表。雖然它是作為初始化的一部分,但是NETCTRL 線程最終成為NDK 堆棧的事件調(diào)度表。
第2個(gè)線程CtrlTask在SYS/BIOS中靜態(tài)創(chuàng)建,該線程用于接收控制指令,控制數(shù)據(jù)的發(fā)送、終止及線程退出,如圖3所示,用switch case語(yǔ)句判斷接收到的命令并執(zhí)行相應(yīng)的操作。
第3個(gè)線程DataTask是在第2 個(gè)線程中動(dòng)態(tài)創(chuàng)建的,用于數(shù)據(jù)發(fā)送,其優(yōu)先級(jí)最低。
圖3 線程CtrlTask的流程
本設(shè)計(jì)采用的硬件平臺(tái)為TI 公司的評(píng)估板TMSEVM6678L,TMS320C6678的時(shí)鐘頻率為1 GHz,軟件開(kāi)發(fā)平臺(tái)為CCS5.3。
B模式超聲成像的圖像處理步驟按照順序依次為:包絡(luò)檢測(cè)、動(dòng)態(tài)壓縮、頻率復(fù)合以及行濾波,表1 給出了單個(gè)DSP 核對(duì)每個(gè)步驟進(jìn)行計(jì)算的時(shí)間開(kāi)銷 (圖像大?。?12×1024)。
表1 B模式超聲成像各處理步驟的計(jì)算時(shí)間開(kāi)銷
根據(jù)對(duì)表1分析得出,為了獲取最高的成像處理速度,可以將圖像處理任務(wù)分配到3 個(gè)核上以流水的方式進(jìn)行:核0完成包絡(luò)檢測(cè),核1完成動(dòng)態(tài)壓縮,核2完成頻率復(fù)合與行濾波。此外,用核3 承擔(dān)網(wǎng)絡(luò)通信任務(wù),負(fù)責(zé)將B超圖像通過(guò)Ethernet傳輸?shù)絇C 機(jī)。數(shù)據(jù)的處理與傳輸流程如圖4所示。
圖4 TMS320C6678實(shí)現(xiàn)B模式超聲成像的處理與傳輸流程
圖2所示流程中,相鄰核之間的數(shù)據(jù)傳遞,以CORE 0向CORE 1傳遞的數(shù)據(jù)量最大,為3×512×1024×16bit=3 MB,經(jīng)反復(fù)測(cè)試,所需時(shí)間見(jiàn)表2。
表2 核間數(shù)據(jù)傳遞 (CORE 0到CORE 1)時(shí)間開(kāi)銷
在網(wǎng)絡(luò)編程中,PC 機(jī)端socket的緩沖區(qū)大小設(shè)為8 KB,DSP端socket的緩沖區(qū)大小設(shè)為32KB,多次長(zhǎng)時(shí)間測(cè)試表明DSP與PC機(jī)之間的網(wǎng)絡(luò)傳輸速率可以穩(wěn)定在60 MBps左右,即每秒能傳送120幀512×1024大小的圖像。根據(jù)上述測(cè)試結(jié)果可見(jiàn),對(duì)于512×1024大小的圖像,DSP任意2個(gè)核傳遞數(shù)據(jù)的時(shí)間小于1ms。考慮到每個(gè)核成像處理所需時(shí)間以及公用存儲(chǔ)區(qū)訪問(wèn)仲裁所需時(shí)間,4 個(gè)核流水完成一幀圖像處理與傳輸時(shí)間小于25ms(即每秒處理40幀),滿足了實(shí)時(shí)成像的要求。
本文討論了基于多核DSP (TMS320C6678)的B 模式超聲成像系統(tǒng)的高速數(shù)據(jù)傳輸,包括核間數(shù)據(jù)傳遞與網(wǎng)絡(luò)通信兩項(xiàng)技術(shù)。核間數(shù)據(jù)傳遞由核間通信、數(shù)據(jù)共享以及EDMA 訪問(wèn)3項(xiàng)功能構(gòu)成;網(wǎng)絡(luò)通信采用NDK 進(jìn)行編程。實(shí)驗(yàn)結(jié)果表明,對(duì)于512×1024大小的圖像,DSP 總的處理速率能夠達(dá)到40幀/秒,滿足實(shí)時(shí)成像的要求,從而為進(jìn)一步開(kāi)發(fā)基于多核DSP的便攜式超聲成像系統(tǒng)打下了堅(jiān)實(shí)的基礎(chǔ)。
[1]LI Yibing,YU Dakun,LIU Xiaodong,et al.Application of computer to medical ultrasound images [J].Chinese Medical Equipment Journal,2006,27 (4):23-24 (in Chinese). [李義兵,余大昆,劉曉東,等.計(jì)算機(jī)在醫(yī)學(xué)超聲成像中的應(yīng)用[J].醫(yī)療衛(wèi)生裝備,2006,27 (4):23-24.]
[2]XIA Chunlan,SHI Dan,LIU Dongquan.Ultrasound B-mode imaging based on CUDA [J].Application Research of Computers,2011,28 (6):2011-2015 (in Chinese). [夏春蘭,石丹,劉東權(quán).基于CUDA 的超聲B 模式成像 [J].計(jì)算機(jī)應(yīng)用研究,2011,28 (6):2011-2015.]
[3]Texas Instruments Inc.Digital signal processor(DSP)for portable ultrasound [DB/OL].[2008-12-18].http://www.ti.com/general/docs.
[4]Texas Instruments Inc.TI network developer’s kit(NDK)v2.21 user’s guide[DB/OL]. [2012-05-01].http://www.ti.com/general/docs.
[5]Texas Instruments Inc.SYS/BIOS inter-processor communication(IPC) user guide [DB/OL].[2012-10-09]. http://www.ti.com/general/docs.
[6]XIAO Liang,ZHANG Xuejian.Parallel implementation of processing algorithm of ultrasound imaging based on multi-core DSP [J].Application of Electronic Technique,2013,39(6):27-30 (in Chinese).[肖亮,張學(xué)建.基于多核DSP 的超聲成像處理算法的并行實(shí)現(xiàn) [J].電子技術(shù)應(yīng)用,2013,39(6):27-30.]
[7]WU Hao,XIAO Jiyang,F(xiàn)AN Hongqi,et al.Inter-processor communication method of TMS320C6678 multicore DSP [J].Application of Electronic Technique,2012,38 (9):12-14 (in Chinese).[吳灝,肖吉陽(yáng),范紅旗,等.TMS320C6678多核DSP的核間通信方法 [J].電子技術(shù)應(yīng)用,2012,38 (9):12-14.]
[8]LIU Xin,SONG Guanglei,WEN Jing,et al.Design of gigabit Ethernet interface used on highspeed transmission of spaceborne images[J].Video Engineering,2013,37 (3):67-69(in Chinese).[劉鑫,宋光磊,溫靖,等.用于星載圖像高速傳輸?shù)那д滓蕴W(wǎng)接口設(shè)計(jì)[J].電視技術(shù),2013,37 (3):67-69.]
[9]ZUO Haorui,ZHANG Qiheng,XU Yong,et al.Design of Gbps Ethernet interface based on DSP [J].Communications Technology,2010,43 (8):1-3 (in Chinese). [左顥睿,張啟衡,徐勇,等.基于DSP 的千兆以太網(wǎng)接口設(shè)計(jì) [J].通信技術(shù),2010,43 (8):1-3.]
[10]HAO Pengpeng,ZHOU Xulin, TANG Yijing,et al.Reasearch on multicore processor’s architecture based on TMS320C6678 [J].Microelectronics,2012,29 (12):171-175 (in Chinese). [郝朋朋,周煦林,唐藝菁,等.基于TMS320C6678多核處理器體系結(jié)構(gòu)的研究 [J].微電子學(xué)與計(jì)算機(jī),2012,29 (12):171-175.]