计算机组织与结构课程设计报告要点

上传人:仙*** 文档编号:202198126 上传时间:2023-04-21 格式:DOC 页数:48 大小:804.50KB
收藏 版权申诉 举报 下载
计算机组织与结构课程设计报告要点_第1页
第1页 / 共48页
计算机组织与结构课程设计报告要点_第2页
第2页 / 共48页
计算机组织与结构课程设计报告要点_第3页
第3页 / 共48页
资源描述:

《计算机组织与结构课程设计报告要点》由会员分享,可在线阅读,更多相关《计算机组织与结构课程设计报告要点(48页珍藏版)》请在装配图网上搜索。

1、2023计算机组织与结构 课程设计报告题 目:5段流水CPU设计专 业:计算机科学与技术班 级:CS1205学 号:U201214940姓 名:游凡电 话:132121792230邮 件:1743723571完成日期:2015-04-02 周四下午指导教师:秦磊华 谭志虎 胡迪青课程设计任务书一、设计题目基于Logisim软件仿真平台的5段流水CPU设计实现二、 设计内容在logisim平台设计一款支持特定指令系统的5段流水CPU。基本要求如下:1) 支持20条基本指令2) 支持5段流水机制,可处理数据冒险,结构冒险,分支冒险;3) 能正确运行自己编写的测试程序,测试程序应能涵盖所有指令。4)

2、 能正确运行教师提供的标准测试程序5) 具有自动统计功能,自动统计执行周期,不同冒险冲突次数,动态预测成功次数。三、 设计要求1) 支持20条基本指令。2) 支持5段流水机制,可处理数据冒险,结构冒险,分支冒险,动态分支预测。3) 能运行由自己所设计的指令系统构成的一段测试程序,测试程序应能涵盖所有指令,程序执行功能正确。4) 能运行教师提供的标准测试程序,并统计执行时间。四、设计流程1) 根据课程设计指导书的要求,制定出设计方案;2) 画出自己所设计计算机系统的原理框图,分析所需要的控制信号以及这些控制信号的有效形式;3) 设计出实现指令功能的控制器;4) 调试、数据分析、验收检查;5) 课

3、程设计报告和总结。五、成绩评定 成绩评定根据考勤、课程设计的过程、课程设计的效果、课程设计报告质量等进行综合评定;其中设计过程和结果占70%,课程设计报告占30%;课程设计的成绩评定等级为不及格、及格、中、良好、优秀五级;对基本功能进行扩展或设计具有非常鲜明的特征和一定程度的创新,可根据实际情况加分。六、设计报告要求 课程设计报告主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。要求在适当位置配合相应的实验原理图、数据通路图、实验接线图等图表进行说明。总结部分主要写设计工作简介以及设计体会。应做到文理通顺,内容正确完整,书写工整,

4、装订整齐。课程设计报告采用计算机组织与结构专用设计报告模板,A4纸双面打印。七、时间安排 课程设计的总体时间为2周,具体安排如下:1) 第1天:到实验室布置任务和集中讲解。2) 第13天:学生查阅资料,开始方案设计。3) 第4天:中期进度检查,单周期CPU验收检查。4) 第6天:中期进度检查,理想流水线多周期CPU验收检查。5) 第10天:最终结果验收。6)八、主要参考文献1 DAVID A.PATTERSON(美).计算机组成与设计硬件/软件接口(原书第4版).北京:机械工业出版社. 2 David Money Harris(美).数字设计和计算机体系结构(第二版). 机械工业出版社3 秦磊

5、华,吴非,莫正坤.计算机组成原理. 北京:清华大学出版社,2011年.4 袁春风编著. 计算机组成与系统结构. 北京:清华大学出版社,2011年.5 张晨曦,王志英. 计算机系统结构. 高等教育出版社,2008年.目 录1课程设计概述31.1课设目的31.2设计任务31.3设计要求32实验原理与环境52.1实验原理52.2 实验环境53总体方案设计63.1构建单周期CPU63.2可支持理想流水线的多周期CPU设计74详细设计与实现104.1构建单周期CPU104.2可支持理想流水线多周期CPU144.3流水线冲突检测器204.4插入气泡的流水冲突处理214.5数据重定向的流水冲突处理244.6

