华科组原课设报告.docx
《华科组原课设报告.docx》由会员分享,可在线阅读,更多相关《华科组原课设报告.docx(37页珍藏版)》请在冰豆网上搜索。
华科组原课设报告
华科组原课设报告
题目:
5段流水CPU设计
专业:
计算机科学与技术
班级:
学号:
姓名:
电话:
邮件:
完成日期:
2017-03-10周五下午
1课程设计概述
1.1课设目的
计算机组成原理是计算机专业的核心基础课。
该课程力图以“培养学生现代计算机系统设计能力”为目标,贯彻“强调软/硬件关联与协同、以CPU设计为核心/层次化系统设计的组织思路,有效地增强对学生的计算机系统设计与实现能力的培养”。
课程设计是完成该课程并进行了多个单元实验后,综合利用所学的理论知识,并结合在单元实验中所积累的计算机部件设计和调试方法,设计出一台具有一定规模的指令系统的简单计算机系统。
所设计的系统能在LOGISIM仿真平台和FPGA实验平台上正确运行,通过检查程序结果的正确性来判断所设计计算机系统正确性。
课程设计属于设计型实验,不仅锻炼学生简单计算机系统的设计能力,而且通过进行中央处理器底层电路的实现、故障分析与定位、系统调试等环节的综合锻炼,进一步提高学生分析和解决问题的能力。
1.2设计任务
本课程设计的总体目标是利用FPGA以及相关外围器件,设计五段流水CPU,要求所设计的流水CPU系统能支持自动和单步运行方式,能正确地执行存放在主存中的程序的功能,对主要的数据流和控制流通过LED、数码管等适时的进行显示,方便监控和调试。
尽可能利用EDA软件或仿真软件对模型机系统中各部件进行仿真分析和功能验证。
1.3设计要求
(1)根据课程设计指导书的要求,制定出设计方案;
(2)分析指令系统格式,指令系统功能。
(3)根据指令系统构建基本功能部件,主要数据通路。
(4)根据功能部件及数据通路连接,分析所需要的控制信号以及这些控制信号的有效形式;
(5)设计出实现指令功能的硬布线控制器;
(6)调试、数据分析、验收检查;
(7)课程设计报告和总结。
1.4技术指标
(8)支持表1.1前27条基本32位MIPS指令;
(9)支持教师指定的4条扩展指令;
(10)支持多级嵌套中断,利用中断触发扩展指令集测试程序;
(11)支持5段流水机制,可处理数据冒险,结构冒险,分支冒险;
(12)能运行由自己所设计的指令系统构成的一段测试程序,测试程序应能涵盖所有指令,程序执行功能正确。
(13)能运行教师提供的标准测试程序,并自动统计执行周期数
(14)能自动统计各类分支指令数目,如不同种类指令的条数、冒险冲突次数、插入气泡数目、load-use冲突次数、动态分支预测流水线能自动统计预测成功与失败次数。
表1.1指令集
#
指令助记符
简单功能描述
备注
1
ADD
加法
指令格式参考MIPS32指令集,最终功能以MARS模拟器为准。
2
ADDI
立即数加
3
ADDIU
无符号立即数加
4
ADDU
无符号数加
5
AND
与
6
ANDI
立即数与
7
SLL
逻辑左移
8
SRA
算数右移
9
SRL
逻辑右移
10
SUb
减
11
OR
或
12
ORI
立即数或
13
NOR
或非
14
LW
加载字
15
SW
存字
16
BEQ
相等跳转
17
BNE
不相等跳转
18
SLT
小于置数
19
STI
小于立即数置数
20
SLTU
小于无符号数置数
21
J
无条件转移
22
JAL
转移并链接
23
JR
转移到指定寄存器
If$v0==10halt(停机指令)
else数码管显示$a0值
24
SYSCALL
系统调用
25
MFC0
访问CP0
中断相关,可简化,选做
26
MTC0
访问CP0
中断相关,可简化,选做
27
ERET
中断返回
异常返回,选做
28
扩展指令:
SLLV
逻辑可变左移
29
扩展指令:
SUBU
无符号减
30
扩展指令:
LH
加载半字
31
扩展指令:
BLEZ
小于等于0是转移
2总体方案设计
2.1扩展指令设计
在本次实验中首先需要完成单周期CPU的设计,然后在其基础之上完成老师布置的4条扩展指令的添加,对于单周期CPU的设计在组成原理实验中已经做了详细介绍,这里不再赘述。
主要介绍四条扩展指令的设计有实现。
为了实现实验课程的连贯性,这里给出单周期CPU设计的总体结构图如图2.1所示。
在单周期的基础之上添加4条扩展指令主要有运算指令2条,存储访问指令1条,跳转指令1条。
图2.1总体结构图
2.1.1数据通路的设计
在单周期CPU的基础之上,添加4条扩展指令,主要包括运算指令SLLV,SUBU。
存储访问指令LH,以及跳转指令BLEZ。
下面给出四条扩展指令的数据通路。
表2.2指令系统数据通路
指令
PC
RF
ALU
DM
R1#
R2#
W#
Din
A
B
OP
Addr
Din
SLLV
pc+4
rs
rt
rd
ALU
R2#
R1#
0000
无
无
SUBU
pc+4
rs
rt
rd
ALU
R2#
R1#
0110
无
无
LH
pc+4
base
无
rt
Memory
R1#
立即数
0101
ALU
无
BLEZ
pc+立即数
rs
无
无
无
无
无
无
无
无
2.1.2控制器的设计
当完成扩展指令的数据通路时,接下来就需要完成对数据通路以及运算器的控制。
对于控制信号进行统计,包括各个主要部件所需要输入的控制信号,以及数据通路合并表中所示的具有多输入的主要部件需要进行输入选择的控制信号,并且对各个统计信号的各种取值情况进行定义,单周期CPU中的部分控制信号在组成原理实验报告中已经完成这里不再赘述,此处只对4条扩展指令的控制信号进行描述其中的SUBU扩展指令没用新的控制信号。
统计得到的控制信号以及说明如表2.3。
表2.3主控制器控制信号的作用说明
控制信号
取值
说明
SLLV
0
寄存器堆R2或者0-15的扩展,或者6-10的扩展
1
寄存器堆R1
LH
0
数据来自ALU或者memory
1
数据来自ALU或者memory将0-15扩展为32位数据
BLEZ
0
PC+4进行更新PC
1
PC+4后的值加上来自指令的0-15的扩展更新PC
对照所有控制信号,依次分析各条指令,分析该指令执行过程中需要哪些控制信号,对于与本条指令无关的控制信号,控制信号的取值一律为0,以简化控制器电路的设计。
对于单周期CPU的控制信号在组成原理实验中已经做了详细描述,这里不再赘述,但对于扩展指令的数据通路的控制信号会做详细描述。
该控制信号表的框架如表2.4所示。
表2.4主控制器控制信号框架
指令
R
ALUop
MemWrite
MemRead
Din
Branch
SYSCALL
SLLV
LH
BLEZ
SLLV
1
0000
0
0
无
0
0
1
0
0
SUBU
1
0110
0
0
无
0
0
0
0
0
LH
1
0101
0
1
无
0
0
0
1
0
BLEZ
0
无
0
0
无
1
0
0
0
1
2.2中断机制设计
2.2.1总体设计
中断实验部分主要分为两部分,单机中断和多级中断,这里主要介绍多级中断的实现机制。
多级中断主要包括如下几个阶段。
(1)中断信号来临。
(2)关中断,保护现场,设置新的屏蔽字,PC值压栈。
(3)开中断,执行中断程序。
(4)关中断,恢复现场,开中断。
(5)中断返回,回到断点PC,执行主程序。
实验实现的3个中断分别编号为1号中断,2号中断,3号中断。
优先级为:
3>2>1。
3号中断具有最高优先级。
当执行主程序时具有最低优先级,级数为0级。
当中断信号来临时可以打断主程序,优先级高的中断可以打断优先级低的中断,当有优先级更高的中断的时候转去执行优先级更高的中断,当优先级更高的中断执行完成之后,每次主程序被打断或者有优先级更高的中断打断优先级低的中断的时候,将当前的PC存放到一个特殊的寄存器的值进行压栈处理,EPC其实就是一个被调用者保护寄存器。
在多级中断中,中断信号的产生,优先级的比较以及PC值的保存时使用硬件实现的,其余是使用软件的方式实现的。
2.2.2硬件设计
(1)生成中断信号。
本次实验需要实现的有3个中断信号,分别编号为1号中断,2号中断,3号中断。
优先级为:
3>2>1。
3号中断具有最高优先级。
当执行主程序时具有最低优先级,级数为0级。
3个中断信号分别对应不同的中断子程序。
中断信号的产生使用的是中断信号产生电路,中断信号产生电路使用的是老师给的参考资料的电路。
中断信号发生电路具有统一的时钟断和不同的清零端,中断信号使用上升沿触发。
(2)中断信号筛选。
中断信号筛选电路需要实现中断信号的筛选,主要是当有优先级高的中断来临的时候转向去执行优先级更高的中断,如果有优先级低的中断来临着将中断信号压栈,如果是同级中断,则忽略该中断。
中断筛选电路的实现需要使用当前的中断优先级以及新中断的优先级还要使用到优先编码器,通过有线编码器决定中断信号的选择中断信号。
(3)PC值的转变。
在中断实验部分,转向到中断程序的PC值的过程是由硬件实现的。
通过执行中断返回指令ERET指令,在物理电路中设计一个由ERET信号控制的控制信号,当执行ERET指令时,跳转到对应的PC值,这个PC值可能是优先级低的中断或者是主程序。
2.2.3软件设计
(1)开关中断。
本次实验的开关中断是使用软件来实现,使用mfc0和mtc0实现中断的开关,但同时在硬件部分需要使用一个使能控制信号来控制中断信号这个使能信号需要结合软件部分进行使用。
(2)保护现场。
当进入中断程序之前,需要进行现场的保存,如果不保护现场那么返回后以前的值没有了,也就不能恢复当断点的状态。
现场保存主要是将各个寄存器的值进行压栈处理,数据堆栈通常放在数据存储器中。
MIPS处理器的堆栈是向下生长的,因此SP寄存器初始指向存储器的最高地址,每保存一个值,SP要减4;出栈时则SP加4。
2.3流水CPU设计
2.3.1总体设计
在本次实验中,需要完成流水CPU的设计。
流水CPU的设计是建立在单周期CPU并且增加4条扩展指令的基础之上的。
由于设计的流水线是理想流水线,需要完成的指令是理想流水线的4条测试指令加上扩展的4条指令,理想流水线的设计主要部分是设计缓存寄存器组,主要包括5个阶段的寄存器组:
1.取指令阶段2.译码阶段3.执行运算4.访存阶段5.结果回写阶段。
5个阶段的数据保存根据需要完成的指令来决定,指令的数据和对应的控制指令在这个阶段没有被使用,那么就需要将其保存,如果这个阶段使用了那么下一个阶段就不需要保存。
在对结果进行测试的时候可能会出现数据冲突的现象,处理的方法是添加无关指令等待数据处理完,避免冲突。
2.3.2流水接口部件设计
流水线的接口部件主要是使用一些寄存器组来存放需要使用到的数据和控制信号,这些寄存器组的数据宽度不一,因为有的是立即数,有的是地址,有的是控制信号,主要有两类,一类是32位的数据;一类是1位的控制信号。
其中的寄存器组需要使用统一的时钟控制信号,因为寄存器组是随时会被使用的,为方便将所有的寄存器的使能端设常数1,又因为当有新的数据来时,寄存器的数据会自动被覆盖,所以将其清0端设为常量0。
由总体设计可知,各个阶段的寄存器组的数目在依次递减,因为每过一个阶段,寄存器组中的数据被使用使得下个阶段的存储数据变少。
对于寄存器组封装的时对应的接口位置,由于在本次实验中,流水接口的设计使用的是隧道连接,所以接口的布局显得不是那么的重要。
2.3.3理想流水线设计
为了便于表达理想流水线的设计思想,在本次实验中,理想流水线的设计主要涵盖了8条指令,其中4条是参考资料中提供的理流水线的测试用例,还有4条是CCMD扩展指令。
为了完成理想流水线的设计,不得不对每一条指令重新走一遍数据通路,将每条指令的数据在什么阶段使用,需要使用什么样的控制信号必须搞清楚。
还未使用的数据和控制信号需要使用该阶段的寄存器组进行缓存,以便在流水线的下一个阶段使用,需要注意的是,regfile寄存器组的RW,DIN,WE三个信号需要一直保存到最后一个阶段。
对于流水线的测试文件,为了避免数据冲突需要使用到一些无关指令,等待相关数据的到来或者相关指令的完成,避免冲突的发生。
3详细设计与实现
3.1扩展指令的实现
3.1.1扩展指令的设计
1)指令SLLV.
指令SLLV为逻辑可变左移。
其包含的指令格式以及对应的逻辑功能如图3.1所示。
图3.1指令SLLV
其实现的逻辑功能为:
将寄存器编号为RT的寄存器的值左移寄存器编号为RS的寄存器的值的位数。
并且将逻辑左移后的结果存放到寄存器编号为RD的寄存器中。
2)指令SUBU.
指令SUBU为无符号减,其包含的指令格式以及对应的逻辑功能如图3.2所示。
图3.2指令SUBU
其实现的逻辑功能为:
将寄存器编号为RS的寄存器的值减去寄存器编号为RT寄存器的值,并将计算结果的值保存到寄存器编号为RD的寄存器。
3)指令LH.
指令LH为加载半字,其包含的指令格式以及对应的逻辑功能如图3.3所示。
图3.3指令LH
其实现的功能为:
将编号为BASE的寄存器的值加上0-15位立即数扩展后的32位数之后作为一个地址,并以这个地址访问主存,从主存中读取其值,并将这个值存放到编号为RT的寄存器中。
其中设计的立即数的位扩展为有符号扩展。
4)指令BLEZ.
指BLEZ为小于等于0是跳转。
其包含的指令格式以及对应的逻辑功能如图3.4所示。
图3.4指令BLEZ
其实现的功能为:
首先判断编号为RS的寄存器的值,如果该寄存器的值小于等于0,那么将执行将PC的值加上0-15位左移两位并进行32位扩展的值作为新的PC实现跳转指令。
3.1.2数据通路的实现
本次课程实验所包含的指令有27条MIPS基础指令,以及扩展的4条指令,对于27条基础指令指令不再赘述,主要介绍4条扩展指令。
如表3.1所示。
表3.1指令系统数据通路表
指令
PC
RF
ALU
DM
R1#
R2#
W#
Din
A
B
OP
Addr
Din
SLLV
pc+4
rs
rt
rd
ALU
R2#
R1#
0000
无
无
SUBU
pc+4
rs
rt
rd
ALU
R2#
R1#
0110
无
无
LH
pc+4
base
无
rt
Memory
R1#
立即数
0101
ALU
无
BLEZ
pc+立即数
rs
无
无
无
无
无
无
无
无
在完成指令系统数据通路表的填写之后,根据列出的数据通路表,进行多指令数据通路的合并输入数,将各个主要功能部件进行连接,根据数据通路合并表的最终结果,对于所有的多输入部件使用多路选择器进行输入选择。
最终便可以完成数据通路的搭建单周期CPU数据通路如图3.5所示。
图3.5单周期CPU数据通路(Logism)
3.1.3控制器的实现
主控制器实现部分主要介绍任务中需要扩展的4条扩展指令,对于MIPS的27条基础指令在组成原理实验中已经做了详细介绍,这里不再赘述,下面主要介绍4条扩展指令的控制的实现以及逻辑关系。
对照表3.2所示。
表3.2主控制器控制信号
指令
R
ALUop
MemWrite
MemRead
Din
Branch
SYSCALL
SLLV
LH
BLEZ
SLLV
1
0000
0
0
无
0
0
1
0
0
SUBU
1
0110
0
0
无
0
0
0
0
0
LH
1
0101
0
1
无
0
0
0
1
0
BLEZ
0
无
0
0
无
1
0
0
0
1
根据在Logism实现中得到的各个一位控制信号的表达式,使用控制信号的逻辑表达式动态生成逻辑电路,这里对4条扩展指令的控制信号的逻辑表达式进行举例说明。
1)控制信号SLLV
控制信号SLLV对应的是逻辑可变左移是一个R型指令,其设计只需要针对其FUNT字段进行设计,对应的逻辑表达式为:
~funct5~funct4~funct3funct2~funct1~funct0。
该控制信号的作用为选择输入到ALU运算器的Y输入端口的数据来自哪里。
SLLV控制信号的逻辑电路图如图3.6所示。
图3.6控制信号SLLV电路图
SLLV控制信号在MAIN结构图中的位子如图3.7所示
图3.7控制信号SLLV分布图
2)控制信号LH
控制信号LH对应的是加载半字,该指令需要使用OP字段组成该控制信号的输出,对应的逻辑表达式为:
op5~op4~op3~op2~op1op0。
该控制信号的作用为是否将数据进行32位扩展。
LH控制信号的逻辑电路如图3.8所示。
图3.8控制信号LH电路图
控制信号LH在MAIN结构中的分布位子如图3.9所示。
图3.9控制信号LH分布图
3)控制信号BLEZ
控制信号BLEZ对应的是跳转指令,该指令需要使用OP字段组成该控制信号的输出,对应的逻辑结构表达式为:
~op5~op4~op3op2op1~op0。
该控制信号的作用为是否进行跳转操作。
BLEZ控制信号对应的逻辑电路图如图3.10所示。
图3.10控制信号BLEZ电路图
该控制信号在MAIN结构中的分布位子如图3.11所示。
图3.11控制信号BLEZ分布图
3.2中断机制实现
3.2.1硬件设计实现
(1)中断信号的产生。
在本次实验中需要实现3级中断,所使用到的中断信号产生电路是老师所给的参考资料中的中断产生电路,但是需要进行适当改进,将其转换为一个实现同时处理3个中断信号的电路,实现3级中断,由于当中断信号被处理完之后,需要将中断信号清0,则需要设计中断信号的清零位,下面给出中断信号产生电路的具体实现。
如图3.12所示。
图3.12中断信号产生电路图
对于中断信号的清除需要设置中断清零装置,需要比较当前的优先级已经中断信号的优先级。
中断信号的清除如图3.13所示。
图3.13中断信号清零电路图
(2)中断信号的筛选。
对于多级中断,当有一系列的中断信号来临时,需要对中断信号进行筛选。
优先级高的需要先执行,当有优先级低的中断信号时,需要暂时缓存中断信号,中断信号的筛选电路如图3.14所示。
图3.14中断信号筛选电路图
(3)中断返回。
中断返回也是使用软件实现的,中断返回使用的是ERET指令,在物理电路中需要设计一个由ERET指令控制的使能信号,当执行ERET指令时将是使能信号为1,这时将返回一个PC值,该PC值为将要执行的程序的入口地址,这个程序可能是主程序或者是优先级比上一个中断优先级低的中断程序。
图3.15中断返回信号电路图
3.2.2软件设计实现
(1)开关中断。
在本次实验中多级中断的开关中断使用了软件实现,经过与同学的商讨,开关中断还是需要一部分硬件进行,在开关中断中软件部分主要使用MFC0和MTCO指令,硬件中主要是通过使用关中断的使能信号控制中断的开关。
开关中断的部分代码如图3.16,图3.17所示。
图3.16开关中断软件部分图
图3.17开关中断软件部分图
开关中断需要使用的硬件部分的电路图如图3.18所示。
图3.18开关中断硬件部分图
(2)保护现场。
不管是单级中断还是多级中断,中断现场的保护是非常重要的中断现场的保护一般使用软件来实现,现场保存主要是将各个寄存器的值进行压栈处理,数据堆栈通常放在数据存储器中。
现场保护的实现如图3.19所示。
图3.19保护现场软件部分图
保护现场与其对应的还有回复现场,对于回复现场则是保护现场的逆过程,回复现场的软件部分图如图3.20所示。
图3.20恢复现场软件部分图
3.3流水CPU实现
3.3.1流水接口部件实现
流水线的接口部件主要是使用一些寄存器组来存放需要使用到的数据和控制信号,主要有5个阶段分别是:
IF(取址阶段),ID(译码阶段),EX(执行阶段),MEM(访存阶段),WB(回写阶段)。
这些寄存器组的数据宽度不一,因为有的是立即数,有的是地址,有的是控制信号,主要有两类,一类是32位的数据;一类是1位的控制信号。
参考资料给的测试文件需要完成的指令包括:
addi,ori,sw,syscall。
需要设计涵盖这四条指令的理想流水线,同时还要涵盖4条扩展指令。
其中的寄存器组需要使用统一的时钟控制信号,因为寄存器组是随时会被使用的,为方便将所有的寄存器的使能端设常数1,又因为当有新的数据来时,寄存器的数据会自动被覆盖,所以将其清0端设为常量0。
具体实现如下。
1)IF阶段。
IF阶段又称取指令阶段,该阶段需要缓存的有操作指令,应老师要求可以将PC进行缓存观察。
缓存的指令为32位指令,PC也为32位地址,使用两个32位寄存器进行缓存,并且使用同一的时钟和使能端。
其对应的寄存器组结构图如图3.21所示。
图3.21IF/ID寄存器组结构图
2)ID阶段
ID阶段又称译码阶段,在该阶段需要进行缓存的主要是在上一个阶段进行缓存的指令进行译码后的结果,其中的数据不仅包括有主要的总线的数据,还有控制信息。
主要有PC,寄存器组R1,R2的输出,以及符号扩展。
缓存的32位数据如图3.22所示。
图3.22ID/EX寄存器组结构图
还需要缓存的是控制信号,控制信号主要是1位的信号,其中的ALUOP控制信号,其中的ALUOP运算器选择信号主要为4位主要有Regwrite,Alusrc,Memrite,syscall,RW,SLLV,Memtoreg,LH.其对应的逻辑结构图如图3.23所示。
图3.23ID/EX寄存器组结构图
3)EX阶段
EX阶段又称执行阶段,来自ID阶段的信号关于ALU的控制信号和数据被使用,已经被使用的控制信号子啊EX阶段不需要再被缓存,但是总线的数据还是需要继续缓存,因为来自总线的数据在下个阶段依然可能被使用。
其中32位数据信号主要有来自运算器的结果Result,PC,存储器地址MEMPC,存储器写入数据MEMDIN。
如图3.24
图3.24EX/MEM寄存器组结构图
还需要缓冲的有控制信号,主要有Regwrite,Memrite,halt,syscall,RW,Memtoreg,LH.其对应的寄存器组结构图如图3.25所示
图3.25EX/MEM寄存器组结构图
4)Mem阶段
Mem阶段又称为访存阶段,该阶段完成的主要是对主存储器的访问,在访问主存储器的时候需要使用一些控制指令,已经使用的控制指令在回写阶段不需要保存,主要缓存的信息有访存的结果result,PC,regwrite,halt,RW,Mem/WB对应的寄存器组的结构