版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PRINTDATE\@"yyyy"PRINTDATE\@"yyyy"2025计算机组织与结构课程设计报告计算机组织与结构课程设计报告 题目:5段流水CPU设计专业:计算机科学与技术班级:学号:姓名:电话:邮件:完成日期:指导教师:课程设计任务书一、设计题目基于Logisim软件仿真平台的5段流水CPU设计实现二、设计内容设计模型机系统的总体结构、指令系统和时序信号。在对该模型机系统中的部件功能利用EDA软件的仿真功能进行仿真分析和功能验证的基础上,将部分电路下载到FPGA,并与适当的外围器件相配合,实现模型机的整机系统。要求所设计的整机系统能支持自动和单步运行方式,能正确地执行存放在主存中的程序的功能,对主要的数据流和控制流通过LED适时显示信息。设计要求支持20条基本指令,具体见表1和表2;支持5段流水机制,可处理数据冒险,结构冒险,分支冒险;能运行由自己所设计的指令系统构成的一段测试程序,测试程序应能涵盖所有指令,程序执行功能正确。能运行教师提供的标准测试程序,并统计执行时间。四、设计流程根据课程设计指导书的要求,制定出设计方案;画出自己所设计计算机系统的原理框图,分析所需要的控制信号以及这些控制信号的有效形式;画出各指令的指令周期流程图和所需要的控制信号;设计出实现指令功能的控制器;调试、数据分析、验收检查;课程设计报告和总结。五、成绩评定成绩评定根据考勤、课程设计的过程、课程设计的效果、课程设计报告质量等进行综合评定;其中设计过程和结果占70%,课程设计报告占30%;课程设计的成绩评定等级为不及格、及格、中、良好、优秀五级;对基本功能进行扩展或设计具有非常鲜明的特征和一定程度的创新,可根据实际情况加分。六、设计报告要求课程设计报告主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。要求在适当位置配合相应的实验原理图、数据通路图、实验接线图等图表进行说明。总结部分主要写设计工作简介以及设计体会。应做到文理通顺,内容正确完整,书写工整,装订整齐。课程设计报告采用《计算机组织与结构》专用设计报告模板,A4纸双面打印。七、时间安排课程设计的总体时间为2周,具体安排如下:第1天:到实验室布置任务和集中讲解。第1~3天:学生查阅资料,开始方案设计。第4天:中期进度检查,单周期CPU验收检查。第6天:中期进度检查,理想流水线多周期CPU验收检查。第10天:最终结果验收。八、主要参考文献DAVIDA.PATTERSON(美).计算机组成与设计硬件/软件接口(原书第4版).北京:机械工业出版社.DavidMoneyHarris(美).数字设计和计算机体系结构(第二版).机械工业出版社秦磊华,吴非,莫正坤.计算机组成原理.北京:清华大学出版社,2025年.袁春风编著.计算机组成与系统结构.北京:清华大学出版社,2025年.张晨曦,王志英.计算机系统结构.高等教育出版社,2025年.目录注意目录的格式,系统自动生成的格式和这个有差异,生成目录后按这个格式排版,不要三级目录。注意目录的格式,系统自动生成的格式和这个有差异,生成目录后按这个格式排版,不要三级目录。TOC\o"1-2"\h\z\u146021课程设计概述章节形式,注意每章必须新起一页,具体方法是在上一章尾部增加一个分页符 3章节形式,注意每章必须新起一页,具体方法是在上一章尾部增加一个分页符139711.1课设目的二级标题,具体可以可以用格式刷复制 3二级标题,具体可以可以用格式刷复制96281.2设计任务 3202591.3设计要求 202593114922实验原理与环境 464962.1实验原理 4175072.2实验环境 455463总体方案设计给出方案概要设计,注意这章是设计,不是最终实现,请不要将最终的连线图,代码等放在这一章 5给出方案概要设计,注意这章是设计,不是最终实现,请不要将最终的连线图,代码等放在这一章327223.1需求分析 5267663.2硬件设计 5136133.3软件设计 714154详细设计与实现撰写具体的实现细节,流程图,原理图,引脚连接等等,微程序实现,微指令实现,控存安排等等细节,上一章主要讲方案,这章描述最终实现细节。 9撰写具体的实现细节,流程图,原理图,引脚连接等等,微程序实现,微指令实现,控存安排等等细节,上一章主要讲方案,这章描述最终实现细节。209334.1选用芯片 9218514.2硬件实现 9289494.3软件实现 12194895实验过程与调试 1728795.1仿真XXX如果使用了FPGA,实验结果必须有图和仿真曲线,否则不需要这部分 17如果使用了FPGA,实验结果必须有图和仿真曲线,否则不需要这部分31525.2可自行安排章节 17785.3主要故障与调试 17264775.4功能测试验证系统运行正确的测试细节 17验证系统运行正确的测试细节119595.5实验流程图描述本次课设进度安排与关键时间节点 18描述本次课设进度安排与关键时间节点207596设计总结与心得 19303816.1课设总结 19162546.2课设心得主要讲课设体会,收获,以及对课设的建议 19主要讲课设体会,收获,以及对课设的建议22847参考参考文献必须规范,见后续说明文献 20参考文献必须规范,见后续说明课程设计概述章节形式,注意每章必须新起一页,具体方法是在上一章尾部增加一个分页符章节形式,注意每章必须新起一页,具体方法是在上一章尾部增加一个分页符请仔细阅读所有的批注,阅读理解后删除批注模板各个标题下面的内容仅是举例,作者应依照自己思想重写该部分内容课设目的二级标题,具体可以可以用格式刷复制二级标题,具体可以可以用格式刷复制计算机组成原理是计算机专业的核心专业基础课,讲解了计算机硬件构成以及各部分硬件的功能与实现。课程设计属于设计型实验,不仅锻炼学生简单计算机系统的设计能力,巩固专业知识,而且通过进行设计及实现,进一步提高分析和解决问题的能力,从根本上认识到了计算机工作的原理。本实验要求实现简单CPU的基本功能,结合组成原理对计算机功能部件的讲解,分别进行考虑设计出符合基本要求的各个基本部件,然后对整个系统进行综合考虑,不断调整自己设计的功能部件,以实现能解决较为简单功能程序的CPU。在一步步设计CPU过程中,分步进行不同阶段的CPU设计,以帮助学生从简入深地了解整个计算机的硬件系统。由于计算机硬件系统的设计需要组成原理学到的许多知识,让学生学会理论联系实际,将学到的组成原理知识应用到实际设计中,增加学生的专业素养,提高专业认知。在设计过程中,由于实验需要设计的知识还包括课外的一切内容,因此需要学生自主学习,独自查阅资料,学会获取知识的能力。设计任务计算机系统设计的总体目标是设计模型机系统的总体结构、指令系统和时序信号。所设计的主机系统能支持自动和单步运行方式执行一些较为简单功能的程序,例如老师给出的跑马灯程序,要求程序每一步的结果都和理论相符,最终的结果与理论结果完全正确。并且要在适当的位置,给出程序运行过程中电路各个功能的执行参数,例如电路跳转的次数,以及不同跳转指令的执行次数等,并能给出电路各个显示部件、寄存器以及存储器的数值结果,以确定功能是否执行正确,并能帮助设计者调试自己的电路。具体设计任务如下:单周期CPU设计与实现:要求在一个周期中实现CPU单个功能的电路,能支持20条基本指令,能运行自己为电路设计的简单的并能涵盖所设计的所有基本指令的功能程序,能运行老师给出的标准程序,能监控程序的执行过程,并能得出正确结果。理想流水线的多周期CPU:将以上所述设计的单周期CPU进行改变,将适当的部件组合进行组装,设计成为多周期CPU电路,形成将指令过程分成5个阶段有取指令IF、译码器ID、控制器EX、访存部件MEM以及写回部件WB的五段流水线电路,不同阶段之间设置缓冲接口部件,构建各阶段之间的接口部件,接口定义尽可能简化,流水线应向后续段传递数据信息,控制信息,反馈信息,后续部件对数据的加工处理依赖于前阶段传递过来的信息。ID段译码生成该指令的所有控制信号,控制信号将逐段向后传递(越到最后阶段,信号越少),后续部件控制信号不再单独生成。注意单周期CPU中的控制器是可以在ID段复用的。插入气泡式的冒险处理:由于存在数据相关与分支相关,如果要实现功能完整的CPU电路,需要分支相关和消除数据相关,采用插入气泡的方式可以解决数据相关性和分支相关性,对接口进行相应的修改,在分支相关和数据相关时对CPU插入气泡,保证流水线功能的正确性。数据重定向机制的流水线:采用数据重定向到方式也可以实现消除数据相关,选择在适当的阶段完成数据重定向,在适当的阶段进行检测。确定数据重定向的数据来源,以及不同指令需要的数据不同,因此需要如何区分不同的数据对象,分析出采用数据重定向机制后由于Load-Use冲突和分支相关性,因此还需要插入气泡。分支目标缓冲器(BTB)结构的动态分支预测:由于指令的PC操作部件在取指令IF阶段,因此选择在这个阶段进行动态分支预测,考虑如何预测分支相关性,以及预测结果对实际分支指令的执行有无影响并造成的各种影响。限定BTB缓冲区大小为4,可容纳4条分支指令,思考如何进行全相联比较,多余用4条分支指令时LRU算法淘汰,考虑用何种结构用硬件实现。设计要求根据组成原理理论课程所学的知识,设计出简单计算机系统的总体方案,结合各单元实验积累和课堂上所学知识,选择适当芯片,综合考虑各芯片功能结构,设计简单的计算机系统,具体要求如下:根据课设指导书的要求,制定设计方案。由于实验要求先要设计出单周期CPU电路,然后再实现理想流水线的多周期CPU,再完成插入气泡式的冒险处理,再完成数据转发式的数据冒险处理,最后实现动态分支预测的分支冒险处理。分析上诉实验过程,可以知道,5段流水线的多周期CPU是在单周期CPU电路的基础上实现的,而插入气泡、数据转发以及分支预测又是在理想流水线上实现的,还有数据转发电路中也存在着插入气泡的功能需求,因此可以知道每一个实验都是需要在上一个实验完成之后才可以进行,不然实验便会进入处处碰壁的状态,在许多个十分麻烦的困难中无法走出来。实验首先是需要设计一个单周期的CPU电路,而整个实验的设计平台是Logisim,因此需要仔细了解设计平台中给出的各个功能部件,比如各个存储器接口的功能,存储器接口的功能使用如果十分巧妙,会使得整个电路的功能十分容易得到实现。然后结合组成原理的理论知识,考虑单周期CPU的设计,由于整个CPU分为取指令IF、译码ID、执行EX、访存MEM以及写回WB五个功能部件,因此可以分别对5个功能部件进行分开设计。先只针对取指令部件,需要有一个PC+1的过程,但是由于存在指令PC的跳转,因此需要一个选择端对下一个PC进行选择。下来再考虑译码阶段,由于单周期CPU需要实现20条不同功能的指令,指令的格式一共有3种,因此在进行译码的时候,需要将整个指令分为3种不同的译码,并根据以后需要实现的功能,例如写入寄存器的选择,进行功能的扩展。然后是执行阶段,由于实际中的CPU只有一个计算器,因此在整个电路中应该尽量少使用计算器中存在的一些计算功能,在执行阶段中,有许多需要对译码器传来的指令进行相应功能的实现,因此应该保持一种尽量减少计算部件的思想设计电路,并且实际的CPU需要考虑耗能问题,因此电路也尽量采用以节约电能的思想设计电路,采用这两种设计思想设计电路,将译码器传来的指令进行相关的操作已形成不同的执行功能,传递到不同的部件中去。然后设计访存MEM阶段,由于这一个阶段只需要将控制阶段中已经形成的功能信号传递到数据存储器,然后数据存储器RAM根据传递过来的指令信号,进行相关的数据写入或读取功能。最后是数据写回的阶段,这一阶段只需要将计算器或者数据存储器中取出的数据根据译码器选择适当的写入寄存器写入寄存器组即可。在5个功能部件都分析完毕之后,还需要考虑到各个功能实现部件的设计,比如寄存器组的设计,需要综合考虑需要实现的功能,以设计相应的寄存器组。接下来考虑理想流水线的多周期电路的实现,由于上一步是实现单周期的CPU,因此并没有将各个功能部件进行相应的封装,有时候为了方便可能将两个功能部件连接在一起,因此这一个只需要将每一个功能部件分离开来,将每一个功能部件控制信息的传递使用接口来实现,然后将每一个已经封装好了的功能部件按序排列,在每一个功能部件之间设置一个锁存器,接收上一个部件传递过来的信息并在下一个时钟到来的时候讲信息传递到下一个功能部件中实现多周期的CPU控制。再实现插入气泡式的冒险处理,由于这一阶段需要实现消除数据相关和分支相关,因此需要综合考虑整个电路的设计。分支相关的消除较为简单,只要在控制器中将指令进行分析,然后根据电路是否跳转,来插入气泡,使得在电路中插入一个NOP指令,将PC下一个地址转换成需要跳转的地址即可,就可以实现分支相关。而消除数据相关稍微要复杂一些,当然并不是只要实现上诉功能就可以完成,电路还需要综合考虑指令的类别,由于我自身考虑设计的电路是在ID阶段对两条相邻的指令进行比较,因此在需要冒泡的时候,需要暂停PC的自增操作,阻止IF/ID段的锁存器继续写入数据,并对ID/EX段的锁存器进行清空处理,只有这样,才可以实现不改变程序进行并达到数据相关消除的目的。然后实现数据转发的数据冒险处理,在这一阶段也需要将上一条指令与当前指令进行比较,在满足数据相关的情况下,将下一阶段或者下二阶段已经计算出来的或者访存取出的数值直接向前传递给计算器的两个操作数之一,即可实现数据转发的方式。但是在这一阶段需要综合考虑指令的类别,以控制传递回来的数值的确是当前计算所需要的数值,而不是其他寄存器数值或者无赶紧要的数值。由于分支相关在上一阶段已经解决,这一阶段又消除了数据冒险,看起来好像已经实现了整个电路,但是我们需要考虑到LOAD指令的特殊性,由于它必须进入第四阶段进行访存控制,将数值取出才是当前正确的数值,然后这已经是一个周期中末期了,然后第三阶段EX需要数值马上进行相应的操作数传入,因此这里就存在了数据相关性,因此采用的解决办法是在存在上一条指令是LOAD指令的时候,依旧采用的是冒泡数据冒险处理,通过插入气泡的方式暂停一个周期,等到取出的数据到达了WB阶段的时候,在传入到EX阶段,这样便可以实现在EX阶段的初期就将需要进入运算器的操作数传递到EX阶段。最后实现动态分支预测的分支冒险处理,在这一阶段因为需要对PC地址进行操作,而这一个操作的过程是在IF阶段进行的,因此考虑动态分支预测利用IF阶段对PC+1的操作来实现,由于动态分支预测采用的是假定每次分支预测都是正确的,但是电路中肯定存在预测错误的可能,因此需要设定一个判定位。由于在程序的进行过程中,不断有新的跳转指令PC的写入,而实验又要求限定BTB缓冲区大小为4,可容纳4条分支指令,分支地址要进行全相联比较,这时候就需要烤炉多余4条分支指令时如何淘汰的问题,实验要求用硬件实现LRU算法来对分支指令PC进行淘汰,而LRU的实现最好的结构就是栈的结构,新到来的分支指令PC放到栈顶,其余的数值向后转移,这样最不常用的指令地址PC就被排除,因此用硬件实现LRU算法同等地可以表示为用硬件实现LRU栈的结构。画出自己所设计计算机系统的原理图和器件连接头单周期CPU电路所有的电路的功能都是由一个周期驱动的,因此 当一个周期完成的时候,电路的一条指令就执行完毕,因此整个电路从取指到最后的写回都是直接连接的,而没有存在寄存器滞后周期的存在。单周期CPU电路如图2.1:控制器(包括显示等功能)控制器(包括显示等功能)数据存储器RAM数据存储器RAM计算器指令存储器ROMPCPC图1.1单周期CPU电路多周期五段流水线电路将整个CPU功能分为5个部分,分为IF取指令、ID译码、EX执行、MEM访存以及WB写回5个阶段,其中每一个阶段有一个周期驱动,因此一条指令的执行完成就要5个周期才可以实现。其中由于数据冲突以及结构冲突的存在,因此还需要在理想5段流水线上添加上一些处理冲突的功能部件。在五段流水线中,由于数据传递的需要,因此还需要在每一个阶段的电路中间加入锁存器,以便对整个5段流水线数据处理进行控制。多周期5段流水线电路:分支分支预测MEM/WBIFMEM/WBIF/MEMIF/IDID/EXWBEXMEMIFIDWBEXMEMIFID插入气泡数据重定向插入气泡数据重定向图1.2多周期5段流水线CPU电路(3)设计分析概述由于本次课程设计需要设计两个截然不同的CPU电路,一种是单周期CPU电路,要求整个电路在一个时钟的驱动下完成所有CPU的工作,由于电路本来就需要时钟驱动,又由于实验的设计平台是在理想的状态下实现的,因此,只要把握住电路在每一次时钟跳变的时候,都进行了正确的操作就可以保证CPU电路的实现。第二个需要实现多周期的CPU电路,需要利用流水线的思想构建CPU的工作流程,这里只需要转换思想,将每一个阶段的工作电路看成一个单周期的功能电路,然后对第一步设计的电路进行适当的修改,就可以实现需要的功能。然后针对需要考虑的处理冲突的功能电路,在五段流水线电路中进行相应的信号的传送,处理信息后将处理结果控制信号传到控制的端口对电路进行控制。本实验其他的设计要求及其他注意事项为:1、本课程设计的内容基本无法在一本教科书中弄清楚,请大家按参考文献阅读。2、在实现CPU时,你可以使用任何logisim内建的电路组件。3、指令ROM和数据RAM必须在main电路中可见,不能封装在子电路中。4、显示模块应该在主电路中可见。5、寄存器也应该想办法在主电路中可监测。6、主要部件之间还是需要适当连线,隧道工具不能过度使用,要能看清楚各部件之间的连接关系。7、尽可能的使用标签工具去注释你的电路,包括控制信号,数据通路,显示模块,总线等,这会让你的电路更加容易调试!8、注意标签以及注释的命名规范,过长的命名都会对后续的画图连接造成影响。9、Logisim中可以将不同的模块用不同的颜色区分,建议用颜色区分各接口部件和关键模块。10、接口部件封装尽可能封装的长一点,否则控制线多了以后可能不方便布线。11、PC,IR最好一直传递到最后一级,这样方便观测流水线运行的状况。12、流水线各级是否产生气泡可以用LED指示灯显示,方便观察流水线运行状况。13、各里程碑版本经过充分测试后,备份后再开新的分支进行新的开发,以避免新版本无法开发成功,老版本又检查不了的悲剧。(最好利用一些云平台进行自己的软件版本管理和备份,避免不必要的重复劳动)实验原理与环境实验原理计算机组成原理详细地介绍了CPU每一个功能在CPU中所处的作用,并且仔细地分析了每一个CPU电路的构成,让我们了解到控制信息、需要操作的数据如何在CPU中进行传递、操作。CPU的工作数字逻辑课程详细地讲解了基本电路的形成,介绍了电路各个部件工作的方式与过程,需要注意的分析点,是组成原理中电路的基础,只有在详细地了解了数字逻辑的知识内容之后,才可以真正地理解组成原理对CPU电路的讲解与分析。图2.SEQ图\*ARABIC\s11完整单周期MIPS处理器示意图如图2.1是单周期MIPS处理器,而我们这次需要实现的单周期CPU和上图所示的电路图基本上类似,其中存在的区别是我们实现的是16位CPU电路,而MIPS处理器是32位的,总的来说,我们完全可以参考上图的MIPS处理器的电路分析自己所需要设计的CPU电路。由上图可以知道,一个完整的CPU电路包括取指IF阶段,这个阶段有PC数值的控制,还包括访问指令存储器取出指令;译码ID阶段,这个阶段包括从访问寄存器组并获得相应的数值,对指令的译码以实现对后续CPU功能的控制;运算EX阶段,将ID段从寄存器组中获得的数值传入运算器进行相关的运算,并将相关的控制信息传回IF段;访存MEM阶段,这个阶段需要对数据存储器进行访问以获得需要的数值;写回WB阶段,这个阶段要将计算结果或者访存数值写回相应的寄存器,还需要注意的是以上所有功能是在一个时钟驱动下实现的,以上便是完整的单周期电路需要考虑的问题。由于我们实现的是16位的单周期CPU电路,因此整个电路可以如图2.2这样看待:图2.2单周期CPU电路简约图图2.2便是我们实现的单周期CPU电路的最终简约图,只要分别将CPU电路各个部件的功能实现,然后连接各个功能部件,最终实现单周期CPU电路。多周期流水线电路首先需要实现的是理想5段流水线电路,这里需要将上诉的单周期CPU电路各个功能部件分开,然后用各个阶段之间的锁存器进行分离,由于只需要实现理想电路,因此开始并不需要考虑各种冲突的发生,只需要将电路的各个部件按照CPU工作的流程按序链接起来就可以了。图2.3是理想5段流水线的示意图:图2.3理想5段流水线电路由图2.3可以发现,5段流水线保存了单周期CPU电路的每一个功能部件,唯一不同的就是CPU电路的5个功能部件并不是直接链接在一起的,而是用锁存器分开,利用锁存器传递信号。5段流水线使得一条指令由5个功能部件在5个周期逐步执行,每一条指令不断地像流水作业一样不断执行,但是由于指令执行分步骤实现,导致电路中存在数据冲突和控制相关,因此需要考虑冲突的处理问题,其中对于数据冲突的处理有两种解决办法,一种是插入气泡式冒险处理,这种方法是判断每一条指令与上一条指令或上上条指令是否存在数据相关,如果存在数据相关,就插入气泡,导致电路阻塞,电路停止一个周期的指令前进,使得冲突不对程序的运行结果造成影响;另外一种是数据转发方式的冒险处理,这种方法是判断每一条指令与上一条指令或上上条指令是否存在数据相关,如果存在数据相关,就在这一条指令的EX阶段前期将上一条指令或者上上条指令的结果传回来进行相应的运算,使得即使当前指令访问寄存器取出来的数值也许不是正确的操作数,但是可以保证在进入计算阶段的时候的操作数是正确的,但是这里需要注意的是LOAD指令,由于LOAD指令取出来的数值是在MEM阶段的后期,因此这里需要将数值传到第五个阶段以便传回EX阶段,进行正确的运算,因此这里需要用用到插入气泡的功能部件以便实现正确的功能电路。图2.4是数据转发方式的冒险处理的电路图:图2.4数据转发方式的冒险处理电路由图2.4可以发现电路中存在对于LOAD指令的插入气泡的处理,这是实际中CPU电路的设计情况,电路还存在数据转发,将数值从第四阶段或者第五阶段传到EX阶段进行处理。最后需要在上诉所有电路的基础上实现分支预测的功能电路,虽然上诉几个电路已经处理了分支冲突,但是这样处理的分支冲突降低了CPU对程序的执行速度,在每一次分支冲突发生的时候都进行插入气泡的处理,使得电路在每次分支冲突的时候都暂停了一个时钟周期,这样明显使得电路的运算性能降低了许多。因此利用分支预测的方法处理分支冲突,分支预测的思想是,利用分支目标缓冲器BTB来记录相关分支指令的“历史”,并据此进行预测,这个“历史”是指最近一次或几次的执行情况是成功还是失败。如果分支是成功的,则在以后的指令执行过程中预测需要进行分支处理,找到分支目标地址,将目标地址的指令进行取指操作,由于许多程序都需要进行多次分支跳转,因此这种处理可以节省大量的处理时间;如果分支预测失败,则执行分支指令的下一条指令。图2.5就是实现了分支预测功能的最终五段流水线电路图:图2.5全冒险处理机制的流水CPU电路从图2.5可以看出,电路中分别有对数据冲突处理的数据转发式冒险处理,同时存在对分支冲突处理的分支预测电路。实验环境本实验需要一台功能部件完整的计算机,配置WINDOWS7或者WINDOWS8计算机系统,设计开发工具为Logisim,这是一款数字电路模拟的教育软件,每一位用户都可以通过它来学习如何创建逻辑电路,方便简单。它是一款基于Java的应用程序,可运行在任何支持JAVA环境的平台,方便学生来学习设计和模仿数字逻辑电路。Logisim中的主要组成部分之一就在于设计并以图示来显示CPU或其他中央处理器单位。当然Logisim中还有其他多种组合分析模型来对你进行帮助,如转换电路,表达式,布尔型和真值表等等。同时还可以重新利用小规模的电路来作为大型电路的一部分。具体实验环境见REF_Ref25686\h表2.1所有的图,表都必须交叉引用。所有的图,表都必须交叉引用表STYLEREF1\s2.SEQ表\*ARABIC\s11CPU电路设计实验配置须插入题注,注意在表格的上方,编号形式为X.X,表格格式参照这个吧,这个还画的比较漂亮。此表只是个例子,主要说明在报告中的表格依照此种格式,而不是说这个部分必须用表格。注意创建的编号格式N.XN为章,X本章表的序号,如表2.1表示是第二章的第一个表。表的标号及名称要比正文小一个字号。须插入题注,注意在表格的上方,编号形式为X.X,表格格式参照这个吧,这个还画的比较漂亮。此表只是个例子,主要说明在报告中的表格依照此种格式,而不是说这个部分必须用表格。注意创建的编号格式N.XN为章,X本章表的序号,如表2.1表示是第二章的第一个表。表的标号及名称要比正文小一个字号。配置启动器实验设备一台功能完好的计算机OSWindows7/Windows8实验软件Logisim总体方案设计给出方案概要设计,注意这章是设计,不是最终实现,请不要将最终的连线图,代码等放在这一章给出方案概要设计,注意这章是设计,不是最终实现,请不要将最终的连线图,代码等放在这一章构建单周期CPU在我们实现的CPU电路中,是由单周期驱动,控制所有的功能部件完成指令的相关操作,由于实验平台是一个理想的没有考虑其他误差的软件,因此只需要在一个时钟跳变的过程中,完成指令的取指、译码,访问寄存器取出相应的数值并参与运算器的运算,最后访存、写回相应的寄存器,要真正地掌握CPU工作的流程,才可以知道CPU功能部件工作的顺序,也才能保证单周期CPU设计的成功。表STYLEREF1\s3.SEQ表\*ARABIC\s11原型系统实现的Region所有的表都必须有编号和名字所有的表都必须有编号和名字Type0Type1Type5Type7RAID级别0105N/A磁盘个数888N/A分条单元大小32KB16KB32KBN/A数据块大小512KB16KB64KB1KB数据块个数8K8K8K8K总体设计本次实验,我采用的方案是硬布线控制器的设计方案,CPU的功能部件直接由各种类型的逻辑门电路和触发器等构成,采用组合逻辑电路根据不同的指令在不同的条件状态下产生不同的操作控制信号,对指令执行过程中的数据通路进行控制,使得控制器在执行阶段向不同的功能部件发出各种操作控制信号,协调各部件之间的操作,以完成预期的电路功能。并且由于处于控制方便的考虑,我采用将指令数据存储器分开的方案,即采用将指令存储器和数据存储器不共用一个存储器的方式完成方案的设计,使得访存取指令和数据访存不存在结构冲突,便于CPU的实现。(参考文本,请大家自行修改扩展)总体结构图如REF_Ref26160\h图3.1所示。(注意设计阶段只需要简单的原理示意图)图注,用插入题注的方式插入,插入后可用交叉引用引用,注意题注,交叉引用是word很重要的概念,希望大家认真找点资料看看这个功能,这是office排版的高级技巧,希望大家掌握,如果插入题注没有对应的图题注,只有figure图注,用插入题注的方式插入,插入后可用交叉引用引用,注意题注,交叉引用是word很重要的概念,希望大家认真找点资料看看这个功能,这是office排版的高级技巧,希望大家掌握,如果插入题注没有对应的图题注,只有figure等,可以自己创建,注意创建的编号格式N.XN为章,X本章表的序号,如图3.3表示是第三章的第3个图。图的标号及图名称比正文小一个字号。图STYLEREF1\s3.SEQ图\*ARABIC\s11单周期CPU电路总体结构图所有图都必须有图名所有图都必须有图名主要功能部件我设计的单周期CPU电路都是用组合逻辑电路控制单元实现的,选择设计平台不同的功能器件进行相应的组合,形成各个功能部件,具体的设计如下:1.程序计数器PC我对于PC的控制,采用了一个PC寄存器,利用其中的数值来反映当前指令的地址,然后再对于寄存器数值PC进行PC+1的操作,对于跳转目的指令地址与PC+1的数值用跳转控制进行选择,以确定下一条指令的地址选取,输入到PC寄存器中,并设置PC寄存器是否存数的控制。指令存储器IM设置一个只读存储器ROM作为指令存储器,将存储器访问的地址控制端接到PC的端口,然后将取出的指令传送到一个指令寄存器中准备传送到执行部件执行相应的操作。寄存器组RF使用4个寄存器构成寄存器组,然后输入写入数据的接口和是否输入控制信号,利用解复用器选择输入的目的寄存器,以确保将数据输入到正确的寄存器中。对于读寄存器,输入两个读数寄存器的选择信号,利用数据选择器将读取的目的寄存器中的数值读取出来。3.1.3构造R型指令表STYLEREF1\s3.1R型指令课程要求的R型指令的格式如图3.1所示,其中15~12位设置为操作数,11~10位设置为第一操作数寄存器号,9~8位设置为第二操作数寄存器号,7~6设置为结果寄存器号,5~3位直接置0,2~0位设置为R型指令的类型选择项。3.1.4构造I型指令表STYLEREF1\s3.2I型指令课程要求的I型指令的格式如图3.3所示,其中15~12位设置为操作数,11~10位设置为第一操作数寄存器号,9~8位设置为第二操作数寄存器号,7~0位设置为常数(分为有符号常数与无符号常数)。3.1.5构造J型指令表STYLEREF1\s3.3J型指令课程要求的J型指令的格式如图3.4所示,其中15~12位设置为操作数,11~0位设置为跳转地址(无符号数)。3.1.6DISP指令表STYLEREF1\s3.4DISP型指令课程要求的DISP型指令的格式如图3.5所示,其中15~12位设置为操作数,11~10位设置为需要显示数据的寄存器号,9~8位设置为第二操作数寄存器号(没有功能作用),7~0位设置为常数(用来选择哪个显示器显示数据)。3.1.7halt指令表STYLEREF1\s3.5halt型指令结构图课程要求的halt型指令的格式如图3.6所示,其中15~12位设置为操作数,11~0位置为0。3.1.8控制器封装图STYLEREF1\s3.2控制器封装图我设计的单周期CPU电路将运算器也封装在控制器中,因此需要向控制器中传送两个运算操作数、指令、PC等信息,由控制器将指令译码,并根据译码结果结合传送来的信息进行相关功能的执行,最后输出结果和其他控制信息如:运算器结果、是否写入寄存器信息等。可支持理想流水线的多周期CPU设计总体设计指令的格式设计是类MIPS指令格式的,分为R型指令、I型指令和J型指令。指令的寻址方式设计有顺序寻址方式和跳跃寻址方式,操作数的寻址方式只有变址寻址方式。采用定长指令每条指令的长度为16位,总共有3种类型,如表3.6所示。表STYLEREF1\s3.6各类型指令的划分根据设计情况修改表格,表格格式参照前面的例子根据设计情况修改表格,表格格式参照前面的例子表中15~12位决定是什么指令,rs、rt、rd为三个寄存器编号,其中R型指令2~0位为R型指令的功能选择字段,决定进行什么样的R型指令类型,其中I型指令7~0位为常数,分为有符号常数与无符号常数,分别对应于不同的指令操作类型,还有J型指令11~0位为无符号数,作为跳转地址,至于halt指令则置为0。对于寄存器的编号,由于我们的系统总共有4个寄存器,故使用2位二进制码将它们编号(如1号寄存器编号为00等)。接口部件设计流水线的设计思想是把一个复杂的任务分解为若干个子过程,每个子过程与其他子过程并行运行,采用时间上的并行性,通过将一个任务划分成几个不同的子过程,并且各个子过程在不同的功能部件上并行执行,使得在同一个时钟周期内同时解释多条机器语言指令,提高程序的执行速度。流水线的设计方案是将指令的执行过程分为取指IF、译码ID、执行EX、存储器访问MEM以及写回WB等5个子过程,在每个子过程的后面都需要有一个锁存器,以保证该子过程的执行结果给下一个子过程使用。流水线把一条指令的执行划分为5个子过程,每一个子过程由一个独立的专用功能部件来执行,依靠执行不同功能的功能部件并行工作来提高系统的吞吐率和处理速度,它并不能改变单条指令的执行时间,但提高了系统的整体吞吐率。因此对于流水线电路的设计,需要在设计之前弄明白每个阶段间需要传递什么信息,每一个阶段可以产生怎样的处理结果,然后设计适当的锁存器来进行数据的传送。然后再根据5个功能部件的特点,设计出5个功能部件,并且设置适当的接口,来是实现信息的接受与发送。设计的指令执行流程:首先在IF段进行正确的取指,然后经过IF/ID锁存器进入ID阶段,ID阶段对指令进行译码,分析出操作数寄存器和目的寄存器以及其他信息(例如常数等),然后根据操作数寄存器号对相对应的寄存器进行取数操作,最后将操作数、操作码以及其他信息经过ID/EX锁存器传入EX阶段,EX阶段接收到控制执行的各种信息,对整个指令进行相应的处理,获得处理结果(如运算结果、写入数据存储器控制信号等),处理结果经过EX/MEM锁存器进入MEM阶段,MEM阶段根据EX阶段的控制信息确定存数操作、取数操作或跳过,最后将剩余的控制信息经过MEM/WB锁存器传到WB阶段,WB阶段根据控制信息将确定的数据写入正确的寄存器中。3.2.3流水冲突检测器检查本指令的两个操作数寄存器号是否与上条指令的目的寄存器号是否相同,如果存在任何一种类型的相同,则说明存在流水冲突。3.2.4插入气泡的流水冲突处理根据流水冲突检测器检测是否发生流水冲突,如果发生流水冲突,分别对IF阶段、IF/ID锁存器进行阻塞,以及对ID/EX锁存器进行清零使得电路执行NOP操作,这样便使得CPU停止运行了一个周期。假如电路还存在冲突,则再按上诉操作停止一个周期直到冲突不再对程序运行结果造成影响。3.2.5数据重定向的流水冲突处理根据流水线冲突检测器检测是否发生了流水冲突,如果发生了当前指令与上条指令存在冲突,则将第四阶段的数值传回当前指令的EX阶段进行运算,如果发生了当期那指令与上上条指令村子啊冲突,则将第五阶段的数值传回当前指令的EX阶段进行运算。这时要注意上条指令是LOAD指令的特殊性,这时需要用到插入气泡的冲突处理使得电路停止一个周期将LOAD指令的取值传到第五个阶段然后再传回当前指令的EX阶段进行运算,因为这样才符合实际CPU的设计情况。3.2.6动态分支预测的流水冲突处理分支预测是查找指令的地址观察上一次执行该指令时分支是否发生,如果上次执行时分支发生就从上次分支发生的地方开始取指令。分支预测的实现方法是采用了分支预测缓冲器BTB,来记录分支最近是否执行,其实并不知道预测的是否是当前的分支指令,该执行结果可能是别的某条分支指令的执行结果,但这并不影响这种方法的正确性,预测只是假设正确的提示,在这个基础上,指令预取沿着预测的方向进行,如果这种假设错误,不正确的预测指令将被删除,预测位将取非,并返回原来位置,继续按照正确的指令顺序取指并执行。详细设计与实现撰写具体的实现细节,流程图,原理图,引脚连接等等,微程序实现,微指令实现,控存安排等等细节,上一章主要讲方案,这章描述最终实现细节。撰写具体的实现细节,流程图,原理图,引脚连接等等,微程序实现,微指令实现,控存安排等等细节,上一章主要讲方案,这章描述最终实现细节。构建单周期CPU主要功能部件实现程序计数器PC选用的元器件:计数器(数据位宽:16,最大值:0xffff,溢出时操作:重新计数,触发方式:上升沿,标签:PC),寄存器(数据位宽:16,触发方式:下降沿,标签:PC),加法器(数据位宽:16位),多路选择器(朝向:东,选择数据长度:1,数据位宽:16),输入输出引脚(输入跳转地址位宽为16位,输出PC数值位宽为16位,其他设定为默认参数值)。输入:跳转地址、是否跳转控制、时钟信号、清零信号。跳转地址输入是无条件跳转指令和条件跳转指令跳转目标指令的地址输入,是否控制跳转是选定PC+1还是跳转地址的选择控制信号输入,时钟和清零信号是主电路的时钟和输入引脚输入。输出:PC寄存器的输出端。具体实现:寄存器的时钟端连线时钟隧道,清零隧道直接连接和寄存器的清零端,多路选择器的输出端连接寄存器的数据端,并且从寄存器输出端接一条线路进入加法器的一个操作数端口,然后进行+1操作并将结果传入到多路选择器其中一个输入端口,选择地址输入接入到多路选择器另外一个输入端口,通过是否跳转控制来选择哪一个输入到PC寄存器中,具体电路见图4.1。图STYLEREF1\s4.SEQ图\*ARABIC\s11PC结构图运算器ALU选用的元器件:两个解复用器(数据位宽:16,朝向:东,选择数据位宽:3),一个多路选择器(数据位宽:16,朝向:东,选择数据位宽:3),或门(朝向:东,数据位宽:16,输入引脚数量:2,门尺寸:中等),与门(朝向:东,数据位宽:16,输入引脚数量:2,门尺寸:中等),加法器(数据位宽:16位),减法器(数据位宽:16),逻辑左移位器(数据位宽:16),逻辑右移位器(数据位宽:16),算术右移位器(数据位宽:16),比较器(数据位宽:16,数字类型:关于2的补码),3个位扩展器(输入位宽:16,输出位宽:4,扩展方式:以0填充),12个隧道(数据位宽:4),输入输出引脚(输入两个操作数的位宽为16位,输入的运算选择类型位宽为3,输出运算结果位宽为16位)。输入:操作数A、B,运算选择类型。操作数A、B是运算的两个操作数输入,运算选择是选择何种运算的输入,时钟和清零信号是主电路的时钟和输入引脚输入。输出:多路选择器输出端。具体实现:运算器输入两个运算操作数,然后送入解复用器输入端,通过运算选择将操作数输入到确定类型的运算器输入端,这样可以保证只使用需要使用的运算器,从而节省电路的功耗,进行运算获得运算结果后,然后同样通过运算选择通过多路选择器将运算结果输出,其中要注意的就是进行移位运算的时候,其中一个操作数是4位的运算数,因此需要将输入传过来的第二个操作数进行位的截取运算,从而将16位数值转化为4位数值参与移位运算,由于电路中设计的比较紧凑,因此使用隧道将3种移位运算的第二个操作数在其他空闲的地方进行位截取操作,在利用隧道将截取获得的结果传回来,具体电路见图4.2。3.指令类型表STYLEREF1\s4.SEQ表\*ARABIC\s11各类型指令的划分指令位OP:15~12RS:11~10RT:9~8RD:7~65~3Funct:2~0R型0RSRTRD0000~7I型1~10RSRT8位常数J型11~12JMP(跳转地址)/halt(0)图STYLEREF1\s4.2运算器结构图采用定长指令,每条指令的长度为16位,总共有3中类型,如表4.1所示。其中所有指令的15~12位为操作数的类型,R型指令中有3个寄存器参与运算,分别为第一操作数寄存器、第二操作数寄存器以及目的操作书寄存器,分别对应为11~10位、9~8位以及7~6位,5~3位未参与编码,因此置为000,2~0位作为funct位,用于区分R型指令的运算类型;I型指令中有两个寄存器参与运算,其中RS寄存器作为第一操作数寄存器,RT寄存器既作为第二操作数寄存器,又作为目的操作数寄存器,这需要依据不同的指令运算决定,7~0位作为常数操作数;J型指令没有操作数和运算结果,因此不需要使用寄存器,11~0位作为一个整体形成常数,如果指令是jmp指令,则作为指令跳转的目的地址,如果是halt指令,则置为0。选用的元器件:位分离器(朝向:东,位数:16位)、位扩展器(输入位数:4位,输出位宽:8位),输入输出引脚(输入指令的位宽为16位,输出译码结果操作数位宽为4位,3个寄存器位宽为2位,R型指令类型为3位,16位输出常数为16位,8位输出常数位8位)。输入:16位需要译码的指令,时钟和清零信号是主电路的时钟和输入引脚输入。输出:操作码用于控制后序电路的工作,操作数寄存器号用于在寄存器组中取数,结果寄存器号用于在寄存器组中存数,R型指令类型,用于控制区分R型指令,8位常数用于后序常数运算操作,16位常数用于JMP跳转指令的目的指令地址。具体实现:由于指令设计使用了类MIPS指令类型,因此指令中不同的位具有不同的功能,因此在对指令进行译码工作的时候,只需要将指令分解为不同的位作为不同的控制信息即可。具体的电路见图4.3。图STYLEREF1\s4.3译码器结构图根据设计情况修改表格,表格格式参照前面的例子根据设计情况修改表格,表格格式参照前面的例子(请自行扩展修改)4.寄存器组选用的元器件:4个寄存器(位数:16位,触发方式:上升沿),数据解复用器(位数:16位,选择数据长度:2位),写入控制解复用器(位数:1位,选择数据长度:2位),两个数据选择器(位数:16位,选择数据长度:2)。输入:需要写入的数据,是否写入寄存器的控制信息,写入寄存器号用于控制写入哪一个寄存器,第一操作数寄存器号和第二操作数寄存器号用于读取寄存器组相对应的寄存器中的数值用于后序电路参与运算,时钟和清零信号是主电路的时钟和输入引脚输入。输出:显示4个寄存器中数值的输出,用于查看CPU的工作状态及检验电路的正确性,输出第一操作数和第二操作数用于后序运算。具体实现:寄存器的写入:将需要输入的数据输入到写入寄存器端口,然后通过解复用器通过写入寄存器号将输入数据输入到对应目的寄存器的输入端,同样通过解复用器将是否写入寄存器控制信号输入到目的寄存器的写入控制端,这样就可以保证将要输入的数据写入相应的目的寄存器中。寄存器的读数:将4个寄存器的数值都接入到数据选择器的输入端口,然后通过读数寄存器号将特定的寄存器中的数值读取出来。最后用两个32位的输出端口将4个16位的寄存器中的数值输出,以便于其他地方查看寄存器中的数值变化以及检验正确性。具体的电路见图4.4。图STYLEREF1\s4.4译码器结构图5.DISP显示功能部件选用的元器件:2个寄存器(位数:16位,触发方式:上升沿),2个解复用器(位数:1位,选择数据长度:1位),2个与门(位数:1位,输入引脚数量:2个,门尺寸:窄),8个16进制数字显示器(4个一组分两种颜色),位扩展器(输入位宽:8位,输出位宽:1位)。输入:输入需要显示的数据用于显示器显示,显示改变输入用于控制是否改变显示器锁存器中的数值,立即数输入用于选择哪一组显示器显示数值,时钟和清零信号是主电路的时钟和输入引脚输入。输出:输出显示器中显示的数值用于其他电路中显示器使用。具体实现:将需要显示的数据输入到两个锁存器的输入端,用于锁存器保存需要显示的数据,通过立即数输入,将立即数用位截取0位来控制将数值锁存到哪一组显示器的寄存器中,显示改变用于改变显示器锁存器中的数值,即改变显示的数值,这里需要和一个显示控制进行逻辑并的运算使得可以控制改变目的的显示器锁存器,这样就可以实现将需要显示的数值保存到相对应的锁存器中。然后将锁存器的输出端口分别接到对应的16位数字显示器组中用于显示对应锁存器中的数值,并通过输出端口将显示的数值输出用于其他电路。具体的电路见图4.5。图STYLEREF1\s4.5译码器结构图6.比较跳转指令控制部件选用的元器件:数据选择器(选择数据长度:1位,数据位宽:16位),类型数据选择器(选择数据长度:4位,数据位宽:1位),比较器(数据位宽:16位),加法器(数据位宽:16位),位扩展器(输入位宽:8位,输出位宽:16位)。输入:输入两个需要比较的操作数用于比较,输入操作数用于控制哪一种比较类型以便输出对应的结果,输入PC值和立即数用于条件满足时进行跳转地址的运算。输出:输出下一条指令的地址。具体实现:通过输入两个操作数,进入比较器中进行比较,并且把不同的并且需要的结果接到数据选择器中特定的输入端,然后通过操作数的选择,将特定的结果输出到数据选择器的选择端口用于选择是否将常数加上PC值进行跳转,如果条件成立则加上常数发生跳转,如果不成立则加上0即不发生跳转,最后输出判断的下一条指令的地址。具体的电路见图4.6。图STYLEREF1\s4.6比较跳转指令部件结构图HALT指令功能部件选用的元器件:数据选择器(选择数据长度:4位,数据位宽:1位),与门(数据位宽:1位,门尺寸:中等,输入引脚数量:2个)。输入:输入操作码确定是否是HALT指令,时钟输入是系统时钟引脚输入。输出:当前程序运行时的时钟。具体实现:通过输入操作码以确定是否是halt指令,如果是halt指令则将时钟和低电平进行逻辑并的操作,这样便可以使得如果电路指令是halt指令,则时钟信号进入停止状态。具体的电路见图4.7。图STYLEREF1\s4.7时钟控制部件结构图控制器选用的元器件:10个数据选择器用于不同的选择功能,解码器(数据选择长度:4位),halt指令功能部件,译码器,DISP显示功能部件,运算器,比较跳转指令功能部件,若干不同的位扩展器,若干不同的隧道。输入:输入指令用于整个控制器的控制信息,输入两个操作码用于运算器的算术运算,输入PC值用于条件跳转指令的运算,输入数据存储器取出数据用于相关指令的算术运算,时钟输入是系统时钟引脚输入,清零信号是主电路的引脚输入。输出:输出控制器控制的时钟控制程序的进行,输出两个显示器数值用在MAIN电路中显示,输出两个读数寄存器号用于在对应的寄存器中读数进行运算操作,输出寄存器写入的数据以便写入寄存器组中,输出写入寄存器控制信号用于控制是否需要将数值写入寄存器中,输出是否读取数据存储器用于控制是否在数据存储器中读数,输出是否写入数据存储器用于控制是否向数据存储器中写入数值,输出写入数据存储器的数值以便写入数据存储器,输出数据存储器访问地址以便访问确定的地址,输出跳转控制信息以便控制指令的跳转,。具体实现:通过输入操作码以确定是否是halt指令,如果是halt指令则将时钟和低电平进行逻辑并的操作,这样便可以使得如果电路指令是halt指令,则时钟信号进入停止状态。具体的电路见图4.7。可支持理想流水线多周期CPU流水线冲突检测器插入气泡的流水冲突处理。。。实验过程与调试测试用例和功能测试测试用例1JMP相关测试程序:lui$r1,1jumpNext1lui$r1,1lui$r2,2lui$r3,3Next1:JumpNext2lui$r1,1lui$r2,2lui$r3,3Next2:JumpNext3lui$r1,1lui$r2,2lui$r3,3Next3:JumpNext4lui$r1,1lui$r2,2lui$r3,3Next4:halt测试JMP指令。数据相关性测试程序:lui$r1,0ori$r1,1lui$r0,0ori$r0,1lui$r2,0ori$r2,0sw$r1,0($r1)add$r3,$r1,$r0add$r1,$r3,$r0add$r0,$r3,$r1add$r3,$r1,$r0add$r1,$r3,$r0add$r0,$r3,$r1add$r3,$r1,$r0add$r1,$r3,$r0add$r0,$r3,$r1add$r3,$r1,$r0add$r1,$r3,$r0add$r0,$r3,$r1sw$r0,0($r2)halt测试数据重定向功能的正确性。benchmark测试程序:li$r0,1//简单移位,循环测试,0号区域显示的是初始值1左移1位重复15次的值,1号区域是累加值li$r1,1li$r3,1disp$r1,0disp$r3,1SHIFT:sllv$r1,$r1,$r0//逻辑左移一位disp$r1,0add$r3,$r3,$r1//$r3存放累加值disp$r3,1//显示累加值slt$r2,$r1,$r0//判断移位是否溢出beq$r2,$r0,NEXTjumpSHIFTNEXT:li$r0,1//算术移位测试,8000算术右移,依次显示为F000,FF00,FFF0,FFFFli$r1,15sub$r1,$r1,$r0add$r1,$r1,$r0sllv$r3,$r0,$r1//$r3=0X8000disp$r3,0li$r1,3srav$r3,$r3,$r1//0x8000-->0XF000disp$r3,0li$r1,4srav$r3,$r3,$r1//0xF000-->0XFF00disp$r3,0srav$r3,$r3,$r1//0xFF00-->0XFFF0disp$r3,0srav$r3,$r3,$r1//0xFFF0-->0XFFFFdisp$r3,0li$r0,1//走马灯测试,测试lui,andi,sllv,srlvandi,or,disp0号显示区域按走马灯方式来回li$r1,15sllv$r3,$r0,$r1srav$r3,$r3,$r1//$r3=0xFFFFli$r0,0li$r1,4lui$r2,12srlv$r2,$r2,$r1srlv$r2,$r2,$r1//$r2=12Loop:addi$r0,$r0,1andi$r0,$r0,15sllv$r3,$r3,$r1//走马灯左移or$r3,$r3,$r0disp$r3,0sllv$r3,$r3,$r1or$r3,$r3,$r0disp$r3,0sllv$r3,$r3,$r1or$r3,$r3,$r0disp$r3,0sllv$r3,$r3,$r1or$r3,$r3,$r0disp$r3,0addi$r0,$r0,1andi$r0,$r0,15sllv$r0,$r0,$r2srlv$r3,$r3,$r1//走马灯右移or$r3,$r3,$r0disp$r3,0srlv$r3,$r3,$r1or$r3,$r3,$r0disp$r3,0srlv$r3,$r3,$r1or$r3,$r3,$r0disp$r3,0srlv$r3,$r3,$r1or$r3,$r3,$r0disp$r3,0srlv$r0,$r0,$r2bne$r0,$r2,Loopli$r0,0//排序测试程序,将0-15号内存区间数据排序li$r1,15DISP:disp$r0,0disp$r1,1lw$r2,0($r0)lw$r3,0($r1)bgt$r2,$r3,2sw$r2,0($r1)sw$r3,0($r0)addi$r1,$r1,-1bne$r0,$r1,DISPjumpJMPnopor$r0,$r0,$r0JMP:addi$r0,$r0,1li$r1,15bne$r0,$r1,DISPhaltmv$r0,$r1#macroinstruction//各段程序可单独汇编运行,也可以一次测试运行benchmark测试程序涵盖了本实验需要实现的所有CPU功能,用于单周期CPU电路的测试,和每一个功能电路最终的测试。可自行安排章节性能分析主要故障与调试故障1单周期:寄存器组各个寄存器写入的问题。故障现象:启动了时钟后,加载镜像后,多次对寄存器的数值进行操作后,发现每一个寄存器的数值都是一致的。原因分析:测试的时候,一步一步执行,发现每次执行寄存器的写入之后,所有的寄存器的数值都发生了改变,经过分析,可以想到应该没有对写入的寄存器进行判别,导致每次写入寄存器时导致所有寄存器都发生了数值的改变。解决方案:对寄存器的写入进行控制,添加两个数据选择器,其中一个数据选择器将需要写入的数据作为输入,将写入寄存器的编号作为选择端的输入,视为数据选择输入,另一个数据选择器将需要写入寄存器的控制信号作为输入,将写入寄存器的编号作为选择段的输入,视为数据控制输入,当有数据需要写入数据的时候,将需要写入的数据传进数据选择输入,将写入寄存器的控制信息传进数据控制输入,将两个选择端都接进一个写入寄存器的编号,这样当寄存器组需要写入数据的时候,可以保证数据可以写进目的寄存器中而不影响其他寄存器的数值的改变。故障2单周期:PC寄存器在第一条指令的执行问题。故障现象:启动了时钟后,PC寄存器中数值就为1,导致电路执行的第一条指令是真实情况下的第二条指令,因此电路忽略了第一条指令的执行。原因分析:测试的时候,对时钟进行操作,发现当时钟沿跳变为正的时候,PC寄存器中数值就已经为1了,然后再时钟没有进行跳变的时候,PC寄存器中的数值依旧是0,指向的是指令存储器中第一条指令,分析可以知道,当时钟上升沿跳变的时候,PC寄存器就进行了+1的操作,因此PC中就写入了第二条指令的地址,而直接忽视了第一条指令,导致电路没有执行第一条指令。解决方案:将pc寄存器改为下降沿触发,这样如果时钟发生上升沿跳变的时候,PC寄存器中的数值依旧为0,指向指令寄存器第一条指令的地址,取出了指令存储器中第一条指令,电路对第一条指令进行执行命令,当时钟下降沿跳变的时候,PC进行了+1的操作,PC变为下一条指令的地址,当时钟发生上升沿跳变的时候,电路正确地执行了下一条指令。故障3单周期:显示器闪烁的问题。故障现象:启动了时钟后,加载镜像后,电路虽然按着正常的功能执行,但是显示器却出现了闪烁的现象。原因分析:测试的时候,一步一步执行,发现电路在执行过程中,寄存器组中的数值都是与预期相同的,但是显示器在不需要进行显示操作的时候却发生闪烁的现象,由于没有显示操作,因此可以知道,没有对显示器的显示功能进行控制,导致显示器在没有显示操作的时候依旧发生了显示现象。解决方案:对操作码进行分解译码选择,将操作码为1的控制信号接入显示器的锁存器中,使得显示器的锁存器改变的控制端受操作码的控制,只有当需要进行显示操作的操作码出现的时候,才使得显示器锁存器的数值发生改变,当不需要显示操作的时候,就不对锁存器中的数值进行改变,当进行这样的功能控制之后,使得显示器不再有闪烁的现象。故障4单周期:常数运算操作。故障现象:启动了时钟后,加载镜像后,无线循环下去了。原因分析:测试的时候,一步一步执行,发现执行到常数操作的相关指令后,电路就出现了异常现象,得出的结果和预期完全不同,导致电路没有按照预定的轨道执行,当执行到判断跳转指令的时候,PC直接就改变为和预期很不相同的数值,地址指向没有指令的地方,并一直执行下去。经过分析,发现PC改变后的数值是由于直接加上了指令中无符号常数,导致PC的值变得很大,而原本需要进行操作的是有符号的常数,因此导致电路的执行发生了错误。解决方案:在对有常数参与运算的指令的时候,对指令中给出的8位常数进行不同类型的扩展,对于需要有符号数参与运算的指令,对8位常数进行有符号数的扩展,对于需要无符号数参与运算的指令,对8位常数进行无符号数的扩展,并用操作码对常数的选择进行控制,以确保将正确的数值传进运算器当中参与运算,经过这样的操作,使得指令执行正确执行。故障5单周期:halt指令未参与指令个数的计数。故障现象:当需要对指令个数进行统计的时候,发现指令总是少了一条halt指令的计数。原因分析:测试的时候,程序开始的时候迅速执行指令,使得指令到达程序的末尾,然后对指令进行单步执行,当指令执行到halt指令的时候,指令计数器并没有进行+1操作,并且发现由于停止了时钟,时钟在这个时候并没有发生跳变,分析可以发现,由于halt指令是停止时钟的指令,因此导致时钟在这个时候没有进行上升沿跳变,导致是指令计数器并没有进行+1计数,因此导致halt指令没有计入指令的总数量。解决方案:两种解决方案,一是对操作码进行判断,加入发现执行的指令的操作码是halt指令的操作码,就对指令计数器多进行一次+1操作。另外一种的方案是取消对计数器计数端的控制,本来进行halt指令的时候,电路中是进行了一次时钟沿的跳变的,不然就不会执行halt指令,由于原来的电路对计数器的计数端进行了控制,导致计数器无法扑捉到那次迅速的跳变,因此取消了计数端的控制,使得计数器可以扑捉到halt指令迅速的跳变,计数器进行+1操作。采用方案二的原因是:电路简单,不用使用其他的电路功能部件,节省成本。故障6五段流水线冒泡功能电路:当需要插入气泡的时候,对ID/EX锁存器清零。故障现象:启动了时钟后,加载镜像后,电路执行没有成功地插入气泡无法进行正确的功能执行。原因分析:测试的时候,一步一步执行,发现执行到数据冲突的时候,需要进行插入气泡的操作,虽然插入气泡的功能电路给出了插入气泡的正确信号,但是电路却没有在ID/EX段进行正确的清零操作,导致需要阻塞的指令依旧进入了EX段进行执行,导致需要阻塞的指令执行了2次或2次以上,并不是对ID/EX进行清零而使后面的电路执行NOP指令。后来对ID/EX锁存器的清零进行分析,发现由于时钟信号比清零信号较早到达,因此清零寄存器并没有产生清零控制信号,导致ID/EX锁存器没有进行正确的清零操作。解决方案:由于时钟信号比清零信号较早达到,因此需要对ID/EX进行同步清零控制,使得ID/EX可以正常清零,后面的电路执行NOP操作。故障7五段流水线冒泡功能电路:插入气泡清零。故障现象:启动了时钟后,指令执行到插入气泡的时候,发现都会对寄存器0进行清零操作,电路并且进入死循环。原因分析:测试的时候,一步一步执行,发现执行到需要插入气泡的时候,都会在插入气泡后对寄存器0进行清零操作,后来对电路进行查看的时候,发现由于插入气泡的时候会对ID/EX锁存器进行清零操作,因此就会把从寄存器组中取出的数据清零并传入计算机的两个计算数输入端,得出的结果是0,又由于NOP的目的寄存器是寄存器0,因此就会把0写入寄存器0,从而对寄存器0进行清零操作,从而影响后面的执行。解决方案:两种解决方案,一是在WB阶段对当前指令进行判断,如果当前的指令是NOP指令,就不对寄存器组进行写入的操作。另外一种的方案是在清零的时候添加一个清零寄存器,把清零的指令传到EX/MEM,然后在EX/MEM将清零信号对写入寄存器控制信息寄存器进行清零,这样就可以保证不对寄存器组进行写入操作。采用方案一的原因是:当时发现问题之后想到的第一个方法是方案一,之后的方案是写完后想到的,并且方案一实现较为简单。故障8五段流水线数据重定向功能电路:数据重定向周期数不正确。故障现象:启动了时钟后,加载镜像后,全部执行完之后发现执行完后的周期数与正确的周期数不一样。原因分析:这时候电路是没有问题的,但是需要考虑是LOAD指令的特殊,由于取数操作是需要进行访存的,而访存之后是在一个阶段的后期,而对重定向是需要将数据传回第三阶段的开始阶段,因此需要传回的数值是在周期的前期,因此这里就存在了时间差的问题,由于实验设计平台是理想的平台,有一些地方并没有和实际情况相符,因此虽然电路实际上是一个错误的电路,但是却能得出正确的结果。因此在出现LOAD指令的时候,需要对电路进行一些修改,以保证电路能按实际情况进行功能执行。解决方案:在重定向的电路需要用到插入气泡的功能部件,使得如果上一条指令是LOAD指令的时候,需要对电路进行插入气泡的操作,当进行插入气泡的操作的时候,就可以把取数的数值传到第五个阶段,因此在第五阶段的初期把数值传回重定向的功能电路,就可以克服上面说的时间差。因此改变插入气泡功能部件,使得指令出现LOAD指令的时候才插入气泡,然后对重定向的传回数值进行操作码的判断,如果上一条指令是LOAD指令的时候,传回EX阶段的值是第五个阶段的数值,这样使得电路周期相对多些周期数,但是却是符合实际的电路设计。故障9五段流水线数据重定向功能电路:数据重定向时遇到NOP指令。故障现象:启动了时钟后,加载镜像后,会发现电路执行到最后需要访存的循环时进入死循环。原因分析:测试的时候,一步一步执行,发现执行到上上条是LOAD指令的时候,如果当时的操作数寄存器时寄存器0的时候,会从第5个阶段传回一个0值传到计算器的操作数之一中。分析知这肯定是清零出现了问题,因为只有清零的时候才会出现这种结果值为0的情况。由于上上条指令是LOAD指令,因此会对电路进行清零操作,使得在LOAD指令后,会出现一个NOP指令,结果值为0,目的操作数寄存器为寄存器0,当NOP指令走进WB阶段的时候,如果EX阶段其中一个操作数寄存器也是寄存器0的话,就会从第五个阶段传回一个0值,代替了原本正确的计算操作数,从而使得电路执行出现了错误。解决方案:在重定向的功能部件中对电路进行修改,对第五个阶段的指令进行判断,假如第五个阶段当时的操作指令是NOP的时候,就控制数值不能从第五个阶段传回EX阶段,而是使用当时自己原本的数值,从而避免操作数被改变为0。故障10五段流水线分支预测功能电路:加入分支预测之后电路无法执行。故障现象:启动了时钟,加载镜像后,电路一直停留在0号地址单元无法向下执行。原因分析:由于对于分支地址的操作是通过堆栈实现的,在测试的时候,发现由于分支预测里面的初始值为0,导致电路认为到达了需要跳转的地址的指令PC,而相对于跳转地址也是为0,因此导致电路一直以为处于需要跳转的地址,并且跳转地址为0,电路一直执行0号地址单元的指令不会向下正确执行。解决方案:对堆栈结构中的跳转指令地址寄存器进行压入地址判断,如果已经向寄存器压入了一个跳转地址,则说明当前寄存器已经有跳转指令地址,当前寄存器跳转控制可用,标记为1,如果没有则标记为0,通过使用寄存器或者计数器实现上诉功能,通过这种判断标志,使得如果没有对寄存器进行跳转地址寄存器进行写入的话,那么就不会导致电路认为到达跳转地址的错位判断。故障11五段流水线分支预测功能电路:当电路插入气泡后错误执行。故障现象:启动了时钟后,加载镜像后,电路在有访存指令的循环中出现错误的执行,导致结果和预期不符合。原因分析:测试的时候,一步一步执行,发现执行到有访存指令的时候,并且在访存指令之前进行了一次分支预测,但是分支预测是错误的,然后指令执行到下一条指令的时候,出现了两次执行访存指令的奇怪现象。由于对分支预测进行判断的时候,保存了下一条指令的地址,分支预测时候出现错误,就执行了分支预测下面一条地址PC指令,但是由于这时插入了气泡,因此电路不工作一个时钟周期,但是由于我对分支预测的判断位是由时钟驱动的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026重庆市荣昌区人力资源和社会保障局招聘1人备考题库及答案详解(必刷)
- 2026重庆电力高等专科学校招聘10人备考题库(教师B类岗)附答案详解(达标题)
- 2026重庆飞驶特人力资源管理有限公司派往重庆新智文旅有限公司所属项目招聘3人备考题库含答案详解(完整版)
- 2026阿拉尔聚天红昌安果品有限公司招聘1人备考题库带答案详解
- 收银对账操作流程
- 艾灸养生疗法安全指南
- 家政员心理健康辅导服务方案
- 安全风险分级管控工作指引
- 花卉采后保鲜贮藏技术规程
- 环境突发事故应急监测方案
- 2026贵州遵义市政务服务管理局下属事业单位招聘编外人员2人考试模拟试题及答案解析
- 江苏省2026年中职职教高考文化统考数学试卷及答案
- 校园创意设计
- 2026年北京市东城区高三二模生物试卷(含答案)
- 2026滁州市轨道交通运营有限公司第一批次校园招聘21人备考题库及完整答案详解一套
- 长期照护师职业技能鉴定考试复习题库(附答案)
- 嘉定区家委会工作制度
- 医疗机构医院医用高压氧治疗技术管理规范(2022年版)
- 2025年贵州省高考化学试卷真题(含答案)
- 国开大政府经济学自测题1-14章
- 在《人民报》创刊纪念会上的演说教学高中语文必修下册课件
评论
0/150
提交评论