6、动态分支预测的流水冲突处理275实验过程与调试295.1测试用例和功能测试295.2性能分析295.3主要故障与调试305.4实验流程396设计总结与心得406.1课设总结406.2课设心得40参考文献431 课程设计概述1.1 课设目的计算机组成原理是计算机专业的核心专业基础课。课程设计属于设计型实验,不仅锻炼学生简单计算机系统的设计能力,而且通过进行设计及实现,进一步提高分析和解决问题的能力。1.2 设计任务计算机系统设计的总体目标是在logisim平台设计一款支持特定指令系统的5段流水CPU。具体设计任务如下:1) 支持20条基本指令2) 支持5段流水机制,可处理数据冒险,结构冒险,分支

7、冒险;3) 能正确运行自己编写的测试程序,测试程序应能涵盖所有指令。4) 能正确运行教师提供的标准测试程序5) 具有自动统计功能,自动统计执行周期,不同冒险冲突次数,动态预测成功次数。1.3 设计要求根据课堂上学习的知识以及查阅的相关书籍资料,在Logisim平台上设计一款支持特定20条基本指令的指令系统的5段流水CPU。具体要求如下:1) 支持20条基本指令2) 支持5段流水机制,可处理数据冒险,结构冒险,分支冒险;3) 能正确运行自己编写的测试程序,测试程序应能涵盖所有指令。4) 能正确运行教师提供的标准测试程序5) 具有自动统计功能,自动统计执行周期,不同冒险冲突次数,动态预测成功次数。

8、2 实验原理与环境2.1实验原理实验原理是所学的计算机组成原理中CPU的构建,结合数字逻辑,流水线的相关知识,构建PC、ALU、IM、DM、控制器等主要器件,构建专用数据通路,最后搭建一款流水CPU。2.2 实验环境实验环境:Logisim仿真平台。3 总体方案设计3.1 构建单周期CPU3.1.1 总体设计本次我们采用的方案是硬布线控制,且主、控存分开的方案,即采用硬布线控制方式,在Logisim中利用已有的功能器件,构造PC,RF,ALU,Decode,控制器,NPC,扩展器,然后构造数据通路,采用工程化方法设计。 总体结构图如图 3.1所示。RFDECODE指令存储器AddrDataPC

9、ABZALU数据存储器AddrReadDataWriteData 图 3.1 总体结构图3.1.2 主要功能部件1. 程序计数器PCPC在不跳转时执行加1操作,因此用计数器做基础,在该基础上利用计数器的加载端加载offset实现跳转。 2. 指令存储器IM,数据存储器DM指令存储器IM用ROM构造,数据存储器DM用RAM构造。在主电路中显示IM,DM,便于观察。3. 寄存器堆RF寄存器堆RF用4个寄存器组成,用解码器和控制信号RegW控制选择将数据存入哪个寄存器,用数据选择器控制用哪个寄存器输出数据。 4. 运算器 ALU运算器由加法器,减法器,移位器,比较器,与门,或门,数据选择器组成。加法

10、器实现加法运算,减法器实现减法运算,移位器实现逻辑左移、逻辑右移、算术右移,与门实现与运算,或门实现或运算,比较器实现小于置1。 5. 控制器 控制器由指令的操作码OP字段4位,通过真值表,自动生成各个控制信号的组合逻辑。3.2 可支持理想流水线的多周期CPU设计3.2.1 总体设计理想流水线的多周期CPU设计方案为将指令执行过程分为取指IF、指令译码ID、执行EX、数据存取MEM、写回WB5段,在邻接的两段中插入由寄存器组成的接口,即四个接口IF/ID, ID/EX,EX/MEM,MEM/WB。每个接口存储后面阶段要使用的数据和控制信号。所有控制信号在指令译码ID阶段生成,不在后面阶段生成。

