建構 Beta 電腦
-
Upload
naomi-buckner -
Category
Documents
-
view
16 -
download
0
description
Transcript of 建構 Beta 電腦
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 1
建構 Beta 電腦
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 2
中央處理單元的設計取捨
最大效能 : 以每秒可執行的指令數來衡量
最小成本 : 以電路的大小來衡量
最佳效能 / 價錢 : 以 MIPS( 每秒百萬指令 ) 與大小的來比例來衡量 . 在重視能量消耗的應用中 , MIPS/ 瓦特也很重要 .
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 3
效能之量測
推進效能 ...
今天 : 1 時脈 / 指令 .
下次 : 以管路技術來達成更多百萬赫下下次 : 修正不同的管路技術問題
每秒百萬指令
每指令所需時脈數
時脈頻率 ( 百萬赫 )
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
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 5
達成方法 : 累進功能法每個指令是由一個簡單的功能組件成來達成的 . 我們將試著實現各個指令類別的資料路徑 , 然後再將它們合併 ( 使用解多工器等 ).
步驟 :
1. 操作類指令2. 存取類指令3. 跳躍與分流類指令4. 例外5. 合併資料路徑
記憶體
暫存器
解多工器
“ 黑盒子” 運算邏輯單元
我們的組件百寶袋 :
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
( 獨立讀取位址 )
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 7
暫存器檔案之時序兩組組合邏輯式讀取埠 , 一組時脈控制式寫入埠
如果 ( 舉例來說 ) WA=RA1, 將會如何 ???
RD1 會讀取 “舊的” Reg[RA1] 之值 , 一直到下一個時脈邊緣為止 !
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).
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
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 10
ALU 操作之資料路徑
OP: Reg[Rc] ← Reg[Ra] op Reg[Rb]
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 11
ALU 操作 ( 常數存在時 )
OPC: Reg[Rc] ← Reg[Ra] op SXT(C)
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 12
“ 載入”指令
LD: Reg[Rc] ← Mem[Reg[Ra]+SXT(C)]
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 13
“ 儲存”指令
ST: Mem[Reg[Ra]+SXT(C)] ← Reg[Rc]
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 14
” 跳躍” (JMP) 指令
JMP: Reg[Rc] ← PC+4; PC ← Reg[Ra]
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)
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 16
“ 載入相對位址”指令
等等 , “ 載入相對位址”指令有什麼好處呢 ??? 我認為 • 程式碼是單純的 , 舉例來說 , 它們是唯讀的 , 並且存在一個”程式”記憶體區 ; • 但資料是可讀 / 寫的 , 而使用以下方法之一來儲存 • 存在堆疊 (STACK) 中 ( 內部 ); 或 • 在某些外部變數中 ; 或 • 存在一個外部的儲存堆疊 (HEAP).
所以 , 為什麼一個指令要設計成可以載入”靠近”這個指令的資料呢 ??? 當資料是 ”位址”及”其他較大的常數”時
LDR: Reg[Rc] ← Mem[PC + 4+ 4*SXT(C)]
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 17
“ 載入相對位址” (LDR) 指令
LDR: Reg[Rc] ← Mem[PC + 4 + 4*SXT(C)]
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 18
例外處理計劃 ::
• 中斷正在執行的程式• 呼叫例外處理 ( 像是一個程序呼叫 )• 返回並繼續執行 .
我們希望有 可修復的中斷 以達成• 由中央處理器 (CPU) 或系統產生的同步化事件 錯誤 ( 例如 , 不合法的指令 , 除數為 0, 不合法的記憶體位址 ) 捕捉 及 系統呼叫 ( 例如 , 從週邊讀取一個字元 )
• 由 I/O 所產生的非同步化事件 ( 例如 , 鍵盤鍵入 , 收到封包 , 磁碟傳輸完成 )
關鍵 : 對於被中斷程式的透明度 .• 這對非同步化中斷是最難的
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)
以硬體強制執行
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”
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 21
控制邏輯
實施方法的選擇 :• 以操作碼 (opcode), 外部跳躍 , 以及捕捉邏輯索引的唯讀記憶體 (R
OM) • 可程式化邏輯陣列 (PLA)• “ 隨機”邏輯 ( 例如 : 標準元件邏輯閘 )
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 22
Beta: 我們的”最終答案”
6.004 – Fall 2002 10/29/0 L15 – Building a Beta 23
下回 : 管路化的 Beta 電腦
嗯 , 建構一台電腦並不是那麼難嘛
那麼 , 我們到 6.004 的實驗室去 , 把 Intel 的生意搶走吧 !