简单RISC处理器设计

更新时间:2023-11-29 15:43:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

简单RISC处理器设计

6.3 简单RISC处理器设计

前面我们已经学习了现代电子系统设计的基本方法,学习了使用Verilog HDL语言设计简单组合逻辑和简单时序逻辑模块,学习了自顶向下的设计方法,同时还学习了状态机的设计。在这里,将综合运用以上所学的知识,设计一个简化的处理器。“麻雀虽小,五脏俱全”,这里设计的处理器虽然是经过简化的,但是能对其进行综合、适配,最终可以在硬件上运行。

这里介绍的处理器由于主要用于教学,只是一个简单的教学模型,设计不一定合理,只是从原理上说明了一个简单的处理器是如何构成的。

6.3.1 RISC处理器简介

中央处理器(CPU,Central Processing Unit)是计算机的核心部件。计算机进行信息处理可分为两个步骤:

(1)将数据和程序(即指令序列)输入到计算机的存储器中;

(2)从第一条指令的地址起开始执行该程序,得到所需结果,结束运行。CPU的作用是协调并控制计算机的各个部件并执行程序的指令序列,使其有条不紊地进行。因此它必须具有以下基本功能:

◆ 取指令——当程序已在存储器中时,首先根据程序入口地址取出一条程序,为此要发出指令地址和控制信号。

◆ 分析指令——即指令译码,这是对当前取得的指令进行分析,指出它要求什么操作,并产生相应的操作控制命令。

◆ 执行指令——根据分析指令时产生的“操作命令”形成相应的操作控制信号序列,通过运算器、存储器及输入/输出设备的执行,实现每条指令的功能,其中包括对运算结果的处理及下条指令地址的形成。

将CPU的功能进一步细化,可概括如下: (1)能对指令进行译码并执行规定的动作; (2)可以进行算术和逻辑运算; (3)能与存储器和外设交换数据; (4)提供整个系统所需要的控制。

尽管各种CPU的性能指标和结构细节各不相同,但它们所能完成的基本功能相同。由功能分析可知,任何一种CPU内部结构至少应包含下面这些部件:

(1)算术逻辑运算部件(ALU); (2)累加器或寄存器; (3)程序计数器; (4)指令寄存器和译码器;

(5)时序和控制部件。

精简指令计算机(RISC,Reduced Instruction Set Computer)是一种20世纪80年代才出现的CPU,它与一般CPU相比不仅只是简化了指令系统,而且还通过简化指令系统使计算机的结构更加简单合理,从而提高了运算速度。从实现的途径看,RISC处理器与一般的CPU的不同之处在于:它的时序控制信号形成部件是用硬布线逻辑实现的而不是采用微程序控制的方式。所谓硬布线逻辑也就是用触发器和逻辑门直接连线所构成的状态机和相应的组合逻辑,故产生控制序列的速度比用微程序控制方式快得多,因为这样做省去了读取微程序指令的时间。下面就详细介绍一个简化的、用于教学目的的RISC处理器SimpleRISC,它是采用硬布线逻辑实现的控制,是一个可综合的CPU模型。

6.3.2 SimpleRISC处理器结构介绍

一、处理器结构

这里首先对我们即将要进行设计的SimpleRISC处理器硬件结构作一个简要介绍。这里所介绍的处理器结构只是SimpleRISC芯片的内部结构,或者说只是SimpleRISC的CPU核,所以不包括存储器单元和外设等。SimpleRISC处理器的内核结构如图6-48所示。

图6-48 SimpleRISC处理器内核结构

从图6-48中可以看出,SimpleRISC处理器内核包括以下功能单元:控制器、程序计数器、通用寄存器、算术逻辑单元(ALU,Arithmetic Logic Unit)和总线接口单元(BIU,Bus Interface Unit)。以下的内容将依次讨论这些模块。 二、处理器内部子模块

1、控制器

控制器用于进行指令译码、产生ALU运算控制信号、产生通用寄存器读写控制信号以及协调处理器工作时序工作。

2、程序计数器

程序计数器用于指向下一条将要执行的指令的地址,它可以自动增值或是通过分支指令来设臵其内容。

3、通用寄存器

SimpleRISC处理器内部有32个32 位通用寄存器,ALU运算的源操作数、目的操作数大都来自这个通用寄存器堆。

4、算术逻辑单元

算术逻辑单元用于进行算术运算、移位操作、比较设臵操作以及逻辑运算。对于其他未能实现的运算,例如乘法、浮点运算等,可以使用软件来实现。

5、总线接口单元

总线接口单元用于SimpleRISC处理器与外部存储器和I/O口的连接,为了简单起见,SimpleRISC系统的存储器和I/O采用统一编址的方式进行组织,并且采用程序存储器和数据存储器分开的哈佛结构。

从图6-48可以看出,SimpleRISC处理器并没有实现中断处理以及Cache等功能,虽然如此,但是SimpleRISC处理器已经能进行一些简单的工作了。下面将继续讨论有关SimpleRISC的一些细节。

6.3.3 SimpleRISC处理器的指令集和寻址方式

一、SimpleRISC处理器的指令集

