当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]0 引言在视频检测、医疗影像及红外图像快速跟瞄系统应用中,越来越复杂的二维、三维甚至四维的图像处理,需要并行化的处理系统,并能够运行复杂的算法。要实现这些复杂的系

0 引言

在视频检测、医疗影像及红外图像快速跟瞄系统应用中,越来越复杂的二维、三维甚至四维的图像处理,需要并行化的处理系统,并能够运行复杂的算法。要实现这些复杂的系统,高端FPGA+高性能DSP是目前普遍采用的方案,而单个DSP的性能已发展至极限,所以解决复杂的并行算法,多核DSP是现在发展的全新方向,其中多核DSP的根加载技术是其难点之一。

TI公司推出的DSP芯片TMS320C6678(C6678)具有8个内核的高性能DSP,每个内核工作频率均达1 GHz。

其支持的Boot 模式有SPI、I2C、EMAC、SRIO 和并口Emif16 NOR-FLASH。其中Emif16 NOR-FLASH模式是不用上位机参与、比较简单、独立成系统的一种,大多独立DSP系统采用该方式。

网上能搜索到关于C6472和C6678零星一些加载资料,都是借助于第三方转换工具,太过于笼统。下面是针对C6678 的并口Emif16NOR-FLASH的上电加载作详细的探讨。

1 C6678 的上电加载过程

所谓上电加载(上电自举),即是当DSP复位后,正常运行用户程序之前运行的一段小程序,就像PC机的BIOS 一样。多核加载同单核加载区别很大,不但要负责主核的加载而且还有其他核的加载与激活。C6678的Emif16 NOR-FLASH 可以直接执行程序(XIP)(这与C641x系列DSP不同),其上电加载过程示于图1。

上电复位后,DSP 首先运行固化在片上ROM位于地址0x20b00000的程序,称为片上Loader,片上Loader根据DSP硬件管脚状态,判断用户采用的Boot 模式以跳转到相应模式的二级加载程序。如图1的 Emif16 NOR-FLASH模式中,运行片上Loader后,PC指针直接指向NOR-FLASH首地址0×70000000并开始执行FLASH上的二级 Loader程序,二级Loader存储在FLASH开始地址0×70000000~0×70000400的范围内。从0×70000400开始保存应用程序的根表数据(即被烧烧写到FLASH中的应用程序的数据)。二级Loader的功能是将保存在 FLASH中的Core0~Core7的根表数据搬移到DSP相应的地址段内,搬移完后,二级Loader程序PC指针跳到Core0的主程序入口地址 _c_int00处,开始执行Core0的应用程序。在Core0的应用程序开始加有使其他核激活运行的代码(这也是有别于单核的特殊之处),至此整个多核加载就此完成。事实上,如果你的应用程序很小,且运行速度要求不高,图1中的2、3和4过程都可以不要,只要把应用程序的原始代码数据烧写到FLASH 从0×70000000开始的位置,上电正常运行即可(这在C641x 上是不行的),如此DSP 的许多高性能就体现不出来,且多核工程大多采用嵌入式sysbios工程,占用存储器比较大,所以正常的Boot过程必须采用图1所示的二级加载过程。

从图1中看出,一个完整多核加载过程,开发者需要做的是二级加载器Loader的编写、FLASH中映像文件的产生、FLASH烧写器的编写,主核对各辅助核的触发代码的编写(被加载的应用程序不在本范围内)。

 

2 多核映像文件的组成与产生

映像文件就是用户要烧写到外部FLASH上的全部数据文件,它是由二级加载器Loader的代码数据(在文件前部)和应用程序的根表(Boot Table)数据(文件后部)的合成数据文件。单核和多核的二级Loader 都一样,区别就是后部的根表数据。根表是应用程序的所有代码和数据以在片上占用的地址来分段存储的数据包,包的第一个4 B 是main()函数的入口地址_C_int00,后面由若干数据段组成,每个段前4 B为该段数据的字节长度Byte_count_x(x 为段序号),接着4 B Address_x 为该段在片上的存储地址,后面是Byte_count_x个字节的具体数据Data_x。所有数据段结束后是4个字节0作为根表的结束标记。该根表格式如表1所示。每一个段的数据字节数可能不是4的整数倍,根表中数据区就在后面添0按4 B的整数倍向上取整,故整个根表文件字节数必是4的整数倍。

