introduction to c programming

33
Introduction to C Programming Final Project: LC-3 CPU Control Unit Simulator

Upload: ryann

Post on 08-Feb-2016

15 views

Category:

Documents


0 download

DESCRIPTION

Introduction to C Programming. Final Project: LC-3 CPU Control Unit Simulator. 題目簡介. Brief introduction to the project. LC-3 CPU Control Unit. 目標: 用軟體實作 LC-3 CPU 的行為 自 Binary file 讀取指令 依序 Fetch 、 Decode 指令 再來若該指令有需要 Evaluate address 、 Fetch operand 則 Evaluate address 、 Fetch operand - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Introduction to C Programming

Introduction to C Programming Final Project: LC-3 CPU Control Unit Simulator

Page 2: Introduction to C Programming

題目簡介Brief introduction to the project

Page 3: Introduction to C Programming

LC-3 CPU Control Unit

•目標:•用軟體實作 LC-3 CPU的行為•自 Binary file讀取指令•依序 Fetch、 Decode指令•再來若該指令有需要 Evaluate address、 Fetch operand則 Evaluate address、 Fetch operand

• Execute該指令•將結果 Store到 Register或Memory。

Page 4: Introduction to C Programming

LC-3 CPU Control Unit• 會以輸入一個 Binary file的方式作為 input(讀取方式可參考 C語言 Ch8投影片讀取 Binary file之方式)

• 輸出結果是將每次指令單步執行( PC=PC+1)時,當下Register、Memory的值印出到檔案

• Memory大小是由題目指定的,可使用 Array來模擬Memory

• 關於 LC-3 CPU控制單元的行為請參考 LC-3 Ch4投影片• 關於 LC-3每種指令的行為請參考 LC-3 Ch5投影片• 我們實際上不會實作全部的指令,要實作哪些指令、有哪些詳細的規格、配分在投影片後面會詳述

Page 5: Introduction to C Programming

需要模擬的指令The instructions which should be simulated

Page 6: Introduction to C Programming

數學運算指令( 70%)• ADD• AND• NOT

Page 7: Introduction to C Programming

Load/Store指令( 15%)• LOAD類

• LD• LDI• LDR• LEA

• STORE類• ST• STI• STR

Page 8: Introduction to C Programming

分支類與軟體中斷指令( 15%)• Software Interrupt

• TRAP

• Return• RET

• Unconditional branch• JMP• JSR• JSRR

• Conditional branch• BR(n)(z)(p)

Page 9: Introduction to C Programming

註: RET指令敘述

摘錄自” Introduction to Computer Systems”,Patt and Patel, 2nd Ed., p536

Page 10: Introduction to C Programming

備註• 只有被列出來的指令需要模擬• 每個指令的行為請參考 LC-3投影片的 Ch5投影片,但是若 Spec上有修改部分指令的行為時,請依照 Spec的修改來實作

Page 11: Introduction to C Programming

實作講解Hint of implementation

Page 12: Introduction to C Programming

實作講解與範例• 在實作的時候,基本上是按照下面這個流程圖來實作

• Step 1:自我們提供的 input.bin當中,每 16-bit切出一道指令,將檔案中的指令全部收集

• Step 2:將剛才收集到的指令依序放入你用軟體模擬的記憶體當中,從 0x0030的位置開始依序放入

• Step 3 & 4:模擬 CPU行為、並把 PC每移動一次時, Register和Memory的值印到檔案中

自input.bin中讀入指令

全部讀完後寫入用軟體模擬的記憶體(Loader)

自0x0030開始逐步模擬CPU行為

(CPU模擬)

把全部結果輸出到

ouput.txt

Page 13: Introduction to C Programming

如何自 Binary file讀取指令?• 真正編譯器編譯出的 Binary file除了程式碼外,還會帶有相當多其他的資訊,在這邊就不詳加討論。

• 我們所提供的 Binary file會是一個相當簡化的 Binary file,裡頭只有指令的部份,是以 0101的方式儲存,注意不是用純文字的方式儲存,所以你在讀取檔案的時候,必須要用Read Binary File的方式讀取。

• 若你要自 Binary file當中讀取指令,你要以每 16-bit為一個單位切出指令出來,然後把切出來的指令的值存起來,即可切出一道指令。

Page 14: Introduction to C Programming

CPU Control Unit模擬• 在實作 CPU Control Unit的時候,基本上是按照下面這張

State Diagram來用軟體實作,前段是 Fetch與移動 PC的部份、再來 Decode,決定是屬於哪類指令,再來分別實作

圖片取自:” Introduction to Computer Systems”,Patt and Patel, 2nd Ed., 投影片 Ch4第22頁

Page 15: Introduction to C Programming

如何看著 Ch5的指令敘述用軟體實作?•在下面的範例當中,我們假設同學已經完成前段自 Binary檔案 Load到Memory的部份、Decode OP code的部份,我們只會給大家看如何看著一個 Instruction的描述,來實作其行為。(但同學在實作的時候,前面自Binary檔案 Load到Memory的部份、 Decode OP code的部份仍然要自己實作)

Page 16: Introduction to C Programming

範例: NOT指令

• 假設同學已經 Decode IR[15:12]的 OP code,知道這道指令是 NOT,由下面的圖可看出,他是要把 Source register裡面的值拿出來取 NOT,然後寫回 Destination register裡。

Note: Src and Dstcould be the same register.

圖片取自:” Introduction to Computer Systems”,Patt and Patel, 2nd Ed., 投影片 Ch5第 6頁

Page 17: Introduction to C Programming

• 由於 NOT指令只需要 Fetch Operand、 Execute和 Store回 Register File,故我們在實作的時候只需要實作這些部分,你可以針對 NOT指令的模擬寫一個 emu_not如下:

