建構 beta 電腦

23
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 1 建建 Beta 建建

Upload: naomi-buckner

Post on 03-Jan-2016

16 views

Category:

Documents


0 download

DESCRIPTION

建構 Beta 電腦. 中央處理單元的設計取捨. 最大效能 : 以每秒可執行的指令數來衡量. 最小成本 : 以電路的大小來衡量. 最佳效能 / 價錢 : 以 MIPS( 每秒百萬指令 ) 與大小的來比例來衡量 . 在重視能量消耗的應用中 , MIPS/ 瓦特也很重要. 效能之量測. 每秒百萬指令. 時脈頻率 ( 百萬赫 ). 每指令所需時脈數. 推進效能 ... 今天 : 1 時脈 / 指令 . 下次 : 以管路技術來達成更多百萬赫 下下次 : 修正不同的管路技術問題. Beta 指令集. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 1

建構 Beta 電腦

Page 2: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 2

中央處理單元的設計取捨

最大效能 : 以每秒可執行的指令數來衡量

最小成本 : 以電路的大小來衡量

最佳效能 / 價錢 : 以 MIPS( 每秒百萬指令 ) 與大小的來比例來衡量 . 在重視能量消耗的應用中 , MIPS/ 瓦特也很重要 .

Page 3: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 3

效能之量測

推進效能 ...

今天 : 1 時脈 / 指令 .

下次 : 以管路技術來達成更多百萬赫下下次 : 修正不同的管路技術問題

每秒百萬指令

每指令所需時脈數

時脈頻率 ( 百萬赫 )

Page 4: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 4

Beta 指令集

以操作碼區分的指令類別 :

OP OPC MEM Transfer of Control

操作類別 : Reg[Rc] ← Reg[Ra] op Reg[Rb]

操作類別 : Reg[Rc] ← Reg[Ra] op SXT(C)兩種格式共用的操作碼 (OPCODE):

ADD SUB MUL* DIV* *optionalCMPEQ CMPLE CMPLTAND OR XORSHL SHR SRA

Page 5: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 5

達成方法 : 累進功能法每個指令是由一個簡單的功能組件成來達成的 . 我們將試著實現各個指令類別的資料路徑 , 然後再將它們合併 ( 使用解多工器等 ).

步驟 :

1. 操作類指令2. 存取類指令3. 跳躍與分流類指令4. 例外5. 合併資料路徑

記憶體

暫存器

解多工器

“ 黑盒子” 運算邏輯單元

我們的組件百寶袋 :

Page 6: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 6

多埠暫存器檔案

2 combinational READ ports*,

1 clocked WRITE port

*internal logic ensures Reg[31] reads as 0

( 獨立讀取位址 )

Page 7: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 7

暫存器檔案之時序兩組組合邏輯式讀取埠 , 一組時脈控制式寫入埠

如果 ( 舉例來說 ) WA=RA1, 將會如何 ???

RD1 會讀取 “舊的” Reg[RA1] 之值 , 一直到下一個時脈邊緣為止 !

Page 8: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 8

起始點 : ALU 操作

32- 位元 (4- 位元組 ) ADD 指令 :

對 BETA 而言 , 表示 Reg[R4] ← Reg[R2] + Reg[R3]

首先 , 硬體必需能夠 :• 讀取下一個 32- 位元 指令• 指令解碼 (DECODE): ADD, SUB, XOR, 等等• 從暫存器檔案進行讀取 (READ) (Ra, Rb) 之操作 ;• 執行 (PERFORM) 指定的操作 ;• 將結果寫回 (WRITE) 暫存器檔案 (Rc).

Page 9: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 9

指令取得 / 解碼• 使用計數器來取得 (FETCH) 下一個指令 :

程式計數器 (PC)

• 使用 PC 來當作記憶體位址• 加 4 到 PC, 然後在時脈結束時載入新的值• 從記憶體取得指令 o 直接使用某些指令欄位 ( 暫存器編號 , 16- 位元之常數 ) o 使用 <31:26> 位元來產生控制訊號

INSTRUCTION

WORDFIELDS

CONTROL SIGNALS

Page 10: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 10

ALU 操作之資料路徑