11、3.2.2 接口部件设计接口是利用理想流水线的关键部件。接口由寄存器组成,存储前一个阶段生成的数据和控制信号和后面阶段所需的数据和控制信号。IF/ID只需存储PC,没有控制信号,因为控制信号在ID阶段生成。ID/EX存储所有控制信号以及EX和WB所需的数据,其中控制信号分为三类,分别为EX,MEM,WB所需的控制信号。EX/MEM存储MEM,WB所需控制信号和数据。MEM/WB存储WB所需控制信号和数据。3.2.3 流水冲突检测器由于采用指令存储器和数据存储器分开的设计,不存在结构冒险,但是存在数据冒险和控制冒险,产生这两类冒险时,流水线便会产生冲突。因此要设计冒险检测部件,即流水线冲突检测器

12、。冲突检测器检测数据冒险和控制冒险,数据冒险通过检测EX段和MEM段的RegW信号是否有效以及目的寄存器号是否和ID段的源寄存器号相同来判断是否产生冲突,若满足RegW信号有效且目的寄存器号和源寄存器号相同这两个条件则产生冲突;控制冒险通过检测指令是否是跳转指令且执行跳转来判断是否产生冲突,若是跳转指令且执行跳转则产生冲突。上面所述的冲突检测器是只限于插入气泡方案的,数据重定向和动态分支预测方案的数据冒险只有一种情况,即sw指令后面紧跟着一条要使用目的寄存器的指令,其他的数据冒险通过旁路解决了;控制冒险没有变化。3.2.4 插入气泡的流水冲突处理流水冲突检测器检测出冲突后,指令将会阻塞一个时钟

13、周期,IF、ID段的指令应该保持不变,实现方法是保持PC和IF/ID流水寄存器不变,即相当于阻塞,而从EX段开始的流水线后半部分必须“空转”,即它们执行的指令不产生任何结果,实现方法是把ID/EX流水寄存器的所有控制信号置为0,这样不会产生任何操作,相当于空转。3.2.5 数据重定向的流水冲突处理数据重定向产生冲突后,大部分数据冒险会被旁路解决,只有sw指令后面紧跟着一条要使用目的寄存器的指令这一种情况无法通过旁路解决,这种情况和控制冒险的处理方法和插入气泡方案一样。至于旁路就是将前一条指令的计算结果通过另外一条线路传递给后一条指令。实现方法是通过数据选择器将ALU的输入端A、B、DM存储数据

14、的输入端D、显示器的输入端的数据来源分为三部分,这三部分数据来源分别为寄存器堆RF、EX/MEM流水寄存器、MEM/WB流水寄存器,通过控制信号正确选择数据来源就能让流水线正确执行。3.2.6 动态分支预测的流水冲突处理动态分支预测处理数据冒险的方法与数据重定向一样,不同的是对控制冒险的处理。动态分支预测通过提前预测分支指令是否跳转来提前取指,而不是在判断分支指令确定跳转后再取指。这样如果预测正确则在处理分支指令时不需插入气泡,进一步减少时钟周期数。4 详细设计与实现4.1 构建单周期CPU 4.1.1 主要功能部件实现1. 程序计数器PC选用的元器件: 计数器,时钟,非门。输入: 时钟信号、

15、清零信号、offset、分支控制信号Bran。 输出: 计数器的输出端。具体实现: 计数器的时钟端连线时钟,清零直接连接计数的清零端,计数器的输出端连接输出引脚,offset连接计数器加载端,Bran连接计数器的加载,Bran的非连接计数器的计数,具体电路见图 4.1。 图 4.1 PC构造图2. 运算器ALU运算器由与门,或门,加法器,减法器,移位器,比较器,数据选择器组成。输入:输入引脚输出:数据选择器的输出具体实现:输入A,B直接连接加法器,减法器,比较器,与门,或门的输入端,输入A连接移位器的输入端,B的低四位连接移位器的另一个输入端,最后将这8个结果连接数据选择器的输入。电路图见图4

16、.2。图 4.2 ALU构造图3. 寄存器堆RF 寄存器堆RF用4个寄存器组成,用解码器控制选择将数据存入哪个寄存器,用数据选择器控制用哪个寄存器输出数据。输入:寄存器编号、存储到寄存器的值输出:寄存器中的值具体实现:寄存器编号输入R1、R2连接到数据选择器的选择端,选择要读的寄存器;寄存器编号输入W连接到解码器的输入端,解码器的输出与RegW信号相与连接到四个寄存器的输入端,控制数据写到哪个寄存器中。电路图见图4.3。 图 4.3 RF电路图4.解码器Decode 输入:指令IR 输出:立即数IMM,寄存器号rd、rt、rs,指令码OP,跳转地址Adr具体实现:指令IR连接到分离器,再根据各

