TI基于DSP+ARM的双核架构如何相互通信
Posted 深圳信迈科技DSP+ARM+FPGA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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开发板资源框图
图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高速数据采集前端逻辑实现
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通信实现
图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双核通信实现
图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 操作系统。
图1 开发板正面和侧视图
XM138F-IDK-V3.0 是一款基于深圳信迈XM138-SP6-SOM核心板设计的开发板,采用沉金无铅工艺的4层板设计,它为用户提供了 XM138-SP6-SOM核心板的测试平台,用于快速评估XM138-SP6-SOM核心板的整体性能。
XM138-SP6-SOM引出CPU全部资源信号引脚,二次开发极其容易,客户只需要专注上层应用,大大降低了开发难度和时间成本,让产品快速上市,及时抢占市场先机。不仅提供丰富的 Demo 程序,还提供详细的开发教程,全面的技术支持,协助客户进行底板设计、调试以及软件开发。
2 典型运用领域
数据采集处理显示系统
智能电力系统
图像处理设备
高精度仪器仪表
中高端数控系统
通信设备
音视频数据处理
图2 典型应用领域
3 软硬件参数
开发板外设资源框图示意图
图3 开发板接口示意图
图4 开发板接口示意图
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 间距,稳定,易插拔,防反插,关键大数据接口使用高速连接器,保证信号完整性。
二、典型应用领域
工业 PC&HMI
工业机器人
机器视觉
医疗影像
电力自动化
EtherCAT 主/从控制器
工业多协议智能网关
高端数控系统
以上是关于TI基于DSP+ARM的双核架构如何相互通信的主要内容,如果未能解决你的问题,请参考以下文章
信迈TI OMAP-L138(定点/浮点DSP C674x+ARM9) + Xilinx Spartan-6 FPGA开发板规格书