计算机组成原理实验
《计算机组成原理实验》
实验报告
(实验三)
学 院 名 称 : 数据科学与计算机学院
专业(班级) :
16 计算机类 2 班
学 生 姓 名 :
梁峻源
学
时
号 :
16337133
间 : 2017 年 12 月 17 日
成 绩 :
计算机组成原理实验
实 验 三 : 多周期CPU设计与实现
一、 实验目的
(1) 认识和掌握多周期数据通路原理及其设计方法;
(2) 掌握多周期 CPU 的实现方法,代码实现方法;
(3) 编写一个编译器,将 MIPS 汇编程序编译为二进制机器码;
(4) 掌握多周期 CPU 的测试方法;
(5) 掌握多周期 CPU 的实现方法。
二、 实验内容
设计一个多周期 CPU,该 CPU 至少能实现以下指令功能操作。需设计的指令与格式如
下:
==>算术运算指令
(1)add rd, rs, rt
000000
rs(5 位)
rt(5 位)
rd(5 位)
reserved
功能:rd<-rs + rt
(2)sub rd, rs, rt
000001
rs(5 位)
rt(5 位)
rd(5 位)
reserved
完成功能:rd<-rs - rt
(3)addi rt, rs, immediate
000010
rs(5 位)
rt(5 位)
immediate(16 位)
功能:rt<-rs + (sign-extend)immediate
==>逻辑运算指令
(4)or rd, rs, rt
010000
rs(5 位)
rt(5 位)
rd(5 位)
reserved
功能:rd<-rs | rt
(5)and rd, rs, rt
010001
rs(5 位)
rt(5 位)
rd(5 位)
reserved
功能:rd<-rs & rt
(6)ori rt, rs, immediate
010010
rs(5 位)
rt(5 位)
immediate
功能:rt<-rs | (zero-extend)immediate
==>移位指令
(7)sll rd, rt,sa
计算机组成原理实验
011000
未用
rt(5 位)
rd(5 位)
sa(5 位)
reserved
功能:rd<-rt<<(zero-extend)sa,左移 sa 位 ,(zero-extend)sa
==>比较指令
(8) slt rd, rs, rt 带符号数
100110
rs(5 位)
rt(5 位)
rd(5 位)
reserved
功能:if (rs
可用于存放地址,事实上,可存放 28 位地址,剩下最高 4 位由 pc+4 最高 4 位拼接上。
(16)jr rs
111001
rs(5 位)
未用
未用
reserved
计算机组成原理实验
功能:pc <- rs,跳转。
==>调用子程序指令
(17)jal addr
111010
addr[27..2]
功能:调用子程序,pc <- {(pc+4)[31:28],addr[27:2],0,0};$31<-pc+4,返回地
址设置;子程序返回,需用指令 jr $31。跳转地址的形成同 j addr 指令。
==>停机指令
(18)halt (停机指令)
111111
00000000000000000000000000(26 位)
不改变 pc 的值,pc 保持不变。
三、 实验原理
多周期 CPU 指的是将整个 CPU 的执行过程分成几个阶段,每个阶段用一个时钟去完
成,然后开始下一条指令的执行,而每种指令执行时所用的时钟数不尽相同,这就是所谓的
多周期 CPU。CPU 在处理指令时,一般需要经过以下几个阶段:
(1) 取指令(IF):根据程序计数器 pc 中的指令地址,从存储器中取出一条指令,同时,
pc 根据指令字长度自动递增产生下一条指令所需要的指令地址,但遇到“地址转移”指令
时,则控制器把“转移地址”送入 pc,当然得到的“地址”需要做些变换才送入 pc。
(2) 指令译码(ID):对取指令操作中得到的指令进行分析并译码,确定这条指令需要完
成的操作,从而产生相应的操作控制信号,用于驱动执行状态中的各种操作。
(3) 指令执行(EXE):根据指令译码得到的操作控制信号,具体地执行指令动作,然后
转移到结果写回状态。
(4) 存储器访问(MEM):所有需要访问存储器的操作都将在这个步骤中执行,该步骤给
出存储器的数据地址,把数据写入到存储器中数据地址所指定的存储单元或者从存储器中得
到数据地址单元中的数据。
(5) 结果写回(WB):指令执行的结果或者访问存储器中得到的数据写回相应的目的寄存
器中。
实验中就按照这五个阶段进行设计,这样一条指令的执行最长需要五个(小)时钟周期才
能完成,但具体情况怎样?要根据该条指令的情况而定,有些指令不需要五个时钟周期的,
这就是多周期的 CPU。
取指令
IF
指令译码
指令执行
存储器访问
结果写回
ID
EXE
MEM
WB
MIPS 指令的三种格式:
图 1 多周期 CPU 指令处理过程
计算机组成原理实验
其中,
op:为操作码;
rs:为第 1 个源操作数寄存器,寄存器地址(编号)是 00000~11111,00~1F;
rt:为第 2 个源操作数寄存器,或目的操作数寄存器,寄存器地址(同上);
rd:为目的操作数寄存器,寄存器地址(同上);
sa:为位移量(shift amt),移位指令用于指定移多少位;
funct:为功能码,在寄存器类型指令中(R 类型)用来指定指令的功能;
immediate:为 16 位立即数,用作无符号的逻辑操作数、有符号的算术操作数、数据
加载(Load)/数据保存(Store)指令的数据地址字节偏移量和分支指令中相对程序计数
器(PC)的有符号偏移量;
address:为地址。
计算机组成原理实验
图 2 多周期 CPU 状态转移图
状态的转移有的是无条件的,例如从 sIF 状态转移到 sID 就是无条件的;有些是有条
件的,例如 sEXE 状态之后不止一个状态,到底转向哪个状态由该指令功能,即指令操作码
决定。每个状态代表一个时钟周期。
图 3 多周期 CPU 控制部件的原理结构图
图 3 是多周期 CPU 控制部件的电路结构,三个 D 触发器用于保存当前状态,是时序
逻辑电路,RST 用于初始化状态“000“,另外两个部分都是组合逻辑电路,一个用于产生
下一个阶段的状态,另一个用于产生每个阶段的控制信号。从图上可看出,下个状态取决于
指令操作码和当前状态;而每个阶段的控制信号取决于指令操作码、当前状态和反映运算结
果的状态 zero 标志和符号 sign 标志。
计算机组成原理实验
图 4 多周期 CPU 数据通路和控制线路图
图 4 是一个简单的基本上能够在多周期 CPU 上完成所要求设计的指令功能的数据通
路和必要的控制线路图。其中指令和数据各存储在不同存储器中,即有指令存储器和数据
存储器。访问存储器时,先给出内存地址,然后由读或写信号控制操作。对于寄存器组,
给出寄存器地址(编号),读操作时,输出端就直接输出相应数据;而在写操作时,在
WE 使能信号为 1 时,在时钟边沿触发将数据写入寄存器。图中控制信号功能如表 1 所
示,表 2 是 ALU 运算功能表。
图上增加 IR 指令寄存器,目的是使指令代码保持稳定,pc 写使能控制信号 PCWre,
是确保 pc 适时修改,原因都是和多周期工作的 CPU 有关。ADR、BDR、ALUoutDR、
DBDR 四个寄存器不需要写使能信号,其作用是切分数据通路,将大组合逻辑切分为若干
个小组合逻辑,大延迟变为多个分段小延迟。
控制信号名
状态“0”
状态“1”
表 1 控制信号作用
RST
PCWre
ALUSrcA
对于 PC,初始化 PC 为程序首地
址
对于 PC,PC 接收下一条指令地址
PC 不更改,相关指令:halt,另
外,除‘000’状态之外,其余状
态慎改 PC 的值。
PC 更改,相关指令:除指令 halt
外,另外,在‘000’状态时,修改
PC 的值合适。
来自寄存器堆 data1 输出,相关
指令:add、sub、addi、or、
and、ori、beq、bne、bgtz、
slt、slti、sw、lw
来自移位数 sa,同时,进行(zero-
extend)sa,即 {{27{0}},sa},相关指
令:sll
计算机组成原理实验
ALUSrcB
DBDataSrc
RegWre
来自寄存器堆 data2 输出,相关
指令:add、sub、or、and、
beq、bne、bgtz、slt、sll
来自 ALU 运算结果的输出,相关
指令:add、sub、addi、or、
and、ori、slt、slti、sll
来自 sign 或 zero 扩展的立即数,相
关指令:addi、ori、slti、lw、sw
来自数据存储器(Data MEM)的输
出,相关指令:lw
无写寄存器组寄存器,相关指令:
beq、bne、bgtz、j、sw、jr、
halt
寄存器组寄存器写使能,相关指令:
add、sub、addi、or、and、ori、
slt、slti、sll、lw、jal
WrRegDSrc
写入寄存器组寄存器的数据来自
pc+4(pc4),相关指令:jal,写
$31
写入寄存器组寄存器的数据来自 ALU
运算结果或存储器读出的数据,相关
指令:add、addi、sub、or、and、
ori、slt、slti、sll、lw
InsMemRW 写指令存储器
读指令存储器(Ins. Data)
/RD
/WR
IRWre
ExtSel
读数据存储器,相关指令:lw
存储器输出高阻态
写数据存储器,相关指令:sw
无操作
IR(指令寄存器)不更改
(zero-extend)immediate,相关
指令:ori;
IR 寄存器写使能。向指令存储器发出
读指令代码后,这个信号也接着发
出,在时钟上升沿,IR 接收从指令存
储器送来的指令代码。与每条指令都
相关。
(sign-extend)immediate,相关指
令:addi、lw、sw、beq、bne、
bgtz;
PCSrc[1..0]
RegDst[1..0]
00:pc<-pc+4,相关指令:add、addi、sub、or、ori、and、
slt、slti、sll、sw、lw、beq(zero=0)、bne(zero=1)、
bgtz(sign=1,
或 zero=1);
01:pc<-pc+4+(sign-extend)immediate,相关指令:beq(zero=1)、
bne(zero=0)、bgtz(sign=0,且 zero=0);
10:pc<-rs,相关指令:jr;
11:pc<-{pc[31:28],addr[27:2],0,0},相关指令:j、jal;
写寄存器组寄存器的地址,来自:
00:0x1F($31),相关指令:jal,用于保存返回地址($31<-pc+4);
01:rt 字段,相关指令:addi、ori、slti、lw;
10:rd 字段,相关指令:add、sub、or、and、slt、sll;
11:未用;
ALUOp[2..0] ALU 8 种运算功能选择(000-111),看功能表
相关部件及引脚说明:
Instruction Memory:指令存储器
Iaddr,指令地址输入端口
DataIn,存储器数据输入端口