久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

TI ARM+DSP異構(gòu)多核通信機(jī)制

 oskycar 2013-11-20

本文介紹了TI的ARM+C6000 DSP異構(gòu)多核平臺(tái)(如Davinci系列,,OMAP3系列,,OMAP-L系列)的通信機(jī)制,包括Codec Engine,、IUNIVERSAL API,、C6Accel、C6Run,、RPMSG,、RCM和OpenCL等。從底層的通信(CMEM+DSPLINK/SYSLINK)到高層的封裝和構(gòu)建系統(tǒng),。

Overview

 

本文介紹了TI的ARM+C6000 DSP異構(gòu)多核平臺(tái)(如Davinci系列,,OMAP3系列,OMAP-L系列)的通信機(jī)制,,包括Codec Engine,、IUNIVERSAL API、C6Accel,、C6Run,、RPMSG、RCM和OpenCL等。從底層的通信(CMEM+DSPLINK/SYSLINK)到高層的封裝和構(gòu)建系統(tǒng),。

Codec Engine: http://processors.wiki./index.php/Category:Codec_Engine

Codec Engine相關(guān)的軟件部件可以從如下地址下載http://software-dl./dsps/dsps_public_sw/sdo_sb/targetcontent/index.html,。Codec Engine (CE)是一個(gè)簡化了使用xDM通用API的編解碼器和算法的框架,能夠用于算法本地運(yùn)行(即算法和算法CEApp在同一個(gè)處理器上運(yùn)行)或者遠(yuǎn)端運(yùn)行(即在不同處理器上運(yùn)行),,可以用于同構(gòu)或者異構(gòu)的處理器(OMAP3,、DM644xDM64x,,DM643x,,DM3555DM365等,,以及多核C6472,,C6474等)。集成的應(yīng)用程序調(diào)用Codec Engine API,。在Codec Engine內(nèi)部,,反應(yīng)XDM APIVISA API用于實(shí)際的編解碼的調(diào)度。如果算法運(yùn)行于遠(yuǎn)端,,VISAstubskeleton來實(shí)現(xiàn)一個(gè)遠(yuǎn)端程序調(diào)度(RPC,,remote procedure callDSP/BIOS LINK或者syslink用于底層的IPCinter-processor communication)通信),。為了能夠采用Codec Engine,需要實(shí)現(xiàn)定義在XDM algorithm standardXDAIS Algorithm Standard中的算法接口規(guī)范,。下圖是一個(gè)ARM+DSP的通信協(xié)同示意圖,。Codec Engine是介于應(yīng)用層(ARM側(cè)的應(yīng)用程序)和信號(hào)處理層(DSP側(cè)的算法)之間的軟件橋梁。ARM應(yīng)用程序調(diào)用Codec EngineVISA Video, Image, Speech, AudioAPI VIDENC_process(a, b, c )),。Codec Enginestub ARM側(cè))會(huì)把參數(shù)a, b, c以及要調(diào)用DSP側(cè)process這個(gè)信息打包,,通過消息隊(duì)列(message queue)傳遞到DSPCodec EngineskeletonDSP側(cè))會(huì)解開這個(gè)參數(shù)包,,把參數(shù)a, b, c轉(zhuǎn)換成DSP側(cè)對應(yīng)的參數(shù)x, y, z(比如ARM側(cè)傳遞的是虛擬地址,,而DSP只能認(rèn)物理地址),DSP側(cè)的server(優(yōu)先級(jí)較低,,負(fù)責(zé)和ARM通信的任務(wù))會(huì)根據(jù)process這一信息創(chuàng)建一個(gè)DSP側(cè)的process(x, y, x)任務(wù)最終實(shí)現(xiàn)VIDENC_process(a, b, c)的操作,。

1. Codec Engine應(yīng)用和算法調(diào)用示意圖

Codec Engine軟件模塊和組件

在每款提供了Codec EngineTI DSPDVSDK開發(fā)包中還提供了如下軟件模塊和工具配合使用:

Framework Components: http://processors.wiki./index.php?title=Framework_Components_FAQ

  • Framework ComponentsTI提供的一個(gè)軟件模塊,負(fù)責(zé)DSP側(cè)的memory DMA資源管理,。他底層會(huì)有如DSKT2(用于創(chuàng)建和訪問xDAIS算法),、RMAN(通用的資源管理器,內(nèi)存和外設(shè)資源管理),、ECPY(與RMAN資源管理器協(xié)調(diào)工作的基于DMA的內(nèi)存拷貝函數(shù)庫),、DMAN3(EDMA3設(shè)備中共享QDMA通道)、ACPY3(基于DMA的內(nèi)存拷貝函數(shù)庫,在FC 3.23中被廢棄),。

