企業(yè)oa系統(tǒng)免費(fèi)優(yōu)化網(wǎng)站建設(shè)seo
萌新的RiscV學(xué)習(xí)之在寫代碼之前對(duì)于關(guān)鍵路徑的分析-11
首先我們最簡單的control 模塊
全分段 因?yàn)橹挥蟹侄?, 分開使用之后 , 各個(gè)階段的具體功能才會(huì)合理使用 就像是為了后續(xù) “氣泡” 賦值 為 0 還有單獨(dú)比較前遞這種
EX : ALUOP ALUSrc |||| 選擇ALU執(zhí)行何種模式
M : branch Memread Memwrite ||| 分支 加載 存儲(chǔ)
WB : Memtoreg RegWrite ||| 選擇ALU結(jié)果還是存儲(chǔ)器值 寫入所選值
第二我們開始研究前遞的具體使用
首先對(duì)于 前遞模塊 我們有6輸入2輸出 輸出是ForwardA ForwardB
前遞模塊是專門為了ALU設(shè)計(jì)的 用來確定ALU的兩個(gè)輸入端的取值是三者的哪一個(gè)
Forwarding 6個(gè)輸入 有 Rs1 Rs2 EX/MEM. RegisterRd MEM/WB.RegisterRd
還有Regwrite
對(duì)于第一個(gè)regwrite=1 其實(shí)很好理解 我們匹配一下是否是相等的 Rs== EX/MEM. RegisterRd
選擇來自ALU計(jì)算完成的結(jié)果
對(duì)于第二個(gè)Regwrite
一般來說用的比較少
(我自己腦補(bǔ)了一下 沒腦補(bǔ)出來) 但是說是這么說 MEM/WB.RegisterRd = = Rs
選擇最后來自MEM/WB 寄存器的值
第三個(gè)是加載冒險(xiǎn)
Hazard Defection Unit 模塊
四個(gè)輸入三個(gè)輸出
三個(gè)輸出很好理解 因?yàn)榧虞d冒險(xiǎn)要產(chǎn)生一個(gè)“氣泡”停頓 把 control 置為 0 (只要將Re Writ MemWrit 信號(hào)設(shè)置為 即可)
讓PC 和 IF/ID 保持
四個(gè)輸入 檢測(cè) rs1 rs2與 rd是否相同 與 memread 是否是ld指令
第四個(gè)是跳轉(zhuǎn)冒險(xiǎn)
沒有特定的控制大單元 在 ID階段依靠各個(gè)小單元控制
此圖多出一點(diǎn)的單元