Presentation is loading. Please wait.

Presentation is loading. Please wait.

建構 Beta電腦 6.004 – Fall 2002 10/29/0.

Similar presentations


Presentation on theme: "建構 Beta電腦 6.004 – Fall 2002 10/29/0."— Presentation transcript:

1 建構 Beta電腦 6.004 – Fall 2002 10/29/0

2 中央處理單元的設計取捨 最大效能: 以每秒可執行的指令數來衡量 最小成本: 以電路的大小來衡量
最佳效能/價錢: 以MIPS(每秒百萬指令)與大小的來比例來衡量. 在重視能量消耗的應用中, MIPS/瓦特也很重要. 6.004 – Fall 2002 10/29/0

3 效能之量測 每秒百萬指令 時脈頻率(百萬赫) 每指令所需時脈數 推進效能 ... 今天: 1 時脈/指令.
下次: 以管路技術來達成更多百萬赫 下下次: 修正不同的管路技術問題 6.004 – Fall 2002 10/29/0

4 Beta指令集 操作類別: Reg[Rc] ← Reg[Ra] op Reg[Rb] 以操作碼區分的指令類別: OP OPC MEM
Transfer of Control 操作類別: Reg[Rc] ← Reg[Ra] op SXT(C) 兩種格式共用的操作碼(OPCODE): ADD SUB MUL* DIV* *optional CMPEQ CMPLE CMPLT AND OR XOR SHL SHR SRA 6.004 – Fall 2002 10/29/0

5 達成方法: 累進功能法 我們的組件百寶袋: 暫存器 解多工器 “黑盒子” 運算邏輯單元 記憶體
每個指令是由一個簡單的功能組件成來達成的. 我們將試著實現各個指令類別的資料路徑, 然後再將它們合併(使用解多工器等). 我們的組件百寶袋: 步驟: 1. 操作類指令 2. 存取類指令 3. 跳躍與分流類指令 4. 例外 5. 合併資料路徑 暫存器 解多工器 “黑盒子” 運算邏輯單元 記憶體 6.004 – Fall 2002 10/29/0

6 多埠暫存器檔案 (獨立讀取位址) 2 combinational READ ports*, 1 clocked WRITE port
*internal logic ensures Reg[31] reads as 0 6.004 – Fall 2002 10/29/0

7 暫存器檔案之時序 兩組組合邏輯式讀取埠, 一組時脈控制式寫入埠 如果 (舉例來說) WA=RA1, 將會如何???
RD1 會讀取 “舊的” Reg[RA1] 之值, 一直到下一個時脈邊緣為止! 6.004 – Fall 2002 10/29/0

8 起始點: ALU 操作 32-位元 (4-位元組) ADD 指令:
對BETA而言, 表示Reg[R4] ← Reg[R2] + Reg[R3] 首先, 硬體必需能夠: • 讀取下一個 32-位元 指令 • 指令解碼(DECODE): ADD, SUB, XOR, 等等 • 從暫存器檔案進行讀取 (READ) (Ra, Rb) 之操作; • 執行(PERFORM)指定的操作; • 將結果寫回(WRITE)暫存器檔案(Rc). 6.004 – Fall 2002 10/29/0

9 指令取得/解碼 • 使用計數器來取得(FETCH)下一個指令: 程式計數器 (PC) • 使用 PC 來當作記憶體位址
• 從記憶體取得指令 o 直接使用某些指令欄位 (暫存器編號, 16-位元之常數) o 使用 <31:26>位元來產生控制訊號 INSTRUCTION WORD FIELDS CONTROL SIGNALS 6.004 – Fall 2002 10/29/0

10 ALU 操作之資料路徑 OP: Reg[Rc] ← Reg[Ra] op Reg[Rb] 6.004 – Fall 2002 10/29/0

11 ALU 操作 (常數存在時) OPC: Reg[Rc] ← Reg[Ra] op SXT(C) 6.004 – Fall 2002
10/29/0

12 “載入”指令 LD: Reg[Rc] ← Mem[Reg[Ra]+SXT(C)] 6.004 – Fall 2002 10/29/0

13 “儲存”指令 ST: Mem[Reg[Ra]+SXT(C)] ← Reg[Rc] 6.004 – Fall 2002 10/29/0

