参数搜索
首页 » AVR » AVR32 MCU/DSP

AVR32 MCU/DSP





AVR32 32位MCU/DSP创新


新型处理技术

Atmel的AVR群实现了AVR32内核的出色的计算吞吐量,并具有许多节省周期的特性,包括:
• 减少了加载/存储周期数,
• 实现了计算资源的最佳利用,
• 提供了零代价的分支,并且
• 减少了高速缓存“未命中”的次数。
此外,AVR32内核采用了特定的架构,以便将工作功耗和电流泄露降至最低。

指针算术操作将加载/存储周期降至最低

平均有30%的处理器周期不是消耗在运算上,而是消耗在加载/存储指令上。AVR32减少了需要的加载/存储指令数量,这是通过字节(8位)、半字(16位)、字(32位)和双字(64位)加载/存储指令结合各种各样的指针算术操作,以最少的周期数高效地访问表、数据结构和随机数据而实现的。

新的“使用析出变址加载”就是新型指令的一个例子。最流行的加密算法包括分组密码算法,Blowfish, Triple-DES和Rijndael就属于这类算法。所有这些算法都使用一种特殊的数组寻址操作,这种操作在目前的微处理器上需要很长的指令序列来执行。

AVR32指令集使用新的和创新的加载指令来支持这些算法,该指令使用析出的变址指令来加载字。这种操作如下:

result = pointer0[offset0 >> 24] ^ pointer1[(offset1 >> 16) & 0xff] ^
pointer2[(offset2 >> 8) & 0xff] ^ pointer3[offset3 & 0xff];

这种操作主要由4条存储器访问操作组成,它析出32位字中4字节的其中之一,进行零扩展并将其加到基址指针上。这个操作的结果就生成了要访问的存储器地址。

传统的架构需要14个周期来执行这个操作。 AVR32执行它时只需7个时钟周期,AVR32的“使用析出变址加载”指令可以在4个周期中执行全部4条存储器访问操作,同时将全部4个偏移保存在1个寄存器中。

通过减少需要执行加载/存储指令数量,AVR32内核增加了每个操作码周期的吞吐量。 AVR32内核共有28条指令可用于提高加载/存储操作的效率。

单指令流多数据流(SIMD)

AVR32架构中的SIMD指令能够将那些需要对数据流执行相同操作(例如,MPEG解码中的运动估计)的特定DSP算法的吞吐量提高到4倍。8位绝对残差和(SAD)计算的执行过程如下:以单条加载操作从存储器加载4个8位的像素,然后执行带饱和的无符号字节的压缩型减法,将高、低压缩字节对相加,然后将它们解压为压缩半字。之后将这些压缩半字相加就得到SAD值。

多条流水线支持乱序执行

AVR32 AP CPU有7级流水线,带有3条子流水线(乘法/MAC,加载/存储和ALU),能够以乱序和并行方式执行不相关数据的算术操作。传统架构只有一条流水线,该流水线在每条指令执行完成之前拖延代码的执行。在多周期指令中,这种做法可能会浪费宝贵的计算资源。AVR32 AP流水线中的逻辑允许使用可用的流水线资源来同时执行独立的指令。乱序执行可以增加每个周期的吞吐量。冒险检测逻辑会在流水线的开始处检测并延迟相互关联的指令,直到它们所依赖的操作完成为止。

流水线级间的数据前送

>通过在流水线阶段之间转发数据,AVR32 AP流水线消除了用于写入或读取寄存器堆的许多周期。在写回阶段之前完成执行的指令被立即转发至流水线的开始处,以便执行等待其结果的指令。通过最小化寄存器堆的访问次数,这种功能可以节省周期和功耗。

硬件分支预测

尽管深流水线可实现更高的时钟频率,但是一旦出现程序流程跳转,它们会引入很大的周期代价。对于小的内部循环而言,这些分支代价特别严重。为了解决这个问题,AVR32 AP流水线包含了分支预测逻辑,后者能够精确地预测全部的流程转移指令。此外,通过目标指令来“折叠”分支,从而实现了零周期的分支代价。

出色的代码密度减少了高速缓存未命中次数和程序存储成本

AVR32指令集是从与编译器供应商IAR Systems AB同步进行的大量基准测试和改进中进化而来的。经EEMBC基准套装测试,上述方法产生的代码密度比类似32位内核的密度高50%。密度更高的代码意味着可以将更多的指令存储在处理器高速缓存中,从而减少了高速缓存未命中次数并增加了每个周期的处理器总吞吐量。

对高级操作系统的指令集支持

大多数CPU架构都是在操作系统(OS)还没有变得像今天这样普及之时开发的。因此,CPU内核在调用OS或外部应用时有浪费周期的趋势。AVR32架构明确地支持操作系统的使用,特别是Linux®操作系统,该架构的节省周期的指令包含了对子程序的应用程序调用(ACALL)以及调用操作系统例行程序的系统调用(SCALL)。 AVR32的高级MMU和安全模式也支持高级操作系统,如Linux。

较低速的时钟提供了超低的功耗

AVR32内核较大的吞吐量允许使用较低速的时钟频率,并实现了功耗的线性减少。此外,AVR32的设计旨在尽量降低所有时钟速率下的工作功耗,方法是让数据更靠近CPU,并尽量减少数据在总线上的不必要的移动(会产生大量功耗)。例如,较早的MCU架构会将子程序调用的返回地址复制到存储器堆栈,这样做会造成不必要的功耗。AVR32在寄存器堆中包含了一个链接寄存器,消除了上述需求。另一项节能功能是将用于中断和异常的状态寄存器和返回地址保存在系统寄存器中,而不是从系统堆栈读或向系统堆栈写数据。