文档库 最新最全的文档下载
当前位置:文档库 › 计算机组原课设

计算机组原课设

计算机组织与结构

课程设计任务书

一、设计题目

基于Logisim软件仿真平台的5段流水CPU设计实现

二、设计内容

设计模型机系统的总体结构、指令系统和时序信号。在对该模型机系统中的部件功能利用EDA软件的仿真功能进行仿真分析和功能验证的基础上,将部分电路下载到FPGA,并与适当的外围器件相配合,实现模型机的整机系统。要求所设计的整机系统能支持自动和单步运行方式,能正确地执行存放在主存中的程序的功能,对主要的数据流和控制流通过LED适时显示信息。

三、设计要求

1)支持20条基本指令,具体见表1;

2)支持5段流水机制,可处理数据冒险,结构冒险,分支冒险;

3)能运行由自己所设计的指令系统构成的一段测试程序,测试程序应能涵盖所有

指令,程序执行功能正确。

4)能运行教师提供的标准测试程序,并统计执行时间。

四、设计流程

1)根据课程设计指导书的要求,制定出设计方案;

2)画出自己所设计计算机系统的原理框图,分析所需要的控制信号以及这些控制

信号的有效形式;

3)画出各指令的指令周期流程图和所需要的控制信号;

4)设计出实现指令功能的控制器;

5)调试、数据分析、验收检查;

6)课程设计报告和总结。

五、成绩评定

成绩评定根据考勤、课程设计的过程、课程设计的效果、课程设计报告质量等进行综合评定;其中设计过程和结果占70%,课程设计报告占30%;课程设计的成绩评定等级为不及格、及格、中、良好、优秀五级;对基本功能进行扩展或设计具有非常鲜明的特征和一定程度的创新,可根据实际情况加分。

六、设计报告要求

课程设计报告主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。要求在适当位置配合相应的实验原理图、数据通路图、实验接线图等图表进行说明。总结部分主要写设计工作简介以及设计体会。应做到文理通顺,内容正确完整,书写工整,装订整齐。课程设计报告采用《计算机组织与结构》专用设计报告模板,A4纸双面打印。

七、时间安排

课程设计的总体时间为2周,具体安排如下:

1)第1天:到实验室布置任务和集中讲解。

2)第1~3天:学生查阅资料,开始方案设计。

3)第4天:中期进度检查,单周期CPU验收检查。

4)第6天:中期进度检查,理想流水线多周期CPU验收检查。

5)第10天:最终结果验收。

八、主要参考文献

[1]DAVID A.PATTERSON(美).计算机组成与设计硬件/软件接口(原书第4版).北

京:机械工业出版社.

[2]David Money Harris(美).数字设计和计算机体系结构(第二版). 机械工业

出版社

[3]秦磊华,吴非,莫正坤.计算机组成原理. 北京:清华大学出版社,2011年.

[4]袁春风编著. 计算机组成与系统结构. 北京:清华大学出版社,2011年.

[5]张晨曦,王志英. 计算机系统结构. 高等教育出版社,2008年.

目录

1课程设计概述 (2)

1.1课设目的 (2)

1.2设计任务 (2)

1.3设计要求 (3)

2实验原理与环境 (5)

2.1实验原理 (5)

2.2实验环境 (6)

3总体方案设计 (7)

3.1构建单周期CPU (7)

3.2可支持理想流水线的多周期CPU设计 (12)

4详细设计与实现 (16)

4.1构建单周期CPU (16)

4.2可支持理想流水线多周期CPU (24)

5实验过程与调试 (32)

5.1测试用例和功能测试 (32)

5.2性能分析 (39)

5.3主要故障与调试 (39)

5.4实验流程 (42)

6设计总结与心得 (43)

6.1课设总结 (43)

6.2课设心得 (43)

参考文献 (44)

1 课程设计概述

1.1 课设目的

计算机组成原理是计算机专业的核心基础课。本课程力图以“培养学生现代计算机系统设计能力”为目标,贯彻“强调软/硬件关联与协同、以CPU设计为核心/层次化系统设计的组织思路,有效地增强对学生的计算机系统设计能力的培养”。课程设计是学完该课程并进行了多个单元实验后,综合利用所学的理论知识,并结合在单元实验中所积累的计算机部件设计和调试方法,设计出一台具有自己指令系统的简单计算机系统。所设计的系统能在基于FPGA的实验平台或Logisim仿真平台上运行一段程序,通过检查程序结果的正确性来判断所设计计算机系统正确性。

