AVR32 32位MCU/DSP——AVR32 UC内核
重新定义32位Flash微控制器的性能
AVR®32 UC是一款带有DSP指令的32位RISC内核,将基于Atmel® AVR32架构开发的第2款内核,2006年引入。
AVR32 UC内核提供了高达1.3 Dhrystone MIPS/MHz的性能,从片上Flash运行,在相同的代码密度下,它的性能是ARM7-TDMI内核的2倍。尽管门数量与ARM® Cortex-M3相当,但Atmel的AVR32 UC内核是唯一一款在这样的尺寸范围中能够包含单周期DSP指令,并提供高性能和更优的代码长度的32位RISC内核。
第一款在流水线中集成SRAM的内核——AVR32 UC内核是业界第一款集成了单周期读/写SRAM,SRAM带有到CPU的直接接口,可以避开系统总线以实现更快的执行、周期确定性和更低功耗的内核。高速总线(HSB)从接口访问允许DMA控制器或其他HSB主设备直接对紧耦合SRAM进行数据的读写访问。如果CPU和高速从设备同时发出访问请求,就会执行仲裁。优先机制是可编程的,以满足不同应用的需要。
AVR32 UC内核包含电源管理功能,1个存储器保护单元(MPU)和1个32位单周期访问Flash接口。它还提供了1个6优先级的中断控制器,其中包括具备快速事件处理功能的非屏蔽性中断(NMI);此外还有1条3级流水线,它不需要指令或数据缓存、数据前送、冒险检测或分支预测功能。
3级单周期流水线——AVR32 UC内核有1条3级流水线。指令获取阶段的特别设计旨在优化从片上Flash存储器获取指令的过程。这个流水线阶段每个时钟周期都预取1条32位或2条16位指令放入内部指令缓冲区。这个缓冲区确保在程序的顺序执行过程中流水线绝不会停下来。从片上Flash执行能够维持在最高的CPU时钟频率,CPU无需停下来等待从Flash中获取指令。
第2阶段将解码指令并产生执行指令所需要的信号。
第3阶段由3个执行子单元组成: ALU、乘法和加载/存储单元。ALU执行算术和逻辑操作,包括硬件除法。乘法单元执行指令集架构(ISA)中众多的乘法和乘累加(MAC)操作,而加载/存储单元则执行单周期SRAM存储器访问或高速总线(HSB)访问。UC内核中不存在数据冒险,因此寄存器堆可以在执行指令的那个时钟周期内进行更新。这使得汇编编程要比更深的流水线简单,因为它不需要代码调度。
带有可自由混用16/32位指令的指令集架构——AVR32 UC内核与它的前一代AVR32 AP使用相同的指令集架构(ISA),拥有超过220多条指令,这些指令可以作为16位紧凑型和32位扩展型指令。AVR32 ISA的设计旨在尽量减少内核和存储器间的数据交流,节省功耗和时钟周期。编译器会自动选择每条指令最高效的紧凑型或扩展型形式,为用户提供尽可能快同时尽可能高效的代码。
加载/存储指令——加载/存储指令是用来访问字节(8位)、半字(16位)、字(32位)和双字(64位)数据类型的。这些指令有多种寻址模式,以便高效地访问表和其他数据结构。强大的寻址模式减少了必须执行的加载/存储指令的数量(在传统处理器中,通常30%的周期用于执行加载/存储指令)。例如,与传统架构相比,AVR32 UC的“使用析出变址加载”指令能够将常见加密算法的存储器访问次数减半。
除了常规的加载和存储指令之外,AVR32 ISA提供了能够对从寄存器堆读取的数据进行修改然后存储到存储器,以及对从存储器读取的数据进行修改然后存储到寄存器堆的指令。动态的数据操作包括加载并插入位域,加载并交换和存储并交换。这些指令能够很好地适用于协议处理和字节顺序转换(endianess conversion)。
原子存储器操作指令——AVR32 UC指令集包含了用于操作互斥体和信号量以及进行普通位操作的原子指令。信号量和互斥体被实时操作系统(RTOS)用于防止在进程执行过程中出现资源竞争。位操作被用来控制片上外设。
DSP指令——AVR32 UC内核乘累加单元在一个周期内对标准数和小数执行大量乘法和乘累加指令,可以带或者不带饱和及取整功能。乘法或MAC结果可以是32、48或64位宽;48和64位结果被放置在2个寄存器中。DSP指令也包括许多加法和减法指令以及数据格式化指令,比如带有饱和和取整功能的数据移位。
快速事件处理——AVR32 UC内核事件处理系统支持非屏蔽性中断(NMI)、异常(非法操作码,总线错误)等事件以及4个中断优先级。事件分不同的优先级。未决的高优先级事件可以取代正在进行的低优先级事件。一旦检测到事件,当前上下文的状态寄存器和程序计数器外加6个通用寄存器将自动存储到堆栈中。事件处理程序的第一条指令将在12个时钟周期内被执行,该事件处理程序来自自动向量化的处理程序地址。为了抑制中断延迟,多周期指令可以由未决的中断中止,因此最大的中断延迟限于16个时钟周期。
Flash微控制器系统——AVR32 UC内核包含了片上RC振荡器用作主时钟源。片上上电复位和欠压检测器确保器件工作在保证的电源电压范围中,预防了危险操作,比如可能会破坏Flash存储器内容的伪造Flash写访问。硬件看门狗由片上RC振荡器提供时钟,用于检测不良程序执行或时钟故障造成的软件冒险,比如外部振荡器损坏。
AVR32 UC内核可以工作在特权或非特权模式。特权模式通常用于实时操作系统,能够访问所有系统资源并使用单独的系统堆栈。非特权模式用于执行任务,并限制对某些系统资源的访问。安全机制用于在不同的特权模式间切换控制。
存储器保护单元(MPU)控制存储器的分配并管理访问特权。 MPU能够根据特权模式来限制对不同存储器区域的读/写/执行访问。
代码密度比ARM7(Thumb)或Cortex M3 (Thumb2)高20%——ARM32 UC代码总是比为ARM Thumb®指令集编译的代码小5%到20%。更重要的是,当代码对执行速度进行优化后,ARM32 UC代码要比为ARM指令集编译的代码少30%到50%(注1)。更紧凑的代码增加了处理器吞吐量并通过减少存储器访问次数降低了功耗。
注1:根据ARM的资料,为Thumb2指令集编译的代码要比ARM代码小26%。(Cortex-M3处理器简介——白皮书,ARM) |