天天看點

TI基于DSP+ARM的雙核架構如何互相通信

1 通信結構簡介

針對目前應用的複雜性,SOC晶片更好能能滿足應用和媒體的需求,內建衆多接口,用ARM做為應用處理器進行多樣化的應用開發和使用者界面和接口,利用DSP進行算法加速,特别是媒體的編解碼算法加速,既能夠保持算法的靈活性,又能提供強大的處理能力。德州儀器(TI)繼第一系列Davinci晶片DM644x之後,又陸續推出了DM643x,DM35x/36x,DM6467,OMAP35x,OMAPLx等一系列ARM+DSP或ARM+視訊協處理器的多媒體處理器平台。衆多有很強DSP開發經驗的工程師,以及應用處理開發經驗的工程師都轉到使用達芬奇或OMAP平台上開發視訊監控、視訊會議及便攜式多媒體終端等産品。基于ARM+DSP的晶片架構,如何進行開發實作做期望的嵌入式應用呢? 

傳統的晶片,基本是一個處理器核心,或者是通用處理器如ARM,或者是DSP。對于控制和使用者接口,一般用通用處理器實作,算法處理或者媒體處理則依賴于DSP或者硬體晶片,很多系統都是雙晶片的架構。開發模式也比較單純,比如ARM晶片,有ARM的的仿真工具,基于OS之上進行應用開發;DSP有DSP的開發工具,如TI的CCS以及510、560的仿真器,可以進行算法的移植、優化、跟蹤、調試等。這時,所需要的經驗也比較單一。 

          基于ARM+DSP的雙核架構,很多工程師不知道如何入手進行開發,提出了很多的疑問,比如對ARM工程師,很困惑的是如何使用DSP的資源?如何進行資料的互動?如何保持雙核之間的同步?對DSP工程師,則問到如何進行ARM調試?如何啟動DSP?如果進行媒體加速,如何操作外設擷取或發送資料等。基于不同的開發經驗和基礎,ARM工程師和DSP工程師會從完全不同的角度來看SOC的晶片,以至于拿到SOC的晶片根本不知道如何入手,這裡就本人的經驗與大家分享一下。 

         首先ARM+DSP的晶片,他是一個雙核的,對應ARM和DSP分别是不同的指令集和編譯器,可以把SOC的晶片看成是兩個單晶片的合成,需要兩套不同的開發工具,CCS3.3可以進行晶片級的調試和仿真,但是對應ARM和DSP需要選擇不同的平台。一般來說,ARM上面跑作業系統,比如Linux,Wince等,在ARM上的開發,除了bootloader以外,基本都是基于OS的開發,比如驅動,核心裁減,以及上層應用等,需要的調試和仿真主要靠log或者OS提供的調試器,如KGDB,Platform Builder等。基于DSP核的開發和傳統單核DSP一樣,需要用CCS+仿真器來進行開發調試。 

     其次,對于晶片的外設接口,ARM核和DSP核都可以通路,典型的情況是ARM控制所有的外設,通過OS上的驅動去控制和管理,這部分和傳統的ARM晶片類似;DSP主要是進行算法加速,隻是和memory打交道,為了保持晶片的資源管理的一緻性,盡量避免由DSP去通路外設。當然,根據具體的應用需求,DSP也是可以控制外設接口進行資料的收發,這時,需要做好系統的管理,避免雙核操作的沖突。 

          對memory的使用,非易失的存儲空間,比如NAND、NOR Flash,基本也是由ARM通路,DSP的算法代碼作為ARM端OS檔案系統的一個檔案存在,通過應用程式進行DSP程式的下載下傳和DSP晶片的控制。外部RAM空間,即DDR存儲區,是ARM和DSP共享存在的,但是在系統設計的時候,需要把ARM和DSP使用的記憶體嚴格實體位址分開,以及預留出一部分用來互動的記憶體空間。一般情況,ARM是用低端位址,DSP通過CMD檔案配置設定高端位址,中間預留部分空間用來做資料互動,比如在OMAP3的Linux下的DVSDK中,128MB的DDR空間被分成三部分,低端位址從0x8000000到0x85800000-1的88MB空間給Linux核心使用;從0x85800000到0x86800000-1的16MB給CMEM的驅動,用來做ARM和DSP的大塊資料互動,從0x86800000到0x88000000-1的24MB是DSP的代碼和資料空間。 

      晶片的啟動也是需要重點考慮的問題,一般情況下,是ARM啟動,和傳統的單核ARM一樣,支援不同的啟動方式,比如可以支援NAND,NOR,UART,SPI,USB,PCI等接口啟動。DSP預設處于複位狀态,隻有通過ARM的應用下載下傳代碼并且解除複位以後,DSP才能跑起來。有些應用場景,需要DSP直接從外部上電就自啟動,有些晶片也是支援這種模式的。 

        最後,關于晶片的通信和同步,這個是困擾很多工程師的問題,為了便于客戶的開發和使用,TI提供了DSPLINK,CODEC ENGINE的DVSDK開發套件,基于DVSDK可以很友善的進行ARM+DSP的應用開發,下面對DVSDK的軟體架構,各個軟體子產品的功能等做簡要介紹。 

        DVSDK是多個軟體子產品的內建,包括純DSP端的軟體子產品,ARM的軟體子產品和雙核互動的軟體子產品。DVSDK的軟體包都是基于實時軟體子產品(Real-Time-Software-Component:RTSC)的,還需要安裝RTSC的工具XDC,XDC是TI開源的一個工具,可以支援跨平台的開發,能夠最大程度的代碼重用;如果需要進行純ARM的開發,還需要ARM的編譯工具以及Linux核心或者Wince的BSP;如果需要進行DSP的算法開發或者DSP端開執行代碼生成,還需要安裝DSP的編譯器cgtools和DSP/BIOS;為了便于配置生成DSP端的可執行代碼,通過向導生成Codec的RTSC包和可執行代碼,還可以選裝ceutils和cg_xml。 

         DVSDK的核心是Codec Engine,所有的其他軟體子產品基本都是圍繞Codec Engine的。Codec Engine是連接配接ARM和DSP的橋梁,是介于應用層(ARM側的應用程式)和信号處理層(DSP側的算法)之間的軟體子產品,在編譯DSP端可執行代碼和ARM端應用程式時,都需要Codec Engine的支援。Codec Engine主要有兩部分: 

 ARM端應用适配層,提供了精簡的API和對應的庫給應用層使用。 

 DSP的算法調用層,提供了DSP算法的接口封裝規範,是的所有的算法通過簡單的配置就可以編譯到DSP的可執行程式中。 

