【心得】紅石模電的設計與運用

這篇文章算是作者我對製作紅石模電的一些心得分享,同時也因為討論紅石模電的玩家較少,導致這一領域對入門者來說缺乏可參考的數據,希望這篇文章可幫助入門者了解到紅石模電的基礎設計重點,也希望因此吸引更多人願意進入這個領域研究。

首先來簡單說明一下紅石模電是什麼,模電 (模擬電路/模擬電路) 是相對於數電 (數字電路) 的一個領域,跟數電只在 0 和 1 的信號強度下運算不同,模電是對連續強度的信號進行處理,而 Minecraft 中的紅石信號強度不只有 0 和 1 而已,也因此才會出現紅石模電這一領域。若某個紅石模電只處理 0~15 紅石強度的信號,則會將此模電稱作弱模電,反之若可處理超過 15 紅石強度的信號,則會稱作強模電,而本文章所討論的是弱模電。有一點需要特別說明的是,紅石模電中的信號強度是有能階的,這與現實世界中的模電並不相同,因此不該將兩者混為一談,兩者間的觀念更不該直接互通,由於作者我並沒有學習過現實世界中的模電,因此下面文章中的用詞與觀念可能會跟現實世界中的模電學有出入,所以不要太認真地將作者我說的東西去跟現實中模電學做比對。

對於紅石模電來說,最重要的一個紅石組件就是比較器,大部分的模電信號都需要透過比較器進行傳輸與運算,同時比較器也是一個重要的模電信號源 (例如對容器的滿箱檢測)。而比較器本身也提供了兩種基本運算,分別是 “比較 (CMP)” 與 “減法 (MINUS)” 運算 (對應比較器的 “比較模式” 與 “減法模式”,詳細運算規則可參考 Minecraft Wiki),CMP 比較常用於閘門上,例如當信號到達某一強度後將輸出信號,而 MINUS 比較常用於數字運算上,事實上大部分數字間的運算都是由 MINUS 衍生而來,另外 MINUS 也可以當作閘門使用,不過還是跟 CMP 的閘門存有差異,根據不同的狀況來調整使用即可。

除了 CMP 與 MINUS 外,還有三個重要的基本運算,分別是 “反轉 (REV)”、”取大 (MAX)”、”取小 (MIN)” 運算,REV 可以將弱信號轉換成強信號,強信號轉換成弱信號,且根據系統的進位數不同,轉換效果會有差異,以十六進位的系統來說,REV(A) = MINUS(15, A),也就是用最強的信號減掉輸入的信號,輸入的信號越強,輸出的信號就越弱。MAX 是以兩個輸入信號中較大的那個作為輸出,它的實現方式非常簡單,只需要將兩個輸入源相接即可,這是因為較強的紅石信號會覆蓋過較弱的信號。MIN 是以兩個輸入信號中較小的那個作為輸出,它的實現方式有兩種,第一種比較直觀,先將兩個輸入源反轉,取較大的後再反轉回來即可,也就是 MIN(A,B) = REV(MAX(REV(A),REV(B)))。
第二種方式需要稍微思考下,它就是 MIN(A,B) = MINUS(A,MINUS(A,B)) (或者寫作 A – (A – B)),但為什麼這會是對的呢?我們慢慢分析,先假設 A <= B,此時 A – B 的結果會是 0 (因為不會有小於 0 的信號強度),因此 A – (A – B) 可簡化成 A – 0 = A,所以輸出的會是 A,而當 A > B 時,A – B 的結果必定大於 0,所以算式不可簡化,但當我們把算式中的括弧拆開後,將會變成這樣 A – A + B = B,因此輸出的會是 B,這樣就證明了 MIN(A,B) = MINUS(A,MINUS(A,B))。

看到這邊可能已經有人注意到了,紅石模電中的 REV、MAX、MIN 運算,分別可對應到紅石數電中的 NOT、OR、AND 運算,也就是說擁有紅石數電開發經驗的人,在開發紅石模電時可以運用部分的數電開發經驗,我相信對於入門者來說,先了解數電再來學習模電會有相當大的幫助。

上面已經介紹了基本的模電運算,那接下來會介紹一些模電的簡單應用。第一個應用是信號延遲器,這設備也是作者我進入紅石模電這領域的一個重要契機,當初就是因為看到別人做了一個這樣的設備,才讓我領悟到紅石的真正潛力在模電運算,這個設備巧妙的地方在於它是一個循環運算,紅石信號每轉一圈,它的強度就減弱一階,直到強度為 0 時才輸出信號,哪怕是最小的循環,其延遲的時間長度也可以抵好幾個中繼器,若是增加迴轉單圈的時間長度,其增加的時間長度將會以乘倍成長,遠勝過增加中繼器數量的加法成長,小小一個循環就能有數十個中繼器才能達到的延遲效果。

