一种DSP实时动态切换应用程序的方法

2015-12-06 06:11马振国
计算机工程 2015年11期
关键词:应用程序消耗总线

刘 鹏,赵 备,2,马振国

(1.浙江大学生物医学工程与仪器科学学院,杭州310027;2.杭州电子科技大学计算机学院,杭州310027)

一种DSP实时动态切换应用程序的方法

刘 鹏1,赵 备1,2,马振国1

(1.浙江大学生物医学工程与仪器科学学院,杭州310027;2.杭州电子科技大学计算机学院,杭州310027)

集群实时多任务要求数字信号处理器(DSP)能够实时动态切换应用程序。为此,在分析DSP自启动方式的基础上,使用大容量Nor Flash作为自启动应用程序的缓存,提出一种在CAN总线网络中可为多DSP系统实时动态切换应用程序的方法。实验结果表明,有缓存机制的平均自启动时间明显小于无缓存机制,且在缓存命中的条件下可提高集群内DSP自启动的实时性。

数字信号处理器;CAN总线;自启动;实时;动态切换

1 概述

在以数字信号处理器(Digital Signal Processor,DSP)为计算节点的高性能嵌入式计算集群中,为提高系统的可靠性和复用能力,需DSP节点能够实时切换不同的应用程序[1]。在实际的DSP应用系统中,需要将DSP系统的应用程序和引导加载程序(Bootloader)做成自启动应用程序(简称为自启动程序),并存储到Nor Flash中,在系统上电或复位时通过Bootloader程序将Flash中的应用程序拷贝到DSP的高速存储器中去执行,完成系统的自启动并运行应用程序。对于DSP系统来说,切换应用程序本质是在DSP复位时选择不同的自启动程序,即实现DSP的动态加载自启动程序。

当前关于DSP实现动态加载的方法主要有2类:(1)从主机启动(HPI)方式动态加载运行程序[2-3];(2)通过串口、CAN等总线在线擦除和烧写DSP自启动程序到Nor Flash中然后复位自启动[4-5]。前者需要专门的上位机和HPI连线,增加了DSP集群外围的复杂性,后者需要烧写Nor Flash,而Nor Flash特性是读快写慢,且两者在每次动态加载应用程序时都需要从外部拷贝应用程序到本地,存在数据传输的时间延迟,不适合实时性要求较高的环境。

本文在分析了DSP自启动原理和CAN总线网络结构的基础上,结合Nor Flash容量远远大于DSP自启动应用程序规模的状况,提出了用DSP节点的Nor Flash作为对CAN总线网络中所有自启动程序在本地的缓存空间的方法,并设计与之相适应的NorFlash换页和缓存机制,以及CAN总线网络应用层协议。

2 DSP自启动

2.1 空间映射

本文选用TMS320C6701 DSP进行说明,其他型号DSP大同小异。该DSP是TI公司推出的高性能通用32位浮点数字处理器,有32位地址总线,总的存储器寻址空间为4 GB,对应有2种映射模式,即map0和map1,片上集成32位外部存储器接口(Extended M emory Interface,EM IF),将片外存储器空间和片上外设存储器空间分成4个时序可编程的空间,即CE0,CE1,CE2,CE3[6]。本文设计中将CE0映射到16 MB SDRAM空间,CE1映射到4 MB Flash空间,CE2映射到FPGA的地址空间,CE3保留不做映射。本文选用map1内存映射模式,小端模式,通过EM IF从32 bit Flash自启动,根据相应规格手册[7],将BOOTMODE[4:0]设置为11101。整个内存空间映射如图1所示。

图1 DSP内存空间映射

2.2 自启动流程

通常DSP提供了3种BOOT工作方式:非启动方式,从ROM启动方式,从主机启动方式[7]。本文采用从ROM启动方式,即从Nor Flash启动方式。当DSP上电或复位时,通过增强型直接内存存取(Enhanced Directed Memory Access,EDMA)方式以Flash默认时序把CE1空间开始处的64 KB内容拷贝到DSP地址0开始处的64 KB空间,即片内数据存储器IDRAM,这段内容中含有Bootloader引导加载程序,然后Bootloader拷贝加载Flash中的应用程序到相应的地址空间,之后跳转到初始化C语言运行时环境的入口-c-init00处,完成初始化并运行应用程序,从而完成整个自启动流程[7-8]。整个过程如图2所示。