• 其中的 fetch_not_operand、 exec_not、 store_not的內容在下幾頁投影片會解釋

• [註 ]: u16是我們範例程式中自行定義的: typedef unsigned short,其長度為 16-bit

Page 18: Introduction to C Programming

• 首先,要先 fetch這道指令的 Operand,所以我們寫一個fetch_not_operand的函式,輸入參數為該道指令,回傳值為 operand, operand是一個 structure,裡面包含src1、 src2和 dst,在這個案例中,因為只有一個 source register,所以只填入 src1和 dst。

• 我們把原本 instruction中 instr[8:6]的值取出來作為 Source register的編號,把 instr[11:9]的值取出來作為 Destination register的編號

Page 19: Introduction to C Programming

• 接下來,執行 NOT指令應該要做的事情,也就是把Source Register的值取出來,然後做「 NOT 」邏輯運算,然後回傳回去。

Page 20: Introduction to C Programming

• 最後,把 NOT 邏輯運算出來的結果,寫到 Register File當中的 Destination Register。即完成此指令的行為模擬。

• [註 ] 我們有提供 NOT指令的範例程式碼片段,你可以直接擷取此部份的程式碼到你自己的程式中,也可以自己實作。但是不論如何,最後 Demo的時候你的程式必須也要能執行 NOT指令

Page 21: Introduction to C Programming

題目規格Spec

Page 22: Introduction to C Programming

Spec• 輸入檔案會是一個簡化後的可執行檔,以二進位儲存資料的一個檔案。

• 你必須先將指令 Load 進來放到用軟體模擬的Memory的0x0030的地方,將每道指令依序放置(第一道指令在0x0030、第二道在 0x0031 等等依序排放)

• 要執行的時候,自 0x0030的指令開始執行(初始PC=0x0030),除非遇到 Branch類指令,不然就是依序往下執行( PC=PC+1),遇到 Branch類指令則依照Branch類指令的行為決定執行順序

• TRAP指令所定址的 Vector Address是從 0x0070~0x007F

Page 23: Introduction to C Programming

Spec• 在每執行一道指令後,把當時的結果輸出到檔案,格式請按照後面 Sample output file當中的格式輸出,輸出時請將執行完後當下的 PC、 R0~R7的值印出,Memory當中的值只要印出 0x0000~0x002F的部份即可。

• 在輸入檔案當中的指令全部被執行完畢後,結束程式

Page 24: Introduction to C Programming

Spec• 你要用軟體模擬的Memory大小請以 0x0000~0x007F(請注意是 16 進位)為準,其中 0x0000到 0x002F是給保留給程式當做資料儲存用的, 0x0030到 0x006F是拿來存放程式碼的, 0x0070到 0x007F是拿來存放 Trap的 Vector內容的。在實作上,可用 Array來模擬Memory即可,不需要模擬更細部的記憶體硬體行為。

• 不需要考慮真正 LC-3當中 Supervisor mode和 Non-supervisor mode的差別。

• 不需要考慮真正 LC-3當中,對高位與低位Memory space的權限控制。

• 不需要考慮 Hardware Interrupt的部份。• 輸入檔案名稱為 input.bin、輸出檔案名稱為 output.txt,檔名直接寫定在程式碼當中即可。

Page 25: Introduction to C Programming

Spec• 由於範例 input是以 binary的形式存在,所以不方便直接

顯示,我們下面的內容是寫出 input.bin其原始組合語言的方式來顯示,並且顯示出當輸入這個 input.bin時,你應該寫入到 output.txt的內容。範例 input.bin和範例 output.txt之後會在 iLMS上公布。

• 你的程式的輸出格式必須依照 Spec上所規定的格式輸出• 範例 input.bin的組合語言內容:

• NOT r1, r0• NOT r2, r0

Page 26: Introduction to C Programming

Spec• 範例 output.txt輸出內容(第一頁):

Page 27: Introduction to C Programming

Spec• 範例 output.txt輸出內容(第二頁):

Page 28: Introduction to C Programming

加分題Bonus

Page 29: Introduction to C Programming

Bonus-1: Live coding• 我們會在 Demo 現場新增新的 Instruction type,當場公布該新增的 Instruction之 Encode方式與指令邏輯行為,有要 Demo Bonus-1的人會需助教面前現場修改自己的程式碼,若在 10分鐘內可以順利讀取並且模擬新增的Instruction type的行為, 即可取得此 Bonus分數。若超過10分鐘還沒寫出來,則就無法取得此 Bonus分數。

• Live coding 環境可使用自己的筆電、遠端桌面或是工作站等熟悉的環境

• 要 Demo Bonus-1的人需要在填寫 Demo timetable的時候就告知助教說要 Demo Bonus。

Page 30: Introduction to C Programming

Bonus-2: Disassembler 反組譯器• 此部份為事先完成的,不是 Live coding• 將輸入的 Binary file,輸出成對應的組合語言程式碼• 輸入檔案: Binary file• 輸出檔案: Assembly language file(純文字檔,內容是組

合語言)• 裡面遇到 Label的部份,在 Generate 組合語言檔案的時候,可自行取 Label 名稱,只要符合原始輸入的 Binary file的程式行為即可。

Page 31: Introduction to C Programming

評分方式與繳交期限Grading policy & Deadline

Page 32: Introduction to C Programming

Grading policy• 運算類指令: 70%• Load/Store類指令: 15%• Branch類與軟體中斷指令: 15%

• Bonus-1-Live coding: 10%• Bonus-2-Disassembler: 5%

Page 33: Introduction to C Programming

Deadline

• 2013/01/24• Final Project不接受補交,若當天不能來Demo的人請先寄信過來提早 Demo。