课程设计属于设计型实验,不仅有助于学生增进对计算机组成相关知识的认知和理解,锻炼学生设计简单计算机系统的能力,而且通过进行主机系统底层电路的实现、故障分析与定位、系统调式等环节的锻炼,有助于进一步提高学生分析和解决问题的能力。

1.2 设计任务

计算机系统设计的总体目标是设计模型机系统的总体结构、指令系统和时序信号。所设计的主机系统能支持自动和单步运行方式,能正确地执行存放在主存中的程序的功能,对主要的数据流和控制流通过LED显示器适时显示信息。尽可能利用EDA软件或仿真软件对模型机系统中各部件进行仿真分析和功能验证。

具体设计任务如下:

1)支持20条基本指令,具体见表1;

2)支持5段流水机制,可处理数据冒险,结构冒险,分支冒险;

3)能运行由自己所设计的指令系统构成的一段测试程序,测试程序应能涵盖所有指令,程序执行功能正确;

4)能运行教师提供的标准测试程序,并自动统计执行时间;

5)能自动统计各种冒险冲突次数,动态预测流水线能自动统计预测成功次数;

表1 指令格式

1.3 设计要求

根据理论课程所学的知识,设计出简单计算机系统的总体方案,结合各单元实验积累和课堂上所学知识,选择适当芯片,设计简单的计算机系统,具体要求如下:1)根据课设指导书的要求,制定设计方案;

2)画出自己所设计计算机系统的原理框图,分析所需要的控制信号以及这些控制信号的有效形式;

3)画出各指令的指令周期流程图和所需要的控制信号;

4)选择适当元器件,设计出实现指令功能的微程序控制器或硬布线控制器;5)调试、数据分析、验收检查;

6)课程设计报告和总结;

2 实验原理与环境

2.1 实验原理

本次实验与之前的单元实验室层层推进的,而本次实验过程也是逐步推进。在

前几次单元实验的基础上,结合学过的知识,不难设计出单周期CPU的逻辑电路图。

单周期CPU由PC、指令存储器IM、寄存器堆RF、运算器ALU、数据存储器DM

五个主要功能部件组成。其电路原理图如图2.1。

图2.1 单周期CPU原理图

在单周期CPU的基础之上,完成支持理想流水线的多周期CPU的设计。将指令过程分成5个阶段IF、ID、EX、MEM、WB,每两个阶段之间设置缓冲接口部件,即锁存器,构建各阶段之间的接口部件,接口定义尽可能简化,流水线应向后续段传递数据信息、控制信息、反馈信息,后续部件对数据的加工处理依赖于前阶段传递过来的信息。ID 段译码器生成每条指令的所有控制信号,控制信号逐段向后传递,后续部件控制信号不再单独生成。由于多周期CPU不是线性的,指令执行过程中可能会产生一些由于相关性造成的冲突,包括数据相关、结构相关、分支相关、Load-Use等等,所以在设计多周期CPU的过程中还要考虑设计能够消除上述相关性的模块。除此之外,还要考虑到效率问题。根据统计,分支指令占所有指令相当大的比例,若每次执行分支指令时

都要判断分支结果、计算分支目的地址,效率想必比较低下。为此,需在IF段的PC和指令存储器之间增加分支预测模块,每生成一个新的PC就和分支预测模块中存储的PC 作比较,若为分支指令地址,则直接取出对应的分支指令的目的地址,这样节省了判断分支结果和计算分支目的地址的时间,提高了整个CPU的效率。多周期CPU的电路原理图如图2.2。

图2.2 多周期CPU原理图

2.2 实验环境

配置了java环境的计算机操作系统(windows 7、windows 8等均可),Logisim 汉化版。 Logisim是一款基于Java的应用程序,可运行在任何支持JAVA环境的平台,方便学生来学习设计和模仿数字逻辑电路。Logisim中的主要组成部分之一就在于设计并以图示来显示CPU。当然Logisim中还有其他多种组合分析模型来对你进行帮助,如转换电路,表达式,布尔型和真值表等等。同时还可以重新利用小规模的电路来作为大型电路的一部分。

3 总体方案设计

