流水线逻辑
f_pc: 当前要取什么
f_predPC: 下条取什么
bubble: 预测错误情况下是取消错误指令
有以下几种情形
选择分支
直接跳转,预测错误再改正
下条地址 -> D_valP -> E_valA -> M_valA
不选择分支
先不跳转,预测错误再跳转
跳转地址 -> D_valC -> E_valC -> M_valE
无条件跳转
属于选择分支,直接跳转,而且肯定不会预测错,废话。
f_pc,D_icode,E_icode中的IJXX要改成IJXX && f_ifun != UNCOND
f_predPC中的IJXX要改成IJXX && f_ifun == UNCOND
前(后)向分支
前向分支:下条指令在分支指令前
后向分支:下条指令在分支指令后
谁在前就先执行谁
总结
无非两种情况,跳与不跳
如何选择跳与不跳? f_predPC预测下条指令
预测错了,正确指令在哪? M_Cnd(e_Cnd)反馈f_pc ( ps:M_Cnd = e_Cnd )
M的正确指令哪里来? PC取了一个地址后会把另一个地址一直传到E,由E判断后给M
预测错了,错误指令在怎么取消? 逻辑控制中的bubble