開放電腦計劃

開放電腦

簡介

函式庫

處理器

主機板

輸出入

虛擬機

組譯器

連結器

編譯器

嵌入式系統

作業系統

原始碼下載

文件下載

設計想法

訊息

相關網站

參考文獻

最新修改

簡體版

English

如果您是資工系畢業的學生,必然會上過「計算機結構、編譯器、作業系統、系統程式、組合語言」等等課程,這些課程都是設計出一台電腦所必需的基本課程。但是如果有人問您「您是否會設計電腦呢?」,相信大部分人的回答和我一樣:「我不會,也沒有設計過」。

光是設計一個作業系統,就得花上十年的工夫,遑論還要自己設計「CPU、匯流排、組譯器、編譯器、作業系統」等等。因此,我們都曾經有過這樣的夢想,然後在年紀越大,越來越瞭解整個工業結構之後,我們就放棄了這樣一個夢想,因為我們必須與現實妥協。

但是,身為一個大學教師,我有責任教導學生,告訴他們「電腦是怎麼做出來的」,因此我不自量力的提出了這樣一個計畫,那就是「開放電腦計畫」,我們將以「千里之行、始於足下」的精神,設計出一台全世界最簡單且清楚的「電腦」,包含「軟體與硬體」。

我們已經設計出了功能完整的「虛擬機器與組譯器」,以及過度簡化的「編譯器與軟體 CPU」。現在,我們將朝向一個更遠大的目標前進,那就是「設計一整台開放原始碼電腦」,這台電腦從「電路板、CPU、組譯器、編譯器到作業系統」,通通都會是開放原始碼的,我們必須告訴學生們,設計一台完整的電腦,並不只是一個夢想。

當然,以我們卑微的能力而言,這是一個可望而不可及的夢想,但現在有了開放原始碼作為後盾,我們的夢想將不在那麼的遙遠、那麼的令人害怕,我們正站在巨人的肩膀上,堅定的向前邁出重要的一步,我們將會設計一台完整的「開放原始碼電腦」,從軟體到硬體通通都是開放的,我們已經知道怎麼做了,我們正在努力的實現這個夢想。

我們所使用的開放原始碼資源,以及工作分配如下表所示。其中硬體的部分由李金譚老師負責指導,然後由林宗憲與專題學生實作,而軟體的部分則是由陳鍾誠自行撰寫或修改自開放原始碼,如此我們就可以得到一台從下到上完全開放原始碼的電腦。

元件 實現方式 設計方式 專案成品 負責人 狀態
CPU 硬體 FPGA+Verilog 自行撰寫 CPU1 陳鍾誠, 專題生 參考 RichardCPU1, 研究中
BUS+I/O 電路板 直接用 Altera-DE2 BOARD1 陳鍾誠 現有商品
虛擬機 C 語言 自行撰寫 VM1 陳鍾誠 已完成
組譯器 C 語言 自行撰寫 AS1 陳鍾誠 已完成
連結器 C 語言 自行撰寫 LD1 陳鍾誠 參考 Jserv 的 ndl
編譯器 C 語言 修改自 PCC CC1 陳鍾誠 參考 PCC
嵌入式作業系統 C 語言 自行撰寫 EOS1 陳鍾誠 參考 Jserv CuRT
作業系統 C 語言 修改自 UNIXxv6 OS1 陳鍾誠 研究修改中

我們認為這種開放原始碼電腦對學術界具有重要的貢獻,因為學術界的一個重要任務就是要將工業技術研究清楚,並且寫成書籍或技術報告,以便讓我們的學生能習得重要的工業技術,然後才能在產業界貢獻所長,讓我們的產業技術得以提升到更高的水平。也讓整個人類文明的知識得以有效的傳承下去。

為了完成這樣的計畫,我們必須有一些實現步驟,其中關於軟體的部分已經大致研究清楚了,問題應該不大,而對於硬體的部分則必須進一步進行規劃,我們的實現步驟大致如下。

硬體部份

  1. CPU0-Mini : 先使用 VHDL 設計出 CPU0 中的 LD, ST, ADD, JMP 等四個指令,以便設計出一個小型的 CPU,我們稱為 CPU0-Mini。設計好之後先在 Altera Quartus II 上模擬執行,成功後在 Altera 的 FPGA 板子上進行實體測試,最後用 FPGA 掛到 Arduino 上執行。
  2. CPU0 : 有了上述的經驗之後,就可以完整的設計出 CPU0 的所有指令 (36 個),然後同樣先在 Altera Quartus II 上模擬執行,成功後在 Altera 的 FPGA 板子上進行實體測試,最後用 FPGA 掛到 Arduino 上執行。