3.1 构建单周期CPU

构建单周期CPU的目的是为了熟悉取指令、译码、读写寄存器堆、运算、读写RAM等,为后续5段流水型多周期CPU的设计打好基础。

3.1.1 总体设计

本次单周期CPU的构建采用的是自顶向下的设计思路。先根据单周期CPU所需要实现的功能,实现这些功能需要执行哪些操作,将其划分为取指令、译码、产生控制信号、读寄存器堆、运算、访存、写回等功能模块,每个功能模块负责其中的一步操作。对于每一个功能模块,根据所要执行的操作,在Logisim软件平台上选择适当的电路部件搭建正确的逻辑电路并进行封装(封装尺寸尽可能小,为后续工作节省空间)。所有模块的逻辑电路搭建封装完成后,根据每个模块所执行的操作在整个指令执行流程中的顺序,将所有模块连接在一起,然后编写一段程序来检验单周期CPU的正确性。

单周期CPU的总体结构图如图 3.1所示。

图 3.1 单周期CPU总体结构图

3.1.2 主要功能部件

完整的单周期CPU电路由程序计数器PC、指令存储器ROM、指令译码器DECODE、控制中心CONTROL、寄存器堆Reg、运算器ALU、数据存储器RAM

组成。具体设计思路如下。

1.程序计数器PC

程序计数器的输出PC有三种选择:当前PC+1、jump指令的目的地址、bne(beq、bgt)指令的目的地址。这三个地址作为一个数据选择器MUX的输入端,数据选择端信号来自控制中心CONTROL产生的控制信号PC_OP,数据选择器的输出端接一个寄存器存放PC,然后将寄存器的输出端输出的数据作为指令的地址。

2.指令存储器ROM

指令存储器ROM只由一个地址位宽和数据位宽均为16的ROM组成。

3.指令译码器DECODE

指令译码器DECODE的输入是从ROM中取出的指令,使用一个分离器将指令分成16位,再根据指令格式表的要求将对应的bit位合成为rs、rt、rd、offset等。

4.控制中心CONTROL

控制中心的输入是每条指令的OP字段和funct字段。由于R型指令的操作选择字段是funct,I型和J型指令的操作选择字段是OP,为了节省硬件成本和一些意想不到的错误,所以想方设法产生一个字段可以对R、I、J三种指令的操作作出选择。此外,以每条指令的OP字段作为解码器的选择端,这样当执行某条指令时,OP字段便会选择解码器的对应输出端为1,其余输出端为0;通过观察分许20条基本指令的特点,将解码器输出端的“0”、“1”信号通过适当的逻辑联系在一起生成新的控制信号,用于控制后续模块的正常工作。

5.寄存器堆Reg

寄存器堆Reg由8个寄存器组成,第二列的4个寄存器主要是为了防止电路震荡,因为在单周期CPU中,同一时刻对于同一个寄存器的读写操作可能会造成冲突。

涉及到寄存器堆的读操作,需要考虑是要读哪个寄存器。需要设置两个位宽为2

的字段R1(即rs)、R2(rt)分别选择读出哪两个寄存器的值作为ALU的两个源操作数,同时需要设置一个使能端控制位reg_r,该控制位由控制中心CONTROL产生。

涉及到寄存器堆的写操作,需要考虑是要写入哪个寄存器。需要设置一个位宽为2的字段W(即rt或者rd,因指令不同而不同)来选择向哪个寄存器写入数据。以W作为一个解码器的选择端,选择对应输出端口输出“1”,其余输出端口输出“0”,用这四个输出分别控制四个寄存器的使能端;同时,解码器也需要一个使能控制位reg_w,否则每条指令都有权限向寄存器中写入数据,该控制位也由控制中心CONTROL产生。

6.运算器ALU

运算器ALU主要执行算术逻辑运算。运算器有两个输入一个输出,分别表示两个源操作数和一个目的操作数。运算部件由与门、或门、加法器、减法器、移位器(逻辑左移、逻辑右移、算术右移)、比较器组成。两个源操作数均经过这些运算器运算后得到八个结果,然后用一个数据选择器从中选择一个结果作为输出,数据选择器的数据选择端为ALU_OP,由控制中心CONTROL产生。

7.数据存储器RAM

数据选择器由一块RAM芯片组成,地址位宽和数据位宽均为16,采用分离的加载和存储数据接口。

