目录
一、基础知识
组合单元:一个操作单元,输出只取决于当前的输入。如与门或ALU
状态单元:一个存储单元,如寄存器或存储器。
二、只考虑一次单条指令执行的数据通路
p182图 要求会画
注意点:
①符号扩展:
1°若只有无符号数指令 addiu,则写成无符号扩展
2°beq指令的地址是先进行符号扩展后再左移两位
②ALU的控制信号
1°ALUOP一共两位,三个状态:
①R型指令,由funct决定具体执行什么操作
②beq指令,ALUOP决定执行减法
③I型指令,ALUOP决定执行加法
2°若存在beq指令ALU上要写上零标志
③beq指令的控制信号
PCSrc不是单独的控制信号,而是ALU零标志和Branch与的结果
三、流水线
流水线流实际上改善的是指令的吞吐率,而不是减少单条指令的执行时间。
重要公式:
①若指令条数很多(理想状态),则有如下近似相等的公式
②吞吐率:单位时间执行的任务数量
③加速比:
结构冒险:因缺乏硬件支持而导致指令不能在预定的时钟周期内执行的情况。
数据冒险:因无法提供指令执行所需数据而导致指令不能在预定的时钟周期内执行的情况。
控制冒险:也称为分支冒险。 因为取到的指令并不是所需要的(或者说 指令地址的变化并不是流水线所预期的)而导致指令不能在预定的时钟周期内执行的情况。
具体操作(链接):
解决控制冒险的方法:
①假定分支不发生:假定不会发生跳转,正常顺序执行
②缩短分支的延迟:将beq指令的判断体现到ID阶段
③动态分支预测
四、习题
C
A
错,单周期指令是指所有指令的时钟周期都等长,并且每条指令只有一个时钟周期。单周期指令并行和串行执行都是只能处理一条指令之后再处理下一条指令。
而流水线将指令分为5个阶段,每条指令5个时钟周期,属于多周期指令的范畴。
①假设分支不发生 ②缩短分支的延迟③动态分支预测
旁路从流水线寄存器中提前取出数据。
不能解决所有的数据冒险。例如取数-使用型冒险无法避免。
例如add $s0,$s1,$s2;sub $s3,$s0,$s2;指令sub不需要等add执行结束,ALU 一旦生成加法的运算结果,sub指令就从部件内部(旁路)直接获得这个结果参与sub的运算,而不是等待add指令执行结束。