打印

基于TMS320C6678的多核DSP加载模式研究

[复制链接]
3377|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
edishen|  楼主 | 2015-1-27 23:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于TMS320C6678的多核DSP加载模式研究
关键字:C6678 DSP   flash boot   多核boot   I2C引导   SRIO   网络   

摘要德州仪器TI推出的八核DSP芯片TMS320C6678是目前基于Keystone架构的最高性能的DSP器件,是市场上应用广泛的C6455高端处理平台升级的理想选择。本文主要研究了C6678 DSP程序的各种单核加栽和多核加载的几种模式,主要用到多核boot技术,对EMIF16 FLASH boot引导模式、主机(PCIe接口)引导模式、I2C引导模式、SRIO引导模式、网络引导boot引导模式的方法做了研究,对TI的高性能多核架构DSP芯片的程序加载提供了有效的参考帮助。
近年来,以数字信号处理器(DSP)为基础的通用信号处理模块的研制受到人们的重视,DSP技术广泛应用于雷达、通信、图像处理等领域。随着声纳、雷达、高清视频以及嵌入式机器视觉等需求不断攀升,多核DSP的应用已成为满足发展的重要途径。由于DSP系统稳定运行起来后,在实际的应用中都要脱离仿真器件,实现系统的自动加载,尤其是多核DSP加载过程中,不同于多芯片间的加载方式,需要实现核间的调度,数据协同处理,因此多核启动的加载方式需要做具体研究。
TMS320C6678 DSP是TI最新发布的一款基于KeyStone架构高性能的超长指令字(VLIW)架构芯片,片内有8个内核,每个核频率为1.25 GHz,单核每秒高达40 GB MAC定点运算和20 GB FLOP浮点运算能力,工作速度可达10GHz。与目前应用较为广泛的TMS320C6455 DSP,为单核1.2GHz工作,定点处理能力为9600M MAC。可见C6678的处理能力要远强于C6455。针对C6678多核协同处理特性,本文以自定义的双6678板卡平台为基础,深入研究C6678的多种加载方式,对EMIF16 FLASH boot引导模式、I2C引导模式、SRIO引导模式、网络引导boot模式做了分析和说明,主机(PCIe接口)引导模式、HYPERLINK引导模式和SPI引导模式的使用,本文不做说明。
1 多核加载方式论述
在C6678的片内地址空间0x20800000到0x20B1FFFF间集成了一块128K的内部ROM程序,又叫做RBL(ROMBoot Loader),Rom code是C6678出厂时固化在Rom中的,用户不能改变,在DSP复位或上电时实现将DSP代码从外部接口读入到内部高速ram。启动过程可以大致分为主机引导和内存引导启动,在内存引导启动过程代码从一个外部内存的加载初始应用程序到内部的内存来执行。如果主机模式,启动程序配置DSP在被动状态,等待代码将DSP应用程序程序由外部主机写入ram开始执行。为适应不同的系统要求,RBL提供了几种启动的执行方式。不同的引导方式如表1所示。
2 多核boot预处理
C6678有8个核,采用基于KeyStone架构的中断控制器、核间通信寄存器以及合适的通信拓扑结构实现多核间的通信,core0为主核,其它7个核可以统一执行相同的Romcode代码,也可以不同,或者根据核号(即DNUM)进行不同程序的分支。对于core0来说,它主要是读取DEVS TAT寄存器的加载模式,并根据当前加载模式进行一些接口的初始化和PLL的配置,还要根据加载模式决定是否搬移数据。对于其它的7个核来说,它们主要是挂载IPC中断,然后进入IDLE状态等待core0发过来的中断。中断一到,就跳到入口地址开始执行程序,待加载工程总体流程如图1所示。
代码读入前要根据不同的boot方式进行转换格式,转换工具是将各核的.out文件转换成.dat或.bin文件,也有网络boot时要转换成.eth格式的文件来传送,不同的转化方式在各自的boot说明中详细阐述。无论哪一种启动方式,首先要boot起来core0之后再引导其他的从核,重点是从核在boot启动时通过host向DSP写了MAGIC_ADDRESS并触发IPC中断,DSP跳转到BOOT_MAIGC_ADDRESS所指向的地址执行程序。
3 C6678 EMIF flash boot
3.1 core0加载
C6678的EMIF16加载是一种直接从Nor Flash(必须挂在CE2空间:0x70000000)加载core0的模式,不需要I2CEEPROM的参与,由Rom code初始化EMIF16接口,由于EMIF16外接Nor Flash是一种XIP器件,因此直接跳到Nor Flash的起始地址处开始执行。
为了将Nor Flash中的代码搬移到C6678的core0的L2SRAM中,需要在core0的待加载工程中编写引导代码,此引导代码的作用就是将core0的代码按段加载到内存中,最后跳到入口地址处开始执行。引导代码放在L2 SRAM的前1KB空间,并烧写到Nor Flash的前1KB空间,应用代码放到1KB后面,生成.out文件编写转化工具生成.dat文件,如图2所示Nor Flash代码格式:
3.2 core0加载其它核
在多核加载过程中,core0是主核,corel-core7是从核,由core0加载从核,具体步骤是:
1)上电后,core0完成程序加载,并跳到入口地址开始执行程序。
2)在core0主程序中.core0从Nor Flash中读取corel的代码,并按段加载到core1的L2 SRAM,然后将core1程序的入口地址写到core1的BOOT_MAGIC_ADDRESS,最后向core1发送IPC中断,其它核的加载过程一样。各个核的Nor Flash空间分配如表2所示。
在将c_int00地址写到magic address时,注意需要确保写的是全局地址,如当程序放在L2时,c_int00地址应该转换为0x1n8xxxxx,其中n为coreID.
4 C6678 I2C boot
C6678的I2C boot是通过I2C总线读取挂载在总线上的eepromm中的IBL读取参数表配置RBL加载应用程序到的指定数据块。可以操作主I2C模式或从模式,在主模式的DSP读取带有镜像文件的I2C从设备。在从模式,DSP为I2C连接的从设备,主设备大多是另一个DSP或FPGA。

相关帖子

沙发
小木欧尼| | 2015-1-28 22:08 | 只看该作者
多核资料    支持

使用特权

评论回复
板凳
zhangmangui| | 2015-1-29 21:57 | 只看该作者
TMS320C66X多核DSP的分享   绝对支持

使用特权

评论回复
地板
edishen|  楼主 | 2015-1-31 15:29 | 只看该作者
小木欧尼 发表于 2015-1-28 22:08
多核资料    支持

谢谢

使用特权

评论回复
5
zhangmangui| | 2015-1-31 23:00 | 只看该作者
感谢楼主  C66x多核的资料   非常不错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

721

帖子

3

粉丝