最終的應用程式需要通過Codec Engine的API接口來下載下傳DSP代碼,調用DSP端的封裝好的算法,以及進行ARM和DSP的通信。 

    關于Codec Engine的介紹,可以參考《幫您快速入門Codec Engine》。 

        Codec Engine底層ARM和DSP的通信是建立在DSP/BIOS Link之上的,DSP/BIOS Link真正實作ARM和DSP互動的軟體子產品。由于DSP/BIOS Link是跨平台的,也是有ARM部分和DSP部分組成,其中在ARM端,包括基于OS的驅動和供應用調用的庫檔案,DSP端,必須要用DSP/BIOS,DSP的可執行代碼需要包含DSP/BIOS Link的庫檔案。DSP/BIOS

Link常用的主要有如下幾部分的軟體子產品: 

 PROC相關的,主要是用來做DSP晶片的控制,比如啟動,停止等,下載下傳DSP的可執行代碼,以及直接讀寫DSP端的memory空間等 

 MSGQ相關,ARM和DSP的通信是基于MSGQ的,MSGQ有輪詢等待的方式或者中斷的方式,MSG是基于共享記憶體池的方式。Codec Engine通過MSGQ互動一些關鍵資料,比如控制,和一些大塊資料的位址指針等。大量的資料互動需要通過cmem實作。 

 在ARM端,配合Codec Engine使用的軟體子產品有LinuxUtils或者WinceUtils,包含cmem,SDMA等,cmem是用來在OS之外配置設定連續實體記憶體空間,進行實體位址到虛位址,以及虛位址到實體位址空間轉化的。為了避免資料的多次複制,需要開辟一塊ARM和DSP共享的資料空間,ARM和DSP都可以直接通路,這部分空間需要通過CMEM管理。對ARM來說,CMEM是OS上的一個驅動程式,需要通過IOCTL來實作記憶體配置設定或者位址空間轉化。由于DSP可以通路任何實體位址空間,通過ARM傳給DSP的指針必須是實體位址。 

 為了适配一些播放器的接口,DVSDK還提供了DMAI(Digital Media Application Interface),DMAI提供了更為精簡的媒體接口和基于OS的音視訊捕捉、回放等接口,在Linux下的gstreamer和Wince下的dshow filter都是基于DMAI的。并且DMAI也提供了最基本的測試應用例子,可以很友善的進行修改和測試。 