xDAIS:http://processors.wiki./index.php?title=Category:XDAIS

xDAIS 是一個(gè)標(biāo)準(zhǔn),,它定義了TI DSP算法接口的標(biāo)準(zhǔn)。這樣大大提高了DSP算法軟件的通用性,。DSP算法工程師要寫出能被ARM通過Codec Engine調(diào)用的算法,,必須保證自己的算法接口符合這個(gè)標(biāo)準(zhǔn)。

XDC Tools

XDC Toolsgmake類似,,是一個(gè)工具,。XDC根據(jù)用戶定義的一套build指令,通過調(diào)用用戶指定的ARM 工具鏈(Tool Chain)和DSP編譯器(C6x Code Generation Tools buildARM側(cè)和DSP側(cè)的可執(zhí)行文件,??梢韵炔槐丶?xì)究這個(gè)工具,只需通過編Codec Engine的例子,,知道如何設(shè)置build指令就可以了,。

2. xDC build系統(tǒng)

DSP/BIOS Link :http://processors.wiki./index.php?title=DSPLink_Overview

DSP/BIOS Link是實(shí)現(xiàn)ARMDSP之間通信的底層軟件,Codec Engine就是建立在這個(gè)底層軟件之上,。在修改系統(tǒng)內(nèi)存分配(缺省是256MBDDR2)時(shí),,DSP/BIOS Link 1.38版本的用戶需要修改DSP/BIOS Link的配置文件,并重新build DSP/BIOS Link,。而DSP/BIOS Link 1.40版本以后的用戶就無需此操作,。

DSP/BIOS Link包括了PROC的基本的處理器控制(如GPP綁定DSPGPP加載DSP的可執(zhí)行程序,,GPP啟動(dòng)DSP,,GPP停止,GPP接綁定DSP),、IPC通信機(jī)制(Message Queue消息隊(duì)列MSGQ,、基于事件回收的流模型CHNL、基于流的循環(huán)緩沖的RingIO),、IPC通信構(gòu)建模塊(底層的內(nèi)存管理分配的POOL,、多處理器互斥訪問的MPCS、對于DSP內(nèi)存讀寫的PROC_read/PROC_write),。

Sys/BIOS Link : http://processors.wiki./index.php/Differences_Between_DSP/BIOS_and_SYS/BIOS

CMEM: http://processors.wiki./index.php/CMEM_Overview

提供內(nèi)存管理,,用戶能定義的大小固定、連續(xù)地址的POOL,。在cmem 2.0之后還引入了Heap,,CMEM地址空間在POOL之后的都認(rèn)為是HEAP。用戶可以通過在cmem的內(nèi)核驅(qū)動(dòng)加載時(shí)設(shè)置參數(shù),,如modprobe cmemk phys_start=0x83000000 phys_end=0x85200000 pools=21x4096,,具體的cmem內(nèi)存分配的poolheap可以從cat /proc/cmem來得到具體的狀態(tài),。

C6x Code Generation Tools :

C6x Code Generation ToolsLinux環(huán)境下C6000系列DSP的編譯器。我們用CCS開發(fā)DSP時(shí)都是用的Windows環(huán)境下的DSP編譯器,。

DSP/BIOS :http://processors.wiki./index.php?title=Category:DSPBIOS

DSP/BIOSTI 免費(fèi)提供的DSP實(shí)時(shí)操作系統(tǒng),。和上面C6x Code Generation Tools一樣,這里的DSP/BIOS也是Linux環(huán)境下的版本,。

3. TI BIOS系統(tǒng)的組件

MontaVista Linux PSP

TI開發(fā)板的u-boot,、Linux Kernel版本。

Codec Engine軟件開發(fā)流程

開發(fā)ARM+協(xié)處理器的平臺(tái)軟件需要算法在協(xié)處理端的開發(fā),、算法的集成,、ARMAPP程序的開發(fā)幾個(gè)方面。

DSP算法開發(fā)

