推 s89162504: 所以beq跟and要待在原地等sub 01/17 11:59
推 s89162504: 一樣的指令要在同個位置待兩週期 01/17 12:01
→ s89162504: or不能進來 01/17 12:01
→ s89162504: 之前也有一篇在討論這題 也是沒結果 01/17 12:02
→ s89162504: 只能說原地等待跟flush stall的概念不太一樣 01/17 12:03
→ s89162504: 但差別在哪我也不清楚 01/17 12:04
→ s89162504: 反正知道beq前面有rtype要暫停一次就可以解這題了 01/17 12:05
→ oceanblue94: 非常感謝s大~我大概懂了 01/17 12:40
→ ken52011219: 試著用推的 不要用記的 先腦海想著forwarding 的偵測 01/17 12:52
→ ken52011219: 碼,與這題不同的是 ID 在一般而言的pipeline 無法被 01/17 12:53
→ ken52011219: 偵測( 這裡指的是你所看過的任何一張pipeline圖 ) 01/17 12:53
→ ken52011219: 它的 forwarding 表示 絕對無法被 提前於ID 的 beq 01/17 12:54
→ ken52011219: 給使用 這個原因主要是因為 聖經本 沒有將forwarding 01/17 12:55
→ ken52011219: 的線路全部畫完 01/17 12:56
→ ken52011219: 然後,真的無法嗎 ? 絕對可以 01/17 12:56
→ ken52011219: 這題交大考題 很好心的寫了一段 在題目一開始的(iii) 01/17 12:57
→ ken52011219: 如我圖所示的 : 強調forwading 可解決 ID 的Data 01/17 12:58
→ ken52011219: hazard 這代表著 : 我們平常將值 forwarding 到exe 01/17 12:58
→ ken52011219: 供以 EXE STAGE 做正確的值 ;同個道理 我們也可以將 01/17 12:59
→ ken52011219: forwarding 提前將正確的值於 ID 使用 01/17 12:59
→ ken52011219: 這個大前提了解之後,這題就很好做了 01/17 13:00
→ ken52011219: SUB F D E M W 01/17 13:01
→ ken52011219: BEQ F D D E M W 01/17 13:01
→ ken52011219: 依上述所示 我們可以想像 (sub)D&(beq)E 時如同一般 01/17 13:02
→ ken52011219: 偵測完後 將正確值拉回 D 做運算 故要停一個cycle 01/17 13:03
→ ken52011219: 剩下比較有爭議的題目大概就是這題組的最後一題了QQ 01/17 13:06
→ ken52011219: = = 我上面 忘記空格 01/17 13:07
→ ken52011219: SUB F D E M W 01/17 13:08
→ ken52011219: BEQ F D D E M W 01/17 13:09
→ ken52011219: (sub)D&(beq)M 01/17 13:10
→ ken52011219: 想補充一下我覺得會stall 一cycle 的原因 01/17 13:20
→ ken52011219: 我認為是因為 一般而言 forwarding 會偵測的時候是 01/17 13:20
→ ken52011219: D/E 的情況。 但因為在BEQ往前拉到ID時,它必須在ID 01/17 13:21
→ ken52011219: 偵測 & 運算且決定是否taken 01/17 13:22
→ ken52011219: 因此它 必須Stall 1 cycle 等待 上一個指令到達mem 01/17 13:22
→ ken52011219: or wb stage 才能在 ID 中決定是否為跳 (不知不覺就 01/17 13:23
→ ken52011219: 打了快兩面了 QQ) 01/17 13:23
→ ken52011219: 而 Load use 則必須 等待上一個指令到達 WB 才能將 01/17 13:25
→ ken52011219: 其 forwarding 到 ID 故stall 2 cycle 01/17 13:26
→ ken52011219: 雖然我覺得這樣子根本沒用到 forwarding 01/17 13:26
→ ken52011219: 有啦@_@ 當 memory 不允許 instruction or data path 01/17 13:27
→ ken52011219: 同時 access 時 forwarding 就很好用了 QQ~ 01/17 13:27
→ oceanblue94: 非常感謝k大的詳細解釋~所以題目在(iii)的意思就是 01/17 14:00
→ oceanblue94: ,sub在運算完之後的值(在MEM stage)可以直接forward 01/17 14:00
→ oceanblue94: ing回ID stage,然後beq因為要等sub forwarding的值 01/17 14:00
→ oceanblue94: ,所以才要stall一個clock這樣嗎~ 01/17 14:00
→ ken52011219: 我的理解是這樣子@@~ 只不過聖經本沒寫所以我只能從 01/17 14:15
→ ken52011219: 張凡課本所提到的結論以及自己的想法做推論 01/17 14:15