如何製作一台計算機?
題主是大一CS專業的一個學生,突然產生一個想法,能不能用一年的時間做一台計算機?
查閱了一些資料,首先看到有人用邏輯電路在Minecraft里製作了一個小型計算機…於是我大大降低了做一個計算機的預期難度。但是看了一些計算機的歷史,卻發現無論是帕斯卡、萊布尼茨的機械式計算機,還是有人用晶體管和導線搭建的CPU 2-3MHz的計算機,都有著極高的複雜度…那麼三個人在一年內做出一台計算機有沒有可能?做出可以用機器語言編程序的機器有多難?註:並不打算使用諸如單片機晶元的任何技術黑匣子…
首先,題主要明確你要做的計算機包含哪些東西?看題主的意思似乎是只有一個CPU,實際上計算機還包括內存、外存、輸入輸出設備這些,不知道題主是否考慮過這些硬體的設計。
如果只設計CPU,那麼應該說,不太困難。
但如果題主是大一新生,那麼我覺得可能需要學習一些基礎課才行。
首先要學習的是電路基礎,包括模電(模擬電子技術)和數電(數字電路),其中模電如果時間有限可以不學,但數電是必須要學的。
學會了數電,就可以設計出寄存器、加法器了,並且應該掌握了門電路的使用,有了這些,如果動手能力足夠強,使用74xx系列的晶元設計一個簡易的計算器已經並不困難了,類似的實驗很多本科生都做過,我也做過。
第二步:題主要學習的是計算機介面技術,以及彙編語言,懂得如何把數字信號輸入輸出(通過PC調試器或者別的東西)。
第三步:學習計算機組成原理、編譯原理等內容,搞清楚微指令的概念,剩下的工作就是設計一套合適的指令集和微指令,把各種門電路結合到一起就可以了。
當然,還有一些周邊的東西也需要學,不過這些東西也可以用現成的,比如時鐘信號怎麼處理等等(模電會有介紹),自己買一個做好的時鐘也是可以的。
設計一個CPU,並不是一個特別高深的東西,一個合格的計算機專業的本科生,基本上都能學習到設計CPU的基礎知識。設計CPU的困難點在於:它太複雜了,你畫一個電路圖,上面如果有10個門,那麼很簡單,有100個,就有點麻煩了,如果有1000個、10000個呢?
這東西跟編程是一個道理,寫出1000行的程序的難度,和寫100行的難度是不一樣的,一個人獨立寫10000行,就算很厲害了,這都是一個道理。
就是你需要有一個整體感,能對整個框架和細節都了解清楚。
設計一個加法器、乘法器、寄存器,都不困難,但如果把幾個、十幾個加法器、乘法器、寄存器都組合到一塊,就困難了。
真實的CPU在設計上,還有一個困難就是高頻下工作的問題,但如果CPU的主頻在10Mhz以下(如果晶元不好就按1MHz來設計),那麼就暫時不會遇到這種問題。
另外,我見過有本科生設計出來過CPU,指令集是模仿8086的,能運行彙編指令,百度以下應該有類似的新聞,可能還不止一個。
-------------------------------------------------------
我記得我上大學那會就聽說有人用TTL電路做了一個模擬CPU,可惜鏈接沒有找到,找到一個老外的:耐心很重要 看國外牛人自己動手在家裡搭建CPU_愛活網 Evolife.cn
只要有耐心,我認為計算機本科階段的知識是足夠的。
另外,與CPU相關的還有中斷控制器、內存控制器,這些東西也是要考慮的,以及I/O匯流排等等,這需要對計算機硬體有足夠的了解。
另外,我不推薦用FPGA,用FPGA最簡答,但沒什麼成就感,要知道從一個加法器做起還是蠻有成就感的。可以參考一下這個項目: Homebrew CPU Home Page
[知乎起手式]
竟然沒有人提 From Nand to Tetris(Coursera - Free Online Courses From Top Universities) 這門課?這門課 PART I 的目標是從 NAND Gate 出發,最後搭出一個運行在模擬器上的計算機並且用 ASM 編程。PART II 的目標是在 PART I 的基礎上造一個高級語言的編譯器然後再用它來寫一個俄羅斯方塊。看起來很好玩啊有沒有!因為這門課涉獵廣泛所以可以預見深度必然不足,所以在玩這門課的同時也不要把計算機組成、計算機體系結構這些很重要的課落下了。三個人一年能不能做到這個很難說,但是「多快好省」是幻覺這個錯不了。
如果覺得老師上課講得不好(可是我一直都覺得蛤工大已經很高上大了誒),可以參考下:- 清華、北大的公開課
- UCB 的 CS61C(Machine Structures)
- CMU 的 15-213(Introduction to Computer Systems)
- CMU 的 18-447(Introduction to Computer Architecture)
- Coursera 上面 Princeton 的 Computer Architecture
google CMU ECE 18447, 所有slides, labs網上都能搜到,youtube有所有lectures的視頻,需要組成原理和數電知識做先修。整個labs你能堅持下來,可以搞出簡單cpu了。然後用verilog在fpga上實現,自己加些io。part time一年搞定應該沒啥問題
不難。
CPU方面可以看一下我們大二上學期的計算機組成原理課程要求。
用Verilog做出來一個單周期CPU意味著你得重修。從門電路畫圖搭起單周期CPU?那個不過僅僅是第三次作業罷了。
做出來一個支持10條指令的流水線CPU也意味著你這門課程才僅僅是及格而已。
下面附上課程要求一張。圖中不包括P1、P2、P3,簡單的說一下,P1包括從門電路開始搭建加法器、ALU、GPR寄存器等,P2較水,學習彙編語言的使用,P3則是用P1的部件搭建一個支持10條指令的單周期CPU。
你數電模電好好學的話做個小 CPU 出來應該問題不大。。。至少能做個 ALU 出來是肯定的。。。
先看一下《編碼的奧秘》之類的書籍,大概了解一下指令是怎麼控制硬體的,估算一下難度,然後就是數字電路等。建議使用74系列,純晶體管的話工程太龐大了。指令集可以參考現有的計算機或單片機的指令集,軟體方面,可以自己寫一個簡單的彙編器,高級語言編譯器的話可以移植現有的,比如TCC,LCC。說實話,我也有這方面的想法,但我打算只做CPU。個人認為三年時間足夠。
建議讀完這本書,先對計算機有個基本的了解
用fpga現成的多的去了。
推薦你一本書&
計算系統要素 the elements of computer systems
我不認為Verilog或者類似的語言反應了製作計算機的真實難度,也不認為和計算機有什麼關係。如果可以,學習下圖靈機吧。
推薦閱讀:
※歷史上,有哪些計算機bug造成過極嚴重的經濟、社會影響?
※MacBook Pro 玩pc遊戲如何?
※世界上有哪些開源組織?他們的運營模式是怎樣的?
※有哪位大神能用簡單的語言,解釋下硬體和軟體是如何結合的,代碼如何控制硬體機器?
※頂級配置的組裝電腦,實際性能表現也一定是頂級的嗎?