基于TMS320C6678的多核Bootloader设计与实现
2017-09-15薛志远王春雷
薛志远, 王春雷
(中国空空导弹研究院, 河南 洛阳 471009)
基于TMS320C6678的多核Bootloader设计与实现
薛志远, 王春雷
(中国空空导弹研究院, 河南 洛阳 471009)
针对TMS320C6678多核处理器的特性, 提出一种基于多核Bootloader的设计方法。 阐述了TMS320C6678 Bootloader的原理和工作机制, 并给出一种多核用户程序镜像文件的生成方法, 实现了TMS320C6678的多核程序加载以及上电自启动。 经验证, TMS320C6678在该设计方法下能够稳定运行。
弹载计算机; TMS320C6678; Bootloader; 多核程序加载; EMIF16
0 引 言
导弹武器具有打击精度高、 毁伤威力大等特点, 是决定未来战争胜负的重要因素之一。 随着武器装备软硬件集成设计技术的快速发展, 小型化、 低成本、 低功耗正成为弹上电子系统的发展趋势。
TMS320C6678是TI公司推出的一款八核嵌入式处理器, 强大的性能以及优秀的能耗比使其在导弹武器的集成化、 小型化等方面扮演了重要的角色。
Bootloader是TMS320C6678处理器上电后运行的第一段代码, 其是否正确及健壮对于处理器能否正常运行至关重要。 本文设计的Bootloader完成了TMS320C6678八核处理器的基本初始化配置, 保证了处理器上电后的稳定运行。
1 Bootloader概述
1.1 Bootloader基本原理
TMS320C6678的Bootloader分为两级。 第一级为Rom Bootloader(RBL), 是处理器上电复位后首先运行的一段代码, 用来完成处理器上电后的系统初始化配置以及根据BOOTMODE引脚状态确定以何种方式运行二级Bootloader。 RBL的代码在处理器出厂时已经固化在处理器中以0x20B00000为起始的一段地址空间中, 用户不可更改, 本文不再赘述。
二级Bootloader为一般意义的Bootloader。 根据用户需求, 二级Bootloader可以完成如下功能:
(1) 系统初始配置, 如处理器工作时钟PLL的配置等;
(2) 处理器外设接口的初始化, 如EMIF16接口、 DDR3存储器等;
(3) 应用程序从片外向片内的加载;
(4) 应用程序的跳转执行。
1.2 Bootloader工作机制
由于TMS320C6678外部接口的丰富多样性, 其Bootloader也存在多种实现方式, 如EMIF16, SRIO, Enthernet, PCIe, I2C, SPI和HyperLink七种Boot方式。 各种方式的区别仅在于接口类型以及基本配置的不同, 对于Bootloader来说, 这七种方式的工作机制是相同的。 本文以EMIF16接口为例, 完成了基于TMS320C6678的Bootloader设计。
Bootloader主要完成系统初始配置、 外设接口初始化、 应用程序加载与跳转执行等功能, 其中系统初始配置与外设接口初始化可以根据用户需求灵活添加, 并不是Bootloader的必备。 Bootloader最核心的功能是应用程序的加载与跳转执行, 该功能的正确与否直接关系到处理器能否完成上电自启动。
为了实现处理器的上电自启动, 需要事先将编译好的用户程序烧写到片外的非易失性存储器(如Flash)中。 由于工艺水平的限制, 程序在片外Flash存储器中的执行速度远小于片内存储器中的执行速度。 因此, 程序的加载与跳转执行基本原理就是通过Bootloader将用户程序从片外Flash加载到片内高速缓存中, 并跳转至片内高速缓存中执行。 程序加载与跳转执行的工作过程如图1所示。
图1 程序加载与跳转执行工作过程
Fig.1 Process of program loading and jumping to execute
处理器上电后, 通过初始化引脚配置, 跳转至片外Flash的起始地址0x70000000执行Bootloader程序。 Bootloader将存储在0x701000000地址中的用户程序加载至TMS320C6678以0x10800000为起始地址的高速缓存空间中。 加载完毕后, Bootloader识别用户程序的入口地址, 并跳转至入口地址开始执行。 其中, 0x70000000与0x70100000可以根据用户的需求进行更改, 加载地址在程序编译完成后可根据实际的地址进行指定。
Bootloader的部分核心代码如图2所示。
图2 Bootloader代码示意
Fig.2 An example of Bootloader codes
2 Bootloader硬件设计
TMS320C6678提供了13个BOOTMODE引脚, 通过在硬件电路中对BOOTMODE进行配置来确定处理器以何种模式进行Boot、 Boot的子模式配置以及规定处理器的输入时钟频率, 如表1所示。
表1 BOOTMODE引脚配置
通过对电路中BOOTMODE引脚进行上下拉处理完成对处理器Bootloader工作模式的基本配置, 处理器上电后读取BOOTMODE引脚状态后开始Bootloader过程。
3 多核程序加载设计
在完成Bootloader设计并将其代码和用户程序烧写至片外Flash中后, 便可实现上电自启动。 但这仅对于单核运行而言, 想实现多核程序的启动, 还需要对多核用户程序做进一步处理。
3.1 多核程序启动过程
TMS320C6678中共有八个处理器核, 分别命名为core0~core7。 其中, core0为主核, 只有主核具有执行一级引导程序的权限, 即处理器上电后, 首先跳转至core0的入口地址执行。 其他7个核在处理器上电后进入IDLE状态, 等待core0向其发送IPC中断, 即其他7个核是在core0的控制下来启动执行的。
TMS320C6678在每个核中预留了一块固定的内存, 称为BOOT_MAGIC_ADDRESS, 用来存放每个核开始执行后需要跳转到的入口地址_c_int00。 Bootloader执行完毕后, 便自动跳转至core0的入口地址执行, 而其他7个核在接收到core0的IPC中断后, 便向各个核对应的BOOT_MAGIC_ADDRESS读取相应的入口地址, 然后跳转执行。
根据TMS320C6678的内存规划设计, 每个核的BOOT_MAGIC_ADDRESS位于各自L2 SRAM的最后4个字节中, 分别为0x1087FFFC~0x1787FFFC。
3.2 单核程序的生成
用户程序通过TI处理器编译软件CCS的编译后, 生成.out可执行文件。 .out文件可以通过CCS软件加载的方式将用户程序加载到处理器中执行, 但这种方式并不能实现上电自启动。 上电自启动需要将用户程序烧写至片外Flash中, 而.out可执行文件中包含大量冗余信息, 将.out烧写至片外Flash中会造成资源浪费, 且.out文件的格式也决定了不能实现上电自启动。
TI公司提供了一整套的工具链, 如hex6x, b2i2c, b2ccs, i2crom等工具, 来完成.out可执行文件向可烧写镜像文件的转化。 图3所示为生成的单核镜像文件的格式。
图3 单核镜像文件格式
Fig.3 Format of single core image file
其中.text段, .cint段, .switch段等均为用户程序经过CCS编译后生成的各个数据段, 每个数据段都将对自己的数据段长度和在内存中存放的地址在镜像文件中进行标记。 在完成用户镜像文件烧写至片外Flash中后, Bootloader通过对每个数据段的长度及存放的地址进行识别, 实现对用户程序的准确加载。
3.3 多核程序的生成
对于多核程序来说, 由于每个核中执行的用户程序不同, 经过CCS分别编译后生成的.out可执行文件也是不同的。 经过工具链生成用户镜像文件后, 八个核便会对应八个不同的镜像文件。 因此, 要想生成多核用户镜像文件, 需要对八个核的镜像文件进行合并处理, 如图4所示。
多核镜像文件合并的意义在于舍弃核的概念, 将每个核的镜像文件视作由多个数据段组成。 多核镜像文件的合并从根本上说是将多个核的数据段按照长度、 地址、 数据的固定格式合并在一起。
多核镜像文件的最后是对core1~core7入口地址_c_int00的处理。 core1~core7的程序入口地址应当写入每个核对应的BOOT_MAGIC_ADDRESS中, 而本文正是将core1~core7的程序入口地址当做数据段(长度为4字节, 地址为相应BOOT_MAGIC_ADDRESS, 数据为相应入口地址_c_int00)进行了合并。
图4 多核镜像文件格式
Fig.4 Format of multicore image file
3.4 多核Bootloader执行
TMS320C6678多核Bootloader的执行过程如图5所示。
图5 多核Bootloader执行过程
Fig.5 Process of multicore Bootloader
4 设计验证
本文设计如下程序来验证多核上电自启动的正确性: 八个核循环执行1 024点FFT, 每个核执行完一次FFT后向共享缓存写标志字, 然后core0不间断监测共享缓存的八个标志字, 监测到标志字为1后, 对GPIO置0; 重复以上过程, 完成第二次FFT监测后, core0将GPIO翻转, 以此类推。 如果八核完成启动, 且程序运行正确, 示波器将显示观测到的GPIO方波。
经验证, 本文的设计完成了TMS320C6678的八核上电自启动, 仿真结果见图6。
图6 仿真结果
5 结 论
针对TMS320C6678多核处理器提供了一种多核Bootloader的设计方法, 试验验证表明, 所设计的多核Bootloader程序工作稳定, 可靠性高。 同时, 该设计具备良好的通用性, 可以移植到其他基于TMS320C66xx系列芯片的平台中。
[1] TI. TMS320C6678: Multicore Fixed and Floating Point Digital Signal Processor[Z]. 2012.
[2] TI. KeyStone Architecture DSP Bootloader[Z]. 2012.
[3] 李飞平, 卿粼波, 滕奇志, 等. 基于TMS320C6678的多核程序加载研究与实现[J]. 电子技术应用, 2015,41(3): 31-34. Li Feiping, Qing Linbo, Teng Qizhi, et al. Multicore Program Loading Research and Improve Based on TMS320C6678[J]. Application of Electronic Technique, 2015, 41(3): 31-34. (in Chinese)
[4] 齐恩勇. 基于多核处理器的弹载嵌入式系统设计研究[J]. 电子设计工程, 2013, 21(6): 105-107. Qi Enyong. Research about Designing of Missile-Borne Embedded System Based on Multicore Processor[J]. Electronic Design Engineering, 2013, 21(6): 105-107.(in Chinese)
[5] 黄震, 刘亚斌. TMS320C6000系列DSP程序固化的研究[J]. 电子设计工程, 2016, 24(12): 26-28. Huang Zhen, Liu Yabin. Study on the Program Download of TMS320C6000 DSP[J]. Electronic Design Engineering, 2016, 24(12): 26-28.(in Chinese)
[6] 孔石, 王春雷. 基于EMIF16模块的TMS320C6678与FPGA接口设计与实现[J]. 航空兵器, 2015(1): 35-38. Kong Shi, Wang Chunlei. Design and Implementation of Interface between TMS320C6678 and FPGA Based on EMIF16 Module[J]. Aero Weaponry, 2015(1): 35-38. (in Chinese)
[7] 郝朋朋, 周煦林, 唐艺菁, 等. 基于TMS320C6678多核处理器体系结构的研究[J]. 微电子学与计算机, 2012, 29(12): 171-175. Hao Pengpeng, Zhou Xulin, Tang Yijing, et al. Research on Multicore Processor’s Architecture Based on TMS320C6678[J]. Microelectronics & Computer, 2012, 29(12): 171-175.(in Chinese)
DesignandImplementationofMulticoreBootloaderBasedonTMS320C6678Processor
XueZhiyuan,WangChunlei
(ChinaAirborneMissileAcademy,Luoyang471009,China)
According to the characteristics of multicore processors TMS320C6678, a design method based on multicore Bootloader is proposed. The principle and working mechanism of TMS320C6678Bootloader are described, a method to produce the image file of multicore user program is given. As a result, the multicore program loading and auto-running of TMS320C6678are implemented. Experiments show that TMS320C6678processor performs stably under the proposed design method.
missile-borne computer; TMS320C6678; Bootloader; multicore program loading; EMIT16
10.19297/j.cnki.41-1228/tj.2017.04.014
2017-02-14
薛志远(1986-), 男, 山东淄博人, 博士, 主要从事数字信号处理工作。
薛志远, 王春雷. 基于 TMS320C6678的多核Bootloader设计与实现[ J]. 航空兵器, 2017( 4): 80-83. Xue Zhiyuan, Wang Chunlei. Design and Implementation of Multicore Bootloader Based on TMS320C6678 Processor[ J]. Aero Weaponry, 2017( 4): 80-83.( in Chinese)
TJ760; TN911.7
: A
: 1673-5048(2017)04-0080-04