以下为《CPU流水线设计报告》的无排版文字预览,完整内容请下载
目录
一、 课程设计概述 3
二、 设计原理 4
2.1 MIPS计算机硬件组成 4
2.2 MIPS指令格式 5
2.3 经典的5段RISC流水线结构 6
2.4 流水线冒险 7
三、 具体设计和实现 9
3.1 设计目标 9
3.2 数据通路 11
3.3 指令执行流程 11
3.4 具体模块设计 12
四、 实验仿真 30
4.1 R型指令 30
4.2 J型指令 36
4.3 I型指令 37
4.4 测试小程序 42
五、 思考与总结 44
参考文献 46
附录 47
仿真程序 47
课程设计概述
在经过计算机组成原理和计算机体系结构两门的学习后,我们要求对CPU有了初步的了解。此次课程设计要求以FPGA开发平台为例,分析 CPU 设计的流程与仿真。
本次开发使用的硬件描述语言是 Verilog 语言,使用的指令系统是一个以 MIPS 指令集为子集的指令系统,共 22 条指令,所用的设计仿真软件Modelsim。
本次课程设计的CPU主要设计思想如下:
每条指令在执行过程中所要使用的部件可能不尽相同,为了减少硬件开销,我们将指令执行的过程分成经典的五级流水线。将大多数指令需要使用的功能部件结合起来,比如取指、译码和执行。由于个别特殊指令还有访存和回写,或者兼具两者,所以添加了这两个阶段。根据指令集的数据流,模块化具体设计。优点是可以很好的添加模块比如除法。缺点是信号比较多,不易更改和保证正确性。
本次报告的总体内容分布如下:
在第二章中,主要描述了CPU的设计原理。包括了硬件组成,指令格式,经典流水结构以及流水线冒险等基本概念和原理。
在第三章中,则是对CPU进行具体的设计和实现。首先,提出了本次报告中描述的CPU的设计目标,分别从主要指标,实现指令集,流水线和冲突消解四个方面。接着给出了数据通路图、状态转换图和指令的执行流程。最后,给出了各个模块的具体设计,包括功能,接口以及连接方式。
在第四章中,集中对实现目标中的指令集进行仿真,并实现一个小程序的仿真。
在第五章中,记录了我个人在此次课程设计中的一些思考、困惑、个人体会和总结。
在本次报告的最后,列出了在完成此次课程设计中所参考的资料和文献,以及仿真程序的代码。
设计原理
2.1 MIPS计算机硬件组成
计算机硬件是计算机的重要组成部分,其中包含了5个重要的组成部分:运算器、控制器、存储器、输入设备、输出设备。
1、运算器。
计算机硬件中的运算器主要功能是对数据和信息进行运算和加工。运算器包括以下几个部分:通用寄存器、状态寄存器、累加器和关键的算术逻辑单元。运算器可以进行算术计算(加减乘除)和逻辑运算(与或非)。
2、控制器。
控制器和运算器共同组成了中央处理器(CPU)。控制器可以看作计算机的大脑和指挥中心,它通过整合分析相关的数据和信息,可以让计算机的各个组成部分有序地完成指令。
3、存储器。
顾名思义,存储器就是计算机的记忆系统,是计算机系统中的记事本。而和记事本不同的是,存储器不仅可以保存信息,还能接受计算机系统内不同的信息并对保存的信息进行读取。存储器由主存和辅存组成,主存就是通常所说的内存,分为RAM和ROM两个部分。辅存即外存,但是计算机在处理外存的信息时,必须首先经过内外存之间的信息交换才能够进行。
4、输入设备。
输入设备和输出设备都是进行人机互动的关键设备。鼠标、键盘等输入设备的出现,给计算机带来了天翻地覆的变化。现有的鼠标主要有两类:光电鼠标和机械式鼠标。通过鼠标,我们可以很方便地在计算机屏幕上进行坐标的定位,可以很好地操作图形和软件处理,为人类提供了最大的便捷。键盘也是一类非常重要的输入设备,计算机大部分的指令都是通过键盘输入来进行的。
5、输出设备。
输出设备也是计算机人机互动的关键设备,它的特点是可以将计算机的信息以画面的形式展现出来,具有很好的直观性。常见的输出设备有显示器、打印机、语音和视频输出装置等。
我们可以用图描述计算机的硬件组成,见图2.1。
/
2.2 MIPS指令格式
指令的布局形式叫做指令格式。
MIPS指令占32位,与数据字的位数相等。
数据字的定义:数据字,由于计算机使用的信息既有指令又有数据,所以计算机字可以代表指令,也可以代表数据。如果某字代表要处理的数据,则称为 数据字;如果某字为一条指令,则称为指令字。
具体分类如下:
R型指令格式
31:26
25:21
20:16
15:11
10:6
5:0
OP
RS
RT
RD
SHAMT
FUNC
功能:寄存器-寄存器ALU操作(包括算术运算、逻辑运算)
J型指令格式
31:26
25:21
20:16
15:0
OP
RS
RT
immidiate
功能:条件分支、跳转
J型指令格式
31:26
25:0
OP
Address
功能:跳转
2.3 经典的5段RISC流水线结构
(1)流水线的关键词:拆分 并行
(2)指令的处理过程拆分为:取指 译码 执行
(3)分析:
一个处理单元:一条指令需要3T
N条指令需要3nT
三个处理单元:构成三级流水线 提高效率
实际不会每个阶段都是T:取指过长(可以引入cache)
Load/store 执行时间长(采用五级流水线)
(4)五级流水线
取指:从IR中读取指令 确定下一条指令地址
译码:
A.从通用寄存器读取要使用的寄存器的值
B.立即数:符号(无符号)扩展
C.转移指令 满足条件:给出转移目标 作为新的指令地址
执行:
A.运算结果
B.load/store 计算目标地址
访存:
A.load/store 访问数据存储器
B.执行结果给回写
C.异常处理:清除流水线 转移到异常处理
回写:保存结果至目标寄存器
(5)流水线图像描述,见图2.3:
/
2.4 流水线冒险
?相关----由于一段机器语言程序的邻近指令之间出现了某种关联后,为了避免出错而使得它们不能同时被解释的现象,又称相关冲突。
在流水解释过程中可能会出现三种相关,这三种相关是资源相关、数据相关和控制相关。
资源相关:是指多条指令进入流水线后在同一个时钟周期内争用同一功能部件所发生的相关。在图2.4.1所示的流水解释时空图中,在第4个时钟周期时,第I1条指令的MEM段某某I4条指令的IF段都要访问存储器。当数据和指令混存在同一个存储器且只有一个访问端口时,便会发生两条指令争用同一个存储器资源的相关冲突。
/
数据相关:是指由于相邻的两条或多条指令使用了相同的数据地址而发生的关联。这里所说的数据地址包括存储单元地址和寄存器地址。
?例如,有如下三条指令依次流入如图2.4.2所示的流水线:
??????? ADD R1,R2,R3??? ;(R2)+(R3)→R1
??????? SUB R1,R4,R5??? ;(R4)-(R5)→R1
??????? AND R4,R1,R7??? ;(R1)∧(R7)→R4
/
第三条指令与前面两条指令之间存在着关于寄存器R1的先写后读(RAW)数据相关。
控制相关:是指由转移指令引起的相关。
具体设计和实现
3.1 设计目标
3.1.1 CPU的主要指标
(1)处理器的指令系统采用了 32 为 MIPS CPU 的常用指令,处理器结构参考 MIPS 的 体系结构进行设计。总线宽度为 32 位。
(2)指令和数据共用存储器,地址线为 32 根,编址方式采用按字编址
3.1.2 实现部分MIPS指令集
本报告中所描述的CPU中所采取了MIPS指令级中的部分指令构成指令集。其中包括R型指令12个(包括ADD、SUB、XOR、AND、OR、NOR、SLT、SLLV、SRAV、ADDU、SUBU、JR),J型指令1个(J),I型指令9个(包括ADDI、ANDI、ORI、XORI、ADDIU、LUI、BEQ、BGTZ、BLTZ)。共22条指令。
指令类型
26-31位
21-25位
16-20位
11-15位
6-10位
0-5位
指令
分类
R型指令
000000
rs
rt
rd
00000
100000
ADD
Arith
100010
SUB
Arith
100110
XOR
Logical
100100
AND
Logical
100101
OR
Logical
100111
NOR
Logical
101010
SLT
Arith
000100
SLLV
Shift
000111
SRAV
Shift
100011
SUBU
Arith
100001
ADDU
Arith
001000
JR
Jumpb
J型
000010
address
J
Jumpb
I型
001000
rs
rt
immediate
ADDI
Arith
001100
ANDI
Logical
001101
ORI
Logical
001110
XORI
Logical
001001
ADDIU
Arith
000100
BEQ
Jumpb
000111
BGTZ
Jumpb
001111
LUI
Logical
000001
00000
BLTZ
Jumpb
3.1.3 实现五级流水线
取指-译码-执行-访存-回写
3.1.4 实现冲突消解
(1)解决资源相关的方法主要有以下五种:
A.从时间上推后下一条指令的访存操作。
B.让操作数和指令分别存放于两个独立编址且可同时访问的主存储器中。
C.仍然维持指令和操作数混存,但采用多模块交叉主存结构。
D.在CPU内增设指令Cache。
E.在CPU内增设指令Cache和数据Cache。
(2)解决数据相关的方法主要有以下两种:
A.推后相关单元的读。
B.设置相关专用通路,又称采用定向传送技术。
(3)解决控制相关的方法主要有以下两种:
A.延迟转移技术:将转移指令与其前面的与转移指令无关的一条或几条指令对换位置,让成功转移总是在紧跟的指令被执行之后发生,从而使预取的指令不作废。
B.转移预测技术:可分为静态转移预测和动态转移预测两种(由硬件来实现)。
(4)本报告中解决冲突方法:
3.2 数据通路
针对所设计的22条指令,可以画出基本数据通路图,见图3.2。
/
3.3 指令执行流程
(1)IR从PC对应的地址从存储器中取出指令,由PC获得指令地址。
(2)送到译码段由26-31位分析操作属于I型、R型和J型。可以分为000000和其他段,一般R型指令是000000,I和J型是其他。在此还会判断指令的另外一种分类,有指令类型:逻辑指令、算术指令、移位指令、跳转指令、分支指令等。指令类型中有子类型,逻辑指令中有与、或、非、异或等;算数指令中有加、减、乘、除等;移位指令有左移、右移等。在分析译码过程中,首先判断哪一型的指令,然后根据不同指令的特点找出具体是什么指令,保存具体指令类型和子类型以便执行阶段使用。另外还需要根据具体指令特点保存操作数的信息至regfile模块。
(3)从译码段传出的信息有指令类型、子类型和相关操作数。根据具体的指令类型和子类型定位到具体的指令,执行相应的操作。在移位指令时,我们添加了一个新的寄存器分别记录高位和低位。此外,高低位寄存器也会输出高低位的信息给执行阶段,访存模块在跳转分支时可能也会有高低位信息返回给执行阶段。在有分支和跳转指令时,译码段还会接受一个延迟槽,有预测目标地址和相邻地址,以便实现指令调度和预测分支。
(4)判断是否LOAD/STORE指令,是的话进入到访存阶段,否则对应的数据传入到下一个阶段。
(5)写回主要是写回寄存器,一个是通用寄存器,一个是保存高低位的寄存器。在出现跳转或者分支指令时,高低位的内容还会写回到执行模块。
(6)在控制指令流水,解决冲突的过程中,我们用一个控制模块,如果产生冲突就产生停顿传给各个模块,而控制模块的信息是从译码和执行阶段都会有冲突检测的停顿请求信号。
3.4 具体模块设计
3.4.1 IF(取指)级
(1)Inst_rom模块
功能:实现指令寄存器,存储指令。
接口:
序号:
接口名称:
输入/输出:
功能:
1
clk
输入
时钟信号
2
ce
输入
芯片使能
3
addr
输入
存地址
4
inst
输出
存指令
描述:
/
(2)pc_reg模块
功能:给出指令地址。
接口:
序号:
接口名称:
输入/输出:
功能:
1
clk
输入
时钟信号
2
rst
输入
复位信号
3
stall
输入
停顿信号
4
branch_target_address_i
输入
分支目标地址
5
branch_flag_i
输入
是否分支
6
pc
输出
pc地址
7
ce
输出
使能信号
描述:
/
if模块
功能:将取得的指令、指令地址,在写一个时钟送进译码阶段。
接口:
序号:
接口名称:
输入/输出:
功能:
1
clk
输入
时钟信号
2
rst
输入
复位信号
3
stall
输入
停顿信号
4
if_pc
输入
地址输入
5
if_inst
输入
指令输入
6
id_pc
输出
地址输出
7
id_inst
输出
指令输出
描述:
/
3.4.2 ID(译码)级
(1)id模块
功能:判断运算类型、保存源操作数、目的寄存器地址。
接口:
序号:
接口名称:
输入/输出:
功能:
1
rst
输入
复位信号
2
pc_i
输入
地址输入
3
inst_i
输入
指令输入
4
ex_wdata_i
输入
执行写数据
5
ex_wd_i
输入
执行写地址
6
ex_wreg_i
输入
执行写允许
7
mem_wdata_i
输入
访存写数据
8
mem_wd_i
输入
访存写地址
9
mem_wreg_i
输入
访存写允许
10
reg1_data_i
输入
源1数据
11
reg2_data_i
输入
源2数据
12
is_in_delayslot_i
输入
是否在延迟槽
13
stallreq
输出
停顿请求
14
aluop_o
输出
操作类型
15
alusel_o
输出
操作子类型
16
wreg_o
输出
写允许输出
17
wd_o
输出
写地址输出
18
is_in_delayslot_o
输出
是否在延迟槽
19
link_adrr_o
输出
相邻地址输出
20
branch_target_address
输出
分支目标地址
21
branch_flag_o
输出
是否分支
22
next_inst_in_delayslot
输出
延迟槽中
下一条指令
23
reg1_o
输出
源1数据
24
reg2_o
输出
源2数据
25
reg1_read_o
输出
源1允许读
26
reg2_read_o
输出
源2允许读
27
reg1_addr_o
输出
源1读地址
28
reg2_addr_o
输出
源2读地址
描述:
/
(2)id_ex模块
功能:在下一个时钟周期送进执行阶段。
接口:
序号:
接口名称:
输入/输出:
功能:
1
clk
输入
时钟信号
2
rst
输入
复位信号
3
stall
输入
停顿信号
4
id_aluop
输入
操作类型输入
5
id_alusel
输入
操作子类型输入
6
id_reg1
输入
源1数据
7
id_reg2
输入
源2数据
8
id_wreg
输入
写允许
9
id_wd
输入
写地址
10
id_is_in_delayslot
输入
是否在延迟槽中
11
id_link_address
输入
相邻地址
12
next_inst_in_delayslot_i
输入
延迟槽中
下一条指令
13
is_in_delayslot_o
输出
是否在延迟槽中
14
ex_aluop
输出
操作类型输出
15
ex_alusel
输出
操作子类型输出
16
ex_reg1
输出
源1数据
17
ex_reg2
输出
源2数据
18
ex_wreg
输出
写允许
19
ex_wd
输出
写地址
20
ex_is_in_delayslot
输出
是否在延迟槽中
21
ex_link_address
输出
相邻地址
描述:
/
3.4.3 EX(执行)级
(1)ex模块
功能:运算,给出结果。
接口:
序号:
接口名称:
输入/输出:
功能:
1
rst
输入
复位信号
2
aluop_i
输入
操作类型
3
alusel_i
输入
操作子类型
4
reg1_i
输入
源1数据
5
reg2_i
输入
源2数据
6
wreg_i
输入
写允许
7
wd_i
输入
写地址
8
is_in_delayslot_i
输入
是否在延迟槽
9
link_address_i
输入
相邻地址
10
hi_i
输入
高位输入
11
lo_i
输入
低位输入
12
wb_hi_i
输入
回写高位输入
13
wb_lo_i
输入
回写低位输入
14
wb_whilo_i
输入
回写高低允许
15
mem_hi_i
输入
访存高位输入
16
mem_lo_i
输入
访存低位输入
17
mem_whilo_i
输入
访存高 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 《基于 MIPS 指令集的流水线 CPU 设计与实现》[J].实验室研究与探索,2017,36(8):148-152+172
[5] 王某某,余某某,张某某.《“计算机组成原理”实验CPU设计方法研究》[J]. 实验技术与管理,2018,35(5):2-5+9
[6] 秦国锋等.《计算机系统结构课程实验静态流水线 CPU 的设计、实现与性能分析》[J]. 教育现代化, 2018,5(20):183-187+195
[7] [美]John L.Hennessy ,David A.Patterson著.贾洪峰译.《计算机体系结构:量化研究方法(第5版) 》[M].XX:人民邮电出版社
附录
仿真程序
addi $9,$8,1
addiu $9,$8,1
andi $9,$8,1
ori $9,$8,15
xori $9,$8,1
lui $9,255
bltz $8,f1
nop
nop
nop
f1:
beq $8,$8,f2
nop
nop
nop
f2:
bgtz $8,f3
nop
nop
nop
nop
nop
nop
nop
f3:
nop
[文章尾部最后500字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。
以上为《CPU流水线设计报告》的无排版文字预览,完整内容请下载
CPU流水线设计报告由用户“zhuzheqi2096409”分享发布,转载请注明出处