聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 数字系统设计实验流水线MIPS微处理器设计

数字系统设计实验流水线MIPS微处理器设计

时间:2024-01-02 03:47:11    下载该word文档
如有你有帮助,请购买下载,谢谢!
一、实验目的
1)了解提高CPU性能的方法。
2)理解数据冒险、控制冒险的概念以及流水线冲突的解决方法。3)掌握流水线MIPS微处理器的工作原理。4)掌握流水线MIPS微处理器的测试方法。
二、实验任务
设计一个32位流水线MIPS微处理器,具体要求如下设计要求:1)至少执行下列MIPS32指令。
算数运算指令:ADDADDUSUBSUBUADDI
ADDU逻辑运算指令:ANDORNORXORANDIORIXORISLTSLTI

SLTU
SLTIU移位指令:SLLSLLVSRLSRLV
SRA条件分支指令:BEQBNEBGEZBGTZBLEZBLTZ无条件跳转指令:JJR数据传输指令:LWSW空指令:NOP2)在用5级流水线技术,对数据冒险实现转发或阻塞功能。
3)在XUPVietex-IIPro开发系统中实现MIPS微处理器,要求CPU的运行速度大于25MHz.三、实验原理
1.流水线MIPSCPU总体设计
流水线是数字系统中一种提高系统稳定性和工作速度的方法,广泛应用在高档CPU的构建中。根据MIPS处理器指令的特点,将整体的处理过程分为取指令(IF、指令译码、执行、存储器访问和寄存器写回五级,对应多周期CPU的五个处理阶段。如图1所示,一个指令的执行需要五个时钟周期,每个时钟周期上升沿来临时,此指令所代表的一系列数据和控制信息转移到下一级处理。
1流水线流水作业示意图
一条MIPS指令分为五个处理步骤,即五级流水线,的具体执行过程如图2所示。
2五级流水线MIPSCPU初步原理框图
流水线寄存器:为了在其它四级流水线中各条指令保持各自的值,从指令存储器中读出的指令必须保存在寄存器中。同样的方法应用到每个流水线步骤中,需要在上图中各级之间加入寄存器,如图3所示。
3.在各级分割线添加寄存器后的框图
由于在流水线中,数据和控制信息将在时钟上升沿转移到下一级,所以规定流水线转移的变量命名遵守如下格式:名称_流水线级名称。
例如,在ID级指令译码电路(DECODE)产生的寄存器写允许信号RegWriteID级、EX级、MEM级和WB级上的命名分别为RegWrite_idRegWrite_exRegWrite_menRegWrite_wb在顶层文件中,类似的变量名称有近百个,这样的命名方式起到了很好的识别作用。
1MIPS指令格式:
0

如有你有帮助,请购买下载,谢谢!
R型指令格式

本实验需要实现的R型指令有:I算术逻辑运算指令:ADDADDUSUBSUBUANDORNORXORSLTSLTUII移位指令:SLLVSRLVSRAVSLLSRLSRAIII寄存器跳转指令:JRI型指令格式
本实验需要实现的I型指令有:I存储器访问指令:LWSWII立即数算术逻辑运算指令:ADDIADDIUANDIORIXORISLTISLTIUIII分支指令:BEQBNEBGEZBGTZBLEZBLTZ分支地址为:PC+4+(sign-extend(Imm<<2J型指令格式
本实验需要实现的J型指令只有:无条件跳转指令:J跳转地址为:{PC[31:28],IR[25:0],2’b00}特别注意:
1、寄存器跳转指令JR不是J型指令,而是R型指令,其指令格式为:跳转地址为:$ra,寄存器号为rs2、移位指令SLLSRLSRA只有rt一个源操作数:
3、取字指令的操作过程:rt<=Mem[rs+sign_extend(imm]存字指令的操作过程:Mem[rs+sign_extend(imm]<=rt
4I型指令中立即数算术逻辑运算指令对立即数(Imm)的处理应分为两类情况考虑:当指令为ADDIADDIUSLTISLTIU时,指令中的16位立即数(Imm)应做符号扩展为32位。此符号扩展电路在ID级完成。
当指令为ANDIORIXORI时,Imm应做“0”扩展为32位。考虑到资源的限制,在执行ANDIORIXORI指令时,0”扩展功能放在ALU内部(即EX完成。2、流水线中的控制信号
为保证CPU按照指令正常运行,分别设置各个级的控制信号:
1IF级:取指令级。ROM中读取指令,并在下一个时钟沿到来时把指令送到ID级的指令缓冲器中。该级控制信号决定下一个指令指针的PCSource信号、阻塞流水线的PC_IFwrite信号、清空流水线的IF_flush信号。
2ID级:指令译码器。对IF级来的指令进行译码,并产生相应的控制信号。整个CPU的控制信号基本都是在这级上产生。该级自身不需任何控制信号。
流水线冒险检测也在该级进行,冒险检测电路需要上一条指令的MemRead,即在检测到冒险条件成立时,冒险检测电路产生stall信号清空ID/EX寄存器,插入一个流水线气泡。3EX级:执行级。该级进行算术或逻辑操作。此外LWSW指令所用的RAM访问地址也是在本级上实现。控制信号有ALUCodeALUSrcAALUScrBRegDst,根据这些信号确定ALU操作、选择两个ALU操作数AB,并确定目标寄存器。
另外,数据转发也在该级完成。数据转发控制电路产生ForwardAForwardB两组控制信号。
4MEM级:存储器访问级。只有在执行LWSW指令时才对存储器进行读写,对其他指令只起到一个周期的作用。该级只需存储器写操作允许信号MemWrite
1

如有你有帮助,请购买下载,谢谢!
5WB级:写回级。该级把指令执行的结果回写到寄存器文件中。该级设置信号MemtoReg和寄存器写操作允许信号RegWrite其中MemtoReg决定写入寄存器的数据来自于MEM上的缓冲值或来自于MEM级上的存储器。3、流水线冒险
在流水线CPU中,多条指令通知执行,由于各种各样的原因,在下一个时钟周期中下一条指令不能执行,这种情况称为冒险。冒险分为三类:
①结构冒险:硬件不支持多条指令在同一个时钟周期内执行。MIPS指令集专为流水线设计,因此在MIPSCPU中不存在此类冒险。
②数据冒险:在一个操作必须等待另一操作完成后才能进行时,流水线必须停顿,这种情况称为数据冒险。数据冒险分为两类:
ⅰ数据相关:流水线内部其中任何一条指令要用到任何其他指令的计算结果时,将导致数据冒险。通常可以用数据转发(数据定向)来解决此类冒险。
ⅱ数据冒险:此类冒险发生在当定向的目标阶段在时序上早于定向的源阶段时,数据转发无效。通常是引入流水线阻塞,即气泡(bubble)来解决。
③控制冒险:CPU需要根据分支指令的结果做出决策,而此时其他指令可能还在执行中,这时会出现控制冒险,也称为分支冒险。解决此类冒险的常用方法是延迟分支。
3.1数据相关与转发
下面通过具体例子来阐述数据相关。见图3.1
3.1数据相关性
4条指令都依赖于第一条指令得到寄存器$2的结果,但sub指令要在第五周期才写回寄存器$2,但在第三、四、五个时钟周期$2分别要被andoradd三个指令用到,所以这三个指令得到的是错误的未更新的数据,会引起错误的结果;而第六个时钟周期$2要被sw指令用到,此时得到的才是正确的已更新的数据。这种数据之间的互相关联引起的冒险就是数据相关。
可以看出,当一条依赖关系的方向与时间轴的方向相反时,就会产生数据冒险。1)一阶数据相关与转发(EX冒险)首先讨论指令suband之间的相关问题。
sub指令在第五周期写回寄存器$2and指令在第四周期就对sub指令的结果$2提出申请,显然将得到错误的未更新的数据。像这类第I条指令的源操作寄存器与第I-1条指令(即上一条指令)的目标寄存器相重,导致的数据相关称为一阶数据相关。见图3.2中实线所示。
3.2一阶数据相关实例图可以发现,sub指令的结果其实在EX级结尾,即第三周期末就产生了;而and指令在第四时钟周期向sub指令结果发出请求,请求时间晚于结果产生时间,所以只需要sub指令结果产生之后直接将其转发给and指令就可以避免一阶数据相关。如图3.3虚线所示。转发数据为ALUResult_mem数据转发由Forwardingunit单元控制,判断转发条件是否成立。转发机制硬件实现见图3.3
3.3转发机制的硬件实现
转发条件ForwardAForwardB作为数据选择器的地址信号,转发条件不成立时,ALU操作数从ID/EX流水线寄存器中读取;转发条件成立时,ALU操作数取自数据旁路。
转发条件:
MEM级指令是写操作,即RegWrite_mem=1
MEM级指令写回的目标寄存器不是$0,即RegWriteAddr_mem0
2

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服