图2 自启动流程

3 方案设计

由图1 DSP内存空间映射可知,CE1空间最大只能映射到4 MB Flash。自启动程序存储在CE1空间中。若运行其他自启动程序也需要将其映射到CE1空间,所以本文设计了CE1动态映射机制,即Flash分页方法。每个DSP节点本身原有一份自启动程序,若将其他DSP节点的自启动程序缓存到本地Flash其他区间并进行管理,需要研究自启动程序的缓存策略以及定义CAN网络应用层协议。

3.1 Flash分页和分区

本文Flash选用2片256 M bit容量的Nor Flash,组成64 MB Flash。需要注意的是,该DSP的EM IF总线对于CE1空间,在写操作时默认将地址右移2位,所以每次写都至少需要写4个字节[7]。

CE1空间是4 MB,本文将一个4 MB称为页,64 MB的Flash可以分为64/4=16页,需要FPGA提供额外的4个引脚作为页选线,即FLASH-PAGE[3:0][9-10]。每个4 MB的页,可以存储一份DSP自启动程序。DSP EM IF、FPGA、Flash连接图如图3所示。

图3 DSP EM IF,FPGA,Flash连接图

图3 中IO[57:54]即为Flash-PAGE[3:0],通过这4根页选线,就可实现DSP CE1中Flash空间的动态翻页。选好某一页后,给复位线一个复位脉冲,DSP复位自启动,从复位前已经选好的Flash页空间中读取自启动程序,从而实现应用程序的实时切换。

当需要的自启动程序不在本地Flash时,需要从CAN网络中载入相应的自启动程序。为了区分DSP中原有的自启动程序和从CAN网络中载入的自启动程序,将Flash中的程序空间划分为:系统区,用户区和记录区。

如图4所示,系统区为Flash的第0页,即Flash -PAGE[3:0]全为0,存储通过Flash Burn工具烧写的自启动程序。用户区为Flash的除第0页和最后一页外的其他所有页,存储通过CAN网络载入到本地的自启动程序。为了记录Flash用户区有哪些自启动程序,需要对CAN网络中自启动程序进行编号并将Flash中所有自启动程序的编号存储到Flash的最后一页,即Flash-PAGE[3:0]都为1,最后1页称为记录区。本文采用自然数对自启动程序进行编号,使用Bootloader所在的64 KB空间的最后一个字节来存储编号,这样可以标识28=256种自启动程序。使用Flash Burn工具给每片DSP的Flash系统区烧写自启动程序时,需要在Flash的第0页的第64 K个字节烧写入该自启动程序的编号。

图4 Flash分区

3.2 自启动程序的缓存策略

本文DSP Flash用户空间可以存储14种自启动程序,空间占满后,当要启动第15种自启动程序时,需要从CAN网络中载入该程序,这样会覆盖某个自启动程序。为保证应用程序切换的实时性,需要设计相应的Flash用户区中自启动程序的缓存策略。

DSP Flash用户区的自启动程序相当于该DSP所在的CAN网络空间中自启动程序(即所有其他DSP模块的自启动程序)在本地的缓存,该结构可类比于PC机中内存是磁盘的缓存。因此,缓存策略和PC机的相似,主要有FIFO程序置换算法、最优程序置换算法、LRU程序置换算法、基于计数的置换算法等[11-12]。其中简单有效的是FIFO程序置换算法和LRU程序置换算法。一般的PC机内存缓冲策略都选用LRU算法[11]。与PC机模型不同的是,嵌入式系统为了提高实时性,需要减少对Flash的擦写次数,而LRU算法不论是否从CAN网络中调入自启动程序,都需要擦写Flash记录区的内容,且一般应用场景下CAN总线网络规模不是很大,自启动程序种类不是很多,缓存命中率也比较高,所以本文选用擦写Flash次数相对比较少的FIFO程序置换算法。