如果隻是調用現成的或者第三方的算法庫,可以隻了解ARM端的軟體子產品,Codec Engine或者DMAI已經提供了豐富的應用接口,DSP可以認為是個單純的媒體加速器,把ARM+DSP的晶片當作ASIC一樣使用。如果要充分發揮DSP的性能,就需要對DSP進行開發了。Codec Engine對DSP的算法隻是規範了接口,以便于和Codec Engine一起生成DSP的可執行程式。 

  開發DSP算法的工程師,和傳統的單核的DSP開發模式類似,隻需要操作DSP核,基于CCS進行算法開發,最後封裝成xDM的接口就可以了。具體如何進行DSP的打包,如何生成DSP的可執行程式,在後續的文章繼續讨論。

1.OMAP-L138+FPGA開發闆簡介

        深圳信邁設計的XM138F-IDK-V3是一款DSP+ARM+FPGA三核高速資料采集處理開發闆,适用于電力、通信、工控、醫療和音視訊等資料采集處理領域。

此設計采用OMAP-L138+Spartan-6平台,其中OMAP-L138是德州儀器(TI)低功耗高性能浮點DSP C6748+ARM9雙核處理器,而Spartan-6是賽靈思(Xilinx)平台更新靈活、成本效益極高的FPGA處理器。此設計通過OMAP-L138的uPP、EMIF等通信接口将兩個晶片結合在一起,而OMAP-L138内部的DSP和ARM通過DSPLINK/SYSLINK進行雙核通信,實作了需求獨特、靈活、功能強大的DSP+ARM+FPGA三核高速資料采集處理系統。

2.OMAP-L138+FPGA開發闆資源框圖 

TI基于DSP+ARM的雙核架構如何互相通信

圖1 OMAP-L138+FPGA三核高速資料采集處理資源框圖

架構解析:

前端由Xilinx Spartan-6 XC6SLX9/16/25/45 FPGA采集兩路AD資料,采樣率最高可達65MHz。AD資料通過uPP或者EMIF總線傳輸至OMAP-L138的DSP。 

D資料被DSP處理之後,通過DSPLINK或者SYSLINK雙核通信元件被送往ARM,用于應用界面開發、網絡轉發、SATA硬碟存儲等應用。

OMAP-L138的DSP或者ARM根據處理結果,将得到的邏輯控制指令送往FPGA,由FPGA控制闆載DA實作邏輯輸出,更新速率175MSPS。

(1) 高速資料采集前端部分由Xilinx Spartan-6 XC6SLX9/16/25/45 FPGA同步采集兩路AD模拟輸入信号,可實作對AD資料進行預濾波處理,AD采樣率最高可達65MSPS。另外一路DAC可輸出任意幅值和任意波形的并行DA資料,更新速率175MSPS。

(2) 高速資料傳輸部分由uPP、EMIF、SPI和I2C通信總線構成。大規模吞吐量的AD和DA資料,可通過uPP總線在DSP和FPGA之間進行高速穩定傳輸;DSP可通過EMIF總線對FPGA進行并行邏輯控制和進行中等規模吞吐量的資料交換;ARM可通過SPI和I2C對FPGA端進行初始化設定和參數配置。

(3) 高速資料處理部分由DSP核和算法庫構成。可實作對AD和DA資料進行時域、頻域、幅值等信号參數進行實時變換處理(如FFT變換、FIR濾波等)。

(4) DSP+ARM雙核通信部分由DSP核、ARM核和DSPLINK/SYSLINK雙核通信元件構成。通過記憶體共享方式,實作DSP和ARM雙核之間的資料交換和通信。

(5) 資料顯示存儲拓展部分由ARM核、圖形顯示、網絡和SATA硬碟等部分構成。通過ARM的應用界面可實時顯示AD和DA的時域和頻域波形;并可實作大資料存儲和遠端網絡通信。

 4.Xilinx Spartan-6 FPGA高速資料采集前端邏輯實作

TI基于DSP+ARM的雙核架構如何互相通信

Xilinx Spartan-6 FPGA——XC6SLXx

