通用嵌入式32位RISC CPU设计概述

2012-03-19 13:02牛英山
微处理机 2012年5期
关键词:指令集流水线寄存器

牛英山,王 爽,杨 光

(中国电子科技集团公司第四十七研究所,沈阳110032)

1 前言

通用嵌入式32位RISC CPU具有体积小、功耗少、成本低的优点,作为控制核心在SoC设计领域得到了非常广泛的应用。

2 通用32位RISC CPU简介

在嵌入式领域,主流的通用32位RISC CPU有ARM、MIPS、LEON、Nios II、PowerPC、SPARC 等几大系列。

2.1 ARM系列

目前主要有 ARM7(ARMv4T)、SecurCore(ARMv4T/v6M/v7M)、ARM9(ARMv4T)、ARM9E(ARMv5TEJ)、 ARM10(ARMv5TE)、 ARM11(ARMv6TE)、ARM Cortex-A/R/M(ARMv7-A/R/M)等几大系列。ARM采用RISC体系架构,微处理器一般具有如下特点:

·体积小、低功耗、低成本、高性能;

·支持 Java(8位)/Thumb(16位)/ARM(32位)三套指令集;

·大量使用寄存器,指令执行速度更快;

·大多数数据操作都在寄存器中完成;

·寻址方式灵活简单,执行效率高;

·指令长度固定。

2.2 MIPS系列

目前主要有MIPS32K和MIPS64K两大系列;MIPS处理器主要有以下技术特点:

·MIPS的设计保持纯粹的RISC风格;

·占用更小的芯片面积,功耗方面稍大一些;

·具有32位和64位两种架构的指令集;

·核内包含大量寄存器、指令数和字符;

·可视的流水线延迟间隙;

·多发射核技术;

·MIPS是开放式的架构,用户可以在开发的内核中加入自己的指令。

2.3 LEON系列

目前主要有LEON2、LEON3、LEON4三大系列。LEON软核是一个与SPARC V8兼容的整数处理单元IU(Integer Unit),LEON2是5级流水线,LEON3和LEON4是7级流水线。LEON微处理器具有以下特点:

·流水线结构;

·具有硬件乘法/除法和MAC功能;

·独立的指令和数据Cache(哈佛结构);

·可根据需求灵活配置Cache的容量;

·片上总线使用AMBA2.0规范,支持APB和AHB标准;

·具备一些片上常用外设(如UART、中断控制、I/O接口、实时时钟、看门狗等)。

2.4 Nios系列

目前主要有Nios、Nios II两大系列。

Nios II处理器是一个通用的32位RISC处理器内核,其主要特点如下。

·完全的32位指令集、数据通道和地址空间;

·可配置的指令和数据Cache;

·32个通用寄存器;

·32个有优先级的外部中断源;

·单指令的32×32乘除法,产生32位结果;

·多种片上外设,并能够与片外存储器和外设接口;

·具有硬件协助的调试模块,可以在IDE中控制处理器完成各种调试工作,如开始、停止、单步和跟踪等;

·在不同的Nios II系统中,指令集结构(ISA)完全兼容;

·性能达到150DMIPS以上。

2.5 PowerPC系列

目前主要有 PowerPC 40x、60x、70x、90x 四大系列;

PowerPC架构具有以下特点:

·32个integer/float registers组;

·指令load/store在GPRS与FPRS之间存取数据;

·统一定长的精简指令格式易于实现超标量流水线;

·最多支持4个operands,运算结果典型存放在first operand;

·IEEE-754标准浮点数,单精度(singlefloat)和双精度(double-float)指令运算;

·PowerPC架构允许实现某一功能为特定的硬件平台;

·用户层指令的存取缺省在caches执行。特殊指令跨越caches存取;

·支持big-endian和little-endian模式;

·支持64-bit地址模式。

2.6 SPARC系列

目前主要有v7、v8、v9三大系列。SPARC微处理器特点:

·SPARC微处理器具备精简指令集;

·支持32位/64位数据精度;

·架构运行稳定;

·可扩展性优良;