14 ”跳躍”(JMP)指令 JMP: Reg[Rc] ← PC+4; PC ← Reg[Ra] 6.004 – Fall 2002
10/29/0

15 BEQ/BNE(當相等/不等時, 則跳躍) 指令
BEQ: Reg[Rc] ← PC+4; if Reg[Ra]=0 then PC ← PC+4+4*SXT(C) BNE: Reg[Rc] ← PC+4; if Reg[Ra]≠0 then PC ← PC+4+4*SXT(C) 6.004 – Fall 2002 10/29/0

16 “載入相對位址”指令 等等, “載入相對位址”指令有什麼好處呢??? 我認為
LDR: Reg[Rc] ← Mem[PC *SXT(C)] 等等, “載入相對位址”指令有什麼好處呢??? 我認為 • 程式碼是單純的, 舉例來說, 它們是唯讀的, 並且存在一個”程式”記憶體區; • 但資料是可讀/寫的, 而使用以下方法之一來儲存 • 存在堆疊(STACK)中 (內部); 或 • 在某些外部變數中; 或 • 存在一個外部的儲存堆疊(HEAP). 所以, 為什麼一個指令要設計成可以載入”靠近”這個 指令的資料呢??? 當資料是 ”位址”及”其他較大的常數”時 6.004 – Fall 2002 10/29/0

17 “載入相對位址”(LDR)指令 LDR: Reg[Rc] ← Mem[PC + 4 + 4*SXT(C)]
6.004 – Fall 2002 10/29/0

18 例外處理 計劃:: • 中斷正在執行的程式 • 呼叫例外處理 (像是一個程序呼叫) • 返回並繼續執行. 我們希望有 可修復的中斷 以達成
• 由中央處理器(CPU)或系統產生的同步化事件 錯誤 (例如, 不合法的指令, 除數為0, 不合法的記憶體位址) 捕捉 及 系統呼叫 (例如, 從週邊讀取一個字元) • 由I/O所產生的非同步化事件 (例如, 鍵盤鍵入, 收到封包, 磁碟傳輸完成) 關鍵: 對於被中斷程式的透明度. • 這對非同步化中斷是最難的 6.004 – Fall 2002 10/29/0

19 實施方法… 例外如何運作: • 不要執行現在的指令 • 取而代之的, 假裝有一個”強制”的程序呼叫
• 儲存現在的程式計數(PC) (事實上是現在的 PC + 4) • 用例外向量載入PC • 同步化例外是0x4, 非同步化例外是0x8 問題: 要把現在的PC + 4存到哪呢? • 我們的方法: 保留一個暫存器 (R30, 也稱 XP) • 禁止使用者程式使用XP. 為什麼? 不合法的操作: PUSH(XP) 取得指令於 Mem[Reg[XP]–4] 檢查 DIV 操作碼, 找到暫存器號碼 用軟體來執行這個操作, 填入結果暫存器 POP(XP) JMP(XP) 例子: DIV指令並未實施 LD(R31,A,R0) LD(R31,B,R1) DIV(R0,R1,R2) ST(R2,C,R31) 以硬體強制執行 6.004 – Fall 2002 10/29/0

20 例外 Bad Opcode: Reg[XP] ← PC+4; PC ← “IllOp”
Other: Reg[XP] ← PC+4; PC ←“Xadr” 6.004 – Fall 2002 10/29/0

21 控制邏輯 實施方法的選擇: • 以操作碼(opcode), 外部跳躍, 以及捕捉邏輯索引的唯讀記憶體(ROM) • 可程式化邏輯陣列(PLA) • “隨機”邏輯 (例如: 標準元件邏輯閘) 6.004 – Fall 2002 10/29/0

22 Beta: 我們的”最終答案” 6.004 – Fall 2002 10/29/0

23 下回: 管路化的Beta電腦 那麼, 我們到 6.004的實驗室去, 把Intel的生意搶走吧! 嗯, 建構一台電腦並不是那麼難嘛
6.004 – Fall 2002 10/29/0


Download ppt "建構 Beta電腦 6.004 – Fall 2002 10/29/0."

Similar presentations


Ads by Google