




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 计算机组成原理课程设计报告支持流水线的简单计算机系统题目:设计与实现专业:计算机科学与技术班级:学号:姓名:电话:邮件:实验台:完成日期:指导教师:计算机科学与技术学院TOC o 1-5 h z HYPERLINK l bookmark4 一、课程设计概述3课设目的3实验环境3设计任务与要求3 HYPERLINK l bookmark10 二、设计原理3 HYPERLINK l bookmark12 MIPS概述3MIPS指令简介33经典5段RSIC流水线结构4 HYPERLINK l bookmark21 三、设计内容5指令选取52非流水5段CPU模型63流水5段CPU模型8 HYPERL
2、INK l bookmark41 四、实现内容与测试结果12各模块功能12控制信号12指令操作流程13指令执行状态转换图14引脚绑定15测试程序15测试结果与仿真图16 HYPERLINK l bookmark43 五、课设总结17课设中遇到的问题17课设经历17课设感想18小组分工18 HYPERLINK l bookmark45 参考文献18课程设计概述课设目的掌握硬件描述语言与开发环境,了解硬件开发地基本过程。掌握流水线设计方法。锻炼学生简单计算机系统的设计能力,并通过进行主机系统低层电路的实现、故障分析与定位、系统调试等环节的锻炼,进一步提高了学生分析和解决问题的能力。实验环境Xili
3、nxISE14.2Spartan3E实验板一块设计任务与要求课程设计的主要任务是设计一台支持流水线的简单计算机系统并调试通过。要求所设计的计算机系统能正确地执行存放在指令中的程序的功能。本设计基于的位流水线架构,设计过程中力图尽可能的遵循原有的的功能和指令集。基本做到与指令集的兼容。具体要求包括:支持算术运算,逻辑运算,存储器读写,寄存器间数据传送等几类指令。支持立即数寻址,直接寻址,寄存器寻址等几种基本的数据寻址方式和顺序寻址、跳跃寻址两种指令的寻址方式。支持10条或以上的指令。能运行由自己所设计的指令系统构成的一段程序,程序执行功能正确。具有完整的五级流水线架构。采用独立的32位的数据总线
4、和地址总线。二、设计原理MIPS概述是高效的体系结构中最优雅的一种体系结构。其中文意思为无内部互锁流水级的微处理器”,其机制是尽量利用软件办法避免流水线中的数据相关问题。它最早是在年代初期由斯坦福大学教授领导的研究小组研制出来的。公司的系列就是在此基础上开发的工业产品的微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。本设计将参考MIPS的CPU设计以实现自己的五段流水线CPU设计,并部分实现MIPS32指令集MIPS指令简介MIPS指令集特点MIPS指令集具有以下特点:简单的结构。所有计算类型指令均从寄存器组中读取数据并把结果写入寄存器组中。只有和指令访问存储器(数据)。
5、易于流水线的设计。指令集的指令格式非常规整,所有的指令均为32位,而且指令操作码在固定的位置上。易于编译器的开发。一般情况下,编译器在编译高级语言程序时,很难用到复杂的指令。I指令的寻址方式与操作非常简单,便于编译器的开发。2.2MIPS指令格式在本次课程设计中,在数据类型上只支持整数类型,在指令格式上直接R、I和J型指令。以下是对三型指令的简介1:R(reister)类型的指令从寄存器组中读取两个源操作数,计算结果写回寄存器组。I(immediate)类型的指令使用一个16位的立即数作为一个源操作数。J(ump)类型的指令使用一个26位立即数作为跳转的目标地址。三型指令的格式如图1所示,其中
6、:op表示指令操作码。rs为源操作数的寄存器号。rd为目的寄存器号,R既可为源寄存器号,也可为目的寄存器号。funct可认为是扩展的操作码。shamte由移位指令使用,定义移位位数。Immediate是16位立即数,根据指令需求进行无符号或有符号扩展。ddress是26位立即数,由J型指令使用,用于产生跳转的目的地址。65516oprsrtImmediate312625212016150(a)I类指令655556oPrsrtrdshamtfunct312625212016151110650(b)R类指令626oPaddress3126250(c)J类指令图1.MIPS的指令格式3.经典段流水线
7、结构经典的5段RI流水线如图2。IF段ID段EX段MEM段WB段图2经典5段RI流水线在该结构中一条指令的执行过程分为以下5个时钟周期:取指令周期():以程序计数器中的内容作为地址,从存储器中取出指令并放入指令寄存器;同时值加(假设每条指令占个字节),指向顺序的下一条指令。指令译码读寄存器周期():对指令进行译码,并用中的寄存器地址去访问通用寄存器组,读出所需的操作数。执行有效地址计算周期():在这个周期,对在上一个周期准备好的操作数进行运算或处理。不同指令所进行的操作不同。存储器访问分支完成周期():指令用上一个周期计算出的有效地址从存储器中读出相应的数据;指令把指定的数据写入这个有效地址所
8、指出的存储器单元;分支指令若分支成功就把钱一个周期中计算好的转移目标地址送入PC,否则不进行任何操作;其他类型的指令在该周期不做任何操作。写回周期():把结果写入通用寄存器组。本设计基于该经典端流水线结构完成了的一种简单实现,并在此基础上加入了对流水线冲突(数据冲突,控制冲突)的处理,以及对中断的处理。三、设计内容1.指令选取本系统能执行条指令,指令基本情况如表所示。指令助记符指令格式操作1.1.11.111.表系统支持的指令集从指令类型来讲,这16条指令覆盖了算逻运算、访存、无条件跳转和有条件跳转,已基本覆盖一个指令集所需的所有基本指令。从寻址方式来讲,这1条指令覆盖了寄存器寻址(R-TPE
9、指令),立即数寻址(I-TPE指令),基址偏移量寻址(LWSW),直接寻址()。1条MIPS指令并不是本设计的极限,只是受到实验板资源的限制,我们仅仅完成了MIPS32指令集中的1条而已。本设计通过简单的拓展可以轻松实现整个MIPS32指令集。2.非流水段模型初始数据通路设计往往都是从简单到复杂,循序渐进。好高骛远则往往求之而不得。因此我们并没有从流水线模型直接下手,而是首先设计了一个类似经典5段RISC流水线结构的非流水5段CPU模型。由于不涉及流水,所以所有的指令周期均为单周期,数据通路见图3。图3非流水5段CPU初始数据通路5段具体操作在这个数据通路上每条指令需要花费5个时钟周期,这5个
10、时钟周期相应的操作如下:.取指令周期(I)IRMemPCNPCPC+1以PC中的值从指令cace中取出一条指令,放入指令寄存器IR;同时PC值加1,然后放入NPC,这时NPC中的值为顺序的下调指令的地址。.2指令译码读寄存器周期(ID)ARegsrsBRegsrtimmIR11IR131对指令进行译码,并以指令中的rs和rt字段作为地址访问通用寄存器组,将读出的数据让如和寄存器中。同时的低位进行有符号或者无符号扩展,然后存入寄存器执行有效地址计算周期()和指令将操作数相加形成有效地址,并存入临时寄存器根据字段指出的操作类型对和中的数据进行运算,并将结果存入I-TYPE根据操作码指出的操作类型对
11、和中的数据进行运算,并将结果存入分支指令将临时寄存器和中的值相加得到转移目标的地址,存入ALUo存储器访问分支完成周期()和指令:即从存储器中读出相应数据,放入临时寄存器中:即把中数据写入存储器分支指令若中的内容为真,则将中的转移目标地址放入,否则。写回周期()R-TYPEI-TYPELW指令2.3模型优化与最终数据通路在这部分设计的时候我们的跳转指令仅仅实现了,因此我们对改分支指令进行了单独的优化。在图的设计中若分支失败,则由于新的在段产生,因此会产生个时钟周期的延迟。但实际上可以对这条指令进行单独的改进,将对的修改提前到段,以便值能够快速变化。经过这样优化后,分支失败则只会产生个时钟周期的
12、延迟。改进后的数据通路如图4所示。3.段流水模型初始数据通路在实现了非流水的段CPU模型后,段流水CPU模型也就水到渠成了。只需要在各段之间加入相应的流水寄存器即可。数据通路如图5。Wb_SignEx_SignAlu_Sign2图段流水CPU初始数据通路5段具体操作这部分与非流水的具体操作大致相同,这里不加赘述。流水线冲突及解决方案数据冲突如果上一条指令的结果还没有写入到寄存器中,而下一条指令的原操作数又恰恰是此寄存器的数据,那么它所获得的将是原来的数据,而不是更新后的数据,这样的相关问题称为数据相关。根据在系统结构中学习到的相关知识,在我们的设计中,采用定向()技术来解决此类相关问题。其关键
13、思路是:在发生写后读相关的情况下,在计算结果尚未出来之前,后面等待使用该结果的指令并不见得是马上就要用该结果。如果能够将该计算结果从其产生的地方(ALU出口)直接送到其他指令需要它的地方(ALU的入口),那么就可以避免停顿,如图6。图6.定向技术控制冲突在流水线中,控制冲突可能会使数据冲突造成更大的性能损失。执行分支指令的结果有两种,一种是成功,值改变为分支转移的目标地址。另一种则是失败,这是的值保持正常递增。本设计中采用预测分支失败的方法解决控制冲突,即允许分支指令后的指令继续在流水线中流动。当确定分支是失败时,可以将分支指令看做一条普通指令,流水线正常流动,如表2;当确定分支是成功时,流水
14、线就把在分支指令之后取出的指令转化为空操作,并按分支目标地址重新取指令执行,如表3。分分支指令IIDEXMEMB支指令1IIDEXMEMB失指令2IIDEXMEMB败指令3IIDEXMEMB表2.分支失败的流水线时空图分分支指令IIDEXMEMB支指令1IIII成分支目标指令IIDEXMEMB功分支目标指令1IIDEXMEMB表3.分支成功的流水线时空图模型中的问题与修正指令周期数问题若是指令周期和之前的设计一样,使用单周期的设计,那么会出现对流水寄存器的读写冲突。例如对于通用寄存器组来说,在上升沿的时候需要从段的指令寄存器中取出指令,然后访问相应的寄存器并将数据写入段的寄存器。试想,若是从中
15、取指令,和对段的寄存器的写入两个操作都是在上升沿触发,那么由于时延的存在,很有可能导致写入的值不是预期值。因此我们将指令周期从单周期改为双周期。在前一周期完成对流水寄存器的读操作,并且完成各段的功能。后一周期,完成对流水寄存器的写操作。具体实现上我们舍弃了分频的方法而是采用前半周期为上升沿触发,后半周期为下降沿触发。译码器问题通过可知,各段功能需要在前一周期内全部完成,但是段很特殊,因为有译码器的存在。通用寄存器组和扩展部件都需要译码器提供控制信号,但是由于3.3.1的限制,译码器也会在上升沿触发。由于时延的存在,这可能会导致控制信号产生在需求之后。也即在寄存器组和扩展部件需要控制信号的时候,
16、控制信号还未真正产生,导致这两部件使用了错误的控制信号。除了这个隐患,还有一个问题就是若采用单独的译码器,那么会在段产生大量的控制信号,这些控制信号都需要通过流水线流向下一段,那么势必需要大量的流水寄存器,大幅增加硬件成本。综合考虑这两个问题之后我们撤掉了译码器,而采用分段译码的方式。即给每个功能部件都提供完整的指令,由各个功能部件自己产生自己所需要的控制信号,这样就可以完美的解决上述两个问题。针对指令的优化问题在非流水的模型中我们针对指令进行了专门的优化,将对分支条件的判断放在了段。但是这存在两个问题,一是我们认为这样影响了整体设计的一致性;二是在流水线的设计中我们加入了新的跳转指令,这使得
17、判断变得更加复杂,段分担了太多段的功能,会影响整体流水的性能。因此在流水设计中我们将分支的条件改回在段判断。寄存器组的读写顺序问题在最初的设计中,我们将寄存器的写回操作放在后半周期,即和流水线寄存器的写操作一同完成。但是在后面的实际测试中我们发现若这样处理,我们在做重定向的时候必须做三次重定向。因此我们对此做了调整,将写回操作提前到前半周期完成,即对寄存器组实现先写后读策略。写回段的取舍在最初的设计中,由于我们将寄存器的写回操作放在后半周期,因此我们一度舍弃了写回段。因为写回段仅仅是前半周期读出写回数据,后半周期将数据写回寄存器组,这么简单的功能占据一个流水段显示实在是“奢侈”。因而在最初的设
18、计中我们将其和段合并。但是中对寄存器读写顺序做了调整,因此写回段中的写回操作和段的计算操作以及的访存操作在同半个周期内,由于时延的存在很有可能导致写回数据错误。此时若舍弃了写回段则可能在计算结果出来前就写回了,这显然不合理。因此我们重新加入了写回段。在加入访存段后,由于写回的结果依赖于访存结果,因此放在访存段之后。特殊指令的问题JNZ这条指令在整个指令集中是非常特殊的存在,在之前的设计中我们完全没有考虑到这个问题。虽然是-指令,但是却是源寄存器,也即不会修改的值。即它不符合-指令在写回段的数据通路。这在做定向的时候会产生严重的问题,若不做特殊判断,那么很可能会产生错误的定向。指令是整个指令集中
19、唯一一个需要个输入()的指令,其他指令均最多只需要个输入。这使得段的两个选择器完全是多余的,可以去掉。在考虑到这两点之后我们对重定向进行了重新设计,并且去掉了段中的两个选择器。硬软中断的实现软中断的实现对于软中断,我们实际上通过扩展指令集的方式来实现。即在指令集中加入两条指令,和,来实现软中断。具体指令表。-表和指令当段检测到指令时,将会把所有通用寄存器组的值以及当前值压入堆栈。当段检测到指令时,会无条件跳转至指令对对应的地址。当段检测到指令时,将会把所有的通用寄存器组的值弹出。当段检测到指令时,会无条件跳转至堆栈中的值对应的地址。硬中断的实现对于硬中断我们仅实现了了溢出中断。当段出现溢出时,
20、段将会向段传送相应的控制信号。此时段将会产生一条指令送到中,并且值维持一周期不变。这样就相当于向流水线中插入了一条软中断指令,从而实现了用硬件来自动产生中断指令。3.6最终数据通路在成功修改和完善3.4中的问题以及加入3.5中的内容后,我们得到了最后的数据通路图,如图7。-|Alu_Sign1SellAlu_Sign3i|:EX/MEM:ID/EX=Alu_Sign2Sel2Wb_SignEx_Sign图段流水CPU最终数据通路图四、实现内容与测试结果各模块功能模块例化名称模块实现功能U1实现PC的存储与更新U2实现指令的存取U3实现对通用寄存器的读写U4实现对立即数的有符号与无符号扩展U实现
21、ALUU实现访存功能表5.各模块功能表控制信号流水段控制信号功能IUpdate_Pc控制PC更新为PC+1或ALUIDReg_Sign控制通用寄存器组的压栈与弹出Ex_Sign控制有符号扩展和无符号扩展EXAlu_Sign1控制MUX2的选择Alu_Sign2控制MUX3的选择Alu_Sign3控制ALU的计算功能Sel1控制ALUA端的定向Sel2控制ALUB端的定向MEMMem_Write控制MEM的读写WBMem_Read表明MEM的读写状态,控制MUX4的选择Wb_Sign控制通用寄存器的写回表6.控制信号表3.指令操作流程由于我组实现的指令较多,而很多指令具有较大的相似性,因此这里取
22、四条指令,先做出其各周期的操作及控制信号表2。指令阶段操作流程控制信号表7.ADD指令操作流程及控制信号指令阶段操作流程控制信号-表8.BNE指令操作流程及控制信号指令阶段操作流程控制信号-表9.J指令操作流程及控制信号MPCUpdate_Pc=0PCPC1DA2:21eg_Sign=00E_Sign=1B20:1MMSign-etend1-02EXAUOAMMAlu_Sign1=0Alu_Sign2=0Alu_Sign3=0000el1=0el2=032B2BMEMMemrAUOB2Mem_Write=1指令阶段操作流程控制信号表10SW指令操作流程及控制信号4.指令执行状态转换图可画出其对
23、应的状态转移图,如图9所示。IF5.引脚绑定表名称绑定引脚功能-时钟-复位信号-控制七段显示的具体内容。-对应的对应的对应的对应的对应的对应的对应的对应的控制七段码显示控制七段码具体显示位七段码显示的时钟表11.引脚绑定表测试程序综合考虑到我们选择的指令集以及开发板的硬件资源情况,我们打算用下面三个程序来测试我们的设计方案。程序1主要用来测试算逻运算和访存指令的正确性,程序如表12所示。主存地址指令结果描述机器指令的机器码十六进制二进制表12.测试程序程序主要用来测试软中断和硬中断功能,程序如表所示。主存地址指令结果描述机器指令的机器码十六进制二进制压、-、-出栈表测试程序程序主要用来测试跳转指令的正确性,由于和指令中已经隐含了指令,因此这里只对1指令进行测试,程序如表所示。1主存地址指令结果描述-表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年特殊岗位补焊考试题及答案
- 企业工会考试试题及答案
- 2025年大专内科护理简答题题库及答案
- 贵溪期中考试卷及答案
- 广西科目一c考试试题及答案
- 2025年及未来5年中国水暖毯市场全面调研及行业投资潜力预测报告
- 土方开挖施工质量通病、原因分析及应对措施
- 挂篮悬臂浇筑施工质量保证措施
- 肝工程支架行业跨境出海项目商业计划书
- 辅具租赁服务创新创业项目商业计划书
- FZ/T 73001-2016袜子
- 1 船上应急程序28
- 抖音超火看表情符号猜成语课件
- 曾奇峰精神分析初级50讲讲义
- 卡尔曼(Kalman)滤波课件
- 《中国少数民族音乐》教学设计
- 科技法庭使用手册汇总
- 生态系统服务功能PPT通用课件
- 红色卡通风小学生大队委竞选PPT模板
- 研究生学籍登记表
- 运动障碍患者的护理
评论
0/150
提交评论