對于DSP算法,,處理算法性能和效率外,,從算法的集成需要讓ARM可以通過Codec Engine來調(diào)用DSP算的算法。因而需要1),、熟悉xDAISxDM標(biāo)準(zhǔn),。需要先了解xDAISxDM只是xDAIS的擴(kuò)展,。xDAIS 6.10及其以后的版本,,包含了一個(gè)工具QualiTI,可以檢查您的DSP算法是否滿足xDAIS標(biāo)準(zhǔn)(但不會(huì)檢查是否滿足xDM),。具體請參考:http://processors.wiki./index.php?title=QualiTI_XDAIS_Compliance_Tool ,。2)、熟悉Framework Components,。 Framework Components主要包括兩個(gè)模塊DSKT2DMAN3,,它們分別負(fù)責(zé)DSP側(cè)的memory EDMA資源管理。DSP算法使用的memory必須是先向DSKT2提出申請并由DSKT2分配得到的,。同樣DSP算法使用的EDMA通道也是向DMAN3申請并由DMAN3分配得到的。而關(guān)于QDMA的操作,,是通過ACPY3這個(gè)模塊實(shí)現(xiàn)的,。這樣的好處是很容易對DSP側(cè)不同的算法做整合,不同的算法之間不用擔(dān)心資源(MemoryEDMA)的沖突問題,。Codec Engine DSP側(cè)會(huì)涉及到Cache一致性的問題,。請參考:http://wiki./index.php?title=Cache_Management

DSP系統(tǒng)集成

通常DSP算法工程師都會(huì)把自己的符合xDM標(biāo)準(zhǔn)算法編成一個(gè).lib文件(或 .a64P),供DSP系統(tǒng)工程師調(diào)用,。DSP系統(tǒng)工程師最終build出一個(gè)DSP Server(也就是DSP的可執(zhí)行程序.x64P,,和CCS下編譯生成的.out類似)。(參考http://focus./lit/ug/sprued5b/sprued5b.pdf ,,這個(gè)文檔會(huì)講到.xdc.bld等文件,,Codec Engine1.20及以上版本的用戶可以先不細(xì)究,,后面介紹工具幫您自動(dòng)生成這些文件。)

1 如果現(xiàn)在有一個(gè).lib文件(或 .a64P)(算法必須符合xDM標(biāo)準(zhǔn)),,如何生成自己的DSP Server呢,?下面URL有詳細(xì)的關(guān)于RTSC Codec and Server Package Wizard工具介紹,教您如何把一個(gè).lib文件封裝成RTSC Codec 包和RTSC DSP Server包,,并最終buildDSP的可執(zhí)行程序.x64P,。

http://processors.wiki./index.php?title=RTSC_Codec_And_Server_Package_Wizards  
http://processors.wiki./index.php?title=I_just_want_my_video_codec_to_work_with_the_DVSDK

2 如果您使用的是Codec Engine 1.20以前的版本,請參考Codec Engine安裝路徑下examples/servers/video_copy這個(gè)例子,。這時(shí)就需要搞清楚sprued6c.pdfsprued5b.pdf中提到的.xdc.xs等文件的功能,,也可以在video_copy中的相關(guān)文件的基礎(chǔ)上修改手動(dòng)創(chuàng)建出自己的RTSC Codec包和RTSC DSP server包。

3 創(chuàng)建好RTSC Codec RTSC DSP Server包之后,,就是如何build.x64P的問題了,。其中關(guān)鍵是修改user.bldxdcpaths.mak文件,設(shè)置Codec Engine依賴的其它軟件模塊和工具的正確路徑,。

4 如果自己的硬件DDR2大小和例子中的256Mbytes不一致,,需要修改DSP.tcf文件和其他配置。還有些工程師不清楚如何分配memory及如何決定具體段,,如:DDRALGHEAPDDR的大小,,以及如何配置./loadmodules里的參數(shù)都請參考: http://wiki./index.php?title=Changing_the_DVEVM_memory_map

ARM端應(yīng)用程序開發(fā)

ARM應(yīng)用工程師需要調(diào)用Codec EngineVISA API,,最終編出ARM側(cè)的可執(zhí)行程序,,因此,必須根據(jù)自己的應(yīng)用學(xué)習(xí)相關(guān)的VISA API,、如何創(chuàng)建應(yīng)用側(cè)Codec Enginepackage及配置文件,。(參考http://focus./lit/ug/sprue67d/sprue67d.pdf ,這個(gè)文檔也涉及到如何調(diào)試Codec Engine的內(nèi)容),。

1)了解ARM應(yīng)用程序調(diào)用Codec Engine的流程,、VISA API和其他Codec Engine API??梢詤⒖?/span>Codec Engine安裝路徑下examples/apps/video_copy的例子(較簡單)或者DVSDK安裝路徑下demos里的encode/decode/encodedecode例子(較復(fù)雜),。
http://wiki./index.php?title=Configuring_Codec_Engine_in_Arm_apps_with_createFromServer

2 了解ceapp.cfg文件。sprue67d.pdf有相關(guān)介紹,,可以先讀懂examples/apps/video_copy/ceapp.cfg,。

3 4.2 3)中提到的方法學(xué)習(xí)如何build ARM側(cè)的可執(zhí)行程序。