·体系标准开放;

·环形结构的寄存器窗口技术。

3 设计思路

通用嵌入式32位RISC CPU设计主要包括以下几大方面。

3.1 设计规格定义

首先是与用户进行沟通,了解用户的具体需求,并尽可能将所有的内容写入文档。其中关键的部分主要是产品的系列规划(如1代、2代、3代等)、性能指标(如频率、面积、功耗等)、编程模型(如调试模式、正常模式、特权模式等)、指令集(如指令种类、指令编码格式、指令助记符、指令寻址方式、版本规划、内部寄存器数量、功能定义和名称、可扩展性说明、是否支持浮点预算等)、存储器体系架构(哈佛体系架构或是冯·诺依曼)、总线接口协议、硬件调试方式(如串口调试、JTAG调试等)、存储器管理单元、存储器保护单元、高速缓存CACHE、紧耦合存储器接口、写缓冲器、片上协处理器定义、片外协处理器接口、中断处理方式(硬件接口、同步还是异步、使能与禁止、优先级、响应过程和时间)、复位模式及行为、片外协处理器功能定义、片外协处理器指令集等。

3.2 指令集设计

指令集是微处理器的核心,主要包括指令种类(如算术运算类、逻辑运算类、乘法类、除法类、浮点预算类、数据传送类、比较类、散转类、其他等)、指令编码格式(操作码、操作数1、操作数2等)、指令助记符定义(MOV、ADD、SUB、MUL、DIV 等)和指令寻址方式(立即寻址、寄存器寻址、寄存器间接寻址、寄存器变址寻址、相对寻址等)、指令周期(哪些指令单周期、哪些指令多周期、指令数据相关周期)。通过设计,将所有指令的执行过程进行细化、归类和简化,为指令译码器的设计提供必要的理论依据,尤其是译码器输出信号的种类和数量。

3.3 系统架构设计

体系架构是实现微处理器的框架,尤其是对于不同指令集版本的实现更为重要。体系架构设计主要是数据通路和控制通路的规划。数据通路规划的重点是流水线组织,如采用流水线的级数(如5级、7级、8级等)、每级实现的功能(如取指、译码、发射、移位、执行、存储器、回写等)、流水线的结构相关(如数据前推、互锁、延迟槽等)、关键部件(如系统控制单元、指令译码器、ALU、寄存器组、乘法器等)在流水线中的位置等。控制通路规划的重点是根据指令的执行周期来设计控制状态机、解决流水线的数据相关和控制相关、中断和异常的处理等。

3.4 总线接口选择/设计

目前,在SoC设计中使用的片上总线主要有ARM的32位总线AMBA 2.0(AHB、APB)和64位总线 AXI 1.0/2.0,MIPS 的OCP 2.1,Nios II的 Avalon-Bus(Avalon-MM、Avalon-TRI、Avalon-MM、Avalon-MM)、PowePC 的 CoreConnect(PLB、OPB、DCR)以及Silicore的Wishbone总线。四种总线都是同步总线,使用时钟沿驱动和采样信号。总线的基本操作几乎没有区别,最大的区别在于提供的特性和规范的完整性。

总线接口可以选择当前的主流片上总线,并获取授权,同时也决定了整个SoC系统的总线规范以及与之配套使用的各种外围IP模块;还可以设计自己的总线规范,但必须有别于现有的总线协议,否则会侵权,并且要比现有的协议更好,否则也没有意义。因为现有的总线协议比较成熟,而且使用该协议的IP也有很多,新协议的完备性和正确性需要花费很长时间、投入大量的人力、物力和财力才会使之达到一定的实用化程度。

3.5 模块化分、子模块设计和验证

根据体系架构进行顶层模块划分,规定各个主要模块的功能以及主要的接口信号和时序关系,再将各主要模块进行细化,为子模块的RTL设计提供依据。

在进行子模块的RTL设计之前,先规定RTL的代码风格,以约束代码工程师的行为,并保证设计风格的一致性,便于设计的更新、修改和管理。

