微处理器系统设计.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

功能描述:

设计一个带简单I/O接口电路的多周期RISC处理器设计方案,并在FPGA上进行验证。验证题目为设计流水灯的样式为:

00000000->00000001->00000011->00000111->00001111->0011111->01111111->11111111->00000000,切换间隔为1秒。

RISC处理器简介

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

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

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

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

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

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

将CPU的功能进一步细化,可概括如下:

(1)能对指令进行译码并执行规定的动作;

(2)可以进行算术和逻辑运算;

(3)能与存储器和外设交换数据;

(4)提供整个系统所需要的控制。

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

(1)算术逻辑运算部件(ALU);

(2)累加器或寄存器;

(3)程序计数器;

(4)指令寄存器和译码器;

(5)时序和控制部件。

从实现的途径看,RISC处理器与一般的CPU的不同之处在于:它的时序控制信号形成部件是用硬布线逻辑实现的而不是采用微程序控制的方式。所谓硬布线逻辑也就是用触发器和逻辑门直接连线所构成的状态机和相应的组合逻辑,故产生控制序列的速度比用微程序控制方式快得多,因为这样做

省去了读取微程序指令的时间。

RISC处理器结构介绍

一、处理器结构

RISC处理器内核结构

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

二、处理器内部子模块

1、控制器

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

2、程序计数器

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

3、寄存器堆

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

4、算术逻辑单元

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

5、总线接口单元

总线接口单元用于SimpleRISC处理器与外部存储器和I/O口的连接,为了简单起见,SimpleRISC

系统的存储器和I/O采用统一编址的方式进行组织,并且采用程序存储器和数据存储器分开的哈佛结构。

多周期CPU设计原理

在单周期CPU中,每条指令的运行周期都是相同的。然而,不同的指令,其实际的运行时间各不相同,有的甚至相差很大。单周期处理器时钟周期远远大于许多指令实际所需执行时间,例如,R-型指令和立即数运算指令都不需要读内存;Store指令不需要写寄存器;分支指令不需要访问内存和写寄存器;Jump指令不需要ALU运算,不需要读内存,也不需要读写寄存器。受时钟周期宽度的影响,单周期处理器的效率地下、性能极差,这样就造成了运行时间的浪费,降低了运行的速度。

为了解决这个问题,引入多时钟周期CPU的设计方式。如下图所示,在多时钟周期CPU中,每条CPU指令并不是在一个时钟周期内运行,而是需要占用多个时钟周期,每一个执行步骤占用一个时钟周期。不同的指令,占用的时钟周期的个数也不相同。指令可以根据自身特点来决定使用几个时钟周期。这样,既保证了指令的正确运行,又使得指令根据自身的特点来占用运行时间,避免了运行时间的浪费。

多周期处理器的基本思想为:把每条指令的执行分为多个大致相等的阶段,每个阶段在一个时钟周期内完成;各个阶段最多完成一次访存或一次寄存器读/写或一次ALU操作;各个阶段的执行结果在下个时钟到来时保存到相应的存储单元或稳定的保持在组合电路中;时钟周期的宽度以最复杂的阶段所花的时间为准,通常取一次存储器读或写的时间。第一步自然是分析指令执行的状态。

在多周期处理器中,每条指令分多个阶段执行,每个阶段占一个时钟周期,称为一个状态。指令在被取出、译码之前,每条指令的操作是一样的,指令译码之后不同的指令有不同的执行过程。

子模块设计

控制器模块方案设计

控制器需要根据不同的指令,产生不同的控制信号,以控制数据通路中的部件能同步工作,并且使得数据通路中相应的数据选择器作出正确的选择。

这里的控制器比较复杂,使用一个有限状态机来实现,下图给出了控制器的状态转移图。

控制器状态转移图

从图中可以看出,RISC处理器的控制器具有5个状态。起始状态是取指状态Fetch,Fetch状态使得指令存储器的读控制信号有效,从而取到要执行的指令。取到指令之后,要对其进行译码,所以进入了第二个指令译码状态Decode,Decode根据前一状态取到的指令进行译码操作,产生相应的数据选择器选择信号等控制信号。指令译码之后,进入指令执行状态Execute,这一步大多数指令使用ALU 进行运算,然后根据指令类型选择是进行存储器操作还是直接将运算结果写回寄存器堆。对于存储器访问指令,执行状态之后计算出进行存储器访问的地址,之后进入存储器访问状态Memory进行相应的存储器操作。对于其他不需要进行存储器访问的指令,直接进入寄存器回写状态Write,将计算结果写回寄存器。

接口定义

信号名称方向含义

op IN 操作码

regdst OUT 写寄存器地址

regwr OUT 写寄存器控制信号

alusrc OUT 立即数和寄存器数据读选择信号

extop OUT 立即数扩展信号

memwr OUT 存储器写信号

memtoreg OUT 存储器写寄存器信号

寄存器堆模块设计

模块方案设计

MIPS指令格式中的寄存器号是5bits,指令可以访问25=32个32位的寄存器。这样的一堆寄存器“堆在一起”构成一个寄存器堆。每一个寄存器都是32位,寄存器用来存放指令执行所需的数据。根据指令执行需要,该寄存器堆需要一个写数据端口和两个读数据端口,即同时要求有两个读地址和一个写地址。每次当写信号有效和时钟上升沿来临时,会将要写入的数据写入到寄存器给定的地址中,寄存器读端口会在持续的读出寄存器中相应地址中的数据。

电路结构

相关文档
最新文档