TMS320C6678 多核处理器软件部署方法
2021-06-11乔雪原
乔雪原
(中国西南电子技术研究所,四川成都 610036)
TMS320C6678 是TI 公司推出的高性能浮点多核数字信号处理器,支持如雷达信号处理、通信信号分析、医疗成像、图像识别等高性能需求的数字信号处理应用。该多核处理器为信号处理系统的处理能力带来了很大的提升,但也给软件开发者带来了新的问题。由于该处理器引导设备方式的多样性以及多个内核部署应用软件的复杂性,该多核数字信号处理器上电工作的过程比单核数字信号处理器要复杂得多[1-6]。
该处理器已推出多年,科研人员基于该处理器的应用进行了大量研究,由于硬件设计和加载方案的不同,导致了多种设备引导和软件部署方案。文献[7-11]从多方面介绍了处理器多核应用软件数据块的组织方式,多核应用软件格式的转换原理,基于EMIF16 接口、IIC 接口以及以太网接口等外设的软件加载方法等;文献[12]引入三级引导过程的方法,该方法需要根据应用软件所在的空间及长度进行调整,并且每个内核运行的应用软件部署在存储器的不同地址,需要为每个内核运行的软件分别烧写到不同的地址空间;文献[13]介绍了一种Bootloader 的实现方法,阐述了单核应用软件和多核应用软件的启动过程和多核应用软件映像文件格式,但没有详细说明软件映像文件的生成方法。
实际工程开发过程中,多个内核运行的软件是由不同软件设计师开发的,各软件根据规划分别运行在处理器不同的内核上,系统功能集成测试通常需要全部软件同时运行协同工作。采用上述方法进行系统开发联试时,软件完成一次部署的时间在二十分钟左右,严重影响了系统开发联试的效率。文中采用二级加载的方法,研究了MAD 工具集的实现原理,并用Python 语言开发了图形化转换工具,简化了多核应用软件映像文件的制作,实现了多核应用软件的快速部署,具有较高的应用价值。
1 总体方案设计
TMS320CC6678 处理器通过13 个外部引脚BOOTMODE[12∶0]选择和配置启动引导方式。其中,BOOTMODE[2∶0]用于选择引导外设的类型;BOOTMODE[9∶3]用于配置相应外设的参数;BOOTMODE[12∶10]根据处理器外部输入时钟的频率进行设置,用于指导锁相环的参数配置;如果引导启动模式配置的是IIC 或SPI,BOOTMODE[12∶10]则用于配置启动外设的参数。
该设计方案采用EMIF16 接口启动引导模式,程序存储器选用EMIF16 接口形式的16 位宽NOR Flash,处理器外部输入时钟频率为100 MHz,内核运行频率为1.2 GHz,禁止wait enable 功能,得到BOO TMODE[12∶0]的配置值为0b0110000010000。
软件自动加载的目的地是DSP 外部的DDR 存储器,工作过程如图1 所示。处理器为了简化启动流程,内部集成了一块128 k字节的ROM存储器,存储器内部存储了RBL(ROM Bootloader,一级Bootloader)指令代码。在硬件上电或复位后,处理器首先执行RBL,RBL 根据启动模式的选择完成EMIF16 接口的初始化,最后跳转到NOR Flash 的0 偏移地址(NOR FLASH 存储器的基地址是0x700000000)。该地址开始的128 k 字节地址空间存放了用于搬移应用软件映像的SBL(Second Bootloader,二级Bootloader)指令代码,SBL 负责将应用软件映像搬移到外部DDR 存储器中(DDR 存储器基地址为0x9e000000)。完成软件映像搬移后直接跳转至地址0x9e001040 继续执行代码,其中,0x9e001040 地址是由MAD 工具默认配置的,该地址是MAD 加载器运行的入口地址。
图1 软件加载与跳转工作过程
2 二级Bootloader设计
从EMIF16 接口加载模式的工作原理可知,SBL主要的功能是将应用软件映像从NOR Flash 搬移到DDR 存储器。由于处理器仅支持EMIF16 接口0 地址开始的128 k 字节代码的片内执行,为了简化设计,本方案通过代码裁剪,只保留必要的外设初始化等功能,将SBL 代码的规模控制在128 k 字节以内。
2.1 SBL功能设计
SBL 的核心代码如图2 所示,主要是将SRC 地址开始的长度为LEN 的应用软件映像搬移到DEST 地址处的DDR 存储器,最后跳转到ENTRY 地址。
图2 SBL核心代码
长度参数LEN 需要根据实际应用软件映像大小进行评估后设置。如果软件映像的大小不大于该长度,架构相同的信号处理板卡的SBL 可以通用。比如,图2 所示代码设置的LEN 大小为0x400000,单位为字节,换算后为4 M 字节。因此,只要最终部署的应用软件映像大小不超过4 M 字节大小,SBL 只需要制作并烧写一次。
2.2 SBL格式转换
SBL 工程生成的.out 格式文件需要转换为RBL可以识别的代码格式。格式转换流程如图3 所示[11],rmd 文件里面包含了Hex.6x 工具需要执行的指令,首先用Hex.6x 把.out 格式文件中的有效数据按照操作指令剥离出来得到.btbl 格式文件,该文件依次经过b2i2c 和b2ccs 工具处理后得到.ccs 格式文件。得到的.ccs 格式文件只包含软件各段的内容而不包含任何启动参数,因此,要为其配置参数头。同时,由于RBL 只能识别大端模式,.ccs 格式文件还需要进行大小端的转换,通过byteswapccs 工具把.ccs 格式文件转化为.bin 格式文件。最后,将生成的.bin 格式文件烧写到NOR Flash 的0 偏移地址开始的存储空间即可。
图3 SBL格式转换流程
3 多核应用软件映像生成方法
多核应用软件映像文件的生成采用了用于多核应用软件部署的MAD 工具。MAD 工具主要提供三方面的功能,一是在多个内核上部署多个应用软件;二是通过共享通用代码来节省内存;三是动态部署应用软件。
MAD 提供了预链接器旁路模式和预链接器模式两种使用方式。预连接器旁路模式下,工具不会为应用软件段分配地址,并且不会调用预链接器。此模式适用于应用软件开发人员已经为应用软件分配了多核地址并且仅需要MAD 工具在指定的内核上加载和运行应用软件。预链接器模式下,MAD 工具为应用软件段分配地址并调用预链接器,此模式适用于应用软件开发人员希望工具负责地址分配以允许在多核应用软件之间共享通用代码。由于预链接器模式处理比较复杂,且实际工程多核应用软件映像占用的内存在k 字节量级,可以忽略。因此,方案选择预链接器旁路模式。
3.1 预链接器旁路模式
预链接器旁路模式工作流程如图4 所示,主要包括以下4 个步骤。
图4 预链接器旁路模式下的MAD工作流程
1)软件设计师进行各内核运行应用软件的开发并生成相应的.out格式文件;
2)为MAP 工具创建应用软件部署配置文件,配置文件主要用于描述每个内核上加载运行的应用软件。该配置文件作为运行MAP 工具的输入,生成包含ROMFS 格式的加载映像,该映像包含每个应用软件的激活记录。生成的映像文件即可直接烧写到程序存储器约定的地址(0x70020000);
3)处理器加电启动后,SBL 将映像加载到DDR存储器,并跳转到映像入口地址,开始运行MAD 加载器;
4)MAD 加载器解析ROMFS 映像,将应用软件段加载到各自的运行地址,并在每个配置的内核上开始执行相应的应用软件。
3.2 应用软件部署配置文件
预链接器旁路模式需要开发者设计软件部署配置文件。预链接器旁路模式下,部署配置文件用于指定DDR 存储器分区的地址和大小信息、要部署的应用软件位置以及应用软件在各内核上的分配。
部署配置文件是JSON 格式的文本文件,配置文件包括以下部分:
1)deviceName:标识目标设备。
2)partitions:标识内存分区及其属性。该属性具有以下配置参数:
①name:分区的名称;
②vaddr:分区的虚拟地址;
③size:内存分区的大小(以字节为单位);
④loadPartition:分区是否为Load 分区,ROMFS映像将下载到该分区。
3)applications:应用软件的位置和部署配置。该属性具有以下配置参数:
①name:应用软件的名称或别名;
②fileName:应用软件的完整路径包括文件名;
③allowedCores:可以运行应用软件的核心列表。
4)appDeployment:指定在初始引导时要在每个核心上加载的应用软件。这是由core-id 索引的应用软件名称的有序列表。如果必须在没有应用软件的情况下引导内核,则应指定一个空字符串。
以下为TMS320C6678 处理器在预链接器旁路模式下的部署配置文件示例。
4 转换工具设计
SBL 的制作需要调用不同的中间转换工具,经过5 个步骤对输入的文件进行格式转换。实际工程开发过程中,应用软件映像需要根据业务代码的不断修改重新生成,该过程需要输入软件部署配置文件和各内核运行的目标应用软件,并且,如果需要调整应用软件在各内核的分配,还需要修改配置文件,这些操作步骤是标准化且重复性很强的操作。为了避免软件开发人员涉及这些与业务无关的操作,该文针对SBL 和多核应用软件映像的制作原理,分别设计了图形化工具。
SBL 制作工具的实现原理非常简单,直接通过Python 语言调用图3 所示工作流程中所需的转换工具,对输入的SBL 工程生成的.out 格式文件进行转换。如图5 是SBL 转换工具的操作界面,操作过程只需要通过“Open Load .out File”按钮选择SBL 工程生成的.out 格式文件,然后点击“Create bootloader”即可完成SBL 的转换。
图5 SBL转换工具
如图6 是多核应用软件映像生成工具的操作界面。整个工作区分为3 个功能区:应用软件选择区、应用软件分配设置区和信息显示区。应用软件选择区用于选择总共有多少个不同的应用软件参与部署,工具最多支持8 个不同的应用软件的部署;应用软件分配设置区用于指定各应用软件在处理器8 个内核的分布情况,支持同一个应用软件部署在多个内核上运行;信息显示区用于显示软件运行的状态信息。
图6 多核应用软件映像生成工具
同时,应用软件选择区和分配设置区具备历史记录功能,打开工具时会默认加载上次的配置,无需重复进行选择和配置,避免了重复操作。
SBL 和多核应用软件映像制作工具采用了Python 编程语言和Tkinter 图形库进行开发。Python和Tkinter 是跨平台的编程语言和图形开发库[14-18],工具集成了制作过程涉及的全部中间工具和配置文件,实施部署的计算机不需要安装CCS 开发环境。因此,映象生成工具软件具有跨平台、易安装和易使用的特点。
5 结论
为了提高基于TMS320C6678 多核数字信号处理器应用软件集成调试开发的效率,该文提出了一种通用的软件部署方法,通过工程实际应用验证,得到以下结论:
1)该方法满足功能使用要求,并且具有通用性,相同架构信号处理板卡的SBL 可以通用;
2)多核应用软件映像生成工具具备历史记录功能,各内核应用软件位置和名称不变的情况下,软件映像的生成制作时间为20 s 左右;
3)由于处理器EMIF16 接口程序存储器片内执行代码128 k 字节大小的限制,该文对SBL 的功能进行了裁剪,最终SBL 代码的大小为54 k 字节左右。