|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
随着更多应用在嵌入式系统中的实现,嵌入式系统设计向着更高级、更复杂的方向发展。作为32位结构体系中的翘楚,ARM在各种应用领域里得到了极其广泛的应用,成为目前国内电子设计领域里面的焦点之一(2005年一项针对国内嵌入式系统开发者的调查表明,有63%的工程师把ARM作为32位CPU的首选)。过去几年里,绝大部分ARM系统都是基于ARM7处理器,最近一年里,基于ARM9处理器的产品越来越多,研究ARM9的特点以及如何优化从ARM7到ARM9的移植,成为很多嵌入式系统设计者所关注的热点问题。
我们惯称的ARM9系列中又存在ARM9与ARM9E两个系列,其中ARM9属于ARMv4T架构,典型处理器如ARM9TDMI和ARM922T;而ARM9E属于ARMv5TE架构,典型处理器如ARM926EJ和ARM946E。因为后者的芯片数量和应用更为广泛,所以我们提到ARM9的时候更多地是特指ARM9E系列处理器(主要就是ARM926EJ和ARM946E这两款处理器)。下面关于ARM9的介绍也是更多地集中于ARM9E。
ARM7处理器和ARM9E处理器的流水线差别
对嵌入式系统设计者来说,硬件通常是第一考虑的因素。针对处理器来说,流水线则是硬件差别的最明显标志,不同的流水线设计会产生一系列硬件差异。让我们来比较一下ARM7和ARM9E的流水线,如图1。
可以看到ARM9E从ARM7的3级流水线增加到了5级,ARM9E的流水线中容纳了更多的逻辑操作,但是每一级的逻辑操作却变得更为简单。比如原来ARM7的第三级流水,需要先内部读取寄存器、然后进行相关的逻辑和算术运算,接着处理结果回写,完成的动作非常复杂;而在ARM9E的5级流水中,寄存器读取、逻辑运算、结果回写分散在不同的流水当中,使得每一级流水处理的动作非常简洁。这就使得处理器的主频可以大幅度地提高。因为每一级流水都对应CPU的一个时钟周期,如果一级流水中的逻辑过于复杂,使得执行时间居高不下,必然导致所需的时钟周期变长,造成CPU的主频不能提升。所以流水线的拉长,有利于CPU主频的提高。在常用的芯片生产工艺下,ARM7一般运行在100MHz左右,而ARM9E则至少在200MHz以上。
(表2.jpg)
ARM9E的DSP扩展指令如表2所示,主要包括三个类型。
1)单周期的16x16和32x16MAC操作,因为数字信号处理中甚少32位宽的操作数,在32位寄存器中可以对操作数分段运算显得非常有用。
2)对原有的算术运算指令增加了饱和处理扩展,所谓饱和运算,就是当运算结果大于一个上限或小于一个下限时,结果就等于上限或是下限;饱和处理在音频数据和视频像素处理中普遍使用,现在一条单周期饱和运算指令就能够完成普通RISC指令“运算-判断-取值”这一系列操作。
3)前导零(CLZ)运算指令,提高了归一化和浮点运算以及除法操作的性能。
以流行的MP3解码程序为例。整个解码过程中前端的三个步骤是运算量最大的,包括比特流的读入(解包)、霍夫曼译码还有反量化采样(逆变换)。ARM9E的DSP指令正好可以高效地完成这些运算。以44.1KHz@128kbps码率的MP3音乐文件为例,ARM7TDMI需要占用20MHz以上的资源,而ARM926EJ则只要小于10MHz的资源. |
|