- UID
- 872339
|
系统性能并不等价于计算能力。较低的功耗、丰富的片内外设以及实时的信号处理能力对于大部分嵌入式应用来说是最为重要的。传统的8位、16位单片机已经很好的处理了这类问题,但是随着当今嵌入式设计不断增长的功能需求和特殊要求,许多微控制器厂商开始抛弃他们传统的8位、16位单片机。但是选择32位处理器对于某些任务来可能并不是最适宜的。下面我们就讨论一下单片机的选型问题。
理解系统性能
MIPS(million instructions per second),是微控制器计算能力的表征。但是,所有的嵌入式应用不仅仅是需要计算能力,所以应用的多样化决定了系统性能衡量方式的多样化,大部分参数都同等重要并且难于用一个参数来表示,我们并不应该仅仅从MIPS就判定系统的好坏。也许某一应用由于成本的限制,需要一款高集成度的微控制器,该控制器需要多个定时器和多种接口。但是另一个应用需要高的精度和快速的模拟转换能力。两者的共同点可能仅仅是供电部分,比如采用电池供电。对于一个实时的顺序处理应用来说,通信的失败可能会导致灾难性后果。这样的场合下就需要一个灵巧的控制器。这个控制器应当能够以正确的顺序处理任务,并且响应时间必须均衡。所有上述应用的共同问题可能就是定期的现场升级能力。
除了与具体的产品要求有关外,系统性能的衡量也可以考虑是否有容易上手、容易使用的开发工具、应用示例、齐全的文档和高效的支持网络。
系统性能的相关问题
1.传统8位单片机的局限
大多数工程师十分关注系统性能,因为越来越多的8位和16位单片机家族已经无法满足当今日益增长的需求。陈旧和低效的架构限制了处理能力、存储器容量、外设处理和低功耗要求。8位的处理器架构,比如8051、PIC14、PIC16、PIC18、78K0和HC08是在高级语言(比如C语言)出现之前开发的,其指令集仅用于汇编开发环境。并且这类架构的中央处理单元(CPUs)缺乏一些关键功能,比如16位的算数运算支持、条件跳转和存储器指针。
许多CPU架构执行一条指令需要若干时钟周期。Microchip的8位PIC家族执行一条最简单的指令需要4个时钟周期,这导致使用20M的时钟仅能达到5MIPS.对于其他CPU架构,比如8051内核。其执行一条指令至少需要6个时钟周期,这就使得实际的MIPS要比给定的时钟频率低很多。
int max(int *array)
{
char a;
int maximum=-32768;
for (a=0;amaximum)
maximum=array[a];
return (maximum);
}
上述代码是一个简单的C语言函数,表1列出了在三种不同CPU架构上编译这段代码的相应结果。8051内核的执行时间几乎是PIC16内核的4倍,对于AVR架构更是达到了28倍。
表1不同CPU架构的代码容量和执行时间
CPU架构代码容量(字节)执行时间(周期)
8051 112 9384
PIC16 87 2492
AVR 46 335
一些半导体厂商解决了时钟分配问题,使得微控制器实现了单时钟周期指令。当时钟频率为100MHz时,Silicon Labs声称他们基于8位8051架构的微控制器能够达到100MIPS的峰值。但是,这里有几个问题:
第一,由于大部分指令需要两个时钟周期甚至更多,所以其实际能力接近于50MIPS;
第二,8051是基于累加器的CPU,所有需要计算的数据必须拷贝到累加器。查看8051处理器的汇编代码,可以发现65%-70%的指令用来移动数据。由于现代8位和16位单片机架构中有一系列和算术逻辑单元(ALU)相连的寄存器。因此,8051内核的50MIPS仅相当于现代8位和16位单片机架构的15MIPS.
MOV A,0x82
ADD A,R1
MOV 0x82,A
MOV A,0x83
ADDC A,R2
MOV 0x83,A
MOVX A,@DPTR
MOV OxF0,A
INC DPTR
MOVX A,@DPTR
RET
第三,较老的CPU架构缺乏对大容量存储器的支持。早在七十年代,很难想象需要超过64KB存储器的嵌入式应用,这使得许多CPU设计师选择16位的地址总线。因此,CPU、寄存器、指令集以及程序存储器和数据存储器的数据总线始终受此限制。
第四,在2006年,约有9%的8位嵌入式应用使用了64KB甚至更多的程序存储空间,这代表了8位MCU市场26%的收益。推测2009年,14%的8位嵌入式应用会代表36%的收益。而这14%的应用会使用64KB甚至更多的程序存储空间。
从系统性能的角度来看,所有这些使得较旧的8位MCU逐渐失去竞争力。
2.不适宜32位处理器的场合
旧式CPU架构无法满足当今的市场需求,为了解决这个问题,许多厂商升级至32位的处理平台。对于需要32位处理能力的应用来说这无疑是最棒的选择,但是许多设计师转换到32位平台并非最正确的选择。使用32位MCU来解决8位和16位单片机的自身限制将会导致过高的成本。
大部分32位微控制器无法提供高速、高分辨率的模数(ADC)转换,EMC性能通常较低,且ESD保护较弱。而8位和16位单片机在这些方面优势明显。另外,强的IO驱动能力,可供选择的多种内部、外部振荡器,无需外部器件的片内电压调整器等是8位和16位单片机的另一些优点。
显然,32位CPU包含比任何8位和16位CPU都要多的数字逻辑单元,这导致了高的制造成本。虽然使用一些特殊的半导体工艺可以降低成本,但是弊端是会导致较高的漏电流和静态功耗。某些应用,像水表、燃气表、收费公路电子标签、安全系统等,在他们生命期中的大部分时间,CPU处于睡眠模式,即为停止状态。这类应用的电池寿命必须在5-10年,所以这情况中,不可能将CPU从8位或者16位升级至32位处理器。如果想要提升系统性能只有采用别的方法。
保持采用统一产品线
生产商会定期生产新的嵌入式产品扩展产品线以保持竞争力。这些新产品通常是完善需求、升级性能或者降低成本。其他因素还包括制造工艺升级、提升竞争力和市场发展趋势。独立于最先的设想,新产品总是基于一些核心思想。因此,新的产品或者升级版本会依赖于已经存在的平台和源代码。
研究表明,半数公司潜在重用已有硬件和软件以减少开发时间。工程师对特定MCU产品家族的了解程度、相关MCU的开发文档是否详细以及是否具有高效的开发工具也是降低开发时间和成本的重要因素。
保护知识产权和处理保密信息
一些嵌入式应用用来处理个人信息。另一些授权访问受限区域或者金融领域。几乎所有的微控制器都在运行具有产权的程序。如果相关软件被破解,甚至克隆产品在市场流通,知识产权的所有人可能会失去未来的收益。正是由于这个原因,大部分微控制器都有保护机制。这种机制可以阻止黑客或者第三方使用编程器、调试器或者测试接口来读出程序存储器。
当今,越来越多的应用采用层次设计或者功能模块设计。不同功能模块或者部件之间的有线通信或者无线通信成为一个越发困难和值得注意的问题。为了阻止第三方的非法访问,必须进行加密。这方面的一个例子就是遥控车门开关(Remote Keyless Entry, RKE)或者家庭无线网络。如果传输的数据没有加密,那任何人都有可能使用您的车或使用您的无线互联网连接。传统的解决方法是使用封闭算法或者加密算法,这样只有知道算法的人可以使用。这样的方法被称为通过隐匿来实现安全(security by obscurity),这是一种非常危险的做法。最佳的解决方法是使用诸如AES或者DES这类的公开算法,这类算法既允许公众查阅又可以保障他们的安全。如果你使用私密加密算法或者匿名加密算法,则无法*估安全级别或者发现关键的设计缺陷。
使用公开加密协议的问题是需要强大的运算能力和可靠的算法设计。在现代8位MCU上使用DES算法加密或者解密一个8字节的块所需时间的典型值是大约10 万个时钟周期。这相当于使用全部的15MIPS来支持9600Kbps的通信速度。而32位CPU进行同样的运算通常会快50%-60%.在32MHz系统时钟下,使用45000周期或1.4毫秒只能以45 kbps的速度进行安全数据通信,因为所有的CPU时间都用于加密和解密。显然,系统没有多少时间可以留给实际的应用程序。其次,大多数的无线应用是电池驱动的,如果大多数处理能力都用在安全方面,将缩短电池寿命。
高集成度与中断延时和安全
现在的微控制器在其片内集成了越来越多的外设。通常来说,外设对微控制器高效的完成工作起着至关重要的作用。外设起着连接传感器、系统控制、数据通信、故障控制和计时等多种作用。传统方法是使用中断来与片内外设通信。这样的优势很明显,大大的节约CPU时间,使得软件不必循环检测外设状态,从而本质上提高了CPU的效率。即使如此,中断方式仍然有一些劣势,其中一个就是中断例程中的上下文切换要花费一些处理周期。对于现代的CPU架构来说,中断的上下文切换需要20-100个时钟周期。假设有一个简单的任务,它获取发来的SPI数据。如果SPI的速率是1Mbps,则SPI接收中断的频率可达 125KHz.如果SPI中断处理需要25时钟周期(包括上下文切换),那对于20MIPS的CPU时间来说,仅处理SPI中断就需要花费15%的CPU 时间。如果同时还有其他一系列中断,则意味着CPU必须处理巨大的任务。
使用中断方式的另一个劣势就是中断响应时间对关键系统事件的影响。某些中断源可能要求在触发后CPU必须立即响应。比如汽车的安全气囊、动力设备的急停等危机情况以及紧急情况的应用。所有这些都要求立即相应,或者立即关闭控制系统以防止发生永久性灾难事件。如果CPU需要首先完成其他的中断服务程序或者需要花费较长的时间进行上下文切换,结果将无法预知。
目前,已经有些半导体厂商开发了一些新的技术。这些技术用来取代传统的中断方式或者DMA方式,使用这类技术进行外设通信可以节省大量的CPU时间。 |
|