SimpleRISC处理器的指令集中包括以下指令: (1)算术运算指令

算术运算指令包括加法(add)和减法(sub)指令。 (2)比较指令

比较指令只有小于则设臵(slt)指令。 (3)移位指令

移位指令包括左移(ls)和右移(rs)指令。 (4)逻辑运算指令

逻辑运算指令包括与(and)、或(or)和非(not)指令。这里的逻辑运算都是按位进行的。

(5)数据存储器访问指令

数据存储器访问指令包括存储器数据加载(load)和数据存储(store)两条指令。数据存储器的访问都必须通过这两条指令来进行。

(6)分支指令

分支指令分为无条件分支和条件分支两类。无条件分支指令只有一条:branch;而条件分支只实现相等则分支(beq)指令。 二、SimpleRISC处理器的寻址方式

CPU的寻址方式指的是CPU在进行操作时如何找到操作数的方法。一般来说,

操作数可以存储在CPU内部寄存器中,也可以由指令提供,还可以存储在数据存储器中。对于RISC处理器来说,操作数一般都由指令提供或存储在CPU内部寄存器中,而RISC处理器一般不直接使用数据存储器中的数据作为操作数。

这里的SimpleRISC处理器,其操作数也由指令提供或存储在CPU内部寄存器中,相应的寻址方式为立即寻址(操作数由指令提供)和寄存器寻址(操作数存储在CPU内部寄存器中)。

6.3.4 SimpleRISC处理器的指令格式与编码

一、指令格式

这里假设设计的SimpleRISC处理器是32位的,由于它有32个32位寄存器,所以每个寄存器需要使用5位编码来寻址。将以上讨论的指令分为三种类型的指令:R-类型指令、I-类型指令和J-类型指令。

R-类型指令指的是操作数全部来自通用寄存器,包括寄存器操作数的算术运算指令、比较指令和逻辑运算指令。由于这些指令的操作数都来自于通用寄存器,而一般的操作都有三个操作数:两个源操作数和一个目的操作数,所以R-类型指令中需要使用5×3=15位来对寄存器进行编址,对于32位指令,使用了15位以后,还剩余17位,其余的17位都可用于指令的编码,所以一共可以有217=131072条R-类型的指令。

I-类型指令指的是操作数中有部分来自于通用寄存器,而另一部分是来自于指令本身的立即数,包括带有立即数的算术运算指令、比较指令、逻辑运算指令、移位指令、数据存储器访问指令和条件分支指令。除移位指令外,立即数都是16位的,而另外还需要两个寄存器操作数,所以共需要16+5×2=26位编码,还剩余6位编码,所以可以有26=64条I-类型的指令。对于移位指令,由于操作数是32位的,所以移位位数最多为32位,则只需要5位立即数即可,因此共需要5+5×2=15位编码,剩余17位可用于指令编码。

J-类型指令只有一条:无条件分支指令Branch,它采用6位指令编码(为了与I-类型指令格式对齐),剩余的26位用于指明分支的目的地址到当前程序计数器的偏移量。假设采用补码表示法,则最大偏移量在-225~+(225-1)之间,即-0x02000000~+0x01FFFFFF之间。而前面讨论的条件分支使用16位偏移量,所以最大偏移量在-215~+(215-1)之间,即-0x00008000~+0x00007FFF之间。

通过以上讨论,可以定义出以下指令格式。

对于R-类型指令,指令中包括三个5位的通用寄存器地址域和一个17位的指令编码域,为了与I-类型及J-类型指令保持格式一致,将指令编码域分成了11位和6位两个部分,参见图6-49。

图6-49 R-类型指令格式

图中的A、B、C为通用寄存器地址,OPX位11位指令编码,OP位6位指令编码。

对于I-类型指令,指令中包括四个域:两个5位的通用寄存器地址、6位指令编码和16位地址偏移量,可以表示为图6-50所示的格式。

图6-50 I-类型指令格式

图中的A、B为通用寄存器地址,IMM16为16位立即数(对于移位指令,只用最低5位),OP为指令编码。

对于J-类型指令,指令中包括两个域:6位指令编码和26位地址偏移量,可以表示为图6-51所示的格式。

图6-51 J-类型指令格式

图中的OP部分即为指令编码,而IMMED26是地址偏移量。

从以上三种类型指令的编码格式可以看出,SimpleRISC处理器的格式比较统一,设计起来也就会比较简单。实际上,几乎所有的RISC处理器的指令格式都采用这里的设计思想,使得设计简单,译码逻辑也简单,从而提高处理器性能。更重要的是,这种简单的设计有利于使用流水线来实现,能更进一步提高处理器性能。

二、SimpleRISC处理器的指令编码 1、加法

这里实现的是有符号数的加法,不考虑溢出。 (1)寄存器操作数相加

汇编语言表示形式:add rt, rs1, rs2 操作说明:rt = rs1 + rs2 编

(2)寄存器操作数与立即数相加 汇编语言表示形式:addi rt, rs, imm16

操作说明:rt = rs + imm16,对imm16进行符号扩展

本文来源:https://www.bwwdw.com/article/o6jt.html

Top