时间:2024-07-28
罗 闯,林 楠
(中国电子科技集团公司第四十七研究所,沈阳110032)
目前,嵌入式技术的发展越来越成熟,嵌入式产品也越来越受到广大年轻人的青睐。兼容型微处理器设计在高等教育领域也越来越受欢迎。
设计兼容型微处理器的好处是可以借鉴ARM、MIPS、Nios II、PowerPC、SPARC、LEON、OR1000、OpenSparcT1/T2等几大系列嵌入式微处理器的设计经验,其中前五类是具有自主知识产权的,各种资源比较丰富,学习一下是可以的,但是不能用于商业目的,而后三类是开源的,获取GPL后则可以自由使用;因此设计思路是从目前主流微处理器的发展过程中汲取经验。
嵌入式32位RISC CPU兼容性设计需从硬件和软件两个方面来考虑。
硬件方面主要包括以下几个方面:
3.1.1 指令集分析
指令是微处理器的灵魂,也是构成指令集的最小单位,可以保证与目标微处理器百分之百的二进制兼容。
指令集主要包括:
·指令种类:通常包括运算类,分支类、数据传送类及其他等。运算类主要用于算术运算、逻辑运算、乘法、除法等操作。分支类主要用于实现程序的跳转,灵活控制程序的执行过程,满足条件控制的需要。数据传送类主要用来与存储器进行数据交换。其他是一些杂项指令。
·指令编码格式:指令包括操作码和操作数两部分。操作码实现指令的具体操作。操作数包括立即数、内部寄存器、地址等。指令编码格式确定操作码和操作数在指令编码表中的位置。
·指令助记符:如 MOV、ADD、SUB、MUL、DIV等,缩写简明易懂,便于程序员记忆和直接使用指令进行汇编语言编写目标程序。
·指令寻址方式:主要有立即寻址、寄存器寻址、寄存器间接寻址、寄存器变址寻址、相对寻址等。
·指令周期:如指令单周期、指令多周期、指令数据相关周期等,必须与目标微处理器一致。
通过分析,将所有指令的执行过程进行细化、归类和简化,为指令译码器、控制单元、ALU等功能模块的设计提供必要的理论依据,尤其是译码器输出信号的种类和数量,因为译码器是一大块组合逻辑,而其占据流水线的一个阶段,结构设计不合理会直接影响系统性能。表1是以逻辑运算指令和算术运算指令为例给出的各阶段指令分解动作简表。
表1 各阶段指令分解动作简表
3.1.2 体系架构设计
体系架构是微处理器设计的关键,用来保证与不同指令集版本的兼容性。体系架构中的关键是流水线技术,也是RISC微处理器的一大特点。随着性能要求的提高,流水线的深度也越来越深,即级数越来越多,同时带来的流水线问题也更加复杂。
目前,常用的流水线深度有3级、5级、6级、8级、十几级,有的甚至达到几十级。下面以5级流水线为例,分为取指、译码、执行、存储器和回写。取指级主要完成指令的预取,即程序计数器PC的生成。译码级主要完成指令译码、操作数的读取和选择。执行级主要完成操作数的移位、逻辑运算、算术运算、乘法运算、除法运算、访问数据存储器地址的产生。存储器级主要完成数据的读写或是简单缓冲一个周期以保证流水线的完整性,也可以直接将执行结果寄存到回写级,以缩短指令的周期。回写级主要完成运算结果的写回操作。此外还有一个更重要的部件是系统控制单元,根据输入的数据产生对应的流水线控制信号,用来实现微处理器的有序工作。一般情况下流水线组织结构如图2所示。完成流水线所对应的功能需要相应的功能模块。图2中只是根据流水线的组织情况,将对应的功能模块放在流水线中,相当于完成了系统的顶层模块划分,还没有进行数据通路和控制通路的规划。数据通路的规划是在内部各个主要的功能模块之间建立起相互之间的联系:同级的模块可能是串行或是并行,需要根据指令的功能而定;不同级之间的模块需要通过流水线寄存器进行数据交换。数据通路的规划是根据当前流水线中指令的执行情况、指令功能和指令周期,由系统控制单元给出对应的控制信号。系统控制单元是微处理器的核心,主要由一个有限状态机构成,包括系统复位、正常运行、系统调试和中断/异常四个状态,如图3所示。
3.1.3 总线接口设计
目前,在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总线。六种总线都是同步总线,使用时钟沿驱动和采样信号。总线的基本操作几乎没有区别,最大的区别在于提供的特性和规范的完整性。下面以AMBA AHB为例进行简要说明。图4为最基本的AHB总线时序:一个周期为输出地址周期,输出需要访问的地址和对应的控制信号;接下来一个周期为数据周期,输出或是读入上一个周期对应的数据信号。如果外设速度较慢,可以在数据周期插入等待信号,即将 HREADY置为“低”,从而可以使得总线接口部件的控制逻辑处于等待状态,以保证得到正确的数据。因为AHB是一个比较完整的总线协议,可以适应很多种情况,所以还需要增加更加复杂的逻辑,同时再根据微处理器的具体需要进行适当裁剪,这样既可以保证与AHB协议的兼容性,还可以降低硬件的总体成本。
软件方面主要是通过对应软件开发工具来进行程序设计,从而提高程序的设计效率、质量和规模。每种微处理器都有对应的软件开发工具。一般情况下,微处理器厂商会开发自己的专用工具,如ARM的ADS和RealView;也有第三方为某个微处理器厂商设计的兼容性开发工具,如Keil为ARM开发的μVision;还可以使用免费的GNU工具链,不过可能需要花一些时间和精力来进行相应的环境设置。
图4 基本AHB总线时序
软件开发工具是一个集成开发环境IDE,可以进行汇编语言、C语言、C++等程序的编译、链接、软件调试、在线调试等。对于嵌入式32位微处理器来说,软件开发工具的在线调试功能是非常重要的。因此,必须清楚调试工具的工作原理。目前使用的调试方式主要有两种:一种是JTAG调试,如ARM、MIPS、NiosII、PowerPC等;另一种是串口调试,如LEON2/3/4、SparcV7/8/9等。下面以JTAG调试为例进行简要说明。软件开发工具在PC端运行,通过并口/USB接口与硬件仿真器相连。硬件仿真器通过内部硬件实现与PC并口协议/USB协议到串行JTAG协议的转换,并与微处理器的调试部件相连实现在线调试功能。图5为使用JTAG接口调试的框图。
图5 使用JTAG接口调试的框图
JTAG 接口主要包括 TCK、TMS、TDI、TDO 和TRST五个信号,使用简单,连接方便,是目前采用最多的一种调试方式。JTAG调试部件的核心是Test access port(TAP)控制器状态机,共有16个状态,其状态转换过程如图6所示。
图6 JTAG TAP控制器状态转换图
工作原理是先运行JTAG指令,才能进行对应扫描链的操作,即在TCK和TMS的共同作用下,实现不同状态之间的转换。如果是进行数据操作,需要先进入到Select-DR-Scan状态,再进入到Capture-DR、Shift-DR、Exit1-DR 和 Update-DR 状态,最后回到 Run-Test/Idle或是 Select-DRScan状态,即在中间的*-DR状态来完成对所有扫描链的读写操作。如果使用JTAG指令,则需要进入右边*-IR状态来完成对应的指令动作。
以上只是简要概述了嵌入式32位RISC CPU兼容性设计的主要方面,若要设计一个完全与之兼容的微处理器,还需要进行大量的设计工作。
[1] [英]Steve Furber,著.ARM SoC体系结构[M].田泽,于敦山,盛世敏,译.北京:航空航天大学出版社,2002.
[2] 朱子玉,李亚民.CPU芯片逻辑设计技术[M].北京:清华大学出版社,2005.
[3] 孙天泽,袁文菊.嵌入式设计及Linux驱动开发指南-基于ARM9处理器(第2版)[M].北京:电子工业出版社,2007.
[4] IEEE.Standard Test Access Port and Boundary-Scan Architecture[M]2001.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!