《华科组成原理课程设计报告-MIPS流水线CPU》由会员分享,可在线阅读,更多相关《华科组成原理课程设计报告-MIPS流水线CPU(15页珍藏版)》请在金锄头文库上搜索。
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 测试结果与仿真图16五、课设总结171 课设中遇到的问题172
2、 课设经历173 课设感想184 小组分工18参考文献18一、 课程设计概述1. 课设目的掌握硬件描述语言与开发环境,了解硬件开发地基本过程。掌握流水线CPU设计方法。锻炼学生简单计算机系统的设计能力,并通过进行主机系统低层电路的实现、故障分析与定位、系统调试等环节的锻炼,进一步提高了学生分析和解决问题的能力。2. 实验环境*ilin* ISE 14.2Spartan3E实验板一块3. 设计任务与要求课程设计的主要任务是设计一台支持流水线的简单计算机系统并调试通过。要求所设计的计算机系统能正确地执行存放在指令cache中的程序的功能。本设计基于MIPS的32位流水线架构,设计过程中力图尽可能的
3、遵循原有的MIPS的功能和指令集。基本做到与MIPS指令集的兼容。具体要求包括:支持算术运算,逻辑运算,存储器读写,寄存器间数据传送等几类指令。支持立即数寻址,直接寻址,寄存器寻址等几种基本的数据寻址方式和顺序寻址、跳跃寻址两种指令的寻址方式。支持10条或以上的指令。能运行由自己所设计的指令系统构成的一段程序,程序执行功能正确。具有完整的五级流水线架构。采用独立的32位的数据总线和地址总线。二、 设计原理1. MIPS概述MIPS是高效的RISC体系结构中最优雅的一种体系结构。其中文意思为“无内部互锁流水级的微处理器”,其机制是尽量利用软件办法避免流水线中的数据相关问题。它最早是在80年代初期
4、由斯坦福大学Hennessy教授领导的研究小组研制出来的。MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。本设计将参考MIPS的CPU设计以实现自己的五段流水线CPU设计,并部分实现MIPS32指令集2. MIPS指令简介2.1 MIPS指令集特点MIPS指令集具有以下特点: 简单的LOAD/STORE结构。所有计算类型指令均从寄存器组中读取数据并把结果写入寄存器组中。只有LOAD和STORE指令访问存储器(数据cache)。 易于流水线CPU的设计。MIPS指令集的指令格式非常规整,所有的指令均为32位,而且指令
5、操作码在固定的位置上。 易于编译器的开发。一般情况下,编译器在编译高级语言程序时,很难用到复杂的指令。MIPS指令的寻址方式与操作非常简单,便于编译器的开发。2.2 MIPS指令格式在本次课程设计中,在数据类型上只支持整数类型,在指令格式上直接R、I和J型指令。以下是对三型指令的简介1: R(register)类型的指令从寄存器组中读取两个源操作数,计算结果写回寄存器组。 I(immediate)类型的指令使用一个16位的立即数作为一个源操作数。 J(jump)类型的指令使用一个26位立即数作为跳转的目标地址。三型指令的格式如图1所示,其中: op表示指令操作码。 rs为源操作数的寄存器号。
6、rd为目的寄存器号,RT既可为源寄存器号,也可为目的寄存器号。 funct可认为是扩展的操作码。 shamte由移位指令使用,定义移位位数。 Immediate是16位立即数,根据指令需求进行无符号或有符号扩展。 Address是26位立即数,由J型指令使用,用于产生跳转的目的地址。图1. MIPS的指令格式3. 经典5段RSIC流水线结构经典的5段RISC流水线如图2。图2. 经典5段RISC流水线在该结构中一条指令的执行过程分为以下5个时钟周期: 取指令周期(IF):以程序计数器PC中的内容作为地址,从存储器中取出指令并放入指令寄存器IR;同时PC值加4(假设每条指令占4个字节),指向顺序
7、的下一条指令。 指令译码/读寄存器周期(ID):对指令进行译码,并用IR中的寄存器地址去访问通用寄存器组,读出所需的操作数。 执行/有效地址计算周期(E*):在这个周期,ALU对在上一个周期准备好的操作数进行运算或处理。不同指令所进行的操作不同。 存储器访问/分支完成周期(MEM):load指令用上一个周期计算出的有效地址从存储器中读出相应的数据;store指令把指定的数据写入这个有效地址所指出的存储器单元;分支指令若分支成功就把钱一个周期中计算好的转移目标地址送入PC,否则不进行任何操作;其他类型的指令在该周期不做任何操作。 写回周期(WB):把结果写入通用寄存器组。本设计基于该经典5端流水
8、线结构完成了MIPS的一种简单实现,并在此基础上加入了对流水线冲突(数据冲突,控制冲突)的处理,以及对中断的处理。三、 设计内容1. 指令选取本系统能执行16条MIPS指令,指令基本情况如表1所示。MIPS指令助记符指令格式操作Bit *31.2625.2120.1615.1110.65.0R-typeoprsrtrdshamtfuncadd000000rsrtrd00000100000Rd = rs + rtSub100010Rd = rs - rtAnd100100Rd = rs & rtOr100101Rd = rs | rt*or100110Rd = rs rtSllv000100Rd
9、 = rs rtslt101010If (rs rt) rd=1 else rd=0;I-typeoprsrtimmdediateAddi001000rsrtimmRt = rs + immAndi001100Rt = rs & imm ori001101Rt = rs | imm*ori001110Rt = rs immBne000101If (rs!=rt) pc=pc+1-immLw100011Rt = memrs + immsw101011Memrs + imm = rtJ-typeopaddressj000010addPc=add表1. 系统支持的MIPS指令集从指令类型来讲,这16
10、条指令覆盖了算逻运算、访存、无条件跳转和有条件跳转,已基本覆盖一个指令集所需的所有基本指令。从寻址方式来讲,这16条指令覆盖了寄存器寻址(R-TYPE指令),立即数寻址(I-TYPE指令),基址偏移量寻址(LW/SW),直接寻址(J)。16条MIPS指令并不是本设计的极限,只是受到实验板资源的限制,我们仅仅完成了MIPS32指令集中的16条而已。本设计通过简单的拓展可以轻松实现整个MIPS32指令集。2. 非流水5段CPU模型2.1 初始数据通路设计往往都是从简单到复杂,循序渐进。好高骛远则往往求之而不得。因此我们并没有从流水线模型直接下手,而是首先设计了一个类似经典5段RISC流水线结构的非
11、流水5段CPU模型。由于不涉及流水,所以所有的指令周期均为单周期,数据通路见图3。图3. 非流水5段CPU初始数据通路2.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字段作为地址访问通用寄存器组,将读出的数据让
12、如A和B寄存器中。同时IR的低16位进行有符号或者无符号扩展,然后存入Imm寄存器2.2.3 执行/有效地址计算周期(E*) 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 存储器访问/分支完成周期
13、(MEM) LW和SW指令LW:LMDMemALUo即从存储器中读出相应数据,放入临时寄存器LMD中SW:MemALUoB即把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在E*段产生,因此会产生2个时钟周
14、期的延迟。但实际上可以对这条指令进行单独的改进,将对PC的修改提前到IF段,以便PC值能够快速变化。经过这样优化后,分支失败则只会产生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 数据冲突如果上一条指令的结果还没有写入到寄存器中,而下一条指令的原操作数又恰恰是此寄存器的数据,则它所获得的将是原来的数据,而不是更新后的数据,这样的相关问题称为数据相关。根据在系统结构中学习到的相关知识,在我们的设计中,采用定向(forwarding)技术来解决此类相关问题。其关键思路是:在发生写后读相