MIPS指令流水线
1.MIPS指令流水线逻辑架构,是在CPU架构基础上追加流水寄存器。
2.流水线写回数据通路
常用的MPIS指令
MIPS是一种基于精简指令集(Reduced Instruction Set Computing,RISC)的计算机处理器体系结构,它具有简单、清晰和高效等特点。下面介绍一些常用的MIPS指令:
1. add:该指令用于将两个寄存器中的数据进行加法运算,并将结果存储到指定的目的寄存器中。
示例:add $t0, $s1, $s2 ; 将$s1和$s2的值相加,并将结果存到$t0中
2. addi:该指令用于将一个寄存器中的值与一个立即数进行加法运算,并将结果存储到指定的目的寄存器中。
示例:addi $t0, $s1, 10 ; 将$s1的值加上10,并将结果存到$t0中
3. sw:该指令用于将一个寄存器中的值存储到指定的内存地址中。
示例:sw $t0, 100($s0) ; 将$t0的值存储到$s0+100的内存地址中
4. lw:该指令用于将指定内存地址中的值加载到一个寄存器中。
示例:lw $t0, 100($s0) ; 将$s0+100的内存地址中的值加载到$t0中
5. beq:该指令用于比较两个寄存器中的值,如果相等则跳转到指定的地址。
示例:beq $t0, $t1, label ; 如果$t0等于$t1,则跳转到名为label的标签处
6.and指令也是MIPS指令中的一种,用于进行按位与运算。该指令的语法如下:
and $d, $s, $t
其中,$d为目的寄存器,$s和$t分别为源寄存器。and指令将对$s和$t寄存器中的值进行按位与操作,并将结果存储到$d寄存器中。
示例:and $t0, $s1, $s2 ; 将$s1和$s2寄存器中的值进行按位与操作,并将结果存储到$t0寄存器中。
7.sub指令也是MIPS指令中的一种,用于进行减法运算。该指令的语法如下:
sub $d, $s, $t
其中,$d为目的寄存器,$s和$t分别为源寄存器。sub指令将对$s和$t寄存器中的值进行减法操作,并将结果存储到$d寄存器中。
示例:sub $t0, $s1, $s2 ; 将$s1和$s2寄存器中的值进行减法操作,并将结果存储到$t0寄存器中。
对于每个指令的流水也有一个基本的了解,前提是指令的功能和用法要摸透。
流水线冲突
1.结构冲突:例如在仅有一个存储器的情况下,lw在访存阶段与其他指令的读指令阶段冲突。(MPIS寄存器堆的读写窗口是完全独立的)
2.控制冲突:add addi beq 在beq未执行之前不知道是否跳转,若跳转add addi就白整了,浪费了周期
解决方法:有个动态分支预测技术
合理利用分支选择信号
3.数据冲突:
例如还没写入,就减上了(软件的解决方法是加几条空指令,硬件是插入气泡法)
使用重定向解决数据冲突
1.重定向的原理:如果EX和WB存在数据相关,那么用于EX执行计算的,不能使用前面流水寄存器的值,而应选择WB的结果
2.当发生load-use冲突时,不能使用(第一条指令是取数指令,且第2条指令与第一条指令存在相关)