看板 Grad-ProbAsk 關於我們 聯絡資訊
101台聯大電機第六題 請恕我手邊沒有圖檔... 我只摘錄我有問題的部分 Instruction C1 C2 C3 C4 C5 C6 C7 C8 C9 Sll IF ID EX MEM WB Add IF ID EX MEM WB LW IF ID EX MEM WB ADD IF ID ID EX MEM WB SUB IF IF ID EX MEM 以上的指令中 LW 和後面的ADD會發生DATA HAZARD 請問在第五個和第六個Cycle的 Stall Register (Hazard Detection Unit)的值為何? 張凡的解答上面是 C5是0 C6是1 我的疑問: 在Lw 指令一進到 EX Stage時,就會去偵測 Load-Use Hazard 所以此時便可以發現到 Ex.MemRead = 1 && ID/Ex.RegisterRD == IF/ID.RegisterRT (假設是RT) 因此下個Stage需要強制塞一個NOP 那不是就應該在C5的時候把Stall設成1 這樣C5結束時寫到 ID/EX Pipeline Register上面的 WB/MEM/EX 就會全部都是0 因此C6時就可以成功執行NOP 想請教高手們我這樣的思考邏輯哪邊有誤? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.57.26
Bearcome:題目有說是cycle的beginning喔 11/11 23:37
mingcloud:B大的意思是等C5的值運算完 所以C6 Beginning才看到1嗎? 11/11 23:40
Bearcome:C5設1之後 還是會先擋在pipeline register 11/11 23:42
mingcloud:啊? B大這句話的意思我反而看不太懂了 能再解釋一下嗎? 11/11 23:47
Bearcome:應該說C5設1後 會把0灌進pipeline register 11/11 23:51
Bearcome:我認為題目關鍵在那個from beginning啦XD 11/11 23:54
mingcloud:題目有附註 : 所有的Reg 寫入都在Clock的末段 11/11 23:55
Bearcome:你忽略我上面那個好了 反正我認為C5一開始當然設0 11/12 00:01
mingcloud:那反過來問 為什麼C6時會是1阿XD 11/12 00:03
Bearcome:即使你說STALL有改成1 那也都是過一段延遲時間的事 11/12 00:03
mingcloud:我以為一進到C6時 ID/EX的Control全部都已經是0了 11/12 00:04
mingcloud:喔喔 這樣解釋我比較可以接受為什麼C5不是1了 感謝 11/12 00:04
Bearcome:C6=1就想成C5的延續 一樣也是要過一段延遲時間 11/12 00:10
Bearcome:才能判斷出是否有load-use 沒有的話才會真正的再改回0 11/12 00:10
Bearcome:不知道我這樣的解釋你能不能接受啊XD 11/12 00:11
mingcloud:感謝高手高手高高手B大XDD 11/12 00:52