你們打游戲的時(shí)候
有沒有想過搞一個(gè)“大新聞”
6月是個(gè)畢業(yè)季,中高考的同學(xué)歷經(jīng)磨難浴火重生,大學(xué)的同學(xué)們也為各種論文焦頭爛額。為了寫一篇正兒八經(jīng),蘊(yùn)含無限道理的學(xué)術(shù)論文,超模君曾經(jīng)熬掉了多少寶貝的頭發(fā)……
為了緩解論文壓力的折磨,超模君去下了一款叫《我的世界》(Minecraft)的高自由沙盒游戲。但作為游戲菜雞,造物工程量巨大,耗時(shí)遙遙無期。想在游戲中造出一個(gè)現(xiàn)實(shí)事物的想法就這樣“流產(chǎn)”了……
然而,一位來自復(fù)旦大學(xué)的MC紅石電路玩家季文瀚卻能將游戲與課程論文相結(jié)合,耗時(shí)一年多完成一項(xiàng)造物工程——電腦。
也就意味著,他必須得將計(jì)算機(jī)中的所有硬件做出來才可以完成一臺(tái)完整可使用的電腦。
擁有力量的少年
當(dāng)然,想要在游戲中造出這樣一臺(tái)計(jì)算機(jī),在考試中折磨大家的編譯原理和微機(jī)原理,還有數(shù)字電路及匯編語言通通都不能少。
順便讓我們來看看從邏輯門到計(jì)算機(jī),都要經(jīng)歷些什么。
邏輯門:
或門,非門→或非門,與門→與非門,異或門算法硬件:
譯碼器,位數(shù)判斷器,加法器→乘法器,加法器,位移器→開方算法,16bit除法器,單精度浮點(diǎn)加法,儲(chǔ)存器計(jì)算機(jī):
基本邏輯門→復(fù)雜邏輯門→全加器,信號(hào)長度轉(zhuǎn)換器,多態(tài)選擇器,儲(chǔ)存單元,譯碼器單元,求補(bǔ)碼單元,位移器單元→可讀寫儲(chǔ)存器,譯碼器,加法器,位移器,時(shí)鐘發(fā)生器→加減法器,乘法器,除法器,可讀寫儲(chǔ)存器陣列,寄存器,程序計(jì)數(shù)器→總數(shù),ALU,CU→計(jì)算機(jī)
要造成一個(gè)完整的計(jì)算機(jī),真的要經(jīng)歷很多工程,也是十分復(fù)雜的。在游戲中,這些工程的復(fù)雜性可是會(huì)被放大多倍的。超模君真心表示十分佩服ORZ
另外,從上面我們可以看到,邏輯門似乎是組成計(jì)算機(jī)最基礎(chǔ),最簡單又不可或缺的部分。
邏輯門的實(shí)現(xiàn)
邏輯門是在集成電路上的基本組件,它又稱“數(shù)學(xué)邏輯電路基本單元”,可以組合使用實(shí)現(xiàn)更為復(fù)雜的邏輯運(yùn)算?!盎颉遍T和“非”門在數(shù)字電路中最為常見。
實(shí)際上Minecraft游戲制作者也只設(shè)計(jì)了這兩種能直接實(shí)現(xiàn)的邏輯門,但理論上說“或”門和“非”可以實(shí)現(xiàn)一切邏輯。季文瀚表示:“通過在空間上對(duì)或門和非門的組合排布就能實(shí)現(xiàn)更加復(fù)雜的邏輯門?!?/p>
他先用紅石火把被充能方塊熄滅的特性,也就是當(dāng)一個(gè)方塊被充能時(shí),其前后左右和上方的紅石火把會(huì)滅掉(變成低電平輸出),做出“非”門。
“或門就更簡單了”季文瀚如是說。只需要任意一個(gè)輸入端輸入信號(hào),輸出端就一定輸出信號(hào)。
做好了基本邏輯門就到了做復(fù)雜邏輯門的時(shí)間,與非門和異或門就可以上場了。
左邊是與非門 右邊是RS觸發(fā)器
做與非門時(shí)他將輸入端(紫色)連著兩個(gè)紅石火把,做成非門,而火把中間通著導(dǎo)線的是或門。而常見的與非門應(yīng)用也就是觸發(fā)器了,低電平有效,紫色輸入,橙色輸出,RSQQ非就隨便怎么分配了。所以用與非門構(gòu)造的RS觸發(fā)器和現(xiàn)實(shí)中基本一致。
異或門是數(shù)字電路里非常重要的一類復(fù)雜邏輯門,是構(gòu)造全加器以及一切具有ALU運(yùn)算器結(jié)構(gòu)單元的基礎(chǔ)。比較簡單的異或門設(shè)計(jì)就如下圖左右兩種。
左右是兩種不同的異或門
除了紅石導(dǎo)線外,左邊一種用到了活塞,火把和繼電器,則右邊只用了火把。這兩種都是國外玩家設(shè)計(jì)的,是目前設(shè)計(jì)出來的體積最小的異或門。一開始季文瀚設(shè)計(jì)出的異或門比這兩種體積還大一些。而基礎(chǔ)邏輯門的體積對(duì)計(jì)算機(jī)建設(shè)至關(guān)重要,稍微大一點(diǎn)整體結(jié)構(gòu)就將超過地圖加載范圍。
因此季文瀚表達(dá)了對(duì)國外玩家的感謝,因?yàn)闆]有國外高玩在基礎(chǔ)結(jié)構(gòu)上的設(shè)計(jì),他的工程就不可能實(shí)現(xiàn)。
以此上的思維類推,利用邏輯門的組合就可以設(shè)計(jì)適用于各種功能的信號(hào)結(jié)構(gòu),從而可以達(dá)到硬件算法的目的。
算法是硬件設(shè)計(jì)的靈魂
判斷一個(gè)計(jì)算機(jī)有沒有靈魂就要看看它的算法如何了。游戲中季文瀚設(shè)計(jì)的計(jì)算機(jī)那靈魂肯定是相當(dāng)?shù)淖?!加減法和乘法都可以完成,但大神表示:這些都沒什么特別的,重點(diǎn)還是后面幾個(gè)。
我們將目光聚集在他設(shè)計(jì)的運(yùn)算平臺(tái)上,在這里他將給我們展示完整的運(yùn)算過程和結(jié)果。
運(yùn)算平臺(tái)上養(yǎng)著只小豬
舉個(gè)栗子,季文瀚用的是Cordic旋轉(zhuǎn)迭代算法中的旋轉(zhuǎn)坐標(biāo)算法,來計(jì)算sin(24.8)。
因?yàn)樾枰啻蔚?,所以運(yùn)算很慢,得花130秒輸出sin值,再過10秒才能輸出cos值,而輸入角限制在0-83.88度之間。
后臺(tái)正余弦的運(yùn)算過程
計(jì)算出來的結(jié)果
既然他設(shè)計(jì)的算法可以完成,那肯定少不了其他必備的硬件。
從算術(shù)芯片到計(jì)算機(jī)
一個(gè)完整的計(jì)算機(jī)絕對(duì)少不了CPU,因此他決定先做一個(gè)CPU,畫出CPU的構(gòu)架圖。
構(gòu)架圖基本是按照實(shí)際距離做的,在計(jì)算機(jī)上方復(fù)式看到的結(jié)構(gòu)和架構(gòu)圖可以一一對(duì)應(yīng)。
做好CPU后,他就開始做剩下的功能結(jié)構(gòu)。例如可以看做是計(jì)算機(jī)最核心部件的全加器。
之前的異或門可以相當(dāng)于一個(gè)半加器,兩個(gè)半加器可以組成一個(gè)全加器。
但這種基于活塞的全加器不穩(wěn)定,所以季文瀚又做了另一種設(shè)計(jì)較為好的全加器。
最后做這個(gè)顯示器他耗費(fèi)了很長的時(shí)間,一開始的設(shè)計(jì)方案體積可是如今的3倍大。后來還是突發(fā)奇想才解決了不少技術(shù)問題,縮小體積并改為完全的時(shí)序控制。
令人敬佩的玩家
其實(shí)文章中記錄的也只是他工程中的小小小的一部分而已,真要說完季文瀚所做的技術(shù)細(xì)節(jié)和內(nèi)容,怕是要寫一本200多頁的書才可以。這一工程的問世,也不禁讓很多計(jì)算機(jī)專業(yè)的學(xué)生聞風(fēng)喪膽,有該專業(yè)表示“我可能學(xué)了個(gè)假的計(jì)算機(jī)專業(yè)”。
盡管這一路上很曲折,也有很多難題需要攻破,進(jìn)度十分緩慢??杉疚腻耘f沒有棄坑。因此這一“壯舉”在全世界MC紅石電路玩家還是首次
這種堅(jiān)持不懈的精神真是令超模君佩服,做到了我可能這輩子都做不到的事情,想必也是大部分MC玩家連想都沒敢想的事情……
玩游戲都想著學(xué)習(xí)
聯(lián)系客服