天天看點

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

栗子 曉查

量子位 報道 | 公衆号 QbitAI

一塊小小的CPU裡有多少個半導體?幾十億個。

單槍匹馬造出一個CPU乃至完整的電腦需要多長時間?有位大牛在《我的世界》遊戲裡用實際行動回答了這個問題:可能要花費一年多。

這篇造計算機的教程一經轉載就在知乎上火了。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...
在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

這并不是一篇遊戲攻略,而是來自複旦大學的季文瀚,寫的一篇課程論文。他在大二時就有了大膽的設想,經過一年的精心營造,建起了一個計算機雛形,取名Alpha21016。

雖然它不能與現實中的計算機相比,隻能實作一些簡單的功能,但這台計算機體積驚人,光看它複雜的結構就已經能感受工程量的巨大。

有網友感歎,發課程論文可惜了,簡直可以發學術論文啊。

這台計算機能做什麼

季文瀚計算機使用的是哈佛結構,而非更常見的馮·諾依曼結構。程式儲存器和資料儲存器分開放置。程式儲存器1kb,資料儲存器0.5kb。

它可以實作各種函數運算:加減乘除、三角函數還有矩陣運算。它包含一個16bit的CPU和一個32bit的浮點運算單元 (FPU) 。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

從硬體上看,它是個超大規模內建電路,邏輯門總數大概在5萬-10萬門之間。光是存儲器堆疊起來就有8層。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

要造出這樣一台計算機,數字電路、微機原理、彙編語言、編譯原理都不能少。想想你挂過哪幾門課,從學會到熟練運用就更難了。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

有了專業知識的支援,就能将計算機拆解成基本的部件。

我們都知道計算機的基礎是數字電路,數字電路的基礎是“門”,季文瀚用遊戲裡基本的“紅石電路”搭建出了邏輯門。

從邏輯門出發,再搭建出組合電路、時序電路、觸發器,有了這些就能組成CPU的一些基本單元,最終造出整個計算機。

現實世界中,半導體是數字電路的基礎;在《我的世界》中,紅石電路是構成複雜電路的基本單元。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

紅石電路玩家,隻用火把和方塊,就能造出基本的邏輯門:或門和非門。或門和非門的組合可以造出與門、異或門等任意邏輯門。

但僅僅知道怎麼制造邏輯門離造出計算機還很遠,可能大緻相當于造出漢字筆畫到寫出《紅樓夢》的距離。

季文瀚先給自己的CPU架構畫了一個草圖:

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

其中每一個方框都代表一個或若幹個硬體單元,小一點的大約一兩百個門電路,大的有幾千個門電路。這個密密麻麻的部分,也隻是架構的右半部分而已:

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

知道了CPU的基本架構,再按照架構圖分别造出每個部分,比如CPU的重要子產品“算數邏輯單元”(ALU)和“指令寄存器”(IR),工程量很大。

算數邏輯單元還能進一步拆解,它的加法器由數個全加器組成,上面基本的邏輯門可以組成加法器中最基本的全加器 (下圖) 。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

全加器也是計算機的一個核心部件。

同時,《我的世界》還提供的基于活塞機械的斷路,用信号控制電路的通斷,也就是繼電器。利用繼電器和邏輯門的組合可以造出存儲器。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

電腦→單片機→計算機

大概是因為太複雜,季文瀚一開始也沒想直接搭個計算機。

最初,他的目标是造出一台16 bit的簡單電腦。

但做到一半,他就覺得可以實作更複雜的東西,于是想改成單片機:這是具有“圖靈完備性”,可以執行一切計算機程式的簡單計算機。

他規劃了指令集架構,儲存器架構,以及指令發射方式等等。

後來,觸發器、可讀寫儲存器、緩沖隊列等等重要電路,季文瀚都設計成功了。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

有了這些,少年又做了更雄偉的計劃:做個16 bit的CPU。

CPU旁邊,還有一個包含超越函數的單精度32 bit浮點處理器 (FPU) 。

這裡,電腦作為片外系統,并沒有被抛棄。季文瀚把16 bit電腦,改成了完全時序邏輯電路控制、且有溢出判斷的電腦——這在Minecraft紅石電路玩家裡,已是前所未有。

它借用CPU的ALU部分進行運算,并經過總線傳輸資料。

CPU和電腦的大部分硬體,都在這張表格裡:

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

表上的40個硬體,除了指令譯碼器、指令發射端、異常中斷響應沒有做完,其他都做好了。還有一些小的硬體單元沒有列出來。

目前,CPU的ALU、主儲存器、和寄存器等EU部分已經完工,内部環狀總線已竣工,CU部分,也就是最繁瑣的部分,還沒有完工。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

肉眼可見的威力

