【主要目標】
曾幾何時,在我父輩的那個年代,大家的條件只夠搗鼓點晶體管和半導體的時候,玩點炫酷的電路制作的理工男叫“無線電發燒友”。在我年輕的時候,各種攢機文化興盛的時候,對于新技術熾熱愛好的技術男叫“電腦愛好者”。在今天這個計算設備無所不在,除了臺式機,還有更多的筆記本,平板、手機這樣的計算時代,我們新一代的極客宅男,搗鼓點什么有趣的玩意呢?
來, 造個計算機吧!
造一臺計算機,聽起來似乎是一件平常我們不太去想的事情,因為在大學里學計算機的時候,沒有人告訴我們的專業是要造一臺計算機。在學習計算機的過程中,很多的人識木而不知林,埋頭于程序設計中,未曾停下來欣賞一個漂亮的計算機系統的美景。其實,學習計算機最好的方法就是親自動手,從零開始構建屬于我們自己的計算機系統,盡管由于現實的條件因素,我們沒有辦法造一臺功能強大的計算機。然而,就像雖然沒有條件造一臺真正的汽車,但這并不影響我們造個車模。
在本次的實驗中,我們將嘗試如何從基本的邏輯門開始一步步構建一個模型級的計算機系統。
希望能夠在大一或者大二的學生,通過自已來動手實現,主要涉及的計算機相關課程包括:
計算機簡介、編程語言(高級語言)、數據結構、計算機組成原理、數字電路、VHDL、匯編語言、單片機、編譯原理、操作系統等
動手實踐有利于為上述課程學習打下基礎,未來有利于培養整體計算機系統架構的視野。
主要分成兩個大的階段:
一、硬件實現階段
我個人覺得學習要想真正掌握,必須自已親自動手實踐。因此對于硬件部分,目前的想法是通過對硬件電路的設計和學習,親自設計一個簡單的計算機系統,即上圖中藍色的部分。 想得是最原始的類似牛郎星那種計算機,就是只完成核心的CPU和簡單的外圍電路設計,然后能夠進行機器語言級的運算。
這部分的主要工作包括:
1)設計CPU和內存
計算機的CPU和內存作為計算的核心是主要的工作量, 其中最核心的是牽涉到時鐘問題,需要考慮同步
2) 設計整體計算機結構
在這個整體結構里面,CPU和內存解決以后,主要的問題在于通過FPGA板子與外設進行連接的驅動程序的編寫,主要包括,與顯示屏的接口,與鍵盤的接口,外存的讀寫等等。
1-2個月
設計ALU和內存單元
購買FPGA開發板
學習組合電器和時序電路的設計
學習Verilog設計
進行組合邏輯和時序邏輯元器件的設計
2-3月
計算機系統結構設計和實現,主要包括
(1) 設計CPU
(2) 設計輸入/輸出
(3) 總體系統結構(包括外圍電路)設計
(4) 工具和元器件的購買
(5) 實際調試和實現。
二、軟件實現階段
軟件部分對應是紅色部分,主要通過一種高級語言實現下面的各個編譯器,然后在硬件上是通過直接用機器語言寫一個對該高級語言的編譯器?還是只需要實現匯編語言的,其它的想辦法再采用上層的語言交叉編譯上機器上。
1)實現匯編編譯器,把asm轉換成0101
這是軟件最底層的問題,是上面鏈式反應最后的一環,實現相對簡單
2) 實現vm編譯器,把vm轉換成asm
把書上提到的虛擬機的vm語言實現一下
3) 實現高級語言編譯器,把Jack語言轉換成vm
這部分由于牽涉到高級語言的實現,所以代碼會相對復雜一些,需要花得時間較長,
4) 實現基于Jack語言的操作系統
這個操作系統完全是基于虛擬機的,不需要考慮實模式、保護模式等。
在操作系統里面需要實現基本的數學操作、圖形操作,可以在上面編制一些經典的經白機游戲。
1周
實現匯編編譯器
2周
實現vm編譯器
1~2個月
實現Jack編譯器
1~2個月
實現JackOS系統
【費用預算】
軟件部分只需要自已有計算機即可,不需要費用,主要費用在于硬件,總費用約在500塊左右。
1 開發板購買 (400)
考慮到學習的目的,購買專門的學習板,考慮采用相對便宜的Altera公司的,帶sd的最好,省得自已還需要再外接,焊接都比較麻煩
2 工具購買 (100~150)
一些常用的工具和耗材,
(1) 萬用表(30)
(3) 電烙鐵 (由于需要自已焊接外圍電路,需要稍發的電烙鐵,加烙鐵架子30)
(4) 日常手工工具(各種螺絲刀,小鉗子,鑷子50)
3 耗材和元器件購買 (50)
(焊錫、助焊劑、烙鐵頭、杜邦線、排線、電工膠帶、電阻、LED指示燈、開關、面包板等)