level 13
今天更新的是逻辑运算指令,移位指令,移动指令,和简单的算术指令,并解决部分相关问题。
在五级流水线中,五条指令(理想状态)在同一时刻分别处于wb,mem,ex,id,if阶段,也就是说,如果当前指令需要上一条指令得到的数据的话,流水线会产生气泡,即当前指令需要延时两个周期以等待数据
2015年09月05日 00点09分
1
level 13
为了消除气泡,我们可以把mem,wb的输出重新接在id上,当当前指令需要的数据寄存器地址等于上一条指令的目的寄存器地址时,直接将该数据送到id,立刻解决气泡
2015年09月05日 00点09分
2
level 13
重要的事情要讲三遍
完备!完备!完备!
slt指令比较大小举例,要考虑两个操作数的正负号,差的正负号,少一个状态轻则出一堆乱七八糟的lantch,重则不能实现功能
再说三遍
完备!完备!完备!
2015年09月05日 00点09分
3
level 13
所谓对指令的支持,并没有什么技术上的难点,纯体力工作而已,代码格式都一样
,r-type的话两个操作数都取自寄存器,设置寄存器读使能。i-type只读取第一个寄存器,第二个操作数0扩展或者符号扩展,也就一个mux的事。
2015年09月05日 00点09分
4
level 13
执行阶段几乎全是case
每个aluop对应一种操作,设置目的寄存器写使能
再说三遍
完备!完备!完备!
2015年09月05日 00点09分
5
level 13
hi lo寄存器 作用是存储乘除法指令结果,或者针对这两个寄存器的加载,移动指令。和regfile module的写法一样。
只有一点要注意的地方,写hilo寄存器时要关闭通用寄存器写使能
2015年09月05日 00点09分
6