FIFO程序置换算法的本质是,为每个自启动程序记录下载到Flash用户区的时间,每当需要置换某个程序时,选择已有的最旧的程序。该算法需要在Flash记录区维护一个FIFO队列来管理Flash用户区中所有自启动程序编号,当需要的自启动程序直接在Flash中命中时,Flash记录区不需要任何擦写,否则需要从CAN网络中载入需要的自启动程序以及擦写Flash记录区内容。整个FIFO程序置换过程如图5所示。

图5 FIFO程序置换过程

3.3 CAN网络应用层协议

由于CAN总线协议规范只定义了开放式通信系统互联参考模型(Open System Interconnection Reference M odel,OSI/RM)中的物理层和数据链路层[13-15],本文方案需要自定义应用层的协议以实现DSP节点从CAN网络调入自启动程序。

DSP节点从CAN网络中调入自启动程序到本地Flash用户区,主要分为2个过程:(1)本节点向CAN网络中发送寻求某编号自启动程序所在的DSP节点的can-id的广播请求,并将得到的第一个请求的can-id作为远端节点can-id;(2)本节点向远端节点发送请求点对点传输该自启动程序的命令,且远端节点响应该请求。

CAN网络需要实现广播通信和点对点通信。为了实现点对点通信,必须有一个表示通信双方身份信息的标识符,即can-id,对于每个数据帧的标识符,需要源节点can-id,目的节点can-id,还有请求应答表示位,大的数据会分成多帧,需要对每个数据帧添加序号[16-17]。CAN协议的标准帧只有11位标识符,不能满足要求,本文采用扩展帧,有29位标识符。这29位标识符的分配如图6所示。

图6 29位标识符

节点can-id用8位表示,因为can协议规定每帧标识符的最高7位不能全为1,所以can-id的表示范围为0~253。目的节点can-id可以是一个具体的节点can-id,也可以是广播can-id。由于总线仲裁时,标识符越小拥有越高的优先级[9],因此本文选用can-id为0作为广播can-id,以提高广播的优先级。“结束”位表示本帧是最后一个帧。“请求/应答”位区分请求帧和应答帧。“帧序号”表示本帧在本次发送中的顺序。“自启动程序编号/Flash sector序号”在广播数据帧中表示请求调入的自启动程序的编号,在点对点数据帧中表示Flash sector序号。“确认”位表示接收者向发送者发送确认消息。

本文选用一帧有8个字节。Flash的一个sector有128 KB,由于两片Flash并在一起,因此是2个sector同时进行擦写,共有256 KB,需要215个帧,作为一个序列。每一个请求要求目的节点发送一个序列,一个最大4 MB的自启动程序,需要有16个请求,2 MB的自启动程序,需要有8个请求。

为了使节点同时支持广播通信和点对点通信,将CAN滤波器设置为双滤波器。一个滤波器支持广播通信,即接收广播帧;一个滤波器支持点对点通信,使节点接收“目的节点can-id”与本节点can-id相匹配的帧[16-17]。

类似于互联网中HTTP协议的请求/应答模型,在每个DSP的应用程序中加入一个守护任务,负责监听CAN网络中要求自己传输自启动程序的请求。该任务设置较低的优先级,由DSP/BIOS scheduler负责调度,这样的设置可以保证响应广播请求的DSP节点没有在执行繁重的任务,有较多CPU资源来执行接下来的点对点自启动程序的传输任务。整个自启动程序传输过程如图7所示。

图7 自启动程序传输过程

4 方案验证

由于DSP自启动时,整个C语言环境没有建立,因此不能直接写测量时间的函数。

DSP自启动时,主要时间消耗在从Flash中拷贝自启动程序到IPRAM,IDRAM,SDRAM等空间。为简化,假定自启动程序都在2 MB大小。采用在DSP自启动完成后,拷贝2 MB Flash内容到SDRAM来模拟自启动所消耗的时间。实验结果表明,平均消耗时间为0.2 s左右。通过自启动点灯实验,秒表记录自启动时间小于0.5 s。