OP: Reg[Rc] ← Reg[Ra] op Reg[Rb]

Page 11: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 11

ALU 操作 ( 常數存在時 )

OPC: Reg[Rc] ← Reg[Ra] op SXT(C)

Page 12: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 12

“ 載入”指令

LD: Reg[Rc] ← Mem[Reg[Ra]+SXT(C)]

Page 13: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 13

“ 儲存”指令

ST: Mem[Reg[Ra]+SXT(C)] ← Reg[Rc]

Page 14: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 14

” 跳躍” (JMP) 指令

JMP: Reg[Rc] ← PC+4; PC ← Reg[Ra]

Page 15: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 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)

Page 16: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 16

“ 載入相對位址”指令

等等 , “ 載入相對位址”指令有什麼好處呢 ??? 我認為 • 程式碼是單純的 , 舉例來說 , 它們是唯讀的 , 並且存在一個”程式”記憶體區 ; • 但資料是可讀 / 寫的 , 而使用以下方法之一來儲存 • 存在堆疊 (STACK) 中 ( 內部 ); 或 • 在某些外部變數中 ; 或 • 存在一個外部的儲存堆疊 (HEAP).

所以 , 為什麼一個指令要設計成可以載入”靠近”這個指令的資料呢 ??? 當資料是 ”位址”及”其他較大的常數”時

LDR: Reg[Rc] ← Mem[PC + 4+ 4*SXT(C)]

Page 17: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 17

“ 載入相對位址” (LDR) 指令

LDR: Reg[Rc] ← Mem[PC + 4 + 4*SXT(C)]

Page 18: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 18

例外處理計劃 ::

• 中斷正在執行的程式• 呼叫例外處理 ( 像是一個程序呼叫 )• 返回並繼續執行 .

我們希望有 可修復的中斷 以達成• 由中央處理器 (CPU) 或系統產生的同步化事件 錯誤 ( 例如 , 不合法的指令 , 除數為 0, 不合法的記憶體位址 ) 捕捉 及 系統呼叫 ( 例如 , 從週邊讀取一個字元 )

• 由 I/O 所產生的非同步化事件 ( 例如 , 鍵盤鍵入 , 收到封包 , 磁碟傳輸完成 )

關鍵 : 對於被中斷程式的透明度 .• 這對非同步化中斷是最難的

Page 19: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 19

實施方法…例外如何運作 :

• 不要執行現在的指令• 取而代之的 , 假裝有一個”強制”的程序呼叫 • 儲存現在的程式計數 (PC) ( 事實上是現在的 PC + 4) • 用例外向量載入 PC

• 同步化例外是 0x4, 非同步化例外是 0x8

問題 : 要把現在的 PC + 4 存到哪呢 ?• 我們的方法 : 保留一個暫存器 (R30, 也稱 XP)• 禁止使用者程式使用 XP. 為什麼 ?

例子 : DIV 指令並未實施

LD(R31,A,R0)LD(R31,B,R1)DIV(R0,R1,R2)ST(R2,C,R31)

不合法的操作 :PUSH(XP)

取得指令於 Mem[Reg[XP]–4]檢查 DIV 操作碼 , 找到暫存器號碼用軟體來執行這個操作 , 填入結果暫存器

POP(XP)JMP(XP)

以硬體強制執行

Page 20: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 20

例外Bad Opcode: Reg[XP] ← PC+4; PC ← “IllOp”

Other: Reg[XP] ← PC+4; PC ←“Xadr”

Page 21: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 21

控制邏輯

實施方法的選擇 :• 以操作碼 (opcode), 外部跳躍 , 以及捕捉邏輯索引的唯讀記憶體 (R

OM) • 可程式化邏輯陣列 (PLA)• “ 隨機”邏輯 ( 例如 : 標準元件邏輯閘 )

Page 22: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 22

Beta: 我們的”最終答案”

Page 23: 建構  Beta 電腦

6.004 – Fall 2002 10/29/0 L15 – Building a Beta 23

下回 : 管路化的 Beta 電腦

嗯 , 建構一台電腦並不是那麼難嘛

那麼 , 我們到 6.004 的實驗室去 , 把 Intel 的生意搶走吧 !