3.1.3 构造R型指令

R型指令包括指令表中的前8条指令,其指令格式和实现的功能如表2所示。

表2 R型指令格式表

这八条R型指令的OP字段和3~5位均为0,指令功能由指令的funct字段(0~2)决定,rs(10~11)表示第一源操作数的寄存器号,rt(8~9)表示第二源操作数的寄存器号,rd(6~7)表示目的操作数的寄存器号。R型指令主要负责与、或、加、减、移位等基本的算术逻辑运算,后面I型指令涉及到的算术逻辑运算也由这八条R型指令功能构成的ALU执行。

3.1.4 构造I型指令

I型指令是立即数型指令,主要包括一些数据传输、分支、立即数指令,其指令格式和实现的功能如表3所示。

表3 I型指令格式表

这些I型指令的功能由每条指令的OP字段决定。涉及到基本算术逻辑运算的操作由ALU完成。指令的0~7位为立即数或者分支偏移量。若是双目运算,则将rs的内容和立即数字段的值分别作为第一操作数和第二操作数,结果送rt指定的寄存器中;若是Load/Store指令,则将rs的内容和立即数字段的值经符号位扩展后的内容相加作为Load/Store的存储单元地址;若是分支指令,则对rs和rt寄存器中的

数据进行操作码规定的运算,并根据运算的结果决定是否转移。当转移发生时,转移的目标地址采用相对寻址方式获得,即将PC的内容和立即数字段经符号位扩展后的内容相加得到。

3.1.5 构造J型指令

J型指令的格式如表4所示。

表4 J型指令格式表

J型指令主要是无条件转移指令,指令中给出的是OP字段和12位(0~11)直接地址,无条件转移的目标地址由PC高4位与12位直接地址作为低12位拼接而得到的。

3.1.6 DISP指令

DISP指令的格式及其功能如表5所示。

表5 DISP指令格式表

DISP指令的立即数字段immediate只有0、1两个取值,用来选择在0号显示器显示还是在1号显示器显示;待显示的内容为rs对应的寄存器中的数据。

3.1.7 halt指令

halt指令格式如表6所示。

表6 halt指令格式表

halt指令实现“停机”功能,具体实现方案是:时钟正常跳转,PC值不再更新,因此取出的指令一直是相同的,达到“停机”的目的。

3.1.8 控制器封装

控制器的作用是为整个CPU提供控制信号,它的输入是每条指令的OP字段和funct字段。由于R型指令的操作选择字段是funct,I型和J型指令的操作选择字段是OP,为了节省硬件成本和一些意想不到的错误,所以想方设法产生一个字段可以对R、I、J三种指令的操作作出选择。此外,以每条指令的OP字段作为解码器的选择端,这样当执行某条指令时,OP字段便会选择解码器的对应输出端为1,其余输出端为0;通过观察分许20条基本指令的特点,将解码器输出端的“0”、“1”信号通过适当的逻辑联系在一起生成新的控制信号,用于控制后续模块的正常工作。控制器封装时要留出必要的几个输入端口和所有的信号输出端口,还要注意封装尺寸不要过大,以免影响其他部分的布局。

3.2 可支持理想流水线的多周期CPU设计

3.2.1 总体设计

在单周期CPU的基础上,将指令过程分成5个阶段IF、ID、EX、MEM、WB,每两个阶段之间设置缓冲接口部件,即锁存器,构建各阶段之间的接口部件,接口定义尽可能简化,流水线应向后续段传递数据信息、控制信息、反馈信息,后续部件对数据的加工处理依赖于前阶段传递过来的信息。ID段译码器生成每条指令的所有控制信号,控制信号逐段向后传递,后续部件控制信号不再单独生成。由于多周期CPU不是线性的,指令执行过程中可能会产生一些由于相关性造成的冲突,包括数据相关、结构相关、分支相关、Load-Use等等,所以在设计多周期CPU的过程中还要考虑设计能够消除上述相关性的模块。除此之外,还要考虑到效率问题。根据统计,分支指令占所有指令相当大的比例,若每次执行分支指令时都要判断分支结果、计算分支目的地址,效率想必比较低下。为此,需在IF段的PC和指令存储器之间增加分支预测模块,每生成一个新的PC就和分支预测模块中存储的PC作比较,若为分支指令地址,则直接取出对应的分支指令的目的地址,这样可以节省判断分支结果和计算分支目的地址的时间,提高整个CPU的效率。总体结构图如图3.2所示。