4 如何在多線程中調(diào)用codec engine,,參考:
http://wiki./index.php?title=Multiple_Threads_using_Codec_Engine_Handle

5)還可以參考以下三個(gè)文檔了解更多TI demoARM應(yīng)用程序的結(jié)構(gòu),、線程調(diào)度等具體的問題。

C6Accel

C6EZAccel能提供ARM+DSP架構(gòu)的SOC的調(diào)用DSP端算法的ARM端應(yīng)用程序的快速開發(fā),。適用于OMAP-L137/ OMAP-L138/OMAP3530/OMAP3525/DM3730/DM6446/DM8168/DM8148等處理器,。C6EZAccel包括了符合TI算法標(biāo)準(zhǔn)XDAIS的基于Codec Engine的算法庫的快速集成,。C6EZAccel還包括了ARM端應(yīng)用程序來啟動(dòng)這些DSP端算法。這些DSPlib庫用codec engineIUNIVERSAL API做了封裝方便ARM端調(diào)用,。iUniversal APIs類似VISA API,,能通過Codec Engine接口傳遞函數(shù)參數(shù)和返回值等,。

4. C6EZAccel通過IUNIVERSAL API調(diào)用框架

http://processors.wiki./index.php/C6EZAccel

C6Run

C6EZRun本質(zhì)上講是一個(gè)build系統(tǒng),,即通過對程序的編譯結(jié)果后處理,首先用codec engine tools來編譯源代碼,,得到的目標(biāo)文件用code sourcerygcc-arm重新編譯鏈接,,該方法適用于OMAP-L137/ OMAP-L138/OMAP3530/OMAP3525/DM3730/DM6446/DM8168/dm3725等處理器。

C6RunLib

c6runlib-cc是一個(gè)Bash shell腳本,,編譯C代碼產(chǎn)生DSP端的C6000目標(biāo)文件,,首先調(diào)用C6000的編譯器并合理的處理命令行選項(xiàng)(c6runlib-cc命令行的語法符合開源GCC編譯器的語法)c6runlib-cc工具目前只支持C源文件,。經(jīng)由c6runlib-cc編譯和匯編的文件會(huì)再次分析產(chǎn)生2個(gè)額外的源文件,即2個(gè)RPC stub,,一個(gè)在ARM端(后綴名為".gpp_stub.o"),,一個(gè)在DSP端(擴(kuò)展名為".dsp_stub.o")。輸出的目標(biāo)文件會(huì)由c6runlib-ar進(jìn)行壓縮打包,。這個(gè)庫中包含了自動(dòng)的RPC調(diào)用,,屏蔽了底層的DSPLINK和其他的TI組件,。

5. C6RunLib工具編譯鏈接圖示

 

C6RunApp

C6RunApp-cc是一個(gè)Bash shell的腳本,,能編譯C代碼產(chǎn)生C6000的目標(biāo)文件。首先調(diào)用TI C6000的編譯器cl6x,,當(dāng)然會(huì)對命令行選項(xiàng)進(jìn)行合適的處理,。然后c6runapp-cc還用來鏈接C6000目標(biāo)文件產(chǎn)生一個(gè)ARM/Linux的應(yīng)用程序。即c6runapp-cc工具合理的利用cl6x的編譯器和ARM GCC的編譯器來產(chǎn)生鏡像可執(zhí)行文件。目前的c6runapp-cc的工具只支持C源代碼,。

6. C6RunApp工具編譯鏈接圖示

1. C6RunApp常用的命令行選項(xiàng)

--C6Run:replace_malloc 

替換標(biāo)準(zhǔn)Cmalloc APIs為共享CMEMheap

--C6Run:no_replace_malloc 

不替換malloc APIs (默認(rèn))

--C6Run:debug 

使用debug模式的庫

--C6Run:release 

使用release模式的庫 (默認(rèn))

--C6Run:save_dsp_image 

保存DSP端的可執(zhí)行程序和相應(yīng)的內(nèi)存映射文件,。

 

7. ARM端的開發(fā)到ARM+DSP端的開發(fā)

 

RPMSG

http://www./wiki/RPMsg_Kernel_Sources

http:///wiki/RPMsg_BIOS_Sources

RPMSG是開源的IPC通信框架,開發(fā)于2011年,,用于Android 4.0,,首次出現(xiàn)在Linux 3.0的內(nèi)核里,。它簡化了SysLink 2.0的一些特性,提供更為簡單的用戶接口,??梢砸暈?/span>SysLink 3.0.

RPMsg的特性:

設(shè)備管理:遠(yuǎn)端處理器的全集管理,包括設(shè)備初始化,、加在可執(zhí)行程序,,內(nèi)存管理,運(yùn)行時(shí)電源管理,,遠(yuǎn)端處理器的tracelog,,嚴(yán)重錯(cuò)誤和異常管理,錯(cuò)誤恢復(fù)等,。

信息框架(Messaging Framework): Linux消息框架來在處理器間交換固定大小的控制信息,;

資源管理:申請和釋放遠(yuǎn)端的外設(shè)和硬件加速器、帶寬頻率和延遲管理,。

RPMSG的基本組件

remoteproc:管理遠(yuǎn)端處理器設(shè)備狀態(tài)的驅(qū)動(dòng),。設(shè)備的加載和啟動(dòng)、功耗控制,、異常管理和錯(cuò)誤恢復(fù),。平臺(tái)相關(guān)的驅(qū)動(dòng)接口。

rpmsg: 遠(yuǎn)端處理器的消息隊(duì)列驅(qū)動(dòng),,提供消息傳遞機(jī)制,。

rpmsg-resmgr:管理時(shí)鐘和各種外設(shè)的請求限制的客戶端驅(qū)動(dòng);

rpmsg-omx:用戶空間的接口與TIOMX框架交互的客戶端驅(qū)動(dòng),,可以把部分的OMX框架的負(fù)荷轉(zhuǎn)交給協(xié)處理器,。

RPMSG底層驅(qū)動(dòng)機(jī)制

iommuOMAP遠(yuǎn)端協(xié)處理的MMU管理驅(qū)動(dòng)

mailbox: 管理OMAP處理器內(nèi)的郵箱外設(shè)的驅(qū)動(dòng),提供不同的處理器子系統(tǒng)間的通信,;

hwspinlock: 硬件外設(shè)的自旋鎖,,提供不同處理器間的硬件外設(shè)的仲裁;

virtio:支持虛擬化的VirtIO框架

 

RCM

8. RCM服務(wù)器server端和客戶端client端通信示意

http://processors.wiki./index.php/RCM_Overview

一些軟件架構(gòu)組件如DSP Bridge,、Codec Engine需要把一些任務(wù)發(fā)送worker線程到遠(yuǎn)端處理器執(zhí)行包括創(chuàng)建線程,、得到CPU的負(fù)荷、分配遠(yuǎn)端內(nèi)存等,。RCM提供了通用的遠(yuǎn)端客戶端和服務(wù)器模型來實(shí)現(xiàn)平臺(tái)間任務(wù)的分配,。RCM構(gòu)建在XDC之上,使用IPC的MessageQ服務(wù)來實(shí)現(xiàn)底層通信,。TI81xx的Distributed OpenMax就是基于RCM實(shí)現(xiàn)的,。

OPENCL

OpenCL最初蘋果公司開發(fā),擁有其商標(biāo)權(quán),,并在與AMD,,IBM,,英特爾nVIDIA技術(shù)團(tuán)隊(duì)的合作之下初步完善。隨后,,蘋果將這一草案提交至Khronos Group,。2008616日,Khronos的通用計(jì)算工作小組成立,。5個(gè)月后的20081118日,,該工作組完成了OpenCL 1.0規(guī)范的技術(shù)細(xì)節(jié)。該技術(shù)規(guī)范在由Khronos成員進(jìn)行審查之后,,于2008128日公開發(fā)表,。2010614日,OpenCL 1.1 發(fā)布,。目前OpenCL 2.0的規(guī)范正在制定中,。

http://processors.wiki./index.php/OpenCL

 

Reference:

http://houh-1984.blog.163.com/

Codec Engine FAQ

Framework Components DMAN3/ACPY3 Users Guide

Changing the DVEVM memory map

C6EZAccel

Davinci Multimedia Application Interface

Codec Engine Application Developers Guide

How do I Integrate new codecs into DVSDK

Debugging the DSP side of a CE application using CCS

Codec Engine Roadmap

Configuring Codec Engine in Arm apps with createFromServer

http://www..cn/general/cn/docs/gencontent.tsp?contentId=61575

http://processors.wiki./index.php/C6EZAccel

http://processors.wiki./index.php/C6EZRun

 

本文介紹了TI的ARM+C6000 DSP異構(gòu)多核平臺(tái)(如Davinci系列,OMAP3系列,,OMAP-L系列)的通信機(jī)制,,包括Codec Engine、IUNIVERSAL API,、C6Accel,、C6Run、RPMSG,、RCM和OpenCL等,。從底層的通信(CMEM+DSPLINK/SYSLINK)到高層的封裝和構(gòu)建系統(tǒng)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多