根表数据产生很简单,由应用程序最终生成的Out文件,通过ccs自带工具hex6x.exe选择不同的参数而产生,产生的文件即是根表文件,可以选择生成二进制文件或文本文件,本研究采用二进制。其产生命令为(app为应用程序名,app.out为ccs产生的连接文件):

hex6x-boot -b -e _c_int00-order L-memwidth=32 -romwidth=32-o app.bin app.out

app.bin为产生的二进制根表文件,将二级Loader程序的二进制代码加到根表文件的头部即是app应用程序的映像文件。

 

多核的映像文件是由二级加载器Loader和多个核应用的根表合并而成的文件。多个核对应多个独立的工程,并由CCS产生多个out文件,再由 hex6x.exe产生各核的根表文件。后对Core0的根表文件先去掉末尾4 个0字节,再将各辅助核的根表文件的开始的入口地址_C_int00和末尾4个0字节去掉,加到Core0被去掉了末尾字节的根表文件后,然后再将每个核的_C_int00当成一个4字节的数据段来保存到上面的合成文件的后面,而各_C_int00在片上的存放地址即为各核的专门固定地址Boot Magic Address,如Core1的Boot Magic Ad-dress为0x1187fffc,Core2为0x1287fffc,…,Core7为0x1787fffc。所有根表数据段构成后,再将4个0 字节作为结尾标志加到文件的最后,这样合并后的根表文件如表2所示。同样,将二级Loader 的代码数据加到该文件头部即形成多核的映像文件。由hex6x 生成的单核根表文件到合成映像文件的产生,全是文件操作,可以用一般的C语言工具,甚至Matlab等工具都可以完成。

 

同表1相比,表2仅仅只是增加了所有辅助核数据段和各核的_C_int00特殊数据段而已,表头和结束字节都相同,因此完全适用于二级Loader按统一Boot Table格式搬移数据。需特别注意,各辅助核的out文件通过hex6x.exe产生的根表数据段中,当映射到 L2(0×00800000~0x0087FFFF)的范围时,与Core0的地址是相互覆盖的,产生合成根表时必须加上各核的L2基地址 0×10000000+n*0×1000000(n 为辅助核号),如Core1的地址0×00825000,映射为0×11825000,同样地址Core2映射为0×12825000,Core7映射为 0×17825000。[!--empirenews.page--]

3 二级Loader程序和FLASH烧写程序

二级Loader是一段小代码程序,其功能就是将FLASH的根表数据如图1中从0×70000400开始按表2的格式保存的数据搬移到DSP的RAM中。该Loader比较简单,一般是一小段汇编代码,代码如下:

 

需要注意的是,由于DDR 没有初始化,所以二级Loader不能加载DDR数据,DDR只作数据存储器用,确实要加载到DDR中,只能将DDR数据存在FLASH一指定段中,待Core0运行开始初始化DDR后,将该数据读到RAM中。

对于FLASH的烧写程序,主要任务就是把多核的合成文件烧写到外部Emif16 NOR-FLASH存储器中。

由于TI大部分的Emif并口加载都是开放式的,开发者完全可以根据自己的思路和格式来产生和烧写映像文件,故烧写器TI公司是不提供的。其实,一旦合成根表文件产生后,烧写器也显得容易了。烧写器一般使用输出legacy COFF格式的CCS工程即可。从图1的加载过程看,要烧写的映像文件内容包括二级加载器Loader的代码和表2 的根表文件两部分。二级Loader可以放到烧写器的开头main()函数之前,也可以放到Core0的应用程序同样位置,本研究采用前者,将二级 Loader代码映射到烧写工程中指定的存储器.boot_load段。烧写器的编程流程如图2所示。

 

4 辅助核的触发