XC6SLXx是Xilinx Spartan-6系列應用廣泛、成本效益極高的FPGA平台,共有324個管腳,提供了大量可用IO 、具有良好的平台更新能力、合理的硬體成本差異和平滑的規模提升特性,可根據實際需求使用LX9、LX16、LX25、LX45等型号。此外,四個CPU型号之間Pin to Pin相容。

(1) XC6SLX9:接口級,具備接口程式設計能力及時鐘控制能力。 

(2) XC6SLX16:算法級,可進行簡單的算法處理。 

(3) XC6SLX25:算法級,可進行中級算法處理。 

(4) XC6SLX45:系統級,可滿足更加複雜的算法和系統邏輯處理需求。

高速ADC——AD9238

AD9238是ADI公司推出的業界采樣率最快12Bit雙通道A/D轉換器,電壓輸入範圍1Vp-p和2Vp-p可選,廣泛應用于電力、通信、工控、醫療等高速資料采集應用場合。

AD9238分3種型号,采樣率分别是20 MS/s、40 MS/s和65 MS/s。不僅可提供與單通道A/D轉換器同等優異的動态性能,并且與使用兩個單通道A/D轉換器相比,AD9238還具有更好的抗串擾性能,三種型号可實作Pin to Pin相容,可根據實際需求靈活配置。

AD9238的3種型号功耗分别為180mW、330mW和600mW,隻有同類A/D轉換器一半的功耗,采用64腳LQFP封裝(尺寸隻有9mm x 9mm),非常适合在對尺寸要求嚴格的場合中使用。

高速DAC——AD9706

AD9706是ADI公司推出的12Bit、更新速率為175MSPS 的D/A轉換器,輸出電流範圍1mA~5mA,廣泛應用于通信、工控、醫療、電力等高速資料輸出應用場合。 

///均為175MSPS更新速率的D/A轉換器,并且此4款DAC晶片Pin to Pin相容,分辨率分别為8/10/12/14位。此系列器件針對低功耗特性進行了優化,同時保持出色的動态性能,具有靈活的電源電壓範圍(1.7V~3.6V),十分适合便攜式和低功耗應用。通過降低滿量程電流輸出,功耗可以降至15 mW,在省電模式下,待機功耗可降至2.2 mW。 

AD9748/AD9740/AD9742/AD9744系列D/A轉換器與以上系列D/A轉換器也是Pin to Pin相容(LFCSP_VQ封裝),專門針對通信系統的發射信号路徑進行了優化。使用者可根據性能、分辨率和成本要求,向上或向下選擇适合的器件。

5.Xilinx Spartan-6 FPGA和TI OMAP-L138通信實作

TI基于DSP+ARM的雙核架構如何互相通信

圖6 FPGA與OMAP-L138通信原理

高速通信總線——uPP

uPP(Universal Parallel Port)是OMAP-L138 CPU頗具特色的高速并行資料傳輸總線,可以單獨發送和接受資料,也可以同時接收和發送資料,常用于和FPGA以及其他并口裝置資料傳輸。

OMAP-L138的uPP 共有2個通道(通道A和通道B),共有32位資料線,控制簡單,配置靈活,資料吞吐量大。uPP時鐘速率可高達處理器時鐘速率的一半,對于在456MHz下運作的OMAP-L138處理器,uPP單通道吞吐量理論值可高達228MB/s。

6.TI OMAP-L138的DSP和ARM雙核通信實作

TI基于DSP+ARM的雙核架構如何互相通信

圖14 OMAP-L138 DSP+ARM雙核通信原理

基本原理

TI官方的DSPLINK/SYSLINK雙核通信元件提供了一套通用的API,從應用層抽象出ARM與DSP的實體連接配接特性,進而降低使用者開發程式的複雜度。其中DSPLINK使用DSP/BIOS作業系統,SYSLINK使用SYS/BIOS作業系統,SYSLINK屬于DSPLINK的新版本雙核通信元件。

在ARM和DSP的雙核通信開發中,ARM端運作HLOS作業系統(一般是Linux),DSP端運作RTOS實時作業系統(一般是DSP/BIOS或者SYS/BIOS),雙核主頻456MHz。

優勢

(1) SOC 片上DSP+ARM架構可實作穩定的雙核通信,縮短了雙核通信開發時間。

(2) DSPLINK/SYSLINK雙核通信元件突破了雙核開發瓶頸,節約了研發成本。

(3) SOC上的DSP和ARM架構簡化了硬體設計,降低了産品功耗和硬體成本。

=================================================================

