当前位置:文档之家› 华科组成原理课程设计

华科组成原理课程设计

目录一、课程设计概述 (3)1 课设目的 (3)2 实验环境 (3)3 设计任务与要求 (3)二、设计原理 (3)1 MIPS概述 (3)2 MIPS指令简介 (3)3 经典5段RSIC流水线结构 (4)三、设计内容 (5)1 指令选取 (5)2 非流水5段CPU模型 (6)3 流水5段CPU模型 (8)四、实现内容与测试结果 (12)1 各模块功能 (12)2控制信号 (12)3指令操作流程 (13)4指令执行状态转换图 (14)5引脚绑定 (15)6测试程序 (15)7测试结果与仿真图 (16)五、课设总结 (17)1课设中遇到的问题 (17)2课设经历 (17)3课设感想 (18)4小组分工 (18)参考文献 (18)一、课程设计概述1.课设目的①掌握硬件描述语言与开发环境,了解硬件开发地基本过程。

②掌握流水线CPU设计方法。

③锻炼学生简单计算机系统的设计能力,并通过进行主机系统低层电路的实现、故障分析与定位、系统调试等环节的锻炼,进一步提高了学生分析和解决问题的能力。

2.实验环境①Xilinx ISE 14.2②Spartan3E实验板一块3.设计任务与要求课程设计的主要任务是设计一台支持流水线的简单计算机系统并调试通过。

要求所设计的计算机系统能正确地执行存放在指令cache中的程序的功能。

本设计基于MIPS的32位流水线架构,设计过程中力图尽可能的遵循原有的MIPS的功能和指令集。

基本做到与MIPS指令集的兼容。

具体要求包括:①支持算术运算,逻辑运算,存储器读写,寄存器间数据传送等几类指令。

②支持立即数寻址,直接寻址,寄存器寻址等几种基本的数据寻址方式和顺序寻址、跳跃寻址两种指令的寻址方式。

③支持10条或以上的指令。

④能运行由自己所设计的指令系统构成的一段程序,程序执行功能正确。

⑤具有完整的五级流水线架构。

采用独立的32位的数据总线和地址总线。

二、设计原理1.MIPS概述MIPS是高效的RISC体系结构中最优雅的一种体系结构。

其中文意思为“无内部互锁流水级的微处理器”,其机制是尽量利用软件办法避免流水线中的数据相关问题。

它最早是在80年代初期由斯坦福大学Hennessy教授领导的研究小组研制出来的。

MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。

这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。

本设计将参考MIPS的CPU设计以实现自己的五段流水线CPU设计,并部分实现MIPS32指令集2.MIPS指令简介2.1 MIPS指令集特点MIPS指令集具有以下特点:①简单的LOAD/STORE结构。

所有计算类型指令均从寄存器组中读取数据并把结果写入寄存器组中。

只有LOAD和STORE指令访问存储器(数据cache)。

②易于流水线CPU的设计。

MIPS指令集的指令格式非常规整,所有的指令均为32位,而且指令操作码在固定的位置上。

③易于编译器的开发。

一般情况下,编译器在编译高级语言程序时,很难用到复杂的指令。

MIPS 指令的寻址方式与操作非常简单,便于编译器的开发。

2.2 MIPS 指令格式在本次课程设计中,在数据类型上只支持整数类型,在指令格式上直接R 、I 和J 型指令。

以下是对三型指令的简介[1]:① R (register )类型的指令从寄存器组中读取两个源操作数,计算结果写回寄存器组。

② I (immediate )类型的指令使用一个16位的立即数作为一个源操作数。

③ J (jump )类型的指令使用一个26位立即数作为跳转的目标地址。

三型指令的格式如图1所示,其中: ① op 表示指令操作码。

② rs 为源操作数的寄存器号。

③ rd 为目的寄存器号,RT 既可为源寄存器号,也可为目的寄存器号。

④ funct 可认为是扩展的操作码。

⑤ shamte 由移位指令使用,定义移位位数。

⑥ Immediate 是16位立即数,根据指令需求进行无符号或有符号扩展。

⑦ Address 是26位立即数,由J 型指令使用,用于产生跳转的目的地址。

655166555566263126 2521 2016 1503126 2521 2016 15011 106 53126 25(a)I 类指令(b)R 类指令(c)J 类指令图1. MIPS 的指令格式3. 经典5段RSIC 流水线结构经典的5段RISC 流水线如图2。

IF 段ID 段EX 段MEM 段WB 段图2. 经典5段RISC 流水线在该结构中一条指令的执行过程分为以下5个时钟周期:①取指令周期(IF):以程序计数器PC中的内容作为地址,从存储器中取出指令并放入指令寄存器IR;同时PC值加4(假设每条指令占4个字节),指向顺序的下一条指令。