17、个输出所需的位数用分离器连接构成各个输出。具体电路见图4.4。 图4.4 Decode的电路图5.控制器Control输入:指令码OP输出:各种控制信号,SrcA、SrcB、bne、beq、bgt、RegDst、RegW、MemR、MemW、jump、ALUtoR、AluC具体实现:OP连接分离器分成由高到低的4位a、b、c、d,通过对a、b、c、d使用分析电路,用组合逻辑构造各个控制信号。具体电路见图4.5。 图4.5 控制器电路图4.2 可支持理想流水线多周期CPU 理想流水线多周期CPU关键是设计接口,需要四个接口,分别为IF/ID,ID/EX,EX/MEM,MEM/WB。以下为这四个接

18、口要存储的数据和控制信号。IF/ID接口:这个接口只存储指令地址值PC,无控制信号,控制信号在ID阶段生成,此时无控制信号。该接口非常简单就不截图了。ID/EX接口:该接口存储控制器生成的所有控制信号,控制信号不再在其他阶段生成,因此该接口存储的数据及控制信号非常多,也是最容易出错的。该接口存储的数据及控制信号见表4.1。 表4.1 ID/EX接口存储的数据及控制信号EXMEMWB数据PC、D1、U、S、rd、rtD2、adrD2控制信号SrcA、SrcB、RegDst、ALUCbgt、beq、bne、MemW、MemR、jumpRegW、halt、ALUtoRPC为指令地址值,D1、D2为R

19、F输出,U、S为无符号数扩展、有符号数扩展,rd、rt为寄存器编号,adr为jump指令的后12位,SrcA、SrcB为ALU输入端A、B数据来源的控制信号,RegDst为控制写入哪个寄存器的控制信号,ALUC为控制ALU执行何种运算的信号,RegW为控制寄存器是否写的信号,ALUtoR为控制寄存器堆输入Din的信号。具体连接线路如图4.1所示。图4.1 ID/EX接口连接图EX/MEM接口:存储数据和控制信号见表4.2。 表4.2 EX/MEM接口存储数据及控制信号MEMWB数据BPC、JPC、D2、FD2、F控制信号MemR、MemW、bgt、beq、bne、jump、g、eW、RegW、

20、halt、ALUtoRBPC、JPC分别为分支和跳转地址值,F为ALU计算结果,g、e为ALU中A、B比较结果,AB,g=1;A=B,e=1。具体连接见图4.2 图4.2 EX/MEM连接图MEM/WB接口:要存储的数据及控制信号见表4.3 表4.3MEM/WB接口存储数据及控制信号数据控制信号WBF、DMW、RegW、halt、ALUtoRDM为DM存储器输出的值。具体连接见图4.3。 图4.3 MEM/WB接口连接图4.3 流水线冲突检测器由于采用指令存储器和数据存储器分开的设计,不存在结构冒险,但是存在数据冒险和控制冒险,产生这两类冒险时,流水线便会产生冲突。因此要设计冒险检测部件,即流

21、水线冲突检测器。冲突检测器检测数据冒险和控制冒险,数据冒险通过检测EX段和MEM段的RegW信号是否有效以及目的寄存器号是否和ID段的源寄存器号相同来判断是否产生冲突,若满足RegW信号有效且目的寄存器号和源寄存器号相同这两个条件则产生冲突;控制冒险通过检测指令是否是跳转指令且执行跳转来判断是否产生冲突,若是跳转指令且执行跳转则产生冲突。上面所述的冲突检测器是只限于插入气泡方案的,数据重定向和动态分支预测方案的数据冒险只有一种情况,即sw指令后面紧跟着一条要使用目的寄存器的指令,其他的数据冒险通过旁路解决了;控制冒险没有变化。具体电路见图4.4。 图4.4 冲突检测器4.4 插入气泡的流水冲突

