第3章嵌入式处理器 Itisposibletoinventasinglemachinewhichcanbeusedtocomputeanycomputablesequence.IfthismachineUissuppliedwithatapeonthebeginningofwhichiswritentheS.D[st(“) andarddescriptionof(”) anactiontable]ofsome comptncieM,hnUwiompthamesquneasM.( uigmahntelcueteseec1936) Amanprovidedwithpaper,pencil,andrubber,andsubjecttostrict e,( disciplinisinefectauniversalTuringMachine.1948) —AlanTuring 在IEEE给出的定义中,计算机是包括一个或多个处理单元以及一组外围设备的功能 可编程装置,通过内在程序可自动执行特定的算术和逻辑运算。那么从广义上讲,以数字处 理单元为核心设计的通用计算机与形形色色的嵌入式计算装置就都可纳入计算机的范畴。 随着嵌入式系统技术在越来越多的行业中的应用以及万物智联时代的开启,嵌入式处理器 的发展日益呈现出架构多元、类型丰富、快速演化等特点与趋势。那么,总结并厘清不同类 型嵌入式处理器的体系结构与功能特性,就成为学习和设计嵌入式系统的重要环节。 3.处理器模型与逻辑体系 1 1.处理器基本组成模型 3.1 1.核心组件 中央处理单元(CPU)也称处理器,是所有数字计算装置的“大脑”。任何数字计算装置 的计算体系及其软硬件设计都要围绕处理器展开。为了更好地学习和理解不同形式的嵌入 式处理器并对比其与通用处理器(GeneralPurposeProcesor,GPP)的异同,这里首先回顾 处理器的基本工作过程。图3.1中 1给出了CPU指令执行过程抽象的运行逻辑。由图3. 标识的步骤可知,系统上电后,处理器中的控制单元(ControlUnit,CU)会根据程序计数器 (ProgramCounter,PC)的值读取和解码指令,然后交由执行单元(ExecuteUnit,EU)进行 算术和逻辑运算并进一步输出结果。 图3. 1CPU指令执行过程抽象的运行逻辑 由此,可以给出一个简化的CPU核心组件模型,2所示。在该模型中, 如图3.控制单元 由程序计数器(PC )、指令寄存器(InstructionRegister,IR)和指令解码器(Instruction DecodeID) r,等组件构成,其通过高速缓存提高访问速度,同时采用堆栈来解决中断、函数调 用返回时的现场恢复问题。执行单元由算术逻辑单元(ArithmeticLogicUnit,ALU)和数 据寄存器(DataRegister,DR )、功能寄存器(FunctionRegister,FR)构成。一个控制单元和 一个执行单元即可构成一个完整、独立的指令执行引擎,称之为计算核(core)。处理器中计 算核的数量则是指执行单元的数量,且每个执行单元至少需要一个控制单元的支持。 图3. 2CPU 核心组件模型 一条指令的执行分为多个阶段,在每个阶段并不会占用执行单元的全部资源。那么,将 空闲资源提前用于下一条指令的读取与执行,就可以大幅提升处理器的资源利用率、吞吐量 和执行效率。因此,在多核处理器出现之前,部分处理器体系中就采用了增加控制单元和优 化流水线的方式,以此实现虚拟的多核计算环境,称为单核多任务计算模式。例如,l奔 Inte 腾4等处理器中采用的超线程便是类似技术,可以使单核CPU 的计算效能提升20%~ 30% 。而在多核处理器中,片内多个独立的计算核硬件同时运行,真正实现指令、任务级的 并行,即多核多任务计算模式。 2. 指令、汇编语言与指令集 指令是可被处理器识别、译码和执行的编码,是连接程序与处理器的桥梁。在计算系统 中,指令由表示运算方式的机器操作码(opcode)以及零个或多个地址码组成,而可执行程序 则是一组机器码的顺序存储序列。总体上,指令可被分为使用和改变寄存器值的数据处理 指令、给操作对象赋值的数据传送指令、用于分支和连接控制的控制流指令以及程序状态寄 存器处理指令、异常产生指令等。为了增强指令的可读性以及便于基于指令的软件设计,进 一步为指令设计了对应的编程符号,也就是汇编语句,进而形成了汇编语言。对于不同系列 的处理器,其操作码、指令格式及汇编语句通常不同,但对于同一系列的处理器,其操作码、 指令格式及汇编语言通常相同或相似。 一系列机器操作码以及由特定处理器执行的基本指令构成了指令集体系结构(Instruction SetArchitecture,指令集在一定程度上也反映 ISA )。任何处理器都拥有至少一套指令集, 了处理器的逻辑体系。指令集是计算机体系结构中与程序设计相关的部分,与基本数据类 型、寄存器、寻址模式、存储体系、中断、异常处理以及外部I/O操作等密切相关。根据指令 集功能强弱、完备性及寻址方式,通常将指令集分为复杂指令集和精简指令集,相应的计算 机称为复杂指令集计算机(ComplexInstructionSetComputer,CISC)和精简指令集计算机 (ReducedInstructionSetComputer,RISC )。与CISC 相比,RISC 具有以下特点:指令长度 与执行周期固定,指令类型较少,硬件更简洁,寄存器更多,寻址模式少,易于实现流水线以 69 70 及编译器更复杂,典型的RISC有广泛应用于各类计算装置的开源指令集RISC-V①。早期 的x86处理器采用复杂指令集;而常见的嵌入式处理器体系中大都采用了精简指令集,如 ARM、MIPS、PowerPC、SPARC等。另外,指令集与处理器中执行指令的微架构并非必须 一一对应。即使同一系列的处理器,其微架构也会存在差异,但一般基于同一指令集或其不 同子集进行设计。当然,同一微处理器也可以同时支持多套指令集。例如,ARM 处理器可 采用32位ARM 指令集、16位Thumb指令集或者16位与32位指令并存的Thumb-2指令 集等,CPSR(CurrentProgramStatusRegister,程序状态寄存器)的第5位(位T)决定了 ARM 处理器内核执行的是ARM 指令流还是Thumb指令流。 下面对几种典型处理器体系结构进行简要说明。 1)80x86指令格式 80x86指令格式如图3.3所示。指令前缀分为4组,每组用一字节编码。操作码表示该 指令对应的具体执行动作,其长度可为1字节、2字节或3字节。ModR/M 字节为寻址模式 说明符,共有32个值,表示8个寄存器与24种寻址模式。ModR/M 中的Reg/Opcode表示 寄存器号或者额外的3位指令码,其具体含义依赖于基本指令码,而ModR/M 的位5表示 第一操作数的寻址方式等。SIB字节用于补充某些ModR/M 字节表示的寻址模式,且仅在 ModR/M 有效时生效。 图3.3 80x86指令格式 例如,80x86处理器中将立即数写入寄存器的汇编指令格式为“MOVReg,Imm”,从其 主要指令表(MainInstructions)[25]可以查到,该指令对应的操作码为1011wrrr。由于汇编 语句“MOVDX,1234H”中目标寄存器为DX 且立即数为一个字长,因此,可从80x86指令 与操作码表中查出“w=1,rrr=010”,从该条指令翻译得到的可执行机器码为BA3412(对 应二进制码101110100011010000010010)。其中,立即数1234H 采用了大端模式② 存储。 同理,可从汇编代码翻译得出其他机器指令的机器码。 2)ARM 指令格式 ARM 架构中有两种主要的指令体系,即32位的ARM 指令以及16位的Thumb指令。 Thumb指令体系是ARM 指令体系的压缩形式的子集,它并不完整,但可以减少代码量。 以32位的ARM 指令为例,典型编码格式如图3.4所示。其基本格式为 {}{S},,{} 其中,opcode为操作码,condition为执行条件(如EQ、NE、CS/HS等),S表示指令操 ① ② 2010年,加利福尼亚大学伯克利分校研究团队需要设计一款新的CPU,但ARM、MIPS、x86等商用指令集架构 均涉及知识产权或高昂成本,为此自行设计了这套全新的RISC-V指令集。其特点在于:免费开源,技术中立;采用简洁 至上的设计哲学,架构简单,基础指令仅47条;易于移植、可实现模块化设计。 数据在存储器中有两种主要存放模式。若数据的高字节保存在存储器的低地址中,而数据的低字节保存在高 地址中,称为大端(Big-Endian)模式或MSB(MostSignificantByte)模式;若数据的低字节保存在存储器的低地址,而高字 节保存在高地址,则称为小端(Little-Endian)模式或LSB(LeastSignificantByte)模式。 作是否影响当前程序状态寄存器(CPSR)的值,Rd 和Rn 分别为目标寄存器和第一个操作 数的寄存器,_d为第二个操作数;同时,<>表示该项在指令中不可或缺,{} shifteroperan 表示指令的可选项。同样,查询ARM 指令表可知汇编语句“MOVR1,#0x64”和 “MOVEQR0,R1”的机器码分别为E3A01064 和01A00001 。 图3. 4 典型的32 位ARM 指令的典型编码格式 3)MIPS32 指令格式 图3.5为3个基本的32 位MIPS 指令格式,R为寄存器指令格式,I为立即数指令格 式,opcode为操作码, pcode值均为 J为跳转指令格式。其指令格式中,所有R型指令的o0;s、t分别为第一个、第二个源操作数所在的寄存器编号,d为目的操作数的寄存器编号; rrrshamt用于指定移位指令进行移位操作的位数,在非移位指令中设为0。同样,根据 MIPS32 指令表,可以翻译出汇编指令的机器码,如立即数加法指令“ 2,” 的机器码为202200C8 。 addi$r1,$r200 图3. 53 个基本的32 位MIPS 指令格式 4)RISC-V指令格式[26] 基本的RISC-V指令具有固定的32 位长度,且必须进行32 位边界对齐。但是,标准的 RISC-V编码机制设计扩展了变长的指令,每条指令长度为16 位指令字的整数倍且必须在 16 位边界处进行对齐,如图3.7给出了RV32I 指令集中的4种基本指令格式。 6所示。图3. RV32I 中的32 是指31 个通用寄存器的宽度为32 位,-寄 I表示整数操作。R类型为寄存器 存器操作指令,oad指令,tore指令,U类型为长立 I类型为短立即数和访存lS类型为访存srrifunc 即数操作指令。其中,s、d分别代表源寄存器和目的寄存器,mm 表示立即数,t代表 具体操作的类型,如加、减、比较等。类似地,RISC-V规范还定义了RV64I 、RV128I 和用于 嵌入式系统的RV32E 等基础指令集以及RV32/64G① 等扩展指令集。 ① G表示通用指令集,包括了IMAFD 特性。其中,F和D分 I表示整数,M表示整数乘法,A表示原子内存操作 , 别表示单精度和双精度浮点数 。 71 图3.V指令长度编码 6 RISC 图3. 7 RV32I 指令集中的4种基本指令格式 需要说明的是,RV32E 采用与RV32I 相同的指令集编码,但整数寄存器的数量被减少 为16 个,以减小核的体积和功耗。与这一改动相对应的是,需要采用一个不同的调用约定 以及应用程序二进制接口(ApplicationBinaryInterface,ABI )。特别地,RV32E 仅与软浮 点调用约定一起使用。相关组织也正在考虑设计跨RV32I 和RV32E 运行的应用程序二进 制接口等。总之,RV32E 目前仍是一个处于演化过程中的架构。 1.典型处理器架构 3.2 1. 冯·诺依曼体系结构 冯·诺依曼体系结构(vonNeumannarchitecture)是一种将程序指令和数据存储在同 一存储器,并使用同一套总线传输的计算机体系结构,用于实现通用图灵机,也被称为 冯·诺依曼模型(vonNeumannmodel)或普林斯顿体系结构(Princetonarchitecture)。在 冯·诺依曼体系结构中,一条指令的执行过程包括取指令、指令译码、执行指令,强调了顺序 执行指令的特点。由于程序指令和数据分别存储在同一存储器的不同物理位置,因此,程序 指令和数据具有相同宽度,且取指令和取操作数要以分时复用的方式在同一套总线上进行。 冯·诺依曼体系结构的处理器是设计冯·诺依曼体系结构计算机的基础。对于任一冯·诺 依曼体系结构处理器而言,其主要包括如下组件: (1)一个存储器,实现程序指令和数据的存储。 (2)一个控制器,控制程序的运行。 (3)一个运算器,用于完成算术和逻辑运算。 (4)输入和输出设备,用于进行人机交互和通信。 早期的微处理器大多采用冯·诺依曼体系结构设计,典型的如Intel公司的x86 系列微 72 处理器。在嵌入式处理器领域,TI公司的MSP430处理器、MIPS公司的MIPS处理器也都 采用了冯·诺依曼体系结构。ARM7处理器采用的ARMv4T结构就是冯·诺依曼体系结 构[27], 8所示, 乘法器、移位器)、控制程序运 如图3.其核心逻辑包括32位的运算器(ALU 、 行的控制器及一组寄存器,同时具有一套32位的地址总线和32位的数据总线。 图3. 8 ARM7处理器采用了冯·诺依曼体系结构 复用总线进行串行的指令、数据访问会导致冯·诺依曼瓶颈(vonNeumann botleneck),数据吞吐量将制约整个计算系统的性能,而且在处理器速度越快时问题越是严 重。约翰·巴科斯①曾在图灵奖获奖感言《能否将编程从冯·诺依曼风格中解放出来?》 ① 约翰·巴科斯(JohnWarnerBackus,1924—2007),美国计算机科学家,FORTRAN语言发明人之一,提出定义 形式语言语法的记号法BNF,发明函数级编程概念及FP语言,1977年获图灵奖。 73 (CanProgrammingBeLiberatedfromthevonNeumannStyle?) 中曾提到:“ 瓶颈不仅是 数据传输的瓶颈,更重要的也是使我们的思考方法局限在‘一次一字’模式的智力瓶颈,不能 鼓励我们关于任务本身更广泛地思考。由此,编程工作主要是大量字符数据通过冯·诺依 曼瓶颈的规划和细节描述,字符传输更关心的是如何找出数据而不是数据本身的特征。近(”) 年来,高速缓存、多线程、RAMBUS 以及分支预测算法等技术已被广泛应用于缓解冯·诺 依曼瓶颈问题。 2. 哈佛体系结构① 哈佛体系结构(Harvardarchitecture)是指采用独立的物理存储器分别存储程序指令与 数据,并通过两套总线进行独立传输,是冯·诺依曼体系结构的延伸。哈佛体系结构的计算 机由CPU 、非易失的程序存储器和易失的数据存储器组成。由于程序存储器和数据存储器 独立编址且采用独立的总线,该体系结构可以提供更大的存储器带宽,实现更为高效的指令 流水机制,也使得数据的移动和交换更加方便。哈佛体系结构的这一优点使其非常适合设 计运算量大、运算速度和数据吞吐量要求高的数字信号处理器。 目前,采用哈佛体系结构的微处理器非常多。例如,ne- Itl公司的MCS②51 系列处理器 内部有独立的程序存储器和数据存储器,类似的还有Microchip的公司PIC 系列、摩托罗拉 公司的MC68 和MPC860 系列、Zilog公司的Z8 系列、ATMEL 公司的AVR 系列以及 ARM 公司的ARM9 、ARM10 、9、10 分别为采用哈佛体系结构 ARM11 处理器等。图3.图3. 的ARMCortex-M3 嵌入式处理器和摩托罗拉MPC860 嵌入式处理器。由图3. 9可知, Cortex-M3 处理器采用两套独立的地址总线和数据总线访问外部程序存储器和数据存储器; 图3.ortex-M3 嵌入式处理器 9 采用哈佛体系结构的ARMC ①哈佛体系结构源于哈佛大学1944 年研制的HarvardMarkⅠ 机电型可编程计算设备。 ② MCS:Micro-ControlSystem,微控制系统的缩写。 74 图3. 10 采用哈佛体系结构的摩托罗拉MPC860 嵌入式处理器 MPC860 处理器中不但具有两套存储器和总线,还采用了独立的指令Cache、指令MMU① 和数据Cache、数据MMU 。 当然,哈佛体系结构也存在非常明显的缺点。哈佛体系结构较冯·诺依曼体系结构需 要更多的地址线和数据线,这使得处理器的设计以及外设连接与扩展的难度都大为增加。 因此,在复杂处理器的设计中,常常通过在处理器内部使用独立的数据Cache和指令Cache 提高指令执行的效率,即,在处理器内部逻辑中使用哈佛体系结构,而外部仍然使用冯·诺 依曼体系结构。 图3.为 11 给出了一种改进的哈佛体系结构。它保持了哈佛体系结构的独立存储特点, 程序指令和数据采用两个独立的存储单元,同时采用了分时复用的地址总线和数据总线。 显然,改进的哈佛体系结构在存储特性上与哈佛体系结构一致,实现了指令、数据的独立存 储;而在总线特性上,它则与冯·诺依曼体系结构相似,降低了硬件逻辑复杂性以及对外围 设备连接和处理的要求。在部分改进型哈佛体系结构处理器中,还在两个存储器之间增加 了公共总线,允许数据存放在程序存储器中,提高了处理器访问数据的灵活性。在改进型哈 图3. 11 一种改进的哈佛体系结构 ① MMU:MemoryManagementUnit,存储管理部件,CPU 中用于实现虚拟内存管理的组件,提供硬件机制的内 存访问权限检查。 75 佛体系结构基础上,进一步增加数据总线的数量,还可以形成更为先进的改进型哈佛体系结 构。例如,TI公司的TMS320VC5404/5407DSP处理器的内核逻辑中就采用了一套独立 的程序存储总线和三套数据存储总线。 另外,对于多核处理器还有超标量体系结构(SuperScalarArchitecture,SSA )、超长指 令字(VeryLargeInstructionWord)等支持指令并行的处理器体系结构。在保证结果正确 的前提下,超标量体系结构的处理器采用了复杂的硬件逻辑,可以非顺序方式发射、执行多 条指令,典型方式有顺序发射顺序完成、顺序发射乱序完成、乱序发射乱序完成等。在超长 指令字体系结构中,更为复杂的编译器在编译程序时可以将多条可并行执行的指令组合成 一条长的指令,执行时再将长指令分解并将各个部分分配到相应的执行单元上执行。 3.嵌入式处理器的类型及特点 2 作为微处理器家族的一个重要分支,嵌入式处理器自20世纪70年代中后期诞生以来 已经经历了飞速的发展,而且其体系结构和形态也在随着嵌入式系统应用领域的丰富而不 断演化和细分。如前所述,集成电路技术是微处理器设计的基础,而微处理器的出现则是嵌 入式系统发展的一个重要里程碑。 自20世纪70年代以Intel4004和4040为代表的第一代微处理器出现以来,微处理器 在体系结构的演化、工艺的发展(如COMS 、HCMOS )、集成度和处理速度的提升、低电压节 能运行等方面取得了令人叹为观止的进步。例如,早期Intel4004仅是具有2200多个晶体 管、每秒执行90000次指令操作的4位微处理器,而目前新型的微处理器则已经单片集成 数十亿个晶体管,具有32位、64位字宽,执行速度可达数千MIPS①。目前,嵌入式处理器范 畴呈现出性能各异、用途多样、成百上千种嵌入式处理器并存的局面。本节将对主要类型的 嵌入式处理器及其特性进行归纳和分析。 3.1 嵌入式微控制器 2. 单片微型计算机(SingleChipMicrocomputer,SCM,简称单片机)是一种将CPU 、RAM 、 ROM及I/O等主要功能部件集成于一块集成电路芯片上的处理器类型,其随着Intel公司 1971年制造出的4004微处理器芯片而诞生,几十年来已演化出很多架构并在各个领域得 到广泛应用。单片机又称微控制器(MCU),是为快速构建控制类型的设备提供的一种核心 控制单元。早期的代表性微控制器有NationalSemiconductor公司的4位COP400 、Intel 公司的8位8048和Fairchild公司的8位F8微控制器等。经过几十年的发展,现在各种类 型的8位、16位、32位微控制器已被广泛使用,典型的有源自Intel公司的MCS-51系列、意法 半导体(ST)公司基于ARMCortex-M核的STM32系列、微芯科技公司的PIC32 、ATMEL公 司的AVR 、Imagination公司的MIPSM6200以及M6250 、IBM公司的PowerPC440GP等。 从构成的角度,微控制器中除了CPU以外,在片内通过内部总线连接、集成了丰富的 外设资源,如程序/数据存储器、定时器/计数器(Timer/Counter)、中断控制器以及串行/并 行通信接口与I/O接口等, 12所示的处理单元。在实际中, 为快速设计系统提供如图3.面 ① MIPS(MilionInstructionsPerSecond,每秒百万条指令),是评价处理器速度的重要指标。 76 向不同领域、不同层次应用的微控制器,其内部集成的组件类型和数量存在差异。以MCS51 系列8位微控制器为例,其内部逻辑与图3.较为简单。而PIC 等32 位微控 12 基本一致, 制器等还可能提供了ADC(Aualog-to-DigitalConversion,模数转换)、PWM(PwlseWidth Modulation,脉冲宽度调制)模块, /O接口。图3. 以及更为丰富的I13 给出了ATMEL 公司的 32 位微控制器AT91SAM7L 的逻辑结构,其以ARM7TDMI 处理器为核心并集成了多种 类型的逻辑组件与外设[28]。微控制器内部集成的资源越丰富,设计硬件时所需的电路扩展 就越少,就越简洁高效。 图3. 12 微控制器基本逻辑结构 图3. 1332 位微控制器AT91SAM7L 的逻辑结构 在分类上,可根据存储及总线结构将微控制器分为冯·诺依曼体系结构和哈佛体系结 构。微控制器根据用途又可分为通用型和专用型。通用型微控制器具有开放的开发资源, 允许用户根据应用需要进行软硬件逻辑的扩展和定制;而专用型微控制器则更类似于一个 专用芯片,如打印机控制器等。另外,片内程序存储器类型也是对微控制器进行分类的一个 重要依据。在MCS-51 系列微控制器中,就分为8031(无ROM 型)、8051(ROM 型)、8751 (EPROM 型)、8951(E2PROM 型)以及89S51(Flash型,支持ISP①)等。总体上,微控制器 ① ISP:In-SystemProgrammable,在线可编程,是一种在芯片正常工作时直接对其进行逻辑重写的技术。 77 具有一些共性特点,可概括为计算核的指令数较少、位处理指令较丰富、组件集成度较高、提 供多种I/O接口、低功耗、低成本、使用方便以及快速构建应用系统等。同时,微控制器也 存在供电电压较单一、计算性能通常不高、引脚数量较少等缺点。 在目前的嵌入式应用中,微控制器也是使用最为广泛的一类处理器,应用领域覆盖消费 电子、信息家电、工业控制和汽车电子等。不同领域对微控制器的特性要求有所不同。例 如,对于智能玩具等功能较为单一的消费电子产品而言,需要低功耗、低价格的微控制器;信 息家电领域需要可靠性高的微控制器;而在工业控制、汽车电子等领域,主要要求微控制器 具有良好的可靠性、安全性和高性能。在实际硬件选型过程中,设计者一般要坚持“成本优 化、功能/性能够用、简洁易用”的原则,尽量选择芯片性能及其片内资源接近功能需求的微 控制器,以提高设计效率和产品的性价比。 2.嵌入式微处理器 3.2 不同于面向快速构建控制系统需要,提供集成度高的计算核心的微控制器设计理念,由 通用计算机的微处理器演化而来的嵌入式微处理器(MPU)主要面向结构更为复杂、功能更 为丰富或性能要求更高的嵌入式应用,具有良好的通用性及可扩展性。几十年来,嵌入式微 处理器的发展也呈现出百花齐放的局面,有数十上百种体系结构和成百上千种类型,典型的 如x86(386EX )、ARM 、MIPS 、PowerPC 、SPARK 、SuperH(SH)以及基于RISC-V的相关系 列等。 嵌入式微处理器以中央处理单元为核心,其通常采用RISC 指令集、多级流水体系、32 位/64 位字宽、数据Cache和指令Cache,主频可达数百乃至上千兆赫兹。在多数嵌入式微 处理器内部,通常还根据领域需要扩展、集成了增强计算能力和可扩展能力的组件,如浮点 协处理器单元、MMU 、DMA 、高性能总线控制器、在线调试逻辑等。总体上,嵌入式微处理 器的设计思想、逻辑结构以及性能指标等方面都与通用微处理器比较接近。二者的主要区 别在于,通用微处理器以计算速度和稳定性为主要性能评价指标,而嵌入式微处理器的设计 还必须针对一定的领域特征和应用特性,如移动终端、通信服务、流媒体处理等。不同的嵌 入式微处理器常常拥有不同的体系、资源和性能,而且,即使在同一体系中也可能具有不同 的时钟频率和数据总线宽度,集成不同的外设与接口。另外,嵌入式微处理器的处理架构和计 算资源的数量与类型首先是面向领域裁剪(或定制)的,可以以更小的体积、功耗、重量乃至成 本满足某类应用或某个领域的系统需求。其次,嵌入式微处理器具有可靠性、功耗、工作温度、 湿度、抗电磁干扰、体积、封装形式等多维度的设计指标,较通用微处理器的要求更高。 除了不断提升芯片工作频率、优化处理逻辑、改造制程工艺之外,现代微处理器的体系 结构也在不断演化。在单一芯片内集成多个计算核形成的多核并行计算体系已成为微处理 器的主流设计架构。在多核嵌入式处理器中,多个同构或异构的计算核独立运行,各计算核 可以具有独立的高速缓存,计算核之间通过共享的二级缓存、内存及总线进行数据交互和操 作同步。这种多核的处理器体系结构有效抵消了加工工艺、工作频率以及芯片发热等方面 的瓶颈和限制,较多处理器体系结构具有更高的集成度、更小的体积和功耗,也使得摩尔定 律得以有效延续。总体上,嵌入式微处理器的特点可归纳为指令丰富、位处理指令较少、处 理速度快、可扩展性好、支持内存保护机制、寻址能力强、支持实时多任务、具有良好的中断 处理能力、可靠性高、功耗较低、通用性强、适合中高端应用等。 78 以32位MIPSM6250[29]低功耗处理器为例。M6250是一款中高端的嵌入式微处理 器,其逻辑结构如图3.提供一个协处理器、 14所示。M6250内部采用了6级流水结构, 支持 32位MIPS32指令集和精简的microMIPS指令集、整合SIMD和DSP模块、支持64KB的 一级指令/数据Cache,具有可选的SPRAM(ScratchPadRAM,高速暂存存储器)接口、可选 的数据纠错组件ECC(ErorCorectCode),具有快速重编址缓冲器TLB(快表)的MMU 和APB(AdvancedPeripheralBus,高级外围总线)、AXI3高速可扩展总线接口等。M6250 的架构和资源配置表明嵌入式微处理器的逻辑和组件设计主要是围绕提升处理器计算性能 并增强计算系统架构的可扩展性进行的,而且并未像微控制器一样集成其他面向I/O操作 的硬件组件。 图3. 1432位MIPSM6250嵌入式微处理器的逻辑结构 又如,SiFive公司基于RISC-V指令集设计的U74-MC复杂核包括一个S7(基于 RV64IMACB指令集)和4个U74(基于RV64GCB指令集,且提供一个符合IEEE754— 2008标准的浮点处理单元)的64位RISC-V核,以及支撑这些计算核所需的核级本地中断 管理器(CoreLocalInteruptor,CLINT )、平台级中断控制器(Platform-LevelInterupt Controler,PLIC )、物理内存保护(PhysicalMemoryProtection,PMP )、基于JTAG的调试 单元、64位/128位AXI4总线等。具体请参阅文献[30],这里不再赘述。 在实际设计中,嵌入式处理器的选型仍要以应用需求为主要依据,需要综合考虑功能、 性能、功耗、尺寸、封装、成本及生命周期等诸多因素,在够用原则下择优选用。由于嵌入式 微处理器的I/O集成度低,因此,硬件设计的重点是以嵌入式微处理器为核心进行外部I/O 的扩展。嵌入式微处理器有两种主要应用形式:一种是以微处理器为中心,设计面向具体 产品型号的嵌入式系统,如智能手机、机顶盒等;另一种则是面向工业控制、信号处理等某个 行业或某一类应用,设计为集成了特定接口、软件可编程并具有一定领域通用性的单板计算 机模块。如前所述,这种形式较传统的工业控制计算机而言具有体积小、重量轻、成本低、可 79 靠性高等优点。 2.数字信号处理器 3.3 信号是一个特定形式的能量单元,是信息的物理表现,或者说载体。在物理世界中,任 何随时间或空间变化的量都是潜在的信号,其或者表示一个物理系统的状态信息,或者是不 同观察对象之间传达的消息,其形式可为声、光、电等。在电子与通信技术领域,信号被抽象 表示为传递有关现象的行为或属性信息的函数,在电子设备间进行传输收发。按照因变量 对时间的取值是否连续,信号一般被分为模拟信号和数字信号。数字信号通常是对模拟信 号进行采样、量化和编码后获得的。信号处理是很多电子装置的重要功能,其通过对变换到 数字域的信号进行压缩、编解码、分析或识别等操作,从输入信号中滤除噪声或将信号变换 为易于处理、传输、分析和识别的形式。数字信号处理是信号处理的重要分支。 由模拟信号处理器(AnalogSignalProcesor,ASP)和离散逻辑发展而来的数字信号处 理器(DigitalSignalProcesor,DSP)是一种专门用于数字信号处理的微处理器,最早以 20世纪70年代末德州仪器(TI)公司的Levinson滤波器芯片和贝尔实验室的Mac4型DSP 为标志。DSP的主要特点是针对数字信号处理特性设计、优化了专门的硬件逻辑。图3. 15给 出了一个DSP的基本逻辑结构。图中,DSP的计算核不仅包括传统微处理器中的ALU,还 增加了乘法器(Multiplier)、移位器(Shifter)及丰富的数据寄存器、确保多级指令流水正确 性的程序定序器、两套分开的数据总线和地址总线(可访问独立的数据存储器和程序存储 器)以及专门的数据地址产生器(DataAddresGenerator,DAG)等。这种设计方式允许 DSP在单个时钟周期内就可完成一个在MCU或MPU上需要多条指令和多个周期才可以 完成的操作。这些特殊的硬件设计都充分体现了对数字信号处理的密集数据、SIMD 、矩阵 操作等数学计算特征的考虑。当然,作为一款嵌入式处理器,DSP芯片内也可集成定时器/ 看门狗、DMA等外围电路组件和接口,以提高芯片的集成度、可扩展性和可靠性。 80 图3. 15 DSP的基本逻辑结构 图3.16是ADI公司ADSP-21532DSP的片内逻辑结构[31]。该芯片中集成了一个 300MHz的高性能MSA(MicroSignalArchitecture,微信号体系)DSP计算核,片上存储资 源包括16KB指令SRAM/Cache、32KB指令SRAM 、32KB指令ROM 、32KB数据SRAM 以及4KB的ScratchPadSRAM,一个DMA控制器和一个用于内存保护的MMU 。同时, 该DSP还集成了3个定时器/计数器、实时时钟(RTC )、看门狗定时器(WDT )、并行外设接 IrGPIO) 口(PPI )、支持红外(DA标准)的异步收发接口(UART )、通用I/O接口(以及片上 JTAG测试与仿真接口等资源。在如图3.有两个16位 16所示的MSADSP计算核逻辑中, 的乘加器(Multiplier/Acumulator,MAC )、两个40位的ALU 、4个8位的视频ALU以及 一个40位的桶型移位器,可以处理8位、16位、32位格式的数据。地址计算单元提供了两 套数据地址生成器(DAG),以实现并行的内存操作。一个多端口寄存器文件包括4组32 位的索引(I)、修改(M)、长度(L)及基数(B)寄存器和8个附加的32位指针寄存器。控制单 元提供了定序器、对齐、解码及循环缓冲器。从这些资源配置和逻辑设计就可以看出DSP 硬件在数字信号处理方面的特点与优势。 图3.21532DSP的片内逻辑结构 16 ADSP 总体来说,DSP芯片通常都采用诸多优化的软硬件设计方法和技术,以提高处理能力, 具体主要包括如下几方面。 (1)计算核基于多级指令流水体系结构设计;采用多硬件乘法器单元,可在一个时钟周 期内并行完成多个乘加运算;提供硬件控制循环,降低循环操作的开销。 (2)指令集中采用SIMD 、VLIW以提升指令级的并行性;提供MAC操作指令以及与 模寻址相关的指令等;面向数据处理提供了饱和算子、定点算子及单周期操作指令。 81 (3)存储体系主要采用哈佛体系结构并支持多数据存储器,可以实现并行的多指令和 多数据读取;可提供DMA接口,以实现快速存储器访问。 (4)在寻址机制上,计算核采用专门的数据地址产生器;支持常见的寻址模式,也提供 了特定的优化寻址模式,如自动增量寻址、循环寻址以及用于快速傅里叶变换(FastFourier Transform,FFT)的位翻转寻址,具有非常好的直接数据访问能力。 就分类而言,根据DSP所支持的数据格式是定点型还是浮点型,可以将其分为定点 DSP处理器和浮点DSP处理器,字长可以有16位、24位和32位。DSP所能支持的数据格 式和字长决定了其处理的精度和动态范围,同时也决定了DSP的成本、功耗以及软件开发 复杂度。常见的DSP主要为定点DSP,如TI公司的TMS320C1x/C2x、AD公司的 ADSP21xx系列等,这是因为信号处理一般不需要浮点型的精度。对于定点DSP,编程时 要仔细考虑信号幅值和中间结果,在避免溢出和尽可能减小舍入误差的前提下,使精度和动 态范围最大化。表3.1给出了16位定点数在不同小数点位置(Qn )时的数值范围和精度。 浮点DSP,如TITMS320C3x、MotorolaMC96002,较定点DSP具有更高的处理精度和复 杂度,适合科学运算及其他高精度应用。不同的DSP可采用的浮点数格式有IEEE754标 准定义的(扩展)单精度、扩展)双精度格式以及TI公司定义的TMS320C3x浮点数格式 等。大多数32位浮点DSP具有40位的运算单元,并可以进行扩展单精度格式的浮点运 算。根据用途,可以将DSP分为通用DSP和面向数字滤波、卷积及FFT等特定运算的专 用DSP 。例如,将专门用于图像处理的DSP称为图像信号处理器(r, ImageSignalProcesoISP )。根据核数量,还可以将DSP分为单核DSP和多核DSP 。总体上,DSP的特点可归纳 为计算核体系优化、采用哈佛体系结构、突出的数学计算性能、高集成度等。 表3. 1 16位定点数在不同小数点位置时的数值范围和精度 Qn 数值范围精度 0 -32768~32767 1 1 -16384~16383.5 0.5 2 -8192~8191.75 0.25 3 -4096~4095.875 0.125 4 -2048~2047.9375 0.0625 5 -1024~1023.96875 0.03125 6 -512~511.984375 0.015625 7 -256~255.9921875 0.0078125 8 -128~127.99609375 0.00390625 9 -64~63.998046875 0.001953125 10 -32~31.9990234375 0.0009765625 11 -16~15.99951171875 0.00048828125 12 -8~7.999755859375 0.000244140625 13 -4~3.9998779296875 0.0001220703125 14 -2~1.99993896484375 0.00006103515625 15 -1~0.999969482421875 0.000030517578125 82 83 3.2.4 可编程逻辑器件 顾名思义,可编程逻辑器件(ProgrammableLogicDevice,PLD)是电路逻辑可被动态编 程和改变的一类通用集成电路。典型的PLD 包括可编程阵列逻辑(ProgrammableArray Logic,PAL)、可编程逻辑阵列(ProgrammableLogicArray,PLA)、通用阵列逻辑(Generic ArrayLogic,GAL)、复杂可编程逻辑器件(ComplexProgrammingLogicDevice,CPLD)以 及现场可编程门阵列(FieldProgrammableGateArray,FPGA)等。相较于CPU、GPU 及 各类ASIC专用器件,其在片内提供了面向应用需求进行逻辑电路编程的定制能力,是集成 电路技术的一次重要飞跃,使得硬件逻辑的快速研制、动态重构、智能演化等成为可能。 1.PAL与PLA PAL是一个逻辑门的可编程阵列,门阵列采用AND-OR(与-或)逻辑进行配置。在 PAL中,通常具有一个可编程的AND阵列和一个固定的OR阵列,OR阵列中的每一个或 门从一组与门中获取输入。这意味着,所有与门的输出并不会对应到任何一个或门。与 PAL不同,PLA 中既包括一个可编程的AND阵列,还提供一个可编程的OR阵列。其中, AND阵列用于实现SOP(SumofProduct,积之和)表达式的乘积项,OR 阵列则用于对乘 积项求和。显然,PLA 比PAL更为复杂,其逻辑编程能力也更强大。PAL和PLA 技术为 复杂可编程器件的发展奠定了重要基础。 图3.17给出了4路输入的PAL和PLA 结构。其中,PAL有4个与门和两个或门。以 BCD码转格雷码逻辑设计为例,图3.18给出了一个PAL4位译码器的逻辑结构。编程所 得的译码器以式(3.1)所示的逻辑运算规则将BCD码(4位,分别用A、B、C、D表示)转换到 格雷码(4位,分别用W、X、Y、Z表示)。 图3.17 4路输入的PAL和PLA结构 W =A +BD +BC X =B..C Y =B +C Z =..A..B..CD +BCD +A..D +..BC..D ì . í ... ... (3.1) 图3. 18PAL4 位译码器的逻辑结构 2.CPLD CPLD 是采用CMOSEPROM 、EEPROM 、Flash和SRAM 等编程技术设计的可编程 逻辑器件,它是以PLD 为宏单元的可编程器件,门电路数量更多,也更为复杂。在CPLD 内 部,多个类似于PAL 和PLA 的逻辑块宏单元通过可编程互连通道进行连接,并通过可配置的 I/O控制块提供对外交互接口。一般而言,CPLD 器件的核心包括逻辑阵列块、可编程互连通 道和I/O控制块3个主要部分。具有4个PAL 块的CPLD 的典型逻辑结构如图3. 19 所示。 84 图3. 19 具有4个PAL块的CPLD的典型逻辑结构 以图3.20所示AlteraMAX系列的CPLD为例,其逻辑包括了多个逻辑阵列块(Logic ArayBlock,LAB )、片内互连通道(可编程互连阵列,ProgrammableInterconnectedAray, 图3.aMAX系列CPLD的体系结构 20 Alter 85 PIA)以及I/O块。其中,逻辑阵列块由局部阵列(LA)和宏单元(marcocel)组成。LA提供 了大量可编程AND阵列,而类似于PAL的宏单元则由固定的OR阵列、用于生成额外逻 辑项的逻辑扩展器(logicexpander)以及用于减少所需乘积项数量的可编程取反逻辑 (ProgrammableInversion)等组成。 表3.2给出了AlteraMAXⅡ系列CPLD的特征参数[32]。CPLD的特点在于逻辑非易 失、启动速度快、较高密度和低功耗,常用于通用CPU 、DSP等难以完成的时序组合逻辑、大 运算量的数学计算等。 表3.aMAXⅡ系列CPLD 的特征参数 2 Alter 特征参数EPM240/ Z EPM570/ Z EPM1270 EPM2210 密度和 速度 宏单元192 440 980 1700 引脚间延迟/ns 4.7,7.5 5.4,9.0 6.2 7.0 体系 特征 用户Flash/kb 8 边界扫描JTAG 有 快速输入寄存器有 上电可编程寄存器有 JTAGISP 有 实时ISP 有 I/O 特征 I/O多电压/V I/O电源线数 1.5,1.8,2.5,3.3 2 1.5,1.8,2.5,3.3 2 1.5,1.8,2.5,3.3,5.0 4 1.5,1.8,2.5,3.3,5.0 4 最大输出数80 160 212 272 32位,66MHzPCI 无无有有 其他特性LVTTL/LVCMOS,可编程转换速率,施密特触发器,可编程上 拉电阻,可编程GND引脚,开漏输出,总线保持 3.FPGA FPGA也是被广泛使用的典型可编程半导体器件,其内部用户可编程的单元包括输入 输出模块( InterconnecIOB )、可配置逻辑块( BlockRAM,BRAM) 和内 Input/OutputBlock,ConfigurableLogicBlock,CLB) 部布线资源(t),同时可提供专用的块内存(以及数字时钟 管理(DigitalClockManagement,DCM)模块、时钟延迟锁相环(Delay-LockedLoop,DLL) 和DSP 、CPU核等系统级的功能组件。图3.linxFPGA的逻辑结构。FPGA 21所示为Xi 以集成电路形式存在,同时以硬件描述语言(Verilog或VHDL)编程的方式进行逻辑电路 设计和布局,这使得FPGA具有显著的软硬件一体化的特性,主要包括:允许通过下载配置 位流改变功能,定制外设接口;支持有限状态机、数字逻辑、定时和存储器控制;可实现与其 他处理器的高速通信接口;支持高速且硬件级并行的信号处理和控制算法;等等。FPGA的 出现为嵌入式处理器、嵌入式硬件以及嵌入式系统的设计开创了新的模式。例如,基于 FPGA的复杂电路逻辑设计已经成为广泛采用的集成电路设计、验证手段。 86 87