图3.2 多周期CPU总体结构图

3.2.2 接口部件设计

构建各阶段之间的接口部件,即锁存器(本质是寄存器),一共有4个,分别是IF/ID、ID/EX、EX/MEM、MEM/WB。流水线通过接口传递与指令执行相关的数据信息、控制信息、反馈信息,后续部件对数据的加工处理依赖于前阶段传递过来的信息。

3.2.3 流水冲突检测器

流水线冲突是指流水线中由于相关的存在,导致流水线中出现“断流”或“阻塞”,后一条指令不能在预期的时钟周期流入到流水线中。相关包括数据相关、结构相关和控制相关,对应的流水线冲突包括数据冲突、结构冲突和控制冲突。

数据冲突是指这种情况:后续指令要用到前面指令的操作结果,而这个结果尚未产生或尚未送达指定位置,从而造成后续指令无法继续执行的状况。常见的数据冲突包括先写后读冲突(Read After Write,RAW)、先读后写冲突(Write After Read,WAR)、写后写冲突(Write After Write,WAW)。处理数据冲突的措施就是采用数

据重定向。

结构冲突是指由于多条指令在同一时钟周期都需使用同一操作部件而引起的冲突。在本次实验中,消除结构冲突的一种高效的办法就是设置独立的指令存储器和数据存储器。

控制冲突是指:当流水线遇到分支指令或其他会改变PC值的指令时,由于分支指令跳转是否成功或改变后的PC值要等到EX段才能确定或计算出来,导致在指令执行阶段,无法确定应该去执行哪一段程序所造成的冲突。处理控制冲突的方法就是,用分支信号PC_OP和0比较,当等于0时表示不是分支指令,在原来PC 基础上顺序执行,否则将PC改变成分支指令目标地址。

3.2.4 插入气泡的流水冲突处理

在以下几种情况下需要插入气泡处理流水冲突:

1)Load-Use。即当访存指令i的目的操作数寄存器号和紧跟其后的另外一条指令j的源操作数寄存器号相同时,从数据存储器中读取的数据可能还未写入对应寄存器,但是后面一条指令正好要去访问同一个寄存器,导致读出数据有误。出现这种情况,就要暂缓读取后续指令,即“暂停”更新IF段和IF/ID锁存器,同时清零ID/EX锁存器,即插入气泡,以免ID/EX中的数据流到EX段覆盖掉j指令的相关数据导致出错。

2)分支指令。即当流水线遇到分支指令或其他会改变PC值的指令时,需要将已经取出的指令清空,转而跳转到改变后的PC值处继续执行。为了完成这一操作,需要清零IF/ID、ID/EX两个锁存器中的数据,即插入气泡。

3.2.5 数据重定向的流水冲突处理

数据重定向是用于处理数据冲突的。产生数据冲突的情况有一下两种:处于EX 段的指令和处于MEM段的指令、处于EX段的指令和处于WB段的指令。因此,数据重定向就是要比较处于EX段的指令的两个源操作数对应的寄存器号和处于MEM段或者WB段的指令的目的寄存器号是否相同,若相同,则将待写回的数据直接送入ALU的输入端,否则按照正常顺序执行。

3.2.6 动态分支预测的流水冲突处理

当流水线遇到分支指令时,需要判断分支结果和计算分支目标地址,若每次遇到分支指令都执行上述两种操作,想必时间开销比较大。动态分支预测模块的设置可以减少计算分支目标地址的时间开销。每生成一个新的PC就和分支预测模块中存储的PC作比较,若为分支指令地址,则直接取出对应的分支指令的目标地址,这样可以节省计算分支目标地址的时间。动态分支预测模块采用的淘汰算法是LRU,即“最近未使用”算法,模拟一个栈,当某个分支PC及其目标地址被使用时,就把它们放到栈顶,这样最近未使用的就存在于栈底,直接淘汰掉即可。

4 详细设计与实现

4.1 构建单周期CPU

根据单周期CPU的工作流程,可画出指令流程图如图4.1所示。

图4.1 单周期指令流程图

单周期CPU 的主电路图如图4.2所示。

相关文档
相关文档 最新文档