Presentation is loading. Please wait.

Presentation is loading. Please wait.

開放電腦計劃 報告人:陳鍾誠 2011 年 8 月 20 日 台灣開源人年會 COSCUP 2011 – 中研院

Similar presentations


Presentation on theme: "開放電腦計劃 報告人:陳鍾誠 2011 年 8 月 20 日 台灣開源人年會 COSCUP 2011 – 中研院"— Presentation transcript:

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 社團: 網路大學:


Download ppt "開放電腦計劃 報告人:陳鍾誠 2011 年 8 月 20 日 台灣開源人年會 COSCUP 2011 – 中研院"

Similar presentations


Ads by Google