如何在我的世界里打造一台计算机,在《我的世界》里从零打造一台计算机有多难?...
一塊小小的 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 計算機的開發,作為《網絡虛擬環境與計算機應用》這門課的項目來做的。
從他對技術細節的解讀來看,那時的季文翰,已經硬件和軟件上擁有無比充分的準備。
普通人的話,可能了解邏輯電路的基礎。普通紅石玩家的話,可以把邏輯電路的基礎知識,用來搭建簡單或復雜的紅石電路。
高階紅石玩家,也曾經在季文瀚的項目開始之前,造出過計算器。
但制造一臺計算機,并沒有多少人敢想。季文翰不但想到,還用了一整年去實現,幾近完成。
畢竟,如果有個容量驚人的大腦,總歸要拿來用的吧。
總結
以上是生活随笔為你收集整理的如何在我的世界里打造一台计算机,在《我的世界》里从零打造一台计算机有多难?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教小学四年级的计算机,小学四年级微机教学
- 下一篇: 计算机里libcurl.dll,Upda