Download presentation
Presentation is loading. Please wait.
1
開放電腦計劃 報告人:陳鍾誠 2011 年 8 月 20 日 台灣開源人年會 COSCUP 2011 – 中研院
本文件採用創作共用 (Creative Common) 3.0 版的 姓名標示 授權條款
2
開放電腦計畫 -- 動機 學術界的一個重要任務 將工業技術研究清楚,並且寫成書籍或技術報告。 讓學生能習得重要的技術,理解工業結構與原理。
3
開放電腦計畫 -- 原則 採用 KISS (Keep It Simple and Stupid) 原則,越簡單越好。
不需要創新,盡可能採用成熟的舊技術。 重視原理、文件、而非程式技術
4
開放電腦計畫 -- 目標 設計一台完整的「開放原始碼電腦」,從軟體到硬體通通都是開放原始碼的。
CPU 、主機板、虛擬機、組譯器、編譯器、連結器、嵌入式作業系統、作業系統
5
開放電腦計畫 – 架構 CC1 (編譯器) AS1 (組譯器) LD1 (連結器) 作業系統 EOS1 OS1 硬體層 Board1 VM1
組合語言 (*.as1) 目的碼 (*.obj1) CC1 (編譯器) AS1 (組譯器) LD1 (連結器) 目的碼 (*.obj1) 作業系統 EOS1 OS1 硬體層 Board1 VM1 虛擬機 CPU1
6
開放電腦計畫 -- 子專案
7
開放電腦計畫 -- 基礎 2010 年出版了系統程式一書 定義了 實作了 CPU0 : 處理器 VM0 : 虛擬機 AS0 : 組譯器
C0C : 編譯器
8
開放電腦計畫 – 現況 處理器 虛擬機 組譯器 連結器: 編譯器 作業系統 CPU0 CPU1 規格確定
CPU1 Verilog 實作 研究中 虛擬機 VM0 VM1 已完成 組譯器 AS0 AS1 已完成 連結器: 尚未開始,目前先將全部程式連接起來組譯,暫時不需連結。 編譯器 C0C CC1 已完成:剖析器、語意分析、符號表 撰寫中:程式碼產生 作業系統 eos0:已完成 兩個行程切換 (74 行 CPU1 的組合語言) eos1:尚未開始 os1:尚未開始
9
開放電腦計畫 – 專案建置
10
開放電腦計畫 – CPU1 位址線 資料線 暫存器單元 R0=0 R12=SW IR ALU 算術邏輯單元 控制單元 內部匯流排 Bus
R14 = LR 輸出入單元 MDR MAR R15 = PC R13=SP … R1
11
CPU1 -- 暫存器 R0 R1-R15 唯讀暫存器。R0的值永遠都是常數零。 15 個可存取暫存器
R12:狀態暫存器 (Status Word, SW) R13:堆疊暫存器 (Stack Pointer Register, SP) R14:連結暫存器 (Link Register, LR) R15:程式計數器 (Program Counter, PC)
12
CPU1 – 指令集 包含四大類的指令 載入儲存 : LD, ST, … 運算指令 : ADD, SUB, XOR, SHL, ROL, …
跳躍指令 : JMP, JGT, JGE, CALL, INT 堆疊指令 : PUSH, POP, …
13
CPU1 – 指令格式 A 型 L 型 J 型 OP Cx (24 bits) Ra Rb Rc Cx (16 bits)
31-24 23-20 19-16 23-0 11-0 15-12 15-0 Cx (12 bits)
14
CPU1 – 載入儲存指令
15
CPU1 – 運算指令
16
CPU1 – 跳躍指令
17
CPU1 – 堆疊指令
18
CPU1 – 程式、編碼與執行 001F0028 002F0020 A C 26FFFFEC 2C000000 記憶體 ALU (加法運算) 暫存器 IR= C (JGT EXIT) PC= 0000 0004 0008 000C 0010 0014 0018 001C 0020 0024 0028 002C 位址 LD R1, SUM LD R2, I LDI R3, 10 LDI R4, 1 CMP R2, R3 JGT EXIT ADD R1, R2, R1 ADD R2, R4, R2 JMP FOR RET RESW 1 WORD 0 程式 FOR: EXIT: 位址匯流排 資料匯流排 控制匯流排
19
CPU1 的組合語言範例 sum = 1+2+….+10 LD R1, sum LD R2, i LDI R3, 10 LDI R4, 1
FOR: CMP R2, R3 JGT EXIT ADD R1, R2, R1 ADD R2, R4, R2 JMP FOR EXIT: RET i: RESW 1 sum: WORD 0
20
開放電腦計畫 – AS1 組譯器
21
開放電腦計畫 – VM1 虛擬機
22
開放電腦計畫 – EOS0 最小作業系統
23
EOS0 – 兩行程不斷切換
24
EOS0 – 組譯
25
EOS0 – 執行 指令:vm1 eos0.obj1 10 說明: 用虛擬機 vm1 執行 eos0, 每 10 個指令切換一次。
26
開放電腦計畫 – 編譯器 CC1
27
C1 語言範例 – sum.c1 int main() { int s = sum(10); return s; }
int sum(int n) { int i, s; for (i=1; i<=10; i++) s += i;
28
C1 語言範例 – sum.c1 剖析結果 …
29
C1 語言的 EBNF 語法 PROG = (STRUCT | METHOD | DECL ; )*
METHOD = ETYPE ** ID(PARAM_LIST?) BLOCK STRUCT = struct ID { DECL_LIST ; } BLOCK = { BASE* } BASE = IF | FOR | WHILE | BLOCK | STMT ; IF = if (EXP) BASE (else BASE)? FOR = for (STMT ; EXP ; STMT) BASE WHILE = while (EXP) BASE STMT = return EXP | DECL | PATH (EXP_LIST) | PATH = EXP | PATH OP1 VAR = ** ID ([ integer ])* (= EXP)? EXP = TERM (OP2 TERM)? TERM = ( EXP (OP2 EXP)? ) | CINT | CFLOAT | CSTR | PATH PATH = ATOM ((.|->) ATOM)* ATOM = ID (([ EXP ])* |( EXP_LIST? )) DECL = ETYPE VAR_LIST PARAM = ETYPE VAR VAR_LIST = VAR (, VAR)* EXP_LIST = EXP (, EXP)* DECL_LIST = DECL (; DECL)* PARAM_LIST = PARAM (, PARAM)* ETYPE = (byte | char | int | float | ID)
30
開放電腦計畫 – 已完成事項 AS1 組譯器 VM1 虛擬機 CC1 剖析器 + 語意分析 EOS0 最小嵌入式作業系統 (兩行程切換)
31
開放電腦計畫 – 後續工作 (程式部份) 軟體部份 硬體部份 完成編譯器 CC1 的程式碼產生動作
撰寫 EOS1 嵌入式作業系統 (參考 Jserv 的 CuRT) 撰寫 OS1 作業系統 (參考 UNIX v6) 撰寫 LD1 連結器 (非必要) 撰寫 CI1 解譯器 (非必要) 硬體部份 用 Verilog 設計 CPU1 在 Altera 的板子上實測 CPU1 將 Arduino 的 CPU 換為 FPGA,並燒入 CPU1
32
開放電腦計畫 – 後續工作 (文件部份) 撰寫下列書籍 修改下列書籍 編譯器 – 理論與實務 作業系統 – 理論與實務
計算機結構 – 理論與實務 修改下列書籍 系統程式 – 理論與實務
33
開放電腦計畫 – 相關資源 PDP11 /UNIX v6 相關資源
Commentary on the Sixth Edition UNIX Operating System UNIX xv6 (6.828: Operating System Engineering) UCore (中國大陸清華大學修改 UNIX xv6 之後的版本) TinyCC 系統程式 (書籍網站)
34
講者資訊 金門大學 資訊工程系 助理教授 陳鍾誠
Facebook : 個人網站: 開放電腦計畫: 開放電腦計畫 facebook 社團: 網路大學:
Similar presentations