軟體部分

在上述硬體開發的同時,我們將進行軟體的開發,由於目前 CPU0 的虛擬機與組譯器都已經設計好了,因此只要再進行下列動作即可。

  1. cc0:(TinyCC 移植) 研究 TinyCC 並進行完整的文件說明,然後將 TinyCC 移植到 CPU0 的虛擬機上進行測試 (主要修改程式碼產生的部分)。同時修改其連結器的設計方式,以變建構出 LD0。
  2. os0 : (UNIXxv6 移植) 研究 UNIXxv6 並進行完整的文件說明,然後將 UNIXxv6 移植到 CPU0 的虛擬機上進行測試 (主要修改組合語言部分)。

軟體模擬整合

  1. Computer0:當軟硬體部分都好了之後,就可以利用 cc0 編譯 os0,然後將產生出的目的碼放到 BIO0 板子上的啟動區當中,進行最後的整合測試。完成的成品就是我們的終極產品 — Computer0 了。

結語

我們認為,設計一台開放原始碼電腦具有重要的意義,絕對不只是在「重新發明輪子」(Reinvent the wheel) 而已。或許這個計畫的產品在商業市場上沒有太大的競爭力,也不會讓我們賺到很多錢,因為所有的元件與程式都不是「成本最低化、效率最大化」的結果,但卻是設計最簡單,最容易理解的一台電腦。

我們大學資訊系教育的目標之一,就是為了要把知識傳承下去,讓我們的學生未來可以發明出更好的電腦,所以我們認為一台完全開放原始碼的電腦是具有重要的指標意義的。

如果我們的教授只是努力的去寫論文,發表論文,為了增加 SCI/EI 論文篇數而投注所有的心力,那我想這種大學教育是失敗的,我們需要一種更多元化的大學教育,我們需要以實作奠定教育的扎實基礎,我們需要允許很多老師與學生「重新去發明輪子」。只有透過重新發明輪子,我們才能造出更好的汽車。

藉由這個「開放電腦計畫」,我們要呼籲中華民國大學教育的主管階層,以及各位學術先進同仁們,不要只是一味的注重研究,一味的出版論文。創新型的論文研究固然重要,但是這一切必須建築在扎實的實作基礎上,我們不可能憑空創新,不可能靠論文振興國家的實力,除非我們具有堅強的實作基礎,然後將這些基礎傳承給我們的下一代,否則台灣的工業體質永遠都不可能有重大的提升,一味的追求論文與創新只會讓我們落入「新就是好」的迷思當中,我們必須要能體認到,大學教育並不只是為了寫論文而已。

對於美國而言,或許論文與創新是最重要的,但是對於像我們這樣的後進國家而言,技術報告、作品與書籍的重要性絕對不比論文更低,我們必須先學會先進國家的成熟技術,然後才能進一步談創新,否則我們的工業將始終建築在沙灘之上,海水一來就會垮掉了。

如果我們這一代人的論文很多,那只是用來滿足我們這一代學者的虛榮心而已,我們必須要盡到一個教師的任務,那就是「讓下一代比我們更厲害」,而我們必須做的事情,正是讓他們能更容易的理解當今的成熟技術,並且讓他們按照自己的興趣去發展。尊重他們多元化的能力與志向,不要再「獨尊論文與獨尊學業」了。下一代的天空,只能由他們自己去創造,但是我們必須作為他們的踏腳石,給他們堅實的立足點,讓他們邁向自己的未來。

參考文獻

  1. Google 工程師的開放電腦計畫 (感謝 Jserv 提供訊息) — https://github.com/swetland/cpu32
    • 包含 CPU 的 verilog 與組譯器的 C 語言程式。
  2. 開源電路板:Beagle Board — http://beagleboard.org/
  3. 開源電路板:Panda Board — http://www.pandaboard.org/
  4. 開源電路板:Arduino — http://www.arduino.cc/
  5. Arduino 中文站 — http://arduino.tw/
  6. 編譯器:TinyCC — http://bellard.org/tcc/
  7. 作業系統:UNIX xv6 — http://pdos.csail.mit.edu/6.828/xv6/
  8. 系統程式 (書籍網站) — http://sp1.wikidot.com/

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License