## 第一題 ![image](https://hackmd.io/_uploads/SJ33C777Jl.png) ### 範例 ![image](https://hackmd.io/_uploads/SkPnlINX1g.png) ![image](https://hackmd.io/_uploads/SyiTg8V7ye.png) ### Single cycle single cycle的每次cycle是固定時間,而且必須跟**耗時最常時間的指令一樣長**,也就是**Load word** * IF + ID + EX + MEM + WB ![image](https://hackmd.io/_uploads/SJgdkEQmkg.png) ### Multi cycle Multi cycle老師說背起來就對了 * load x5 * store x4 * branch x3 * jump x3 * R-type x4 ![image](https://hackmd.io/_uploads/Bkz9gN7myl.png) ### Pipeline ![image](https://hackmd.io/_uploads/ByUDb4mmke.png) * 有1/3的load指令的結果,會被下一個指令所使用(load-use hazard),會需要再多stall 1 clock,總計需2個clock * load = 1/3 * 2 + 2/3 * 1 = 4/3 * 做branch的時候猜對的機率為1/2,猜對的話只要1個cycle,猜錯的話需要delay 2 cycle recover,總計需3個cycle * branch = 1/2 * 1 + 1/2 * 3 = 2 * jump會 delay 1 cycle,總計為2個cycle * jump = 2 * store, R-type 都是1個cycle * store, R-type = 1 ![image](https://hackmd.io/_uploads/BkcY-N7QJx.png) ## 第二題 ![image](https://hackmd.io/_uploads/B16H6NQQJe.png) ### R-type(3 register) ![image](https://hackmd.io/_uploads/BkfZWkoXJe.png) ### I-type(2 register: lw, sw, addi) ![image](https://hackmd.io/_uploads/B1GQ-koXyl.png) ![image](https://hackmd.io/_uploads/rk8Xij2Q1e.png) ### J-type ![image](https://hackmd.io/_uploads/Hyfh6gUQye.png) ### sll, lui ![image](https://hackmd.io/_uploads/BkXwAr7Q1l.png) ### 112 ![image](https://hackmd.io/_uploads/rkh8HWim1x.png) ### 112答案 ![image](https://hackmd.io/_uploads/rkQYp4mm1g.png) ### 110 ![image](https://hackmd.io/_uploads/SyThJZImkl.png) ### 109 ![image](https://hackmd.io/_uploads/rySKigsQ1e.png) ## 第三題 ![image](https://hackmd.io/_uploads/BJnS6HQmkx.png) ![圖片](https://hackmd.io/_uploads/Hy6jm93X1x.png) ### 課本解釋 * IF stage * zero the IF/FD register * ID stage * use multiplexor to zero control signal * EX stage * use multiplexor to zero control lines ![image](https://hackmd.io/_uploads/H1jIvoHQ1x.png) ## 第四題 ![image](https://hackmd.io/_uploads/HJlmgg8QJg.png) * 1.猜得快 * 2.猜的準 * 3.猜錯回復的快 ### 109年出過的 ![image](https://hackmd.io/_uploads/HJffQj2m1g.png) ## 第五題 ![image](https://hackmd.io/_uploads/B14gkIQX1g.png) ### 各動作會涉及到的開關 ![image](https://hackmd.io/_uploads/SkIXKqBQJe.png) * RegDst負責**控制**是否將資料寫入rt(0)或rd(1) * RegWrite負責**開關**是否將資料寫入register * ALUSrc負責**控制**是否將register2(0)或者instruction sign-extend(1)放入ALU運算 * PCSrc負責**控制**是否PC下一個為值為PC+4(0)或者要跳到另一個branch(1) * MemRead負責**開關**是否能讀取記憶體 * MemWrite負責**開關**是否能將資料寫入記憶體 * MemtoReg負責**控制**寫入register的資料是從memory還是ALU ### 解答 ![image](https://hackmd.io/_uploads/Syk7gLXXJl.png) * a. R-type, lw * R-type, lw 都需要寫入Register * b. 無 * lw 可以讀取記憶體 R-type MemtoReg是正常的,所以還是選正常的資料 (註: MemtoReg負責**控制**寫入register的資料是從memory還是ALU) sw, beq的RegWrite是0 (註: RegWrite負責**開關**是否將資料寫入register) * c. R-type * R-type 會將運算的結果放入rd中 (註: RegDst負責**控制**是否將資料寫入rt(0)或rd(1)) * d. R-type, beq * 這兩個指令都需要第二個register的資料 (註: ALUSrc負責**控制**是否將register(0)或者instruction sign-extend(1)放入ALU運算) * e. 有可能在不該跳的地方跳 * 因為只要ALU的$zero為1,就有可能發生jump (看上方電路) ![image](https://hackmd.io/_uploads/H1uRyImQ1l.png) ### 110 ![image](https://hackmd.io/_uploads/BJMGxiHmye.png) * a. 同112 * b. 同112 * c. 同112 * d. 同112 * e. (自己想的,不一定是正確答案) * 我會從control新增一條訊號控制是否要bne,如果為bne的話則該訊號為1,並且跟not \$zero的訊號做AND,再把該結果跟Branch和$zero做AND的結果再做一次OR ### 109 ![image](https://hackmd.io/_uploads/HkzfNormkx.png) * a. lw * lw無法將資料放入正確的register * b. lw * lw無法將記憶體的資料放入register * c. 同112 * d. 同112 ## 第六題 ![image](https://hackmd.io/_uploads/HktpIsBQkl.png) * 1-bit: 執行上次的結果 * 2-bit: 錯兩次才會換 ### 1-bit prediction * 紀錄上次的結果 * **執行上次的結果** ![image](https://hackmd.io/_uploads/rkfPOHVQyx.png) ### 2-bit prediction * 會記錄上一次和上上次的結果 * **錯兩次才會換** ![image](https://hackmd.io/_uploads/S1S5vrEXyg.png) ## 第七題 ### 112題目 ![image](https://hackmd.io/_uploads/H1zxk84X1e.png) ### 112 答案 :::info beq 後面的那個指令會需要fetch ::: ![image](https://hackmd.io/_uploads/SJ6tkUNXkl.png) * b, c 小題 ![image](https://hackmd.io/_uploads/r11PUkPXkl.png) ![image](https://hackmd.io/_uploads/H1UbYJP7kx.png) ### 110題目 ![image](https://hackmd.io/_uploads/ryzF80UX1e.png) ![image](https://hackmd.io/_uploads/H1QzHJw7Jg.png) ### 110解答 * \$2我就直接當作是2(00010) ![image](https://hackmd.io/_uploads/S1fXEonmyx.png) :::warning c.的B過程是對的,但是計算錯誤 = PC + 4 + (4096+34)\*4 = 28 + 16520 = 16548 ::: ![image](https://hackmd.io/_uploads/r1N2Nj27Jg.png) ### 109題目 ![image](https://hackmd.io/_uploads/rkH8808myl.png) ### 109答案 * \$1我就直接當作是1(00001) ![image](https://hackmd.io/_uploads/SJ_5Nin7Jx.png) :::warning c.2應該是 PC + 4 + 8030 = 8082 ::: ![image](https://hackmd.io/_uploads/rJS4VonQJl.png)