②指令译码/读寄存器周期(ID):对指令进行译码,并用IR中的寄存器地址去访问通用寄存器组,读出所需的操作数。

③执行/有效地址计算周期(EX):在这个周期,ALU对在上一个周期准备好的操作数进行运算或处理。

不同指令所进行的操作不同。

④存储器访问/分支完成周期(MEM):load指令用上一个周期计算出的有效地址从存储器中读出相应的数据;store指令把指定的数据写入这个有效地址所指出的存储器单元;分支指令若分支成功就把钱一个周期中计算好的转移目标地址送入PC,否则不进行任何操作;其他类型的指令在该周期不做任何操作。

⑤写回周期(WB):把结果写入通用寄存器组。

本设计基于该经典5端流水线结构完成了MIPS的一种简单实现,并在此基础上加入了对流水线冲突(数据冲突,控制冲突)的处理,以及对中断的处理。

三、设计内容1.指令选取本系统能执行16条MIPS指令,指令基本情况如表1所示。

表1. 系统支持的MIPS指令集从指令类型来讲,这16条指令覆盖了算逻运算、访存、无条件跳转和有条件跳转,已基本覆盖一个指令集所需的所有基本指令。

从寻址方式来讲,这16条指令覆盖了寄存器寻址(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.2 5段具体操作在这个数据通路上每条指令需要花费5个时钟周期,这5个时钟周期相应的操作如下:2.2.1取指令周期(IF)IR←Mem[PC]NPC←PC+1以PC中的值从指令cache中取出一条指令,放入指令寄存器IR;同时PC值加1,然后放入NPC,这时NPC中的值为顺序的下调指令的地址。

2.2.2指令译码/读寄存器周期(ID)A←Regs[rs]B←Regs[rt]imm←((IR16)16##IR16..31)对指令进行译码,并以指令中的rs和rt字段作为地址访问通用寄存器组,将读出的数据让如A和B寄存器中。

同时IR的低16位进行有符号或者无符号扩展,然后存入Imm寄存器2.2.3 执行/有效地址计算周期(EX)①LW和SW指令ALUo←A+ImmALU将操作数相加形成有效地址,并存入临时寄存器ALUo②R-TYPEALUo←Afunct BALU根据funct字段指出的操作类型对A和B中的数据进行运算,并将结果存入ALUo③I-TYPEALUo←A op ImmALU根据操作码op指出的操作类型对A和Imm中的数据进行运算,并将结果存入ALUo④分支指令ALUo←NPC+ImmALU将临时寄存器NPC和Imm中的值相加得到转移目标的地址,存入ALUo2.2.4 存储器访问/分支完成周期(MEM)①LW和SW指令LW:LMD←Mem[ALUo]即从存储器中读出相应数据,放入临时寄存器LMD中SW:Mem[ALUo]←B即把B中数据写入存储器②分支指令If (cond) PC←ALUo else PC←NPC若cond中的内容为真,则将ALUo中的转移目标地址放入PC,否则PC+1。

2.2.5 写回周期(WB)①R-TYPERegs[rd]←ALUo②I-TYPERegs[rt]←ALUo③LW指令Regs[rt]←LMD2.3 模型优化与最终数据通路在这部分设计的时候我们的跳转指令仅仅实现了JNZQ,因此我们对改分支指令进行了单独的优化。

在图2的设计中若分支失败,则由于新的PC在EX段产生,因此会产生2个时钟周期的延迟。

但实际上可以对这条指令进行单独的改进,将对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 )技术来解决此类相关问题。

其关键思路是:在发生写后读相关的情况下,在计算结果尚未出来之前,后面等待使用该结果的指令并不见得是马上就要用该结果。

如果能够将该计算结果从其产生的地方(ALU 出口)直接送到其他指令需要它的地方(ALU 的入口),那么就可以避免停顿,如图6。

时间(时钟周期)DADD R1,R2,R3DSUB R4,R1,R5XOR R6,R1,R7AND R8,R1,R9图6. 定向技术3.3.2 控制冲突在流水线中,控制冲突可能会使数据冲突造成更大的性能损失。

执行分支指令的结果有两种,一种是“成功”,PC 值改变为分支转移的目标地址。

另一种则是“失败”,这是PC 的值保持正常递增。

本设计中采用预测分支失败的方法解决控制冲突,即允许分支指令后的指令继续在流水线中流动。

当确定分支是失败时,可以将分支指令看做一条普通指令,流水线正常流动,如表2;当确定分支是成功时,流水线就把在分支指令之后取出的指令转化为空操作,并按分支目标地址重新取指令执行,如表3。

相关主题