22、处理流水冲突检测器检测出冲突后,指令将会阻塞一个时钟周期,IF、ID段的指令应该保持不变,实现方法是保持PC和IF/ID流水寄存器不变,即相当于阻塞,而从EX段开始的流水线后半部分必须“空转”,即它们执行的指令不产生任何结果,实现方法是把ID/EX流水寄存器的所有控制信号置为0,这样不会产生任何操作,相当于空转。保持PC寄存器不变的电路图如图4.5所示。 图4.5 PC电路图保持IF/ID流水寄存器不变的电路图如图4.6所示。 图4.6 IF/ID流水器寄存器的电路图清空ID/EX流水寄存器的控制信号的电路图如图4.7所示。图4.7 ID/EX流水寄存器电路图4.5 数据重定向的流水冲突处理数

23、据重定向产生冲突后,大部分数据冒险会被旁路解决,只有sw指令后面紧跟着一条要使用目的寄存器的指令这一种情况无法通过旁路解决,这种情况和控制冒险的处理方法和插入气泡方案一样。至于旁路就是将前一条指令的计算结果通过另外一条线路传递给后一条指令。实现方法是通过数据选择器将ALU的输入端A、B、DM存储数据的输入端D、显示器的输入端的数据来源分为三部分,这三部分数据来源分别为寄存器堆RF、EX/MEM流水寄存器、MEM/WB流水寄存器,通过控制信号正确选择数据来源就能让流水线正确执行。旁路的控制信号的产生电路如图4.8所示。 图4.8 旁路控制电路图 图中a1有效时控制ALU的输入端A选择数据来源于E

24、X/MEM流水寄存器,a2有效时控制ALU的输入端A选择数据来源于MEM/WB流水寄存器;b1有效时控制ALU的输入端B选择数据来源于EX/MEM流水寄存器,b2有效时控制ALU的输入端B选择数据来源于MEM/WB流水寄存器;D1EXMEM信号有效时控制显示器的输入端D1的数据来源于EX/MEM流水寄存器,D1MEMWB信号有效时控制显示器的输入端D1的数据来源于MEM/WB流水寄存器;D2EXMEM信号有效时控制数据存储器的数据输入端D2的数据来源于EX/MEM流水寄存器,D2MEMWB信号有效时控制数据存储器的数据输入端D2的数据来源于MEM/WB流水寄存器。旁路的具体连接示意图见图4.9

25、。 图4.9 旁路电路图图4.9 左旋了90度,图中右下的封装部件就是图4.8所示的旁路控制部件。控制信号经过寄存器同步后连接到数据选择器的选择端,控制选择ALU、显示器、数据存储器的数据来源。通过旁路就能解决绝大部分的数据冒险,从而大大减少插入气泡的数量,进而减少时钟周期数,提高CPU速度。4.6 动态分支预测的流水冲突处理动态分支预测方案处理数据冒险与数据重定向方案没有区别,主要区别在于控制冒险的冲突处理。动态分支预测通过提前预测分支指令是否跳转来提前取指,而不是在判断分支指令确定跳转后再取指。这样如果预测正确则在处理分支指令时不需插入气泡,进一步减少时钟周期数。预测方法是根据分支指令过去

26、是否跳转来预测其是否跳转,如果过去该分支指令跳转则预测跳转。用一位预测位来预测是否跳转准确率不够高,用三位及以上的预测位其准确率与两位预测位没有太大差别,从而使用两位预测位。预测分支指令是否跳转的电路图如图4.10所示。 图4.10 预测电路图5 实验过程与调试5.1 测试用例和功能测试5.1.1 测试用例 所有方案都是采用相同的测试用例,理想流水线方案除外,该方案采用的是理想流水线测试用例。总测试用例benchmark分为B指令测试、JUM指令测试、数据相关测试、移位测试、走马灯测试、排序测试6个小测试。测试时先从五个小测试用例开始测试,若有问题及时调试,最好按照测试用例大小从小到大测试这样

27、便于调试。5.2 性能分析各个方案的各个测试用例的时钟周期数见表5.1。 表5.1 各方案测试用例时钟周期数B指令JUM指令数据相关移位走马灯排序benchmark单周期149211332009461277插入气泡24215547029219772729数据重定向24212516721415521923动态分支预测24212514520611841489单周期CPU方案虽然各测试用例的时钟周期数都最少,但是其时钟周期长,总的CPU时间反而更长,性能最差。插入气泡方案、数据重定向方案、动态分支预测方案各测试用例的时钟周期数依次减少,它们的时钟周期相同,因而总CPU时间也依次减少,性能依次增强。5

