基于 Verilog HDL 的多周期 CPU 设计与实现

2021-01-20 06:21严浦洲合肥工业大学计算机与信息学院计算机与信息工程系
数码世界 2020年12期
关键词:寄存器存储器时钟

严浦洲 合肥工业大学 计算机与信息学院计算机与信息工程系

引言

早期CPU都是单周期的,结构简单,即让CPU每个时钟周期执行一条指令。但有的指令执行耗时长,有的指令执行耗时短,且CPU是执行完一条指令再处理下一条的,既然给每个指令的时钟周期都是相同的,那么时钟周期就是耗时最长的指令所需的时间。后来人们意识到了计算机的巨大能力,这时为了提升CPU的速度,优化CPU的结构,对指令集的所有指令作分析,可以发现它们处理过程有相同的地方,于是便可将所有的指令切成几段基本操作,指令执行过程由多个基本操作组成,便引入了多周期CPU结构。

1 设计原理

多周期 CPU 是将单条指令的执行划分为若干个工作周期,每个工作周期用一个时钟周期完成,每条指令的具体功能决定了完成该指令需要的工作周期数目。指令执行过程中状态的转换由有限状态机进行实现,控制单元根据指令和其所处工作周期发出为操作命令信号来控制指令的执行。CPU在处理指令时,一般需要经过以下几个阶段:

(1) 取指令:根据PC中的指令地址,从存储器中取出一条指令,同时PC根据指令字长度自动递增产生下一条指令的指令地址。(2)指令译码:对指令进行分析并译码,确定这条指令需要完成的操作。(3)指令执行:根据指令译码得到的操作控制信号,具体地执行指令动作。(4)存储器访问:所有需要访问存储器的操作都将在此步骤执行,该步骤给出存储器的数据地址,把数据写入到存储器中数据地址所指定的存储单元或取出。(5)结果写回:指令执行的结果或者访问存储器中得到的数据写回相应的目的寄存器中。

2 总体设计

2.1 指令类型、格式

表1 指令格式(每种类型以一条指令为例)

op:操作码;rs:只读寄存器;rt:可读可写,目的操作数寄存器;rd:只写寄存器;sa:位移量;funct:功能码;immediate:16位立即数,用作操作数、数据加载(load)/数据保存(store)指令的数据地址字节偏移量和分支指令中相对程序计数器的有符号偏移量;address:地址。

2.2 状态转换图

图2 各指令执行的状态转换图

首先为每个状态定义一个参数,例如定义IF为000,ID为001等。对于EXE状态,由于分支指令,存取指令和其他指令经过的指令执行阶段各不相同,故定义了aEXE,bEXE,cEXE三个状态;对于WB状态,由于sw和lw经过的指令执行阶段不相同,故定义了aWB,cWB两个状态。当输入NextState的状态码与操作码发生改变时,使用case产生下一状态,对case的设计如下:(1)由于所有指令都需要经过IF-ID阶段,所以IF的nextState一定是ID。(2)对于ID阶段,有四条分叉的支路:对于j,jal,jr,halt指令,它们直接跳转,不需要经过后面的状态则nextStste为IF;其它指令的nextState是EXE。当指令是sw、lw指令时,指令的nextState为cEXE;当指令是beq指令时,指令的nextState为bEXE;剩余的指令nextState为aEXE。(3)对于aEXE,各种运算指令的结果无需写回存储器,故nextState为aWB;对于bEXE,分支指令的nextState为IF;对于cEXE,由于是存取指令,需要经过存储区,故nextState自然为MEM。(4)对于MEM,如果是lw指令,则要将结果写回寄存器,那么nextState为cWB;如果是sw指令,则无需写回,那么nextState为IF。(5)aWB与cWB的nextState都为IF。

2.3 主要功能部件描述

(1)PC

根据控制信号PCSrc,计算获得下一个PC以及控制信号RST重置。根据复位信号RST、PC写使能信号PCWre决定输出的pc值。与PC相关的部件还有PCAddFour:获取顺序存储的下一个地址;PCJump:获取子程序地址;PCAddImm:获取跳转后的地址。

(2)指令存储器

定义8位的寄存器数组,将指令的32位二进制数分割成4个8位的小段并顺序存储在数组中。

(3)寄存器堆

根据指令中的rs,rt到对应寄存器堆中获取数据,得到要读的数据,然后根据rd将输入的数据存到对应的寄存器中。

(4)算术逻辑单元

在输入A、输入B以及ALU控制信号ALUOp发生变化时,使用case并根据ALUOp的值执行对应的操作得到计算的结果。

(5)数据存储器

定义8位的寄存器数组,将32位的数据分割成4个8位的小段进行存取。写与读操作的单位是8位二进制数,—共操作四次。大端方式存储。

(6)数据选择器

二选一数据选择器用于选择ALU的A操作数,B操作数;选择存入寄存器的数和选择写入寄存器的数;三选一数据选择器选择要写入数据的目的寄存器是rt,rd还是31号寄存器;四选一数据选择器用于选择下一条指令的地址。

(7)控制单元

控制单元由三个模块封装组成。分别实现当时钟上升沿到来时进行状态切换;产生下一阶段;根据当前状态和操作码产生各部件的控制信号三种功能。

(8)其他

临时寄存器ADR,BDR,ALUtoDR,DBDR在时钟信号触发下将寄存器中的内容输出;指令寄存器IR用于存放正在执行的指令代码。

3 测试仿真

以指令add $3,$2,$1 (指令编码为000000 0 0 0 1 0 00001 0001100000000000)为例。

4 结语

与单周期CPU设计相比,多周期CPU的数据通路上发生了一些较为明显的变化。增加了一定数量的临时寄存器存储关键数据,这是由多周期指令特性决定的。同时,多周期cpu的设计运用了有限状态机的思想,每个指令在不同的时钟周期里,其控制信号完全不同,所以需要状态机来控制状态,并且根据不同指令的不同状态来决定控制信号的输出,这在单周期cpu里是没有体现的。所以多周期CPU具有时钟周期短、各功能部件可共享的优点,它既符合现代CPU的真实设计,又是流水线CPU设计的基础。最后通过软件仿真验证,来证实所设计的CPU的正确性,可以看到所设计的CPU具有实用性。

猜你喜欢
寄存器存储器时钟
静态随机存储器在轨自检算法
古代的时钟
Lite寄存器模型的设计与实现
常用电子测速法在某数字信号处理器中的应用*
这个时钟一根针
移位寄存器及算术运算应用
有趣的时钟
时钟会开“花”
存储器——安格尔(墨西哥)▲
Buffalo推出四硬盘网络存储器 主打Soho一族