从CAN网络中载入自启动程序的消耗时间主要分为从CAN网络中传输自启动程序的消耗时间和擦写Flash空间的消耗时间。实验中使用2个DSP模块组成简单的CAN网络来测量相应的消耗时间。多次测量消耗时间的平均值在11 s,其中从CAN网络中传输2 MB自启动程序的总消耗时间平均在4 s左右,擦写2 MB Flash的总消耗时间平均在7 s左右,擦写128 KB,即1个sector,耗时约0.7 s。

根据以上得到的实验测量数据,用符合正态分布的随机数生成器来模拟实际应用中整个CAN网络环境下的DSP节点动态切换应用程序的场景,并进行M atlab编程仿真。图8是模拟有10种自启动程序的CAN网络中,当DSP节点有5页缓存空间,即网络中自启动程序数目的一半时,随机切换应用程序50次在本地未命中的分布。1代表未命中,需要从CAN网络中载入自启动程序,0代表命中,直接从本地自启动,整个命中率接近70%。

图8 缓存未命中分布

在有100种DSP自启动程序的CAN网络中,随着DSP节点Flash用户区缓存页数的增加,LRU程序置换算法与FIFO程序置换算法相比,多消耗的时间百分比的模拟结果如图9所示。

图9 多消耗时间百分比的模拟结果

当Flash用户区的页数大于CAN网络中自启动程序种类数目的70%时,FIFO算法相较于LRU算法,对DSP自启动实时性提高的百分比呈几何级数增长;当Flash用户区的页数小于CAN网络中自启动程序种类数目的50%时,两者相当;当Flash用户空间的页数比CAN网络中自启动程序种类的数目的一半稍多时,FIFO算法稍差于LRU算法,但差别不明显。所以本文选择了FIFO程序置换算法作为Flash用户区的缓存算法。

在有100种DSP自启动程序的CAN网络中,选用FIFO缓存算法,随着DSP节点Flash用户区缓存页数的增加,自启动所需时间与没有缓存机制的自启动时间的百分比的模拟结果如图10所示。当Flash页数为CAN网络中自启动程序种类数目的50%时,均摊后的平均自启动时间是没有缓存机制的自启动时间的35%左右。可见随着Flash用户区缓存页数的增加,DSP节点自启动平均消耗时间下降,并基本呈线性下降关系,增加Flash用户区页数可以较显著地提高DSP自启动的实时性。

图10 自启动消耗时间随缓存增加的变化结果

5 结束语

本文基于DSP的自启动机制和大容量Nor Flash,设计了一种在CAN总线网络中可供DSP实时切换应用程序的方法。实验及仿真结果表明,增加Nor Flash容量和采用FIFO程序置换算法,可明显提高集群内DSP自启动的实时性。今后将结合FIFO算法和LRU算法,进一步优化自启动程序缓存策略,使得不论缓存页数目多少,缓存命中率都能达到最优。

[1] 杜金榜,钟小鹏,王跃科.多DSP并行处理系统的设计与开发[J].计算机测量与控制,2006,14(5):658-660.

[2] 赵建波,胡文若,习 勇,等.基于ARM的TMS320C6455 DSP HPI的动态程序加载设计与实现[J].电子技术应用,2013,39(6):14-16.

[3] 黄 飞,乔纯捷,王跃科,等.网络互联型多DSP并行处理系统设计[J].计算机工程,2007,33(23):230-242.

[4] 李声飞,代华山.基于串口通信的DSP程序动态加载技术[J].电讯技术,2011,51(6):121-124.

[5] Liu Dan,W ang Baorui.Design of Shared Bus DSP Board in Vector Network Analyzer[J].Measurement Science and Instrumentation,2013,4(4):317-320.

[6] Texas Instruments Incorporated.TMS320C6000 DSP External Memory Interface(EM IF)Reference Guide(spru266e)[EB/OL].(2008-04-01).http://www.ti. com/lit/ug/spru266e/spru266e.pdf.

