牛英山,王 爽,杨 光
(中国电子科技集团公司第四十七研究所,沈阳110032)
通用嵌入式32位RISC CPU具有体积小、功耗少、成本低的优点,作为控制核心在SoC设计领域得到了非常广泛的应用。
在嵌入式领域,主流的通用32位RISC CPU有ARM、MIPS、LEON、Nios II、PowerPC、SPARC 等几大系列。
目前主要有 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位)三套指令集;
·大量使用寄存器,指令执行速度更快;
·大多数数据操作都在寄存器中完成;
·寻址方式灵活简单,执行效率高;
·指令长度固定。
目前主要有MIPS32K和MIPS64K两大系列;MIPS处理器主要有以下技术特点:
·MIPS的设计保持纯粹的RISC风格;
·占用更小的芯片面积,功耗方面稍大一些;
·具有32位和64位两种架构的指令集;
·核内包含大量寄存器、指令数和字符;
·可视的流水线延迟间隙;
·多发射核技术;
·MIPS是开放式的架构,用户可以在开发的内核中加入自己的指令。
目前主要有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接口、实时时钟、看门狗等)。
目前主要有Nios、Nios II两大系列。
Nios II处理器是一个通用的32位RISC处理器内核,其主要特点如下。
·完全的32位指令集、数据通道和地址空间;
·可配置的指令和数据Cache;
·32个通用寄存器;
·32个有优先级的外部中断源;
·单指令的32×32乘除法,产生32位结果;
·多种片上外设,并能够与片外存储器和外设接口;
·具有硬件协助的调试模块,可以在IDE中控制处理器完成各种调试工作,如开始、停止、单步和跟踪等;
·在不同的Nios II系统中,指令集结构(ISA)完全兼容;
·性能达到150DMIPS以上。
目前主要有 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地址模式。
目前主要有v7、v8、v9三大系列。SPARC微处理器特点:
·SPARC微处理器具备精简指令集;
·支持32位/64位数据精度;
·架构运行稳定;
·可扩展性优良;
·体系标准开放;
·环形结构的寄存器窗口技术。
通用嵌入式32位RISC CPU设计主要包括以下几大方面。
首先是与用户进行沟通,了解用户的具体需求,并尽可能将所有的内容写入文档。其中关键的部分主要是产品的系列规划(如1代、2代、3代等)、性能指标(如频率、面积、功耗等)、编程模型(如调试模式、正常模式、特权模式等)、指令集(如指令种类、指令编码格式、指令助记符、指令寻址方式、版本规划、内部寄存器数量、功能定义和名称、可扩展性说明、是否支持浮点预算等)、存储器体系架构(哈佛体系架构或是冯·诺依曼)、总线接口协议、硬件调试方式(如串口调试、JTAG调试等)、存储器管理单元、存储器保护单元、高速缓存CACHE、紧耦合存储器接口、写缓冲器、片上协处理器定义、片外协处理器接口、中断处理方式(硬件接口、同步还是异步、使能与禁止、优先级、响应过程和时间)、复位模式及行为、片外协处理器功能定义、片外协处理器指令集等。
指令集是微处理器的核心,主要包括指令种类(如算术运算类、逻辑运算类、乘法类、除法类、浮点预算类、数据传送类、比较类、散转类、其他等)、指令编码格式(操作码、操作数1、操作数2等)、指令助记符定义(MOV、ADD、SUB、MUL、DIV 等)和指令寻址方式(立即寻址、寄存器寻址、寄存器间接寻址、寄存器变址寻址、相对寻址等)、指令周期(哪些指令单周期、哪些指令多周期、指令数据相关周期)。通过设计,将所有指令的执行过程进行细化、归类和简化,为指令译码器的设计提供必要的理论依据,尤其是译码器输出信号的种类和数量。
体系架构是实现微处理器的框架,尤其是对于不同指令集版本的实现更为重要。体系架构设计主要是数据通路和控制通路的规划。数据通路规划的重点是流水线组织,如采用流水线的级数(如5级、7级、8级等)、每级实现的功能(如取指、译码、发射、移位、执行、存储器、回写等)、流水线的结构相关(如数据前推、互锁、延迟槽等)、关键部件(如系统控制单元、指令译码器、ALU、寄存器组、乘法器等)在流水线中的位置等。控制通路规划的重点是根据指令的执行周期来设计控制状态机、解决流水线的数据相关和控制相关、中断和异常的处理等。
目前,在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也有很多,新协议的完备性和正确性需要花费很长时间、投入大量的人力、物力和财力才会使之达到一定的实用化程度。
根据体系架构进行顶层模块划分,规定各个主要模块的功能以及主要的接口信号和时序关系,再将各主要模块进行细化,为子模块的RTL设计提供依据。
在进行子模块的RTL设计之前,先规定RTL的代码风格,以约束代码工程师的行为,并保证设计风格的一致性,便于设计的更新、修改和管理。
在进行子模块的RTL设计时,依据子模块的功能定义和接口定义,选取合适的逻辑结构,如加法器、减法器、乘法器、除法器、译码器等,同时在子模块中插入调试语句以便于查找出现的问题,再搭建对应的验证平台来进行子模块测试。整个过程采用的是自顶向下的设计方式,并使用自下向上的验证方式来保证设计的正确性。
根据微处理器的体系架构,将所有的功能模块整合在一起,构成一个功能比较完整的微处理器软核,并搭建一个测试平台进行系统整体的连接调试,主要是针对各个模块的基本功能以及系统的整体运作进行测试,从而保证系统的正确性。虽然在设计时已经进行了很详细的规划,但在系统整合后仍然会有很多问题出现,如信号数量、名称及时序定义不一致的情况。
在进行系统整合与调试之后,搭建以微处理器为核心的系统级验证平台。系统级验证平台实际上是一个模拟微处理器使用环境的SoC,包括硬件和软件两部分。硬件部分由微处理器以及与之配套的IP模块组成,构成SoC/MCU的主体。软件部分由测试程序以及结果分析、比较和处理模块构成,便于对微处理器进行调试。
经过系统级验证的微处理器可以进行FPGA原型验证,两种验证也可以同时进行。原型验证的调试过程比较简单,而且没有系统级验证的调试方式便利,可以观察部分信号。FPGA原型验证的目的是加速验证过程,并通过模拟真实使用环境来发现设计中存在的缺陷,以此来完善微处理器的设计。搭建以微处理器为核心,且有外围IP的SoPC,并进行功能仿真,再将其使用FPGA开发工具(如Quartus II、ISE、Libero、SynplifyPro 等)进行综合、自动布局布线、生成位流文件,并下载到FPGA上运行。
经过基本调试后,可以调用对应IP的驱动程序来进行测试,之后将BootLoader(如Uboot、VIVI等)移植到系统上,为RTOS的移植做准备,再将嵌入式实时操作系统 RTOS(如 Linux、VxWork、UCOS-II/III、SymbianOS等)移植到系统上调试,最后再将应用程序添加到系统上运行。经过以上一系列验证后,微处理器的实用化程度将会大大增强,同时也会提高用户使用微处理器的信心和兴趣。
软件开发环境是嵌入式微处理器使用过程中很重要的一部分,基本要求是具有支持汇编语言、C语言、C++等程序的编译、链接、软件仿真、调试方便(尤其是在线进行目标软件的调试)、软件界面友好、简单方便、灵活易用等特点,而且最好是提供与现有其它工具一样的调试功能。软件开发环境可以自行开发,周期可能较长,投入较大,维护成本较高;也可以在GNU提供的gcc等工具链的基础上进行二次开发,周期会缩短,投入较小,维护成本较低;还可以使用ACE提供的专业编译工具CoSy进行开发,周期会大幅度缩短,投入较大,维护成本较低,质量较高,更有利于产品的系列化发展。
以上只是对嵌入式微处理器的设计过程进行了简明扼要的描述,而且涵盖了主要方面,具体设计时还需要把每一过程进一步细化,才能达到设计目标。
[1] 杨硕.32位嵌入式微处理器一览[DB/OL].http://epson.eefocus.com/ayayayaya/blog/10-08/193975_00ab0.html.
[2] 田泽,张怡浩,于敦山,盛世敏,仇玉林.SoC片上总线综述[J].半导体技术,2003,28(11):11-15.