Try   HackMD

2018q1 Homework (quiz5-3)

tags: linyunwen raygoah

contributed by <LinYunWen, raygoah>

考慮某款 MIPS 實作,其 data path 如下:

上圖紅色的 1, 2, 3 對 MIPS 做了對應的修改,請考慮以下狀況,分別解釋對應的程式碼是否能運作。

解題

測驗 1

  • Q11: 做了 1: Stuck at 0 left of cut 的修改,sw $s1, 0($s2) 能否運作?
  • Q12: 承上,下方程式能否運作?
    ​​​​lw $s1, 0($s2)
    ​​​​add $s1,$2,$3
    
  • 1 切斷的電路中,關係到寫入 reg 的指令能不能運作

  • 由上圖可以看到,第一列是 R-type 指令,第二列是 lw ,第三列是 sw ,第四列是 beq,所以切斷 1 後,會影響到 R-type 以及 lw ,而 sw 則不會受到影響,因為 sw 不用將值寫入reg,而是相反的將值從 reg 中寫入 memory

  • 因此 Q11 是能運作的,但在 Q12 中,因為有使用到 lw,且 add 為 R-type 指令,所以不能正常運作


根據上面的這張圖(參考連結在最下方),知道了這條線是控制 MemtoReg RegWr 這兩條訊號線,因此若沒有了這條線,Reg永遠不能被寫入, lw 、 add 等需要寫入 reg 的指令都會失效。
而sw不會失效,因為他不牽涉到寫回 reg 的動作。因此這題的答案是可以運作
rex662624

測驗 2

  • Q21: 做了 2: Cut here 的修改後,以下程式能否運作?

    ​​​​add $s1, $s1, $s1
    ​​​​add $s1, $t0, $t1
    
  • 2 中切掉的電路,會影響到 RS 的 forwarding
  • 但因為在第一行做完後,第二行中的 RS 及 RT 都沒有用到 $s1,只有在 RD 的地方使用到 $s1,因此此題不會有 Data Hazard 的情況發生,可以正常運作

測驗 3

  • Q31: 做了 3: Cut here 的修改後,以下程式能否運作? (exit 為某個副程式)

阻斷了 "shift left 2" 這個 unit,這會造成採取

  • Base or displacement addressing (如 lw,sw)
  • PC-relative addressing (如:beq ,bne)

等採取上述定址模式的指令無法正常運作。
而 j, jal , jr 等指令採取 Pseudodirect addressing ,其跳躍目的位址為指令的後 26 位元和 Program-counter 高位(前 4 bits)結合而成,不涉及需要 shift 2 的運作,仍可正常運作。
workat60474

cmp:
    xor $t1, $s2, $s1
    slt $t2, $zero, $t1
    sll $t2, 2
    add $ra, $ra, $t2
    jr  $ra

entry:
    addi $s2, $zero, 2
    addi $s1, $zero, 2
    jal  cmp
    j    exit

  • Q32: 承上,以下程式能否運作?
    addi $s2, $zero, 2
    addi $s1, $zero, 2
    beq $s2, $s1, exit
  • 3 中切斷的電路,會影響到 PC + 4 + (imm*4) 的部份,也就是 I 型指令 beq,而對於 R 型指令:jr ,或是 J 型指令: j,都是沒有影響的

  • 因此在 Q31 中,沒有使用到 beq,使用了 jr 以及 j,所以可以正常執行

  • 而在 Q32 中,因為使用到了 beq 所以沒有辦法順利執行

延伸問題:

  • 解釋並且找出 MIPS 的設計
  • 充分解釋在共筆中,並且記錄你的學習歷程