[7] Texas Instruments Incorporated.Creating a Second-Level Bootloader for FLASH Bootloading on TMS320C6000 Platform With Code Composer Studio(spra999a)[EB/OL].(2006-05-01).http://www.ti.com/lit/an/spra999a/spra 999a.pdf.

[8] 徐 菲,刘同怀,黄 鲁.基于Flash的TMS320V C5416 DSP系统自举实现[J].计算机工程与科学,2006,28(4):68-70.

[9] 廖亚风,王正勇,何小海.基于DM 642的FLASH多页加载方法研究与实现[J].四川大学学报:自然科学版,2012,49(6):1269-1274.

[10] 李兴友,游志胜.基于DM 642的大容量FLASH引导加载方法研究与实现[J].计算机应用,2005,25(8):1939-1941.

[11] Silberschatz A,Galvin P B,Gagne G.Operating System Concepts[M].[S.1.]:Johm Wiley&Sons,2005.

[12] Lee H,Bahn H,Shin K G.Page Repalcement for Writing References in NAND Flash Based Virtual Memory System s[J].Computing Science and Engineering,2014,8(3):157-172.

[13] 王邦继,刘庆想,李相强,等.CAN总线应用层协议的研究与实现[J].计算机工程与应用,2011,47(20):14-16.

[14] 李晓静,张侃谕.基于CAN总线的温室群控系统设计与实现[J].计算机工程,2010,36(1):245-247.

[15] Guan Xiaochun,Wu Guichu,Chen Xiaojing.Design of Multi-DSP Communication System Based on CAN Bus[C]//Procedings of International Conference on Electrical and Control Engineering.Wuhan,China:[s.n.],2010:762-766.

[16] 董 珂,李克强,冯能莲,等.CAN总线技术及其在混合动力电动车上的应用[J].清华大学学报:自然科学版,2003,43(8):1130-1133.

[17] 李源鸿,敖振浪.CAN总线实现点对点通信和群组广播的方法[J].广东气象,2002(4):28-29.

编辑 索书志

A Method for DSP Real-time Dynamically Switching Application Program s

LIU Peng1,ZHAO Bei1,2,MA Zhenguo1
(1.School of Biomedical Engineering&Instrument Science,Zhejiang University,Hangzhou 310027,China;2.School of Computing,Hangzhou Dianzi University,Hangzhou 310027,China)

In order to meet the requirements of real-time multiple tasks,Digital Signal Processor(DSP)should have the ability to switch applications dynamically in real time.Based on the analysis of the boot mode of DSP,and using large volume Nor Flash as caches of self-boot applications,this paper gives a solution of timely switch applications for multi-DSP system that employs CAN as control bus.Experimental result shows that the average boot time with cache is much less than that without cache,and under the condition of cache hit,applications can be switched in real time using this solution.

Digital Signal Processor(DSP);CAN bus;boot;real-time;dynamic switch

刘 鹏,赵 备,马振国.一种DSP实时动态切换应用程序的方法[J].计算机工程,2015,41(11):84-88.

英文引用格式:Liu Peng,Zhao Bei,Ma Zhenguo.A Method for DSP Real-time Dynamically Switching Application Program s[J].Computer Engineering,2015,41(11):84-88.

1000-3428(2015)11-0084-05

A

TP399

10.3969/j.issn.1000-3428.2015.11.015

浙江省自然科学基金资助项目(Y1101336)。

刘 鹏(1990-),男,硕士研究生,主研方向:嵌入式计算,数字信号处理;赵 备、马振国,博士。

2014-11-24

2014-12-18 E-m ail:dp90219@gmail.com

猜你喜欢
应用程序消耗总线
玉钢烧结降低固体燃料消耗实践
转炉炼钢降低钢铁料消耗的生产实践
降低钢铁料消耗的生产实践
删除Win10中自带的应用程序
我们消耗很多能源
基于PCI Express总线的xHC与FPGA的直接通信
机载飞控1553B总线转以太网总线设计
谷歌禁止加密货币应用程序
多通道ARINC429总线检查仪
基于EtherCAT总线的ROV控制系统设计