28、.3 主要故障与调试5.3.1 故障1故障现象单周期:执行sw指令时,sw指令功能正确,但是将要存入存储器的寄存器rt的值改变了,改变为要存入的存储器地址的原值。原因分析在RF模块中没有寄存器写的信号RegW,导致存入RF中的数据Din无论如何都会存入寄存器。解决方案增加控制信号RegW,该信号在执行第18,1014条指令有效。在控制器中用组合逻辑生成RegW。 图5.1 RegW的生成图5.3.2 故障2故障现象单周期:指令bgt执行出错,该跳转的时候没跳转,不该跳转的时候又跳转了。原因分析我自己写了一个小测试程序,一步步执行,用探测器仔细观察每条通路的值,发现原因是控制信号SrcA,Src

29、B出错,这两个信号是控制ALU的A,B数据来源的。这个错误主要是我在生成这两个控制信号时,没有考虑清楚在执行分支指令的情况。解决方案修改控制信号SrcA,SrcB,重新生成它们的表达式。 图5.2 SrcA的生成图 图5.3 SrcB的生成图我测试了所有20条指令,只有在执行bgt时这两个信号出错,执行其他指令时均正确,因此我加了数据选择器,将20条指令分为bgt和另外19条指令,在bgt有效时让SrcA=1,SrcB=00,其他指令维持原来的情况。5.3.3 故障3故障现象插入气泡流水线:电路产生明显震荡。故障原因气泡信号控制各种控制信号清零,是异步清零,气泡一产生就将各种控制信号清零,而控

30、制信号的改变又在气泡产生电路中改变了气泡的值,导致电路产生震荡。解决方案采用同步清零的方式,清零各种控制信号。将气泡信号的非和控制信号用与门做与操作,再通过寄存器,即可实现同步清零。如图5.4所示。 图5.4 同步清零5.3.4 故障4故障现象插入气泡流水线:气泡检测出错,遇到DISP、lui指令检测电路出错。故障原因DISP、lui指令的两个源寄存器号中的一个与气泡检测无关,DISP的rt、lui的rs,不能参与气泡检测,而其他要用到ALU的指令的两个源寄存器号都要参与气泡检测,因此在遇到这两个指令时应分别屏蔽rt、rs。解决方案屏蔽DISP的rt、lui的rs,见图5.5。 图5.5 气泡

31、检测电路图我后来仔细思考后发现,该气泡检测电路还是不对,尽管可以通过所有的测试,测试文件指令没有包含所有情况,导致这个检测电路没有出错。lui和jump指令的两个源寄存器号都与气泡检测无关,DISP的rs,ori、andi、addi、lw的rt与气泡检测无关,因此要屏蔽这些信号,见图5.6。 图5.6 完善的气泡检测电路图完善后的电路能更加正确的检测气泡是否要产生。5.3.5 故障5故障现象数据重定向方案:执行sw指令没有将rt的值存储到DM的正确地址。故障原因我一开始做数据重定向时只是将MEM段ALU计算的值F和WB段DM读出来的值DB重定向到ALU的A和B,但是没有将F和DB重定向到DM的

32、数据输入端D,导致sw的前一条指令计算的值没有传到DM的数据输入端。解决方案利用两个数据选择器选择DM的数据输入端D的数据来源。见图5.7 图5.7 数据重定向电路图图中左下是控制信号产生器,控制信号控制ALU的A、B,D1、D2的数据来源,决定数据是来源于寄存器堆,还是来源于前一条指令ALU的计算值F,还是来源于前两条指令ALU的计算值F或者DM中读出来的值(这种情况是前两条指令是lw),数据只可能来源于这三种情况。5.3.6 故障6故障现象数据重定向方案:指令DISP执行出错,没有正确显示寄存器的值。故障原因该故障与故障5是同一原因,数据没有重定向到D1,D1是要显示的值。解决方案与故障5