在进行子模块的RTL设计时,依据子模块的功能定义和接口定义,选取合适的逻辑结构,如加法器、减法器、乘法器、除法器、译码器等,同时在子模块中插入调试语句以便于查找出现的问题,再搭建对应的验证平台来进行子模块测试。整个过程采用的是自顶向下的设计方式,并使用自下向上的验证方式来保证设计的正确性。

3.6 系统整合与调试

根据微处理器的体系架构,将所有的功能模块整合在一起,构成一个功能比较完整的微处理器软核,并搭建一个测试平台进行系统整体的连接调试,主要是针对各个模块的基本功能以及系统的整体运作进行测试,从而保证系统的正确性。虽然在设计时已经进行了很详细的规划,但在系统整合后仍然会有很多问题出现,如信号数量、名称及时序定义不一致的情况。

3.7 系统级验证

在进行系统整合与调试之后,搭建以微处理器为核心的系统级验证平台。系统级验证平台实际上是一个模拟微处理器使用环境的SoC,包括硬件和软件两部分。硬件部分由微处理器以及与之配套的IP模块组成,构成SoC/MCU的主体。软件部分由测试程序以及结果分析、比较和处理模块构成,便于对微处理器进行调试。

3.8 FPGA原型验证

经过系统级验证的微处理器可以进行FPGA原型验证,两种验证也可以同时进行。原型验证的调试过程比较简单,而且没有系统级验证的调试方式便利,可以观察部分信号。FPGA原型验证的目的是加速验证过程,并通过模拟真实使用环境来发现设计中存在的缺陷,以此来完善微处理器的设计。搭建以微处理器为核心,且有外围IP的SoPC,并进行功能仿真,再将其使用FPGA开发工具(如Quartus II、ISE、Libero、SynplifyPro 等)进行综合、自动布局布线、生成位流文件,并下载到FPGA上运行。

经过基本调试后,可以调用对应IP的驱动程序来进行测试,之后将BootLoader(如Uboot、VIVI等)移植到系统上,为RTOS的移植做准备,再将嵌入式实时操作系统 RTOS(如 Linux、VxWork、UCOS-II/III、SymbianOS等)移植到系统上调试,最后再将应用程序添加到系统上运行。经过以上一系列验证后,微处理器的实用化程度将会大大增强,同时也会提高用户使用微处理器的信心和兴趣。

3.9 软件开发环境设计

软件开发环境是嵌入式微处理器使用过程中很重要的一部分,基本要求是具有支持汇编语言、C语言、C++等程序的编译、链接、软件仿真、调试方便(尤其是在线进行目标软件的调试)、软件界面友好、简单方便、灵活易用等特点,而且最好是提供与现有其它工具一样的调试功能。软件开发环境可以自行开发,周期可能较长,投入较大,维护成本较高;也可以在GNU提供的gcc等工具链的基础上进行二次开发,周期会缩短,投入较小,维护成本较低;还可以使用ACE提供的专业编译工具CoSy进行开发,周期会大幅度缩短,投入较大,维护成本较低,质量较高,更有利于产品的系列化发展。

4 结束语

以上只是对嵌入式微处理器的设计过程进行了简明扼要的描述,而且涵盖了主要方面,具体设计时还需要把每一过程进一步细化,才能达到设计目标。

[1] 杨硕.32位嵌入式微处理器一览[DB/OL].http://epson.eefocus.com/ayayayaya/blog/10-08/193975_00ab0.html.

[2] 田泽,张怡浩,于敦山,盛世敏,仇玉林.SoC片上总线综述[J].半导体技术,2003,28(11):11-15.

猜你喜欢
指令集流水线寄存器
基于Kubernetes的RISC-V异构集群云任务调度系统①
STM32和51单片机寄存器映射原理异同分析
3DNow指令集被Linux淘汰
Lite寄存器模型的设计与实现
流水线
移位寄存器及算术运算应用
实时微测量系统指令集及解析算法
报废汽车拆解半自动流水线研究
流水线生产杀死艺术
什么是AMD64

微处理机2012年5期

微处理机的其它文章
特约声明