华科组成原理课程设计-MIPS流水线CPU(共17页).docx
《华科组成原理课程设计-MIPS流水线CPU(共17页).docx》由会员分享,可在线阅读,更多相关《华科组成原理课程设计-MIPS流水线CPU(共17页).docx(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上计算机科学与技术学院2014计算机组成原理 课程设计报告题 目:支持流水线的简单计算机系统设计与实现专 业:计算机科学与技术班 级:学 号:姓 名:电 话:邮 件:实 验 台:完成日期:指导教师:目录一、课程设计概述31 课设目的32 实验环境33 设计任务与要求3二、设计原理31 MIPS概述32 MIPS指令简介33 经典5段RSIC流水线结构4三、设计内容51 指令选取52 非流水5段CPU模型63 流水5段CPU模型8四、实现内容与测试结果121 各模块功能122 控制信号123 指令操作流程134 指令执行状态转换图145 引脚绑定156 测试程序157 测
2、试结果与仿真图16五、课设总结171 课设中遇到的问题172 课设经历173 课设感想184 小组分工18参考文献18一、 课程设计概述1. 课设目的掌握硬件描述语言与开发环境,了解硬件开发地基本过程。掌握流水线CPU设计方法。锻炼学生简单计算机系统的设计能力,并通过进行主机系统低层电路的实现、故障分析与定位、系统调试等环节的锻炼,进一步提高了学生分析和解决问题的能力。2. 实验环境Xilinx ISE 14.2Spartan3E实验板一块3. 设计任务与要求课程设计的主要任务是设计一台支持流水线的简单计算机系统并调试通过。要求所设计的计算机系统能正确地执行存放在指令cache中的程序的功能。
3、本设计基于MIPS的32位流水线架构,设计过程中力图尽可能的遵循原有的MIPS的功能和指令集。基本做到与MIPS指令集的兼容。具体要求包括:支持算术运算,逻辑运算,存储器读写,寄存器间数据传送等几类指令。支持立即数寻址,直接寻址,寄存器寻址等几种基本的数据寻址方式和顺序寻址、跳跃寻址两种指令的寻址方式。 支持10条或以上的指令。 能运行由自己所设计的指令系统构成的一段程序,程序执行功能正确。 具有完整的五级流水线架构。采用独立的32位的数据总线和地址总线。 二、 设计原理1. MIPS概述MIPS是高效的RISC体系结构中最优雅的一种体系结构。其中文意思为“无内部互锁流水级的微处理器”,其机制
4、是尽量利用软件办法避免流水线中的数据相关问题。它最早是在80年代初期由斯坦福大学Hennessy教授领导的研究小组研制出来的。MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。本设计将参考MIPS的CPU设计以实现自己的五段流水线CPU设计,并部分实现MIPS32指令集2. MIPS指令简介2.1 MIPS指令集特点 MIPS指令集具有以下特点: 简单的LOAD/STORE结构。所有计算类型指令均从寄存器组中读取数据并把结果写入寄存器组中。只有LOAD和STORE指令访问存储器(数据cache)。 易于流水线CPU的
5、设计。MIPS指令集的指令格式非常规整,所有的指令均为32位,而且指令操作码在固定的位置上。 易于编译器的开发。一般情况下,编译器在编译高级语言程序时,很难用到复杂的指令。MIPS指令的寻址方式与操作非常简单,便于编译器的开发。2.2 MIPS指令格式在本次课程设计中,在数据类型上只支持整数类型,在指令格式上直接R、I和J型指令。以下是对三型指令的简介1: R(register)类型的指令从寄存器组中读取两个源操作数,计算结果写回寄存器组。 I(immediate)类型的指令使用一个16位的立即数作为一个源操作数。 J(jump)类型的指令使用一个26位立即数作为跳转的目标地址。三型指令的格式
6、如图1所示,其中: op表示指令操作码。 rs为源操作数的寄存器号。 rd为目的寄存器号,RT既可为源寄存器号,也可为目的寄存器号。 funct可认为是扩展的操作码。 shamte由移位指令使用,定义移位位数。 Immediate是16位立即数,根据指令需求进行无符号或有符号扩展。 Address是26位立即数,由J型指令使用,用于产生跳转的目的地址。图1. MIPS的指令格式3. 经典5段RSIC流水线结构经典的5段RISC流水线如图2。图2. 经典5段RISC流水线在该结构中一条指令的执行过程分为以下5个时钟周期: 取指令周期(IF):以程序计数器PC中的内容作为地址,从存储器中取出指令并
7、放入指令寄存器IR;同时PC值加4(假设每条指令占4个字节),指向顺序的下一条指令。 指令译码/读寄存器周期(ID):对指令进行译码,并用IR中的寄存器地址去访问通用寄存器组,读出所需的操作数。 执行/有效地址计算周期(EX):在这个周期,ALU对在上一个周期准备好的操作数进行运算或处理。不同指令所进行的操作不同。 存储器访问/分支完成周期(MEM):load指令用上一个周期计算出的有效地址从存储器中读出相应的数据;store指令把指定的数据写入这个有效地址所指出的存储器单元;分支指令若分支成功就把钱一个周期中计算好的转移目标地址送入PC,否则不进行任何操作;其他类型的指令在该周期不做任何操作
8、。 写回周期(WB):把结果写入通用寄存器组。本设计基于该经典5端流水线结构完成了MIPS的一种简单实现,并在此基础上加入了对流水线冲突(数据冲突,控制冲突)的处理,以及对中断的处理。三、 设计内容1. 指令选取本系统能执行16条MIPS指令,指令基本情况如表1所示。MIPS指令助记符指令格式操作Bit #31.2625.2120.1615.1110.65.0R-typeoprsrtrdshamtfuncaddrsrtrd00000Rd = rs + rtSubRd = rs - rtAndRd = rs & rtOrRd = rs | rtXorRd = rs rtSllvRd = rs r
9、tsltIf (rs rt) rd=1 else rd=0;I-typeoprsrtimmdediateAddirsrtimmRt = rs + immAndiRt = rs & imm oriRt = rs | immXoriRt = rs immBneIf (rs!=rt) pc=pc+1-immLwRt = memrs + immswMemrs + imm = rtJ-typeopaddressjaddPc=add表1. 系统支持的MIPS指令集从指令类型来讲,这16条指令覆盖了算逻运算、访存、无条件跳转和有条件跳转,已基本覆盖一个指令集所需的所有基本指令。从寻址方式来讲,这16条指令覆
10、盖了寄存器寻址(R-TYPE指令),立即数寻址(I-TYPE指令),基址偏移量寻址(LW/SW),直接寻址(J)。16条MIPS指令并不是本设计的极限,只是受到实验板资源的限制,我们仅仅完成了MIPS32指令集中的16条而已。本设计通过简单的拓展可以轻松实现整个MIPS32指令集。2. 非流水5段CPU模型2.1 初始数据通路设计往往都是从简单到复杂,循序渐进。好高骛远则往往求之而不得。因此我们并没有从流水线模型直接下手,而是首先设计了一个类似经典5段RISC流水线结构的非流水5段CPU模型。由于不涉及流水,所以所有的指令周期均为单周期,数据通路见图3。图3. 非流水5段CPU初始数据通路2.
11、2 5段具体操作在这个数据通路上每条指令需要花费5个时钟周期,这5个时钟周期相应的操作如下:2.2.1 取指令周期(IF)IRMemPCNPCPC+1以PC中的值从指令cache中取出一条指令,放入指令寄存器IR;同时PC值加1,然后放入NPC,这时NPC中的值为顺序的下调指令的地址。2.2.2 指令译码/读寄存器周期(ID)ARegsrsBRegsrtimm(IR16)16#IR16.31)对指令进行译码,并以指令中的rs和rt字段作为地址访问通用寄存器组,将读出的数据让如A和B寄存器中。同时IR的低16位进行有符号或者无符号扩展,然后存入Imm寄存器2.2.3 执行/有效地址计算周期(EX
12、) LW和SW指令ALUoA+ImmALU将操作数相加形成有效地址,并存入临时寄存器ALUo R-TYPEALUoA funct BALU根据funct字段指出的操作类型对A和B中的数据进行运算,并将结果存入ALUo I-TYPEALUoA op ImmALU根据操作码op指出的操作类型对A和Imm中的数据进行运算,并将结果存入ALUo 分支指令ALUoNPC+ImmALU将临时寄存器NPC和Imm中的值相加得到转移目标的地址,存入ALUo2.2.4 存储器访问/分支完成周期(MEM) LW和SW指令LW:LMDMemALUo即从存储器中读出相应数据,放入临时寄存器LMD中SW:MemALUo
13、B即把B中数据写入存储器 分支指令If (cond) PCALUo else PCNPC若cond中的内容为真,则将ALUo中的转移目标地址放入PC,否则PC+1。2.2.5 写回周期(WB) R-TYPERegsrdALUo I-TYPERegsrtALUo LW指令RegsrtLMD2.3 模型优化与最终数据通路在这部分设计的时候我们的跳转指令仅仅实现了JNZQ,因此我们对改分支指令进行了单独的优化。在图2的设计中若分支失败,则由于新的PC在EX段产生,因此会产生2个时钟周期的延迟。但实际上可以对这条指令进行单独的改进,将对PC的修改提前到IF段,以便PC值能够快速变化。经过这样优化后,分
14、支失败则只会产生1个时钟周期的延迟。改进后的数据通路如图4所示。图4. 非流水5段CPU最终数据通路3. 5段流水CPU模型3.1 初始数据通路在实现了非流水的5段CPU模型后,5段流水CPU模型也就水到渠成了。只需要在各段之间加入相应的流水寄存器即可。数据通路如图5。图5. 5段流水CPU初始数据通路3.2 5段具体操作这部分与非流水的具体操作大致相同,这里不加赘述。3.3 流水线冲突及解决方案3.3.1 数据冲突如果上一条指令的结果还没有写入到寄存器中,而下一条指令的原操作数又恰恰是此寄存器的数据,那么它所获得的将是原来的数据,而不是更新后的数据,这样的相关问题称为数据相关。根据在系统结构
15、中学习到的相关知识,在我们的设计中,采用定向(forwarding)技术来解决此类相关问题。其关键思路是:在发生写后读相关的情况下,在计算结果尚未出来之前,后面等待使用该结果的指令并不见得是马上就要用该结果。如果能够将该计算结果从其产生的地方(ALU出口)直接送到其他指令需要它的地方(ALU的入口),那么就可以避免停顿,如图6。图6. 定向技术3.3.2 控制冲突 在流水线中,控制冲突可能会使数据冲突造成更大的性能损失。执行分支指令的结果有两种,一种是“成功”,PC值改变为分支转移的目标地址。另一种则是“失败”,这是PC的值保持正常递增。本设计中采用预测分支失败的方法解决控制冲突,即允许分支指
16、令后的指令继续在流水线中流动。当确定分支是失败时,可以将分支指令看做一条普通指令,流水线正常流动,如表2;当确定分支是成功时,流水线就把在分支指令之后取出的指令转化为空操作,并按分支目标地址重新取指令执行,如表3。分支失败分支指令iIFIDEXMEMWB指令i+1IFIDEXMEMWB指令i+2IFIDEXMEMWB指令i+3IFIDEXMEMWB表2. 分支失败的流水线时空图分支成功分支指令iIFIDEXMEMWB指令i+1IFIdleIdleIdleidle分支目标指令IFIDEXMEMWB分支目标指令+1IFIDEXMEMWB表3. 分支成功的流水线时空图3.4 模型中的问题与修正3.4
17、.1 指令周期数问题若是指令周期和之前的设计一样,使用单周期的设计,那么会出现对流水寄存器的读写冲突。例如对于通用寄存器组来说,在clk上升沿的时候需要从IF段的指令寄存器IR中取出指令,然后访问相应的寄存器并将数据写入ID段的A,B寄存器。试想,若是从IR中取指令,和对ID段的A,B寄存器的写入两个操作都是在clk上升沿触发,那么由于时延的存在,很有可能导致写入的值不是预期值。因此我们将指令周期从单周期改为双周期。在前一周期完成对流水寄存器的读操作,并且完成各段的功能。后一周期,完成对流水寄存器的写操作。具体实现上我们舍弃了分频的方法而是采用前半周期为clk上升沿触发,后半周期为clk下降沿
18、触发。3.4.2 译码器问题通过3.3.1可知,各段功能需要在前一周期内全部完成,但是ID段很特殊,因为有译码器的存在。通用寄存器组和扩展部件都需要译码器提供控制信号,但是由于3.3.1的限制,译码器也会在clk上升沿触发。由于时延的存在,这可能会导致控制信号产生在需求之后。也即在寄存器组和扩展部件需要控制信号的时候,控制信号还未真正产生,导致这两部件使用了错误的控制信号。除了这个隐患,还有一个问题就是若采用单独的译码器,那么会在ID段产生大量的控制信号,这些控制信号都需要通过流水线流向下一段,那么势必需要大量的流水寄存器,大幅增加硬件成本。综合考虑这两个问题之后我们撤掉了译码器,而采用分段译
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 组成 原理 课程设计 MIPS 流水线 CPU 17
限制150内