後面介紹兩款DSP+ARM的開發闆, 一款是AM5728,另一款是OMAPL138。

2 OMPAL138評估闆簡介

基于TI OMAP-L138(定點/浮點 DSP C674x+ARM9)+ Xilinx Spartan-6 FPGA處理器;

  • OMAP-L138 FPGA 通過uPP、EMIFA、I2C總線連接配接,通信速度可高達 228MByte/s;OMAP-L138主頻456MHz,高達3648MIPS和2746MFLOPS的運算能力;
  • FPGA 相容 Xilinx Spartan-6 XC6SLX9/16/25/45,平台更新能力強;
  • 開發闆引出豐富的外設,包含千兆網口、SATA、EMIFA、uPP、USB 2.0 等高速資料傳輸接口,同時也引出 GPIO、I2C、RS232、PWM、McBSP 等常見接口;
  • 通過高低溫測試認證,适合各種惡劣的工作環境;
  • DSP+ARM+FPGA三核核心闆,尺寸為 66mm*38.6mm,采用工業級B2B連接配接器,保證信号完整性; Ø
  • 支援裸機、SYS/BIOS 作業系統、Linux 作業系統。
TI基于DSP+ARM的雙核架構如何互相通信

圖1 開發闆正面和側視圖

XM138F-IDK-V3.0 是一款基于深圳信邁XM138-SP6-SOM核心闆設計的開發闆,采用沉金無鉛工藝的4層闆設計,它為使用者提供了 XM138-SP6-SOM核心闆的測試平台,用于快速評估XM138-SP6-SOM核心闆的整體性能。

XM138-SP6-SOM引出CPU全部資源信号引腳,二次開發極其容易,客戶隻需要專注上層應用,大大降低了開發難度和時間成本,讓産品快速上市,及時搶占市場先機。不僅提供豐富的 Demo 程式,還提供詳細的開發教程,全面的技術支援,協助客戶進行底闆設計、調試以及軟體開發。

2 典型運用領域

資料采集處理顯示系統

智能電力系統

圖像處理裝置

高精度儀器儀表

中高端數控系統

通信裝置

音視訊資料處理

TI基于DSP+ARM的雙核架構如何互相通信

圖2 典型應用領域

3 軟硬體參數

TI基于DSP+ARM的雙核架構如何互相通信

開發闆外設資源框圖示意圖

TI基于DSP+ARM的雙核架構如何互相通信

圖3 開發闆接口示意圖

TI基于DSP+ARM的雙核架構如何互相通信

圖4 開發闆接口示意圖

TI基于DSP+ARM的雙核架構如何互相通信

3 AM5728開發闆XM5728-IDK-V3。

功能介紹:

  • 基于 TI AM5728 浮點雙 DSP C66x +雙 ARM Cortex-A15 工業控制及高性能音視訊處理器;
  • 多核異構 CPU,內建雙核 Cortex-A15、雙核 C66x 浮點 DSP、雙核 PRU-ICSS、雙核 Cortex-M4 IPU、雙核 GPU 等處理單元,支援 OpenCL、OpenMP、SysLink IPC 多核開發;
  • 強勁的視訊編解碼能力,支援 1 路 1080P60 或 2 路 720P60 或 4 路 720P30 視訊硬體編解碼,支援 H.265 視訊軟解碼;
  • 支援高達 1 路 1080P60 全高清視訊輸入和 1 路 LCD + 1 路 HDMI 1.4a 輸出;
  • 雙核 PRU-ICSS 工業實時控制子系統,支援 EtherCAT、EtherNet/IP、PROFIBUS 等工業協定;
  • 高性能 GPU,雙核 SGX544 3D 加速器和 GC320 2D 圖形加速引擎,支援 OpenGL ES2.0;
  • 外設接口豐富,內建雙千兆網、PCIe、GPMC、USB 2.0、UART、SPI、QSPI、SATA 2.0、I2C、DCAN 等工業控制總線和接口,支援極速接口 USB 3.0;
  • 開發闆引出 V-PORT 視訊接口,可以靈活接入視訊輸入子產品;
  • 體積極小,大小僅 86.5mm*60.5mm;
  • 工業級精密 B2B 連接配接器,0.5mm 間距,穩定,易插拔,防反插,關鍵大資料接口使用高速連接配接器,保證信号完整性。
TI基于DSP+ARM的雙核架構如何互相通信
TI基于DSP+ARM的雙核架構如何互相通信

繼續閱讀