多核的加载,如果图1中仅仅只是进入Core0的_C_int00地址运行而其他核还未激活,加载仍然是失败的。辅助核的触发,必须两个条件,一是将各核工程的入口地址_C_int00写到各核的Boot Magic Address处;二是向各核的核间中断触发寄存器IPCx(1

一旦辅助核被触发,在辅助核应用程序中,须向各自核的Boot Magic Address 写入数据0xbabeface替换各自的_C_int00。

5 结语

多核DSP 加载是一项比较复杂但又很重要的过程[7,9-10],也是多核技术的应用难点之一,一个多核DSP开发人员,如果要成功走向应用,上电加载这一关是必须要过的。各核的应用工程可以是输出elf格式sysbios工程,也可以不是sysbios 工程。上面的多核Emif16NOR-FLASH 加载方法,在自研的C6678图像信号处理系统中已成功加载。

作者 刘章文,刘七华,谢川林,袁学文

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

嵌入式处理器是一种特殊的计算机处理器,它被设计用于嵌入到各种设备和系统中,以实现特定的功能。由于其低功耗、高性能和可靠性等特点,嵌入式处理器在许多领域都有广泛的应用,如汽车电子、工业控制、医疗设备等。本文将对嵌入式处理器...

关键字: 嵌入式处理器 嵌入式系统

2023年10月10日, [恩智浦创新技术论坛] 在深圳湾万丽酒店举行,众多工业、物联网、新能源和医疗等行业的企业出席论坛,深入交流市场趋势与行业洞察,一同讨论如何协同面对市场的机遇与挑战,共同促进未来市场的发展。米尔电...

关键字: NXP 嵌入式处理器

据业内信息报道,昨天 AMD 在 Embedded World 上宣布了其第四代 EPYC 嵌入式处理器,该处理器采用其 Zen 4 架构,旨在云和企业计算以及工厂车间工业边缘服务器中的嵌入式网络、安全、防火墙和存储。

关键字: Zen 4 AMD EPYC 嵌入式处理器

摘 要 :智能电网以优良的性能服务于国民生产,主要依靠接入电力系统设备间的网络通信。便携式电力设备的网络通信性能测试对于智能电网的运行具有重要意义。以嵌入式处理器为核心,提出了一种智能电网设备网络通信性能的便携式测试装置...

关键字: 智能电网 嵌入式处理器 WinCE操作系统 通信 便携式测试装置 人机接口

随着对高处理能力、实时多任务、网络通信、超低功耗需求的增长,传统8位机已远远满足不了新产品的要求,高端嵌入式处理器已经进入了国内开发人员的视野,并在国内得到了普遍的重视和应用。

关键字: 32位 ARM 嵌入式处理器 调试技术

技嘉官网现出现了两款新的迷你PC产品,GB-BSRE-1505和GB-BSRE-1605,这两款型号是面向商用的,一般会是公司采购,所以并不像消费者产品那么紧跟时代潮流,这两款新的迷你PC用的处理器还是AMD的第一代锐龙...

关键字: 技嘉 pc 锐龙 嵌入式处理器

  OCT成像的原理与超声波类似,是运用反射的近红外线做为成像媒介形成影像,而非运用反射的音波。近红外线(一般为800~1300nm)来源分为两个途径,其中一个途径用于组织取样;另一个则用于参考

关键字: 医疗成像 多核dsp

  车道偏离报警和自动泊车等汽车应用将成为今年嵌入式视觉系统的主要增长动因,嵌入式视觉系统是一项赋予机器“视觉”并通过计算机视觉软件解释数据的技术。   汽车发动

关键字: 嵌入式处理器 工厂自动化 嵌入式视觉系统 工业安防

智能锁是指区别于传统机械锁,在用户识别、安全性、管理性方面更加智能化的锁具,涵盖指纹锁、电子密码锁、电子感应锁、联网锁、遥控锁等具体类型锁具产品。 智能门锁的优点: 便利性

关键字: 单片机 嵌入式处理器 智能锁
关闭
关闭