嵌入式系统中“软外设”的研究
作者Email: sunchengli@sjzue.edu.cn
摘要:随着CPU的性能的不断提升,处理速度越来越快,运算能力不断增强,在许多嵌入式系统的开发中逐渐出现了软外设(Software Peripherals)。所谓软外设是指以软件编程为手段,模拟CPU的外围设备的功能,真正达到以软代硬的目的。软外设的出现给产品的开发带来了极大的灵活性,不但使系统体积变得更小,而且使系统的升级换代变得更为方便,从而真正实现SOC。
本文介绍软外设的设计思想以及在开发过程中应注意的事项,并结合一个嵌入式系统,分析软外设对系统的影响以及如何使设计合理化。
关键词:嵌入式系统 UART Software Peripherals
一、介绍
应该说软外设并不是一个新思想,从计算机发明以来,电子系统设计人员一直试图尽可能多地用软件编程来代替实际电路,通过这种方式把外设嵌入进系统。但由于CPU速度、计算能力有限,以及内存技术的发展不够成熟,从而束缚了软外设的发展。
近年来,随着电子技术的发展,越来越多的处理器厂家在处理器的设计中加大了对软外设的支持,象ARM公司宣称他们的32、64位RISC处理器已经能用软件实现更多更强的功能,指令集也更为丰富,甚至包括DSP方面的许多功能现在已经能够在CPU上实现。Motorola公司已经开发出基于SM56PCI接口的用纯软件实现的调制解调器。这些都说明电路设计已经进入了一个崭新的时期。
目前,电子设计中把外设嵌入进系统的方法主要有两种。方法Ⅰ是采用标准的微处理器+一块辅助芯片,辅助芯片可以是FPGA或CPLD等可编程逻辑芯片;方法Ⅱ是采用基本的CPU内核+附加逻辑单元,这些可以在一块高密度可编程逻辑芯片上实现,CPU内核往往为Altera和Xilinx等FPGA生产厂家提供的软件模块。以上两种方法都需要开发人员熟悉硬件描述语言,但在实际应用中CPU内核以及各种IP核的使用的往往要得到产权许可,而且可编程逻辑芯片体积大,价格昂贵,故在一些便携式装置的研制中不便采用。
软外设的设计通常是采用标准的微处理器,在满足系统稳定和系统负荷允许的条件下,设计中尽可能多地采用可配置的软件模块,用这些可配置的软件模块来实现某种外设的功能。并且可以配置、升级、重组,从而完成特定的功能。应该说明的是,并不是所有外设的功能都能完全由软件实现,这种设计方法的目的是在系统允许的条件下尽量“以软代硬”,以尽可能少的硬件开销取得最佳的性能比。
二、系统要求
下面给出具有软外设的嵌入式系统结构图。
javascript:window.open(this.src);" style="cursor:pointer;"/>
下面给出对嵌入式系统的要求:
(1) 高性能CPU内核。软外设的必须以高性能CPU内核为支持,只有采用高性能CPU内核,系统的频率才能得以提高,软外设和CPU之间才能高速传送数据,软外设才能得以高速运行而对系统整体工作不会有太多影响。建议采用带有流水线、32位以上RISC核的CPU。
(2) 快速的中断响应。软外设均采用中断方式向CPU提出服务请求。可以在片上存储器与内部总线之间增加寄存器组来减少系统的中断响应时间。
(3) 附加硬件模块。正如前面所提,系统有些特性是不能由软件实现的,象定时器、中断控制器。另外在信号处理中由于A/D、D/A转换如果用软件实现对系统开销太大,由硬件实现较好。
(4) 快速、足够的存储器和高性能的运算单元。
三、软外设的算法设计
由于软外设要求实时性强,有时需要和别的应用程序并行执行,在设计时可以把软外设看作等待服务的任务,协调、安排好这些任务非常重要,根据任务的确定性可以把实时系统的进程调度策略划分为两类:一类是静态的,主要负责预先知道发生时间的任务;要求按进度准点完成的任务;要求固定时间发生的任务。对这类调度策略可以采用Round-robin算法或间隔算法(见3)。另外一类是动态进程调度策略,负责那些不能预测何时发生任务;不知执行周期有多长的任务。这是一些具有临时性的任务,比如含有条件循环的任务(不知何时满足条件)。以上两种策略分别适用于不同的情况,在一个复杂的系统中,往往存在几个要求并行执行的软外设,进程的调度对任务的同步和系统的优化非常重要。
另外为了设计的可移植性和简便,要进行模块化和层次化设计,复杂的软外设可以看作由几个具有层次的简单的模块构成。
四、性能分析
现以示出了一个嵌入式系统的框图,该系统采用Motorola公司生产的MCF5104型号CPU,接有三个软外设,分别为UART、LCD和键盘控制器。现在从工作速度和能量损耗方面以UART软外设为例,对软外设进行性能分析。
javascript:window.open(this.src);" style="cursor:pointer;"/>
在UART实现程序中,共有16条汇编指令,假定每条指令需要一个时钟周期(即CPI=1),没有奇偶校验功能。通过改变CPU主频(变化范围为30~100),计算执行的时间占有CPU时间的比率,分析UART软外设在不同波特率情况下对CPU的负担,计算过程如下:
假定CPU发送/接收一个字节的时间为t。UART软外设的CPU占有率为T,则
t=指令数×CPI+中断响应周期×CPU主频-1。
T=t×波特率。
结果如表1所示。
表1 UART的CPU占有率
Rate(bit/s) MHz | 19200 | 38400 | 57600 | 1152000 |
30 | 1.534% | 3.070% | 4.605% | 9.215% |
50 | 0.920% | 1.843% | 2.764% | 5.530% |
75 | 0.614% | 1.227% | 1.843% | 3.687% |
100 | 0.460% | 0.921% | 1.380% | 2.764% |