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