此外這個設備還有一個特殊的應用,這必須從模電的信號傳輸說起,紅石模電在傳輸速度上一直是個劣勢,這是因為需要大量比較器來維持信號強度的關係,但在長程的模電信號傳輸中,有一種方式可增加傳輸速度,那就是先把模電信號轉成數電信號再進行傳輸,然後在信號接收端再轉換回模電,這就必須用到信號延遲器的循環運算原理,發出信號的一端是會逐漸減少信號強度的循環,而接收信號的一端是會逐漸增強信號強度的循環,最重要的是兩端循環的單圈迴轉時間必須相同,實際設備可參考下圖。

當發送端要傳輸某強度的信號時,它會將該信號轉換成某特定時長的數電信號,而接收端在收到某特定時長的信號時,會將其轉換成特定強度的模電信號,由於發送端與接收端的循環單圈迴轉時間相同,所以接收端的信號強度將會跟發送端相同。

不知道各位有沒有注意到,在上面的信號接收端中有一個用來保存模電信號的電路,跟數電一樣,模電信號也是可以被保存的,根據信號的保存原理,大致可分為 “循環”、”正反器”、”電容” 三種類型,先來說最簡單也最直接的 “循環”,它其實就只是將信號保存在一個迴路中,信號會不斷在迴路中迴轉且不喪失強度,因此就可以用來保存信號。
再來介紹 “正反器”,它是由一對互減的比較器所組成,當對其中一個比較器進行減法時,它會影響到另一個比較器的輸出結果,而這改變又會回頭影響到第一個比較器,使得信號被保存下來。
最後就是 “電容” 了,其實電容又可分成許多細類,其設計更是五花八門,但不論是哪一種電容,它的基本原理都是使用容器 (例如儲物箱、界伏盒) 將信號保存下來,這邊只介紹兩種當作範例。第一種電容是由兩個對接的漏斗構成,當比較器對漏斗進行滿箱檢測的輸出信號強度,與要保存的信號強度不同時,則讓漏斗中的物品往某特定方向移動,而當信號強度相同時,則同時鎖住兩個漏斗來維持信號強度。
第二種電容是用界伏盒作為保存容器,與第一種電容不同的是,保存的信號強度是直接跟容器內物品的數量有關,具體來說是信號強度 = 物品數量 – 1 (減 1 是為了保存強度 0 的信號的關係),這種電容在不需讀寫數據時,可以將界伏盒存放在其他地方,只有在需要讀寫容器數據時,才需要將界伏盒搬到設備上。

與現實世界中類似的是,”循環” 與 “正反器” 的讀寫速度比 “電容” 快上不少,而 “電容” 具有較高保存密度的潛力,可以根據需求來使用不同的保存方式。

最後再介紹一個實用的紅石模電設備,那就是紅石計數器,先來看一下電路圖。
這邊以 2 比特的計數器作為範例,每輸入一次信號,個位數計數器的信號強度就會增強一階,當個位數計數器的信號強度到達最大值時,下次接收到輸入信號後,將清空個位數計數器,並將十位數計數器的信號強度增強一階。

另外根據電路圖還可以發現,多比特的計數器也只是將一個結構不斷地重複而已,因此擴充起來非常方便。
那為什麼說計數器很實用呢?這是因為在複雜的紅石電路中,經常會將設備拆分成數個階段來運行,這時計數器就可以用作整個設備的中央控制器,由計數器負責記錄設備目前的狀態,並根據設備的狀態,將控制信號分送給各個不同的部件,協調整個設備的運行。
那麼這篇分享文就差不多到這裡了,其實還有許多更複雜的模電設備沒有介紹,像是加法器、內存之類的,不過這篇文章的主要目的是為了讓更多人了解到紅石模電這一領域,所以我只選了些基本電路與實用電路介紹,若各位有興趣做更深入的研究,其實直接動手玩是最快的,我自己也有許多設備是無意間被玩出來的,雖然很難說已最佳化,畢竟紅石的可能性實在太多,但在一次次的優化與開發中一點一滴地累積經驗,然後突然的靈光乍現,就能讓紅石的等級往上抬了一階,這大概就是玩紅石最大的樂趣所在。
本文來自網路,不代表3樓貓立場,轉載請註明出處:https://www.3loumao.org/20150.html?variant=zh-tw
返回頂部