1 / 33

Introduction to C Programming

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

ryann
Download Presentation

Introduction to C Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introduction to C Programming Final Project: LC-3 CPUControlUnit Simulator

  2. 題目簡介 Briefintroductiontotheproject

  3. LC-3 CPUControlUnit • 目標: • 用軟體實作LC-3 CPU的行為 • 自Binaryfile讀取指令 • 依序Fetch、Decode指令 • 再來若該指令有需要Evaluateaddress、Fetchoperand則Evaluateaddress、Fetchoperand • Execute該指令 • 將結果Store到Register或Memory。

  4. LC-3 CPUControlUnit • 會以輸入一個Binary file的方式作為input(讀取方式可參考C語言Ch8投影片讀取Binary file之方式) • 輸出結果是將每次指令單步執行(PC=PC+1)時,當下Register、Memory的值印出到檔案 • Memory大小是由題目指定的,可使用Array來模擬Memory • 關於LC-3 CPU控制單元的行為請參考LC-3Ch4投影片 • 關於LC-3每種指令的行為請參考LC-3 Ch5投影片 • 我們實際上不會實作全部的指令,要實作哪些指令、有哪些詳細的規格、配分在投影片後面會詳述

  5. 需要模擬的指令 Theinstructionswhichshouldbesimulated

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

  7. Load/Store指令(15%) • LOAD類 • LD • LDI • LDR • LEA • STORE類 • ST • STI • STR

  8. 分支類與軟體中斷指令(15%) • SoftwareInterrupt • TRAP • Return • RET • Unconditionalbranch • JMP • JSR • JSRR • Conditionalbranch • BR(n)(z)(p)

  9. 註:RET指令敘述 摘錄自”IntroductiontoComputerSystems”,PattandPatel,2ndEd.,p536

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

  11. 實作講解 Hintofimplementation

  12. 實作講解與範例 • 在實作的時候,基本上是按照下面這個流程圖來實作 • Step1:自我們提供的input.bin當中,每16-bit切出一道指令,將檔案中的指令全部收集 • Step2:將剛才收集到的指令依序放入你用軟體模擬的記憶體當中,從0x0030的位置開始依序放入 • Step3&4:模擬CPU行為、並把PC每移動一次時,Register和Memory的值印到檔案中

  13. 如何自Binaryfile讀取指令? • 真正編譯器編譯出的Binary file除了程式碼外,還會帶有相當多其他的資訊,在這邊就不詳加討論。 • 我們所提供的Binaryfile會是一個相當簡化的Binary file,裡頭只有指令的部份,是以0101的方式儲存,注意不是用純文字的方式儲存,所以你在讀取檔案的時候,必須要用Read Binary File的方式讀取。 • 若你要自Binaryfile當中讀取指令,你要以每16-bit為一個單位切出指令出來,然後把切出來的指令的值存起來,即可切出一道指令。

  14. CPUControlUnit模擬 • 在實作CPUControlUnit的時候,基本上是按照下面這張StateDiagram來用軟體實作,前段是Fetch與移動PC的部份、再來Decode,決定是屬於哪類指令,再來分別實作 圖片取自:”IntroductiontoComputerSystems”,PattandPatel,2ndEd.,投影片Ch4第22頁

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

  16. 範例:NOT指令 • 假設同學已經DecodeIR[15:12]的OPcode,知道這道指令是NOT,由下面的圖可看出,他是要把Sourceregister裡面的值拿出來取NOT,然後寫回Destinationregister裡。 Note: Src and Dstcould be the same register. 圖片取自:”IntroductiontoComputerSystems”,PattandPatel,2ndEd., 投影片Ch5第6頁

  17. 由於NOT指令只需要Fetch Operand、Execute和Store回RegisterFile,故我們在實作的時候只需要實作這些部分,你可以針對NOT指令的模擬寫一個emu_not如下: • 其中的fetch_not_operand、exec_not、store_not的內容在下幾頁投影片會解釋 • [註]:u16是我們範例程式中自行定義的:typedefunsignedshort,其長度為16-bit

  18. 首先,要先fetch這道指令的Operand,所以我們寫一個fetch_not_operand的函式,輸入參數為該道指令,回傳值為operand,operand是一個structure,裡面包含src1、src2和dst,在這個案例中,因為只有一個source register,所以只填入src1和dst。 • 我們把原本instruction中instr[8:6]的值取出來作為Sourceregister的編號,把instr[11:9]的值取出來作為Destinationregister的編號

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

  20. 最後,把NOT邏輯運算出來的結果,寫到RegisterFile當中的DestinationRegister。即完成此指令的行為模擬。最後,把NOT邏輯運算出來的結果,寫到RegisterFile當中的DestinationRegister。即完成此指令的行為模擬。 • [註] 我們有提供NOT指令的範例程式碼片段,你可以直接擷取此部份的程式碼到你自己的程式中,也可以自己實作。但是不論如何,最後Demo的時候你的程式必須也要能執行NOT指令

  21. 題目規格 Spec

  22. Spec • 輸入檔案會是一個簡化後的可執行檔,以二進位儲存資料的一個檔案。 • 你必須先將指令Load進來放到用軟體模擬的Memory的0x0030的地方,將每道指令依序放置(第一道指令在0x0030、第二道在0x0031等等依序排放) • 要執行的時候,自0x0030的指令開始執行(初始PC=0x0030),除非遇到Branch類指令,不然就是依序往下執行(PC=PC+1),遇到Branch類指令則依照Branch類指令的行為決定執行順序 • TRAP指令所定址的VectorAddress是從0x0070~0x007F

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

  24. Spec • 你要用軟體模擬的Memory大小請以0x0000~0x007F(請注意是16進位)為準,其中0x0000到0x002F是給保留給程式當做資料儲存用的,0x0030到0x006F是拿來存放程式碼的,0x0070到0x007F是拿來存放Trap的Vector內容的。在實作上,可用Array來模擬Memory即可,不需要模擬更細部的記憶體硬體行為。 • 不需要考慮真正LC-3當中Supervisormode和Non-supervisor mode的差別。 • 不需要考慮真正LC-3當中,對高位與低位Memoryspace的權限控制。 • 不需要考慮Hardware Interrupt的部份。 • 輸入檔案名稱為input.bin、輸出檔案名稱為output.txt,檔名直接寫定在程式碼當中即可。

  25. Spec • 由於範例input是以binary的形式存在,所以不方便直接顯示,我們下面的內容是寫出input.bin其原始組合語言的方式來顯示,並且顯示出當輸入這個input.bin時,你應該寫入到output.txt的內容。範例input.bin和範例output.txt之後會在iLMS上公布。 • 你的程式的輸出格式必須依照Spec上所規定的格式輸出 • 範例input.bin的組合語言內容: • NOTr1,r0 • NOTr2,r0

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

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

  28. 加分題 Bonus

  29. Bonus-1:Livecoding • 我們會在Demo現場新增新的Instruction type,當場公布該新增的Instruction之Encode方式與指令邏輯行為,有要DemoBonus-1的人會需助教面前現場修改自己的程式碼,若在10分鐘內可以順利讀取並且模擬新增的Instruction type的行為,即可取得此Bonus分數。若超過10分鐘還沒寫出來,則就無法取得此Bonus分數。 • Livecoding環境可使用自己的筆電、遠端桌面或是工作站等熟悉的環境 • 要Demo Bonus-1的人需要在填寫Demo timetable的時候就告知助教說要DemoBonus。

  30. Bonus-2:Disassembler 反組譯器 • 此部份為事先完成的,不是Live coding • 將輸入的Binaryfile,輸出成對應的組合語言程式碼 • 輸入檔案:Binaryfile • 輸出檔案:Assemblylanguagefile(純文字檔,內容是組合語言) • 裡面遇到Label的部份,在Generate組合語言檔案的時候,可自行取Label名稱,只要符合原始輸入的Binary file的程式行為即可。

  31. 評分方式與繳交期限 Gradingpolicy&Deadline

  32. Gradingpolicy • 運算類指令:70% • Load/Store類指令:15% • Branch類與軟體中斷指令:15% • Bonus-1-Livecoding:10% • Bonus-2-Disassembler:5%

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

More Related