33、的解决方案一样,用数据选择器选择D1的数据来源。电路连接图见上图5.7。5.3.7 故障7故障现象动态分支预测方案:PC部件出错,地址转移逻辑不正确。故障原因指令地址转移我一开始一直做不对,先想着在原先的地址转移逻辑的基础上做修改来完成新的地址转移逻辑,结果被原先的地址转移逻辑误导,没有仔细分析动态分支预测的地址转移逻辑。新的地址转移逻辑应该是,预测分支跳转则PC立即跳转到分支指令要跳转的地址,预测不跳转则PC加1;还有预测正确与否也对PC有影响,预测正确则PC加1,预测错误则要对PC做修改,修改分两种情况,如果是原先预测跳转结果预测错误,则将PC修改为EX阶段的PC加1;如果是预测不跳转结果

34、预测错误,即在EX阶段执行的是跳转指令,则将PC修改为EX阶段的PC加1加offset,这部分和原先的地址转移逻辑中的跳转部分是一样的。解决方案分析出了正确的地址转移逻辑,连接电路实现即可,电路图见图5.8。 图5.8 地址转移逻辑图5.3.8 故障8故障现象动态分支预测方案:判断跳转指令是否正确出错,即correct信号的控制出错。故障原因这个故障我总共错过三次,第一次是因为预测分支信号FENZHI没有经过两个寄存器就与EX阶段的跳转信号CON比较,导致FENZHI信号早了两个周期;第二次是因为预测出错后会产生两条废指令,这两条指令是不产生任何实际结果的,不应该参与correct的控制,我原

35、先没有对这种情况没有处理导致出错;第三次的原因是产生气泡,导致IF阶段的FENZHI信号应该阻塞一个周期,然后再与CON比较。解决方案针对这三个原因,我一个个的解决,最后correct的控制逻辑如图5.9所示。 图5.9 correct控制逻辑图图中比较器连接的另一个输入是判断是否跳转的信号CON。5.4 实验流程 实验流程见表5.2。表 5.2 课程设计进度表时间进度第一天封装了ALU、RF、Decode;实现部分控制器信号第二天完成了单周期cpu ,通过了测试程序benchmark,周期数04fc第三天完成了单周期部分的实验报告,封装了流水线需要的四个寄存器第四天完成了理想流水线,运行理想

36、流水线测试.hex正确第五天阅读参考文献,完成了检测数据冒险的电路并连接到主电路中第六天完成了插入气泡方案,功能正确,周期数正确,完成故障报告第七天完成了数据重定向方案,功能正确,周期数正确,完成故障报告第八天阅读资料,初步完成动态分支预测电路第九天完成动态分支预测方案,功能正确,周期数正确,完成故障报告第十天完成所有方案,准备检查6 设计总结与心得6.1 课设总结这次课程设计设计了一款支持特定指令系统的5段流水CPU,能处理数据冒险、结构冒险、控制冒险和支持动态分支预测,具有自动统计功能,自动统计执行周期,不同冒险冲突次数,动态预测成功次数,能正确运行自己编写的测试程序,测试程序应能涵盖所有

37、指令,能正确运行教师提供的标准测试程序。实验一共完成了5个方案,分别是单周期CPU方案、理想流水线方案、插入气泡方案、数据重定向方案和动态分支预测方案,设计了5款功能相同但执行速度逐步提高同时难度也逐步增加的CPU。实验由易到难一步一步引导学生完成实验,十分科学有效。实验使用Logisim仿真平台作为实验环境,对该平台更加熟练使用,也充分认识了该平台的方便与实用,同时也学习使用了汇编器,让测试变得更加简单,不用自己写机器码,大大节省了测试的时间。另外也使用了快盘和tower平台,方便师生沟通交流。这些平台与软件十分方便,我会在以后自己做组成原理实验时继续使用。6.2 课设心得本次课程设计实验一

38、共耗时两周,完成了支持20条特定指令指令系统的5段流水CPU,同时能处理数据冒险、结构冒险、控制冒险,支持动态分支预测功能。该实验我一共完成了5个CPU方案,即单周期CPU方案、理想流水线方案、插入气泡方案、数据重定向方案和动态分支预测方案,实验工作量还是挺大的,不过我都完成了,为自己感到自豪,很有成就感!整个实验做下来当然不是一帆分顺,遇到了不少困难。不过正是通过解决困难才提高了我对计算机组成原理的理解,才提高了我对计算机设计的认识,也锻炼了我的动手实践能力。下面说说遇到的主要困难。一、 在做单周期CPU时由于有上学期做的三次实验的经验,只在设计控器部件时不知怎么下手,其他部件都很快就完成了

