中大计组单周期CPU实验报告报告.docx
- 文档编号:14440833
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:25
- 大小:376.78KB
中大计组单周期CPU实验报告报告.docx
《中大计组单周期CPU实验报告报告.docx》由会员分享,可在线阅读,更多相关《中大计组单周期CPU实验报告报告.docx(25页珍藏版)》请在冰点文库上搜索。
中大计组单周期CPU实验报告报告
《计算机组成原理与接口技术实验》
实验报告
学院名称
:
数据科学与计算机学院
学生姓名
:
刘恩硕
学号
:
14332014
专业(班级)
:
14软件工程五(国)班
合作者
:
罗宇森
时间
:
2016
年
4
月
25
日
成绩
:
实验二
:
单周期CPU设计
一.实验目的
(1)掌握单周期CPU数据通路图的构成、原理及其设计方法;
(2)掌握单周期CPU的实现方法,代码实现方法;
(3)认识和掌握指令与CPU的关系;
(4)掌握测试单周期CPU的方法。
二.实验内容
设计一个单周期CPU,该CPU至少能实现以下指令功能操作。
需设计的指令与格式如下:
==>算术运算指令
(1)addrd,rs,rt(说明:
以助记符表示,是汇编指令;以代码表示,是机器指令)
000000
rs(5位)
rt(5位)
rd(5位)
reserved
功能:
rd←rs+rt。
reserved为预留部分,即未用,一般填“0”。
(2)addirt,rs,immediate
000001
rs(5位)
rt(5位)
immediate(16位)
功能:
rt←rs+(sign-extend)immediate;immediate符号扩展再参加“加”运算。
(3)subrd,rs,rt
000010
rs(5位)
rt(5位)
rd(5位)
reserved
完成功能:
rd←rs-rt
==>逻辑运算指令
(4)orirt,rs,immediate
010000
rs(5位)
rt(5位)
immediate(16位)
功能:
rt←rs|(zero-extend)immediate;immediate做“0”扩展再参加“或”运算。
(5)andrd,rs,rt
010001
rs(5位)
rt(5位)
rd(5位)
reserved
功能:
rd←rs&rt;逻辑与运算。
(6)orrd,rs,rt
010010
rs(5位)
rt(5位)
rd(5位)
reserved
功能:
rd←rs|rt;逻辑或运算。
==>传送指令
(7)moverd,rs
100000
rs(5位)
00000
rd(5位)
reserved
功能:
rd←rs+$0;$0=$zero=0。
==>存储器读/写指令
(8)swrt,immediate(rs)写存储器
100110
rs(5位)
rt(5位)
immediate(16位)
功能:
memory[rs+(sign-extend)immediate]←rt;immediate符号扩展再相加。
(9)lwrt,immediate(rs)读存储器
100111
rs(5位)
rt(5位)
immediate(16位)
功能:
rt←memory[rs+(sign-extend)immediate];immediate符号扩展再相加。
==>分支指令
(10)beqrs,rt,immediate
110000
rs(5位)
rt(5位)
immediate(位移量,16位)
功能:
if(rs=rt)pc←pc+4+(sign-extend)immediate<<2;
特别说明:
immediate是从PC+4地址开始和转移到的指令之间指令条数。
immediate符号扩展之后左移2位再相加。
为什么要左移2位?
由于跳转到的指令地址肯定是4的倍数(每条指令占4个字节),最低两位是“00”,因此将immediate放进指令码中的时候,是右移了2位的,也就是以上说的“指令之间指令条数”。
==>停机指令
(11)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,是在一个时钟周期内完成这五个阶段的处理。
图1单周期CPU指令处理过程
MIPS32的指令的三种格式:
R类型:
312625212016151110650
op
rs
rt
rd
sa
func
6位5位5位5位5位6位
I类型:
312625212016150
op
rs
rt
immediate
6位5位5位16位
J类型:
3126250
op
address
6位26位
其中,
op:
为操作码;
rs:
为第1个源操作数寄存器,寄存器地址(编号)是00000~11111,00~1F;
rt:
为第2个源操作数寄存器,或目的操作数寄存器,寄存器地址(同上);
rd:
为目的操作数寄存器,寄存器地址(同上);
sa:
为位移量(shiftamt),移位指令用于指定移多少位;
func:
为功能码,在寄存器类型指令中(R类型)用来指定指令的功能;
immediate:
为16位立即数,用作无符号的逻辑操作数、有符号的算术操作数、数据加载(Laod)/数据保存(Store)指令的数据地址字节偏移量和分支指令中相对程序计数器(PC)的有符号偏移量;
address:
为地址。
图2单周期CPU数据通路和控制线路图
图2是一个简单的基本上能够在单周期上完成所要求设计的指令功能的数据通路和必要的控制线路图。
其中指令和数据各存储在不同存储器中,即有指令存储器和数据存储器。
访问存储器时,先给出地址,然后由读/写信号控制(1-写,0-读。
当然,也可以由时钟信号控制,但必须在图上标出)。
对于寄存器组,读操作时,先给出地址,输出端就直接输出相应数据;而在写操作时,在WE使能信号为1时,在时钟边沿触发写入。
图中控制信号作用如表1所示,表2是ALU运算功能表。
表1控制信号的作用
控制信号名
状态“0”
状态“1”
PCWre
PC不更改,相关指令:
halt
PC更改,相关指令:
除指令halt外
ALUSrcB
来自寄存器堆data2输出,相关指令:
add、sub、or、and、move、beq
来自sign或zero扩展的立即数,相关指令:
ori、sw、lw
ALUM2Reg
来自ALU运算结果的输出,相关指令:
add、sub、ori、or、and、move
来自数据存储器(DataMEM)的输出,相关指令:
lw
RegWre
无写寄存器组寄存器,相关指令:
sw、halt
寄存器组写使能,相关指令:
add、sub、ori、or、and、move、lw
InsMemRW
读指令存储器(Ins.Data),初始化为0
写指令存储器
DataMemRW
读数据存储器,相关指令:
lw
写数据存储器,相关指令:
sw
ExtSel
相关指令:
ori,(zero-extend)immediate(0扩展)
相关指令:
sw、lw、beq,
(sign-extend)immediate(符号扩展)
PCSrc
PC←PC+4,相关指令:
add、sub、ori、or、and、move、sw、lw、beq(zero=0)
PC←PC+4+(sign-extend)immediate,同时zero=1,相关指令:
beq
RegOut
写寄存器组寄存器的地址,来自rt字段,相关指令:
ori、lw
写寄存器组寄存器的地址,来自rd字段,相关指令:
add、sub、and、or、move
ALUOp[2..0]
ALU8种运算功能选择(000-111),看功能表
相关部件及引脚说明:
InstructionMemory:
指令存储器,
Iaddr,指令存储器地址输入端口
IDataIn,指令存储器数据输入端口(指令代码输入端口)
IDataOut,指令存储器数据输出端口(指令代码输出端口)
RW,指令存储器读写控制信号,为1写,为0读
DataMemory:
数据存储器,
Daddr,数据存储器地址输入端口
DataIn,数据存储器数据输入端口
DataOut,数据存储器数据输出端口
RW,数据存储器读写控制信号,为1写,为0读
RegisterFile:
(寄存器组)
ReadReg1,rs寄存器地址输入端口
ReadReg2,rt寄存器地址输入端口
WriteReg,将数据写入的寄存器端口,其地址来源rt或rd字段
WriteData,写入寄存器的数据输入端口
ReadData1,rs寄存器数据输出端口
ReadData2,rt寄存器数据输出端口
WE,写使能信号,为1时,在时钟上升沿写入
ALU:
result,ALU运算结果
zero,运算结果标志,结果为0输出1,否则输出0
表2ALU运算功能表
ALUOp[2..0]
功能
描述
000
A+B
加
001
A–B
减
010
B–A
减
011
A∨B
或
100
A∧B
与
101
/A∧B
A非与B
110
AB
异或
111
A⊙B
同或
需要说明的是根据要实现的指令功能要求画出以上数据通路图,和确定ALU的运算功能(当然,以上指令没有完全用到提供的ALU所有功能,但至少必须能实现以上指令功能操作)。
从数据通路图上可以看出控制单元部分需要产生各种控制信号,当然,也有些信号必须要传送给控制单元。
从指令功能要求和数据通路图的关系得出以上表1,这样,从表1可以看出各控制信号与相应指令之间的相互关系,根据这种关系就可以得出控制信号与指令之间的关系表(留给学生完成),再根据关系表可以写出各控制信号的逻辑表达式,这样控制单元部分就可实现了。
指令执行的结果总是在下个时钟到来前开始保存到寄存器、或存储器中,PC的改变也是在这个时候进行。
另外,值得注意的问题,设计时,用模块化的思想方法设计,关于ALU设计、存储器设计、寄存器组设计等等,也是必须认真考虑的问题。
可以参考其他资料文档,里面有相应的设计方法介绍。
(资料文档:
MIPS汇编与单周期CPU.ppt)。
四.实验器材
电脑一台、XilinxISE软件一套。
五.实验分析与设计
(1)初步规划出实验流程:
①根据cpu数据通路和控制线路图决定要写多少个模块
②写子模块
③用主模块把子模块连接起来
④写测试文件
⑤设计一段汇编程序输入二进制
⑤测试
(2)进一步设计:
①根据通路图决定写11个子模块,分别是PC,PC+4,PC+立即数,指令寄存器,数据储存,寄存器模块,控制模块,选择模块,符号扩展,算术逻辑单元
②子模块分别命名为pc,pcAddFour,pcAddImm,ROM,RAM,regfile,ControlUnit,dataSelect_5_Bit,dataSelect_32_Bit,signExtend,ALU
③指令由ROM读取到mem中。
a)把decode传到控制模块ControlUnit中,然后根据传入的六位操作码和zero给控制信号赋值;
(两个输入)
(其中一个控制信号)
b)把rs、rt、rd传到寄存器模块regfile中,从寄存器组中取rs、rt值传出,得出结果可能还要写回rt、rd;
(这里由RegWre控制是否写⼊)
c)把立即数传到符号扩展模块signExtend中,把16位⽴即数扩展成32位,得出结果传⼊选择模块和PC+立即数模块。
(在这里进行左移)
④ALU通过传入的ALUop决定计算类型,对传入的数据(A、B)进行运算。
⑤ControlUnit通过PCSrc决定下⼀个PC是PC+4还是PC+4+偏移量
⑥RAM从内存中读取数据或者把数据写⼊内存。
(3)每个模块的具体代码
(3)测试代码
//addi$1,$0,8
00000100000000010000000000001000
//addi$2,$0,16
000001000000001000000000000100000
//sw$2,0($2)
00011100010000100000000000000000
//add$3,$2,$1
00000000010000010001100000000000
//sub$3,$3,$1
00001000011000010001100000000000
//beq$2,$3,-2
0010010001000011111111*********0
//ori$1,$1,4
00001100001000010000000000000100
//or$3,$2,$1
00010100010000010001100000000000
//move$3,$2
00011000010000000001100000000000
//beq$2,$3,2
00100100010000110000000000000010
//lw$4,0($2)
00100000010001000000000000000000
//halt
11111100000000000000000000000000
二进制代码为
00000100
00000001
00000000
00001000
00000100
00000010
00000000
00010000
00011100
01000010
00000000
00000000
00000000
01000001
00011000
00000000
00001000
01100010
00000000
00000010
00001000
01100001
00011000
00000000
00100100
01000011
11111111
11111110
00001100
00100001
00000000
00000001
00010100
01000001
00011000
00000000
00011000
01000000
00011000
00000000
00010000
01100010
00001000
00000000
00100000
01000100
00000000
00000000
11111100
00000000
00000000
00000000
输出为:
六.实验心得
在这次的作业中学到了很多东西,在每次遇到不懂的问题时,都会各种XX,然后和队友一起研究,在解决问题的过程中对指令,和CPU结构有了更进一步的了解,同时,也熟练了汇编语言的相关操作。
作为一名初学者,有不懂的东西就要多琢磨,多研究,多XX,只有这样才能学好这门课程,才能真正掌握计算机组成原理的相关知识。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大计 周期 CPU 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)