看板 Grad-ProbAsk 關於我們 聯絡資訊
: (b) : 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 : lw IF ID EX ME WB : add IF ID ** EX ME WB : lw IF ** ID EX ME WB : bne ** IF ** ** ID EX ME WB : add ** ** ** IF ID EX ME WB : add IF ID EX ME WB : bne IF ** ID EX ME WB : add ** IF ID EX ME WB : 黃色的是代表猜跳而未跳的懲罰時間(flush指令) : cycle數也符合第一題的答案 第二題聽同學說張凡在題庫班 改成4 7 8 13 然後我跟我同學討論後 覺得對兩個bne來說雖然ID就要決定要不要跳了 但應該還是會先解碼 畢竟不解碼怎麼知道需不需要stall呢 至於黃色的因為猜跳 但不跳 (所以下個指令還是會flush 應該也算在題目問的stall內) 所以大概會變成下面這樣 (b) 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 lw IF ID EX ME↘WB add IF ID ** EX ME WB lw IF ** ID EX ME↘WB bne ** IF ID ID ID EX ME WB add IF ** ** IF ID EX ME WB add IF ID EX ME↘WB bne IF ID ID EX ME WB add IF ** IF ID EX ME WB 感覺還是哪裡怪怪的啦 希望有上題庫班的或其他大大可以幫忙解惑一下 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.186.95
BaaaSwin:beq是flush掉指令,並不是stallcycle,張帆在題庫班直接用 12/02 23:17
BaaaSwin:算的,他說畫圖太慢 12/02 23:17
BaaaSwin:因為會stall的指令都是datahazard所以在IDstall 12/02 23:18
BaaaSwin:所以你只要判斷哪個指令要stall以及他在ID的時後是哪個 12/02 23:19
BaaaSwin:CLOCK 12/02 23:19
Bearcome:所以答案是 4 7 8 13嗎? 確定一下 12/02 23:21
BaaaSwin:當2.add執行到ID時要1(lw)+2(IF+ID)而他要在下一個cycle 12/02 23:24
BaaaSwin:stall 所以2.add的stallcycle=4 12/02 23:25
BaaaSwin:4.bne stall前=1(lw)+1(add)+1(add')+1(lw)+2(IFID)=6 12/02 23:27
BaaaSwin:要stall2個所以是C7.C8 依此類推 12/02 23:28
BaaaSwin:我覺得要畫beq的flushcycle用nop比較好(像17871那篇) 12/02 23:31
BaaaSwin:結論就是算要stall前有幾個cycle(因為都在ID開始stall) 12/02 23:33
BaaaSwin:再看要stall幾個cycle 12/02 23:33
BaaaSwin:答案對= =剛剛沒看到對不起 12/02 23:34
BaaaSwin:C4的bne不用** C7C8的bne要** bne的flush我覺得怪怪的 12/02 23:38