季文瀚說,雖然還沒完全竣工,但CPU已經可以執行許多種機器指令 (以MOV為主) :通用寄存器指派,按字/位元組+立即數/間接/直接尋址。

其中,最容易用肉眼感受到威力的,還是借用CPU的ALU完成運算的電腦。

他在視訊裡展現了加減乘除,正餘弦,以及平方根的計算。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

從養着小豬的地方走樓梯下來,就是電腦的所在地了。這裡有兩排按鈕,還有顯示屏,如上圖。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

螢幕後面,可以看到運轉的電路。

先做加減乘除。比如加法:

減法也是同理。隻不過,負号和減号在這裡分成了兩個按鈕。

乘法和除法的運算量比較大:三位數乘三位數,大概需要20秒;除法更慢一些,電腦還會卡。

下圖就是除法,因為打了反除号 (\) ,是以被除數在右邊。左下是商,右下是餘數。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

空間限制了算力,是以電腦要有溢出判斷,超過±32627的範圍就會報錯,顯示“E”。

不論是輸入的數還是計算結果,超出範圍都會報錯:

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

除以“0”,也會報錯。

注意,計算機用二進制來計算,算好之後還要從二進制轉成十進制,才是最終的答案。這裡用到了BCD/BIN轉換算法,把二進制BIN碼,轉成十進制BCD碼。

四則運算做完了,還有正餘弦,用的是Cordic旋轉疊代算法:

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

需要多次疊代,是以運算比較慢,大概花了兩分鐘。

相比之下開根号就快許多,用的是快速平方根算法:

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

20秒 (就) 開好了。

計算能力就展示到這裡。

而機智的你可能已經也感受到了,顯示器對于一台計算機有多重要。那麼:

顯示器怎麼做?

遊戲空間太狹窄,造顯示卡是不現實的:2×2個紅石燈,就是遊戲能控制的最小像素了。

是以,季文瀚做了字元顯示器。

首先,用七段顯示器來表示數字。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

△一個“日”字,是7根小棒組成的

比如,“4”就有左上、右上、中、右下,一共四根小棒。

每根小棒又由三個方塊組成。把這些方塊的活塞往回抽,就顯示出凹陷的“4”了。

而每個十進制數,都可以對應二進制的四位數,比如3是0011,9是1001。輸入二進制數,螢幕就能顯示成十進制。

數字搞定了,還有其他字元。季文瀚用了自己設計的縮減版ASCII碼,隻有不到64個字元:

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

給每個字元編個号:0,1,2,…,63。每個号碼,都可以轉成二進制數00000-111111。

然後,顯示出來長這樣:

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

打開夜視,螢火一般,美不勝收。

其實,這些字是“印”在了顯示器的鍵盤上,白天長這樣:

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

也就是說,計算機有了,顯示器有了,鍵盤也有了。

而這樣的傑作,居然來自一位“業餘選手”。

“我學的不是計算機”

現在來回顧一下,從邏輯門到計算機,都要經曆什麼:

或門,非門

→與門,異或門

→全加器,信号長度轉換器,多态選擇器,儲存器單元,譯碼器單元,求補碼單元,移位器單元

→可讀寫儲存器,譯碼器,加法器,移位器,時鐘發生器

→加減法器,乘法器,除法器,可讀寫儲存器陣列,寄存器,程式計數器

→總線,ALU,CU

→計算機

令人意外的是,造出這項複雜工程的季文瀚,是複旦大學2011級生命科學學院的大學生,沒有受過系統地計算機科學專業教育。他說,看到國外玩家的作品很感興趣,才自學了一些專業課。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

大二便啟動了Alpha21016計算機的開發,作為《網絡虛拟環境與計算機應用》這門課的項目來做的。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

從他對技術細節的解讀來看,那時的季文瀚,已經硬體和軟體上擁有無比充分的準備。

普通人的話,可能了解邏輯電路的基礎。普通紅石玩家的話,可以把邏輯電路的基礎知識,用來搭建簡單或複雜的紅石電路。

高階紅石玩家,也曾經在季文瀚的項目開始之前,造出過電腦。

但制造一台計算機,并沒有多少人敢想。季文瀚不但想到,還用了一整年去實作,幾近完成。

畢竟,如果有個容量驚人的大腦,總歸要拿來用的吧。

在《我的世界》裡從零打造一台計算機有多難?複旦大學生大神花費了一年心血...

技術部落格原文傳送門:

​​http://blog.renren.com/blog/263123705/911088369​​

一期視訊傳送門:

​​​https://v.youku.com/v_show/id_XNTkyNTg0NTEy.html​​

二期視訊傳送門:

​​​https://www.bilibili.com/video/av4221161/​​

— 完 —

繼續閱讀