電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>ARM>ARM和DSP的通信和協(xié)同工作的解決方案和實現(xiàn)指南

ARM和DSP的通信和協(xié)同工作的解決方案和實現(xiàn)指南

2017-10-25 | rar | 0.6 MB | 次下載 | 1積分

資料介紹

 視頻監(jiān)控子系統(tǒng)是現(xiàn)代智能機器人設計中必不可少的一個部分,它需要采用DSP并根據(jù)某種算法對攝入的圖像進行處理和分析,它也需要采用ARM處理器對DSP進行協(xié)同管理和控制工作,目前開發(fā)工程師碰到的一個最大設計挑戰(zhàn)是:如何最高效率地實現(xiàn)ARM和DSP或協(xié)處理器的通信和協(xié)同工作?本文將詳細為您介紹解決這一技術挑戰(zhàn)的解決方案和實現(xiàn)指南。
  德州儀器TI)的第一顆達芬奇(DaVinci)芯片(處理器)DM6?46已經(jīng)問世快三年了。繼DM6?4x之后,TI又陸續(xù)推出了DM6?3x、DM35x、DM6?67、OMAP353x等一系列 ARM+DSP或ARM+視頻協(xié)處理器的多媒體處理器平臺。很多有很強DSP開發(fā)經(jīng)驗或ARM開發(fā)經(jīng)驗的工程師都轉到達芬奇或通用 OMAP(OMAP353x)平臺上開發(fā)視頻監(jiān)控、視頻會議及便攜式多媒體終端等產(chǎn)品。大家都面臨著同一個問題,那就是如何實現(xiàn)ARM和DSP或協(xié)處理器的通信和協(xié)同工作?TI的數(shù)字視頻軟件開發(fā)包(DVSDK)提供了Codec Engine這樣一個軟件模塊來實現(xiàn)ARM和DSP或協(xié)處理器的協(xié)同工作。有很多工程師反饋這個軟件模塊非常好用,節(jié)省了很多開發(fā)時間,也有工程師認為 TI提供的資料太多,不知如何快速上手。本文將從一個第一次接觸Codec Engine的工程師角度出發(fā),歸納TI提供的相關資源(文檔,例程和網(wǎng)絡資源),并介紹相關開發(fā)調試方法幫您快速入門Codec Engine。
  1.Codec Engine概述
  如圖1所示,Codec Engine是連接ARM和DSP或協(xié)處理器的橋梁,是介于應用層(ARM側的應用程序)和信號處理層(DSP側的算法)之間的軟件模塊。ARM應用程序調用Codec Engine的VISA (Video, Image, Speech, Audio)API,如圖1中VIDENC_process(a, b, c )。Codec Engine的stub (ARM側)會把參數(shù)a, b, c以及要調用DSP側process這個信息打包,通過消息隊列(message queue)傳遞到DSP。Codec Engine的skeleton(DSP側)會解開這個參數(shù)包,把參數(shù)a, b, c轉換成DSP側對應的參數(shù)x, y, z(比如ARM側傳遞的是虛擬地址,而DSP只能認物理地址),DSP側的server(優(yōu)先級較低,負責和ARM通信的任務)會根據(jù)process這一信息創(chuàng)建一個DSP側的process(x, y, x)任務最終實現(xiàn)VIDENC_process(a, b, c)的操作。
  ARM和DSP的通信和協(xié)同工作的解決方案和實現(xiàn)指南
  圖1 達芬奇軟件結構框圖
  2. Codec Engine入門第一步
  有些初學者認為Codec Engine文件包結構復雜,很難找到自己想找的文檔或例子。其實在Codec Engine文件包的根目下有一個發(fā)布說明文檔,比如Codec Engine 1.20 根目錄下的release_notes_codec_engine_1_20.html。這個文檔就是你了解Codec Engine的開始,里面有關于該版本Codec Engine的介紹、相關文檔資料的鏈接、新的功能、支持哪些芯片、已知的bug、修正了哪些bug及例子等等的具體說明。具體如圖2藍色字體所示。瀏覽該文檔后,初學者至少可以知道哪里可以找到自己想要的文檔或例子。舉例來說,如果想找相關的文檔,點擊 Documentation就可以看到這個Codec Engine文件包里的文檔的鏈接。
  下載 (16.26 KB)
  圖2 Codec Engine 1.20 Release Notes截圖
  3.Codec Engine入門第二步
  點擊Codec Engine的發(fā)布說明文檔 (如圖2)的Validation Info,我們可以知道Codec Engine 1.20需要和以下軟件模塊和工具配合使用:
  * Framework Components 1.20.02
  * xDAIS 5.21
  * XDC Tools 2.93.01
  * DSP/BIOS Link 1.40.05, configured for the DM6?46 EVM
  * C6x Code Generation Tools version 6.0.8
  * DSP/BIOS 5.31.05
  * MontaVista Linux v4.0
  * Red Hat Enterprise Linux 3 (SMP)
  因此,我們需要在該Codec Engine安裝的DVSDK文件包下面檢查上面提到的軟件模塊和工具是否安裝,版本是否正確。否則,可能會編譯不過 Codec Engine的例子。那么,什么是 Framework Components,什么是xDAIS,什么又是XDC Tools呢?你可以分別到它們的根目錄下瀏覽它們各自的發(fā)布說明文檔,做一個總體的了解。
  這里我們簡單介紹一下,可以幫助大家盡快找到和自己相關的重點及資源。
  1)Framework Components是TI提供的一個軟件模塊,負責DSP側的memory 和DMA資源管理。因此,DSP算法工程師需要了解這個軟件模塊。http://tiexpressdsp.com/wiki /index.php?title=Framework_Components_FAQ
  2)xDAIS 是一個標準,它定義了TI DSP算法接口的標準。這樣大大提高了DSP算法軟件的通用性。DSP算法工程師要寫出能被ARM通過Codec Engine調用的算法,必須保證自己的算法接口符合這個標準。因此,DSP算法工程師也必須了解這個軟件模塊。 http://tiexpressdsp.com/wiki/index.php?title=Category:XDAIS
  3)XDC Tools和gmake類似,是一個工具。XDC根據(jù)用戶定義的一套build指令,通過調用用戶指定的ARM 工具鏈(Tool Chain)和DSP編譯器(C6x Code Generation Tools )build出ARM側和DSP側的可執(zhí)行文件??梢韵炔槐丶毦窟@個工具,只需通過編Codec Engine的例子,知道如何設置build指令就可以了。
  4)DSP/BIOS Link是實現(xiàn)ARM和DSP之間通信的底層軟件,Codec Engine就是建立在這個底層軟件之上。在修改系統(tǒng)內存分配(缺省是256MB的DDR2)時,DSP/BIOS Link 1.38版本的用戶需要修改DSP/BIOS Link的配置文件,并重新build DSP/BIOS Link。而DSP/BIOS Link 1.40版本以后的用戶就無需此操作。http://tiexpressdsp.com/wiki /index.php?title=DSPLink_Overview
  http://wiki.davincidsp.com/index.php?title=Changing_the_DVEVM_memory_map
  5)C6x Code Generation Tools是Linux環(huán)境下C6000系列DSP的編譯器。我們用CCS開發(fā)DSP時都是用的Windows環(huán)境下的DSP編譯器。
  6)DSP/BIOS 是TI 免費提供的DSP實時操作系統(tǒng)。和上面C6x Code Generation Tools一樣,這里的DSP/BIOS也是Linux環(huán)境下的版本。DSP系統(tǒng)工程師需要了解這個操作系統(tǒng)。http: //tiexpressdsp.com/wiki/index.php?title=CategorySPBIOS
  4. Codec Engine入門第三步
  開發(fā)ARM+DSP平臺需要三類工程師:ARM應用程序工程師、DSP算法工程師和DSP系統(tǒng)工程師。而開發(fā)ARM+協(xié)處理器平臺只需要ARM應用程序工程師。下面就讓我們針對這三類工程師做分別介紹。如果您使用的是TI或TI第三方的編解碼算法,就不需要關注DSP算法工程師的部分。如果使用ARM+協(xié)處理器平臺,就只需關心ARM應用工程師的部分。
  4.1 DSP算法工程師應該如何著手?
  這里我們不討論如何開發(fā)DSP算法,只討論DSP算法工程師怎樣讓自己的算法可以被ARM通過Codec Engine調用。(參考http://www.ti.com/litv/pdf/sprued6c,這個文檔會講到codec package及相關的.xs和.xdc文件,Codec Engine1.20及以上版本的用戶可以先不細究這些內容,后面會介紹工具幫您自動生成這些文件。)
  1)熟悉xDAIS和xDM標準。
  xDM 只是xDAIS的擴展,因此,需要先了解xDAIS。在xDAIS 軟件包根目錄下的發(fā)布說明文檔里,可以很快找到關于xDAIS和xDM的文檔鏈接。http://focus.ti.com/lit/ug /spruec8b/spruec8b.pdf
  在xDAIS安裝路徑下的examples/ti/xdais/dm/examples /g711有一個g711_sun_internal.c,這個算法不符合xDAIS標準。在同一個路徑下的g711dec_sun_ialg.c (decoder)和g711enc_sun_ialg.c (encoder)是封裝成符合xDM標準之后的編解碼算法。可以通過這個例子學習和了解如何把自己算法封裝成符合xDM標準的算法。
  xDAIS 6.10及其以后的版本,包含了一個工具QualiTI,可以檢查您的DSP算法是否滿足xDAIS標準(但不會檢查是否滿足xDM)。具體請參考:http://tiexpressdsp.com/wiki /index.php?title=QualiTI_XDAIS_Compliance_Tool
  2)熟悉 Framework Components。
  Framework Components主要包括兩個模塊DSKT2和DMAN3,它們分別負責DSP側的memory 和EDMA資源管理。DSP算法使用的memory必須是先向DSKT2提出申請并由DSKT2分配得到的。同樣DSP算法使用的EDMA通道也是向 DMAN3申請并由DMAN3分配得到的。而關于QDMA的操作,是通過ACPY3這個模塊實現(xiàn)的。這樣的好處是很容易對DSP側不同的算法做整合,不同的算法之間不用擔心資源(Memory和EDMA)的沖突問題。
  在Framework Components 軟件包根目錄下的發(fā)布說明文檔里,可以很快找到相關文檔的鏈接。在Framework Components安裝路徑下packages\ti\sdo\fc\dman3\examples有一個Fast Copy的例子,可以幫您理解如何基于Framework Components的ACPY3模塊實現(xiàn)QDMA的操作。
  另外,有些用戶 DSP側的算法比較簡單,在確保不和ARM側EDMA資源沖突的前提下在算法里直接操作EDMA不使用DMAN3也是可以的。這樣做的弊端是和其它算法做整合時會遇到資源使用沖突的問題。
  4.2 DSP系統(tǒng)工程師應該如何著手?
  通常DSP算法工程師都會把自己的符合xDM標準算法編成一個.lib文件(或 .a6?P),供DSP系統(tǒng)工程師調用。DSP系統(tǒng)工程師最終build出一個DSP Server(也就是DSP的可執(zhí)行程序.x6?P,和CCS下編譯生成的.out類似)。(參考http://focus.ti.com/lit/ug /sprued5b/sprued5b.pdf,這個文檔會講到.xdc和.bld等文件,Codec Engine1.20及以上版本的用戶可以先不細究,后面介紹工具幫您自動生成這些文件。)
  1)如果現(xiàn)在有一個.lib文件(或 .a6?P)(算法必須符合xDM標準),如何生成自己的DSP Server呢?下面URL有詳細的關于RTSC Codec and Server Package Wizard工具介紹,教您如何把一個.lib文件封裝成RTSC Codec 包和RTSC DSP Server包,并最終build出DSP的可執(zhí)行程序.x6?P。http://wiki.davincidsp.com /index.php?title=RTSC_Codec_And_Server_Package_Wizards http://wiki.davincidsp.com/index 。.. work_with_the_DVSDK
  2)如果您使用的是Codec Engine 1.20以前的版本,請參考Codec Engine安裝路徑下examples/servers/video_copy這個例子。這時就需要搞清楚sprued6c.pdf和 sprued5b.pdf中提到的.xdc和.xs等文件的功能,也可以在video_copy中的相關文件的基礎上修改手動創(chuàng)建出自己的RTSC Codec包和RTSC DSP server包。
  3)創(chuàng)建好RTSC Codec 和RTSC DSP Server包之后,就是如何build出.x6?P的問題了。點擊圖2所示的Examples,就可以找到build Codec Engine例子的說明文檔的鏈接。按照這個文檔做一遍后,就可以對如何build Codec Server有一個清楚的了解。其中關鍵是修改user.bld和xdcpaths.mak文件,設置Codec Engine依賴的其它軟件模塊和工具的正確路徑。
  4)如果自己的硬件DDR2大小和例子中的256Mbytes不一致,需要修改DSP的.tcf文件和其他配置。還有些工程師不清楚如何分配memory及如何決定具體段,如:DDRALGHEAP和DDR的大小,以及如何配置。/loadmodules里的參數(shù)都請參考: http://wiki.davincidsp.com /index.php?title=Changing_the_DVEVM_memory_map。
  4.3 ARM應用程序工程師應該如何著手?
  ARM應用工程師需要調用Codec Engine的VISA API,最終編出ARM側的可執(zhí)行程序,因此,必須根據(jù)自己的應用學習相關的VISA API、如何創(chuàng)建應用側Codec Engine的package及配置文件。(參考http://focus.ti.com/lit/ug/sprue67d/sprue67d.pdf,這個文檔也涉及到如何調試Codec Engine的內容)。
  1)了解ARM應用程序調用Codec Engine的流程、VISA API和其他Codec Engine API。可以參考Codec Engine安裝路徑下examples/apps/video_copy的例子(較簡單)或者DVSDK安裝路徑下demos里的encode /decode/encodedecode例子(較復雜)。http://wiki.davincidsp.com /index.php?title=Configuring_Codec_Engine_in_Arm_apps_with_createFromServer
  2)了解ceapp.cfg文件。sprue67d.pdf有相關介紹,可以先讀懂examples/apps /video_copy/ceapp.cfg。
  3)用4.2 3)中提到的方法學習如何build ARM側的可執(zhí)行程序。
  4)如何在多線程中調用codec engine,參考:http://wiki.davincidsp.com /index.php?title=Multiple_Threads_using_Codec_Engine_Handle
  5)還可以參考以下三個文檔了解更多TI demo的ARM應用程序的結構、線程調度等具體的問題。
  EncodeDecode Demo for the DaVinci DVEVM/DVSDK 1.2 (Rev. A) (spraah0a.htm, 8 KB) 27 Jun 2007 Abstract
  Encode Demo for the DaVinci DVEVM/DVSDK 1.2 (Rev. A) (spraa96a.htm, 8 KB) 27 Jun 2007 Abstract
  Decode Demo for the DaVinci DVEVM/DVSDK 1.2 (Rev. A) (spraag9a.htm, 8 KB) 27 Jun 2007 Abstract
  5.使用中常碰到的問題
  1)如果遇到問題可以先訪問http://wiki.davincidsp.com /index.php?title=Codec_Engine_FAQ。
  2)有些工程師沒有DSP開發(fā)經(jīng)驗,或者暫時沒有仿真器通過JTAG調試DSP。可以參考下面網(wǎng)頁的內容,先做一個“Hello World”的例程對ARM和DSP如何協(xié)同工作有個感性認識。http://wiki.davincidsp.com /index.php?title=How_to_build_an_ARM/DSP_Hello_World_program_on_the_DaVinci_EVM
  3)很多工程師都是參考video_copy的例子,在它的基礎上把自己的算法加進去。因為有源代碼,這樣比較容易。但肯定要根據(jù)自己算法的需要修改ARM和DSP之間傳遞的buffer和參數(shù),重要的是先保證ARM側的應用程序可以把buffer和參數(shù)正確傳遞到DSP,DSP可以把處理之后的buffer正確的傳到ARM側的應用程序。把這個通路打通之后,就比較容易定位問題是出在ARM應用程序還是DSP側的算法。另外,參考 video_copy例子時注意代碼的注釋,以便清楚哪一句代碼可以刪掉哪一句必須要修改或保留。如果要擴展xDM的數(shù)據(jù)結構請參考:http://wiki.davincidsp.com /index.php?title=Extending_data_structures_in_xDM。
  4)Codec Engine DSP側會涉及到Cache一致性的問題。請參考:http://wiki.davincidsp.com /index.php?title=Cache_Management
  5)關于Codec Engine系統(tǒng)調試,有以下幾種方法:
  A.打開Codec Engine trace,通過打印信息看問題出在什么地方。比如engine_open失敗,DSP側不能創(chuàng)建codec 等等。
  a)Codec Engine 2.0及以上版本,請參考:http://wiki.davincidsp.com/index 。.. g_Feature_in_CE_2.0
  b)Codec Engine 1.x版本,請參考:http://wiki.davincidsp.com/index.php?title=TraceUtil
  B.ARM 應用程序跑起來后,用仿真器連上CCS調試DSP側程序,參考:http://wiki.davincidsp.com/index.php?title=Debugging_the_DSP_side_of_a_CE_application_on_DaVinci_using_CCS
  C.用Soc Analyzer可以做系統(tǒng)調試之外,還可以統(tǒng)計具體函數(shù)運行(ARM和DSP側)時間(benchmark)。請參考:http://tiexpressdsp.com/wiki/index.php?title=SoC_Analyzer
  6)因為Codec Engine是介于ARM 應用程序和編解碼算法中間的軟件模塊,很多工程師非常想知道它的開銷(overhead),請參考:http://wiki.davincidsp.com/index.php?title=Codec_Engine_Overhead
  7)如何在Linux環(huán)境下編DSP的匯編或線性匯編程序?
  在Codec Engine安裝路徑下/packages/config.bld文件里
  var C6?P = xdc.useModule(‘ti.targets.C6?P’);
  之后添加:
  C6?P.extensions[“.sa”] = {
  suf: “.sa”, typ: “asm:-fl”
  }
  或
  C6?P.extensions[“.asm”] = {
  suf: “.asm”, typ: “asm:-fa”
  }
  8)DSP側如何統(tǒng)計具體函數(shù)運行時間?
  TI DSPC6?x+內核有一個6?位的硬件定時器(Time Stamp Counter),它的頻率和CPU頻率一致。最簡單的辦法是使用TSC的低32位TSCL。注意在DM6?4x中,TSCH用于ARM。
  #include
  void main (){
  …
  TSCL=0;
  …
  t1=TSCL;
  my_code_to_benchmark();
  t2=TSCL;
  printf(“# cycles == %d\n”, (t2-t1));
  }
  6.結語
  以上針對如何上手TI的Codec Engine做了簡單的歸納,還有很多具體細節(jié)的問題沒有涉及到。還請各位工程師從自己要用的軟件模塊發(fā)布說明文檔開始找到相關的文檔并研究。經(jīng)常訪問 TI的網(wǎng)頁,http://wiki.davincidsp.com和http://tiexpressdsp.com/wiki找到最新的信息和資料。也非常歡迎您在wiki上提問。
?
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1電子電路原理第七版PDF電子教材免費下載
  2. 0.00 MB  |  1490次下載  |  免費
  3. 2單片機典型實例介紹
  4. 18.19 MB  |  92次下載  |  1 積分
  5. 3S7-200PLC編程實例詳細資料
  6. 1.17 MB  |  27次下載  |  1 積分
  7. 4筆記本電腦主板的元件識別和講解說明
  8. 4.28 MB  |  18次下載  |  4 積分
  9. 5開關電源原理及各功能電路詳解
  10. 0.38 MB  |  10次下載  |  免費
  11. 6基于AT89C2051/4051單片機編程器的實驗
  12. 0.11 MB  |  4次下載  |  免費
  13. 7藍牙設備在嵌入式領域的廣泛應用
  14. 0.63 MB  |  3次下載  |  免費
  15. 89天練會電子電路識圖
  16. 5.91 MB  |  3次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234313次下載  |  免費
  3. 2PADS 9.0 2009最新版 -下載
  4. 0.00 MB  |  66304次下載  |  免費
  5. 3protel99下載protel99軟件下載(中文版)
  6. 0.00 MB  |  51209次下載  |  免費
  7. 4LabView 8.0 專業(yè)版下載 (3CD完整版)
  8. 0.00 MB  |  51043次下載  |  免費
  9. 5555集成電路應用800例(新編版)
  10. 0.00 MB  |  33562次下載  |  免費
  11. 6接口電路圖大全
  12. 未知  |  30320次下載  |  免費
  13. 7Multisim 10下載Multisim 10 中文版
  14. 0.00 MB  |  28588次下載  |  免費
  15. 8開關電源設計實例指南
  16. 未知  |  21539次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935053次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537791次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234313次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233045次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191183次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183277次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138039次下載  |  免費