39、。后来在老师介绍工程化的方法后,明白将20条指令执行过程中所需的部件的输入输出一一列在一张表中,观察这些输入输出有多少类,若不只1类,则需要添加数据选择器也就需要控制信号控制数据选择器,这样就将20条指令所需的所有控制信号一一列举出来。再通过将OP段的4位作为组合逻辑的输入,使用分析电路一一将所有控制信号通过真值表生成出来。使用工程化方法和分析电路生成控制信号,能够一次性所有控制信号并且快速准确,不用自己写表达式,同时便于后面设计添加控制信号。二、 在做插入气泡方案时,由于没有以前学过导致一开始不知如何下手。后来阅读了相关书籍后,才明白什么是气泡,才知道如何去做。做该方案最大的问题是在ID/E

40、X流水寄存器对控制信号清零的同步问题,我一开始是异步清零导致电路存在明显震荡,后来改成同步清零后问题就迎刃而解了。做该方案时花费了两天时间,主要是因为对流水冲突处理的不熟悉,在查阅相关书籍学习后就没什么问题了。三、 由于有插入气泡方案的经验,数据重定向方案在查阅书籍明白其原理后,基本没遇到什么大问题就完成了。后面遇到的主要困难是在动态分支预测方案上。在做该方案时,我先花费半天的时间查阅资料,明白其基本原理后就开始动手实践。在PC器件的构造上遇到了整个实验过程中最大的困难,我虽然明白PC的工作逻辑,但是无法用电路图表示。究其原因我想利用原先方案的PC逻辑,而没有仔细研究该方案PC的正确逻辑,反而

41、一直在原先的逻辑上做文章导致被其阻碍了思路。最后我抛弃了原先的PC逻辑,打算从头构造新的PC电路图。在仔仔细细的研究PC逻辑后,我终于构造出来了新的PC电路图。总结原因,除了原先方案的PC逻辑对我造成的迷惑外,我对PC真正的工作原理认识不深也是我一开始没有完成PC电路图的一大原因。动态分支预测方案的PC逻辑应该是在遇到分支指令并且预测跳转的情况下,输出的地址为跳转地址,否则为当前地址加1(我在当前地址加1这步一开始没弄清楚导致出错);同时在预测出错时要有纠错即对地址进行修改,若预测跳转但实际没跳转,应将地址修改为EX段正在执行的指令的地址值加1;若预测不跳转实际跳转,应将地址修改为跳转地址。在

42、完全明白PC逻辑后,完成PC电路图也就是顺理成章的事情了。遇到的这些困难问题,当时是很痛苦的,但是解决了问题后,不仅学到了更多的知识,而且增加了对计算机组成原理的兴趣和完成本次实验的信心。通过本次课程设计实验,我巩固了以前所学的数字逻辑,计算机组成原理的知识,学习了流水线的工作原理及其冲突处理方法(插入气泡、数据重定向、动态分支预测),提高了动手实践能力,提升了对计算机组成与设计的兴趣。同时也使我明白遇到问题并不可怕,只要自己努力想办法一定能够解决问题,办法总比问题多,解决问题才是提升自己能力的捷径。所以要勇于面对问题,在问题中不断锻炼自己提高自己的能力!参考文献1 DAVID A.PATTERSON(美).计算机组成与设计硬件/软件接口(原书第4版).北京:机械工业出版社. 2 David Money Harris(美).数字设计和计算机体系结构(第二版). 机械工业出版社3 秦磊华,吴非,莫正坤.计算机组成原理. 北京:清华大学出版社,2011年.4 袁春风编著. 计算机组成与系统结构. 北京:清华大学出版社,2011年.5 张晨曦,王志英. 计算机系统结构. 高等教育出版社,2008年.6 张志刚,FPGA 与SOPC 设计教程-DE2 实践. 西安:电子科技大学出版社,2007

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!