算器核心:編碼器與譯碼器原理與Minecraft實(shí)現(xiàn))
如果你在《我的世界》里嘗試過(guò)構(gòu)建復(fù)雜的紅石計(jì)算器可能會(huì)遇到一個(gè)看似簡(jiǎn)單卻極其棘手的問(wèn)題如何讓機(jī)器“理解”你的輸入比如當(dāng)你按下代表數(shù)字“5”的按鈕時(shí)如何讓內(nèi)部電路準(zhǔn)確地知道這是“0101”而不是其他值更進(jìn)一步當(dāng)計(jì)算完成內(nèi)部電路輸出“0110”時(shí)又如何讓它點(diǎn)亮代表數(shù)字“6”的七段數(shù)碼管這正是編碼器和譯碼器要解決的核心問(wèn)題。它們是數(shù)字電路尤其是紅石計(jì)算機(jī)中連接“人類世界”與“機(jī)器世界”的橋梁。沒(méi)有它們你的紅石計(jì)算機(jī)將只是一堆無(wú)法與外界有效交互的復(fù)雜邏輯門(mén)。很多人搭建計(jì)算器時(shí)往往把精力全放在加法器、寄存器上卻忽略了輸入輸出這一環(huán)導(dǎo)致最終作品要么操作極其繁瑣要么顯示混亂不堪。本文將深入解析《我的世界》紅石計(jì)算器中的編碼器與譯碼器。我們不止步于“它們是什么”而是要講清楚“為什么必須要有它們”、“在紅石中如何用最精簡(jiǎn)、最可靠的方式實(shí)現(xiàn)”以及“如何避免新手最容易踩的坑”。無(wú)論你是想完善自己的計(jì)算器還是對(duì)數(shù)字電路底層邏輯感興趣這篇文章都將提供從原理到實(shí)戰(zhàn)的完整路徑。我們將從最基礎(chǔ)的真值表開(kāi)始逐步構(gòu)建出能實(shí)際工作的紅石模塊并探討如何優(yōu)化它們以適應(yīng)更大規(guī)模的計(jì)算系統(tǒng)。1. 編碼與譯碼為什么它們是紅石計(jì)算器的“感官”在深入紅石搭建之前我們必須先理解編碼器和譯碼器在計(jì)算系統(tǒng)中的地位。你可以把整個(gè)計(jì)算過(guò)程想象成一次跨國(guó)交流輸入人類語(yǔ)言你按下了按鈕“5”。這是人類習(xí)慣的十進(jìn)制符號(hào)。編碼翻譯成機(jī)器語(yǔ)言編碼器將“按下5號(hào)鍵”這個(gè)事件轉(zhuǎn)換成一串機(jī)器能理解的二進(jìn)制信號(hào)比如4位二進(jìn)制0101。這個(gè)過(guò)程叫做編碼(Encoding)執(zhí)行這個(gè)功能的電路就是編碼器(Encoder)。處理機(jī)器內(nèi)部計(jì)算計(jì)算器核心如加法器對(duì)0101和其他二進(jìn)制數(shù)進(jìn)行運(yùn)算得到結(jié)果0110。譯碼翻譯回人類語(yǔ)言譯碼器將機(jī)器內(nèi)部的二進(jìn)制結(jié)果0110轉(zhuǎn)換回人類能直觀識(shí)別的形式比如點(diǎn)亮七段數(shù)碼管上構(gòu)成數(shù)字“6”的特定段。這個(gè)過(guò)程叫做譯碼(Decoding)執(zhí)行這個(gè)功能的電路就是譯碼器(Decoder)。如果沒(méi)有編碼器你需要手動(dòng)用拉桿擺出0101來(lái)輸入5極其低效且易錯(cuò)。如果沒(méi)有譯碼器你只能看到一堆紅石火把的明暗需要自己心算翻譯成十進(jìn)制完全失去了計(jì)算器的實(shí)用性。因此編碼器和譯碼器的核心價(jià)值在于“人機(jī)交互界面的抽象”。它們將底層的二進(jìn)制細(xì)節(jié)封裝起來(lái)為操作者提供了一個(gè)清晰、簡(jiǎn)單的接口。在紅石工程中設(shè)計(jì)良好的編碼/譯碼電路往往是項(xiàng)目從“玩具”升級(jí)為“工具”的關(guān)鍵一步。2. 核心概念解析編碼器 vs. 譯碼器雖然名稱相似但兩者功能完全相反理解其區(qū)別是正確應(yīng)用的前提。2.1 編碼器 (Encoder)從多到少的“壓縮”電路功能將多個(gè)輸入線通常只有一條為有效信號(hào)的狀態(tài)轉(zhuǎn)換為一組位數(shù)更少的二進(jìn)制代碼輸出。典型場(chǎng)景鍵盤(pán)輸入。一個(gè)10鍵鍵盤(pán)0-9每次只按下一個(gè)鍵。編碼器需要識(shí)別是哪個(gè)鍵被按下并輸出對(duì)應(yīng)的4位二進(jìn)制碼因?yàn)?^416 10。輸入輸出關(guān)系N 條輸入線 → M 位二進(jìn)制輸出其中 2^M N。最常見(jiàn)的如4線-2線編碼器4輸入2輸出和8線-3線編碼器8輸入3輸出。紅石中的類比一排按鈕按下一個(gè)對(duì)應(yīng)輸出端幾根紅石線產(chǎn)生特定的亮滅組合。2.2 譯碼器 (Decoder)從少到多的“展開(kāi)”電路功能將一組二進(jìn)制代碼輸入轉(zhuǎn)換為唯一一條輸出線有效或按特定規(guī)則多條有效。典型場(chǎng)景驅(qū)動(dòng)顯示器。如將4位二進(jìn)制數(shù)0110即十進(jìn)制6輸入譯碼器譯碼器會(huì)驅(qū)動(dòng)對(duì)應(yīng)的“第6根”輸出線或驅(qū)動(dòng)七段數(shù)碼管中構(gòu)成“6”字形的a, c, d, e, f, g段亮起。輸入輸出關(guān)系M 位二進(jìn)制輸入 → N 條輸出線其中 N 2^M。最常見(jiàn)的如2線-4線譯碼器2輸入4輸出和3線-8線譯碼器3輸入8輸出。紅石中的類比通過(guò)兩個(gè)拉桿輸入二進(jìn)制信號(hào)控制四個(gè)不同位置的活塞或燈依次動(dòng)作。為了更清晰我們用下表對(duì)比兩者特性編碼器 (Encoder)譯碼器 (Decoder)核心功能將單一有效輸入轉(zhuǎn)換為二進(jìn)制代碼將二進(jìn)制代碼轉(zhuǎn)換為單一有效輸出數(shù)據(jù)流向多路輸入 → 少位編碼輸出少位編碼輸入 → 多路輸出典型應(yīng)用鍵盤(pán)掃描、優(yōu)先級(jí)中斷地址選擇、顯示驅(qū)動(dòng)、存儲(chǔ)器片選紅石實(shí)現(xiàn)關(guān)鍵處理多個(gè)輸入同時(shí)有效的沖突優(yōu)先級(jí)編碼確保輸入與輸出一一對(duì)應(yīng)無(wú)歧義3. 環(huán)境準(zhǔn)備與設(shè)計(jì)目標(biāo)在《我的世界》中搭建這些電路我們追求的不是最小的理論門(mén)電路而是清晰、穩(wěn)定、易于理解和擴(kuò)展的工程實(shí)現(xiàn)。游戲版本本文原理適用于所有包含紅石組件的《我的世界》版本Java版 1.5基巖版等效。具體擺放可能因方塊更新特性有細(xì)微差異但邏輯通用。核心紅石組件紅石粉傳遞信號(hào)。紅石火把非門(mén)反相器核心也是其他邏輯門(mén)的基礎(chǔ)。紅石中繼器信號(hào)延時(shí)、定向、鎖存、放大。紅石比較器信號(hào)強(qiáng)度比較、減法、特定邏輯。按鈕/拉桿輸入裝置。紅石燈/活塞輸出顯示裝置。設(shè)計(jì)目標(biāo)我們將設(shè)計(jì)一個(gè)用于0-9數(shù)字輸入的10線-4線優(yōu)先編碼器以及一個(gè)用于驅(qū)動(dòng)單個(gè)數(shù)碼管顯示的4線-7段譯碼器。這兩個(gè)模塊可以直接串聯(lián)構(gòu)成一個(gè)完整的“按鍵輸入-數(shù)字顯示”單元這也是計(jì)算器最基礎(chǔ)的輸入輸出子系統(tǒng)。4. 10線-4線優(yōu)先編碼器的紅石實(shí)現(xiàn)一個(gè)理想的編碼器應(yīng)該1識(shí)別按下的鍵2輸出對(duì)應(yīng)的4位BCD碼Binary-Coded Decimal用4位二進(jìn)制表示0-93處理“同時(shí)按下多個(gè)鍵”的異常情況設(shè)定優(yōu)先級(jí)。4.1 真值表與邏輯分析首先我們定義輸入I0-I9對(duì)應(yīng)數(shù)字0-9和輸出Y3, Y2, Y1, Y0為4位二進(jìn)制Y3是最高位。我們采用高電平有效按下按鈕信號(hào)1和高優(yōu)先級(jí)數(shù)字大的鍵優(yōu)先級(jí)高即I9最高I0最低。輸入 (I9-I0)輸出 (Y3 Y2 Y1 Y0)對(duì)應(yīng)十進(jìn)制I9 有效1 0 0 19I8 有效1 0 0 08I7 有效0 1 1 17I6 有效0 1 1 06I5 有效0 1 0 15I4 有效0 1 0 04I3 有效0 0 1 13I2 有效0 0 1 02I1 有效0 0 0 11I0 有效0 0 0 00無(wú)輸入可設(shè)為 1 1 1 1 或 0 0 0 0無(wú)效碼-觀察真值表我們可以推導(dǎo)出每個(gè)輸出位的邏輯表達(dá)式以I9優(yōu)先級(jí)最高為例Y3 I9 I8 第9或第8鍵按下時(shí)Y31Y2 I7 I6 I5 I4 第7,6,5,4鍵按下時(shí)Y21Y1 I7 I6 I3 I2 第7,6,3,2鍵按下時(shí)Y11Y0 I9 I7 I5 I3 I1 第9,7,5,3,1鍵按下時(shí)Y01注意這是簡(jiǎn)化后的表達(dá)式已經(jīng)包含了優(yōu)先級(jí)。例如當(dāng)I9按下時(shí)無(wú)論其他鍵是否按下Y3和Y0都必須為1。我們的電路設(shè)計(jì)必須保證這一點(diǎn)。4.2 紅石電路搭建步驟在Minecraft中我們通常用“或門(mén)”來(lái)實(shí)現(xiàn)上述邏輯。一個(gè)簡(jiǎn)單的紅石或門(mén)就是用紅石粉將多條輸入線連接在一起。步驟1搭建輸入接口在一排放置10個(gè)按鈕或拉桿分別標(biāo)記為0-9。每個(gè)按鈕連接一條獨(dú)立的紅石線作為輸入線I0-I9。步驟2實(shí)現(xiàn)Y3輸出Y3 I9 I8。將來(lái)自按鈕9和按鈕8的紅石線用紅石粉連接到同一條線上這條線的末端就是Y3輸出。只要I9或I8被激活這條線就會(huì)亮起。步驟3實(shí)現(xiàn)Y2輸出Y2 I7 I6 I5 I4。將來(lái)自按鈕7,6,5,4的紅石線連接到同一條線上末端為Y2輸出。步驟4實(shí)現(xiàn)Y1輸出Y1 I7 I6 I3 I2。將來(lái)自按鈕7,6,3,2的紅石線連接到同一條線上末端為Y1輸出。這里有個(gè)關(guān)鍵點(diǎn)I7和I6的信號(hào)已經(jīng)被用于Y2我們需要用紅石中繼器進(jìn)行信號(hào)分離避免反饋和信號(hào)串?dāng)_。直接從按鈕后的紅石線用中繼器引出一條分支即可。步驟5實(shí)現(xiàn)Y0輸出Y0 I9 I7 I5 I3 I1。將來(lái)自按鈕9,7,5,3,1的紅石線同樣注意使用中繼器分支連接到同一條線上末端為Y0輸出。步驟6優(yōu)先級(jí)保證與電路優(yōu)化上述連接方式在物理上實(shí)現(xiàn)了“或”邏輯但存在一個(gè)問(wèn)題當(dāng)?shù)蛢?yōu)先級(jí)鍵如I1和高優(yōu)先級(jí)鍵如I9同時(shí)按下時(shí)低優(yōu)先級(jí)鍵的線路可能會(huì)“倒灌”電流影響其他輸出位的狀態(tài)。雖然由于我們的表達(dá)式設(shè)計(jì)最終輸出數(shù)字仍是高優(yōu)先級(jí)的但電路內(nèi)部信號(hào)可能不穩(wěn)定。更可靠的做法是使用二極管隔離。在Minecraft中紅石中繼器默認(rèn)就是單向?qū)ǖ目梢猿洚?dāng)完美的二極管。因此更好的實(shí)踐是從每個(gè)按鈕引出的紅石線都先連接一個(gè)紅石中繼器再接入后續(xù)的或網(wǎng)絡(luò)。這樣能確保信號(hào)單向流動(dòng)避免沖突。下圖展示了優(yōu)化后的Y0輸出部分的核心連接思路其他位類似// 概念性示意圖非實(shí)際命令 按鈕I9 - 中繼器 - 紅石線 \ 按鈕I7 - 中繼器 - 紅石線 - (連接到一起) - Y0輸出線 按鈕I5 - 中繼器 - 紅石線 / 按鈕I3 - 中繼器 - 紅石線 按鈕I1 - 中繼器 - 紅石線完成以上步驟你就得到了一個(gè)功能完整的10線-4線優(yōu)先編碼器。按下0-9的按鈕用紅石燈或直接觀察紅石線檢查輸出的4位二進(jìn)制碼是否符合BCD碼表。5. 4線-7段譯碼器的紅石實(shí)現(xiàn)譯碼器將我們編碼器輸出的4位BCD碼轉(zhuǎn)換為驅(qū)動(dòng)七段數(shù)碼管Seven-Segment Display的信號(hào)。七段數(shù)碼管由a, b, c, d, e, f, g七段組成通過(guò)點(diǎn)亮不同段來(lái)顯示數(shù)字。5.1 真值表與邏輯分析定義輸入A3, A2, A1, A0 (對(duì)應(yīng)編碼器輸出Y3, Y2, Y1, Y0A3為最高位)。 定義輸出a, b, c, d, e, f, g高電平有效1點(diǎn)亮該段。我們需要根據(jù)0-9的數(shù)字形狀列出每個(gè)數(shù)字需要點(diǎn)亮哪些段。輸入 (A3 A2 A1 A0)數(shù)字輸出 (a b c d e f g)點(diǎn)亮段0 0 0 001 1 1 1 1 1 0a,b,c,d,e,f0 0 0 110 1 1 0 0 0 0b,c0 0 1 021 1 0 1 1 0 1a,b,d,e,g0 0 1 131 1 1 1 0 0 1a,b,c,d,g0 1 0 040 1 1 0 0 1 1b,c,f,g0 1 0 151 0 1 1 0 1 1a,c,d,f,g0 1 1 061 0 1 1 1 1 1a,c,d,e,f,g0 1 1 171 1 1 0 0 0 0a,b,c1 0 0 081 1 1 1 1 1 1全部1 0 0 191 1 1 1 0 1 1a,b,c,d,f,g根據(jù)真值表我們可以寫(xiě)出每個(gè)輸出段如a段的邏輯表達(dá)式。以a段為例它在數(shù)字0,2,3,5,6,7,8,9時(shí)點(diǎn)亮。所以 a Σ(0,2,3,5,6,7,8,9) 用輸入變量表示就是 a A3’A2’A1’A0’ A3’A2’A1A0’ A3’A2’A1A0 A3’A2A1’A0 A3’A2A1A0’ A3’A2A1A0 A3A2’A1’A0’ A3A2’A1’A0 其中 ‘ 表示非這個(gè)表達(dá)式非常復(fù)雜。在紅石中直接實(shí)現(xiàn)這樣的組合邏輯會(huì)異常龐大。因此我們必須采用更巧妙的方法。5.2 基于ROM思想的簡(jiǎn)化設(shè)計(jì)在計(jì)算機(jī)中譯碼器常通過(guò)只讀存儲(chǔ)器ROM實(shí)現(xiàn)將輸入地址4位BCD碼作為索引直接輸出預(yù)先存儲(chǔ)好的7位段碼。在紅石中我們可以模擬這一思想。核心思路為每一個(gè)輸出段a-g獨(dú)立設(shè)計(jì)一個(gè)電路這個(gè)電路在特定輸入組合下輸出“1”。我們以c段為例它點(diǎn)亮于數(shù)字0,1,3,4,5,6,7,8,9。觀察規(guī)律可以發(fā)現(xiàn)c段在輸入為20010時(shí)才不亮。與其構(gòu)建“何時(shí)亮”的復(fù)雜或門(mén)不如構(gòu)建“何時(shí)滅”的簡(jiǎn)單與門(mén)然后取反。c段熄滅的條件是A30, A20, A11, A00。即(非A3)與(非A2)與A1與(非A0)。 那么c 非(非A3 與 非A2 與 A1 與 非A0)在紅石中這很容易實(shí)現(xiàn)獲取A3, A2, A0的反相信號(hào)用紅石火把實(shí)現(xiàn)非門(mén)。將這四個(gè)信號(hào)非A3, 非A2, A1, 非A0用紅石線連到一起實(shí)現(xiàn)與門(mén)在Minecraft中多條線連在一起默認(rèn)是或邏輯但這里我們需要的是“當(dāng)且僅當(dāng)所有條件滿足”需要特殊設(shè)計(jì)。更可靠的方法是使用紅石火把與門(mén)或比較器與門(mén)。將步驟2的結(jié)果連接一個(gè)紅石火把進(jìn)行最終取反得到c段信號(hào)。紅石火把與門(mén)設(shè)計(jì) 將需要相與的信號(hào)如非A3作為輸入連接到一個(gè)方塊側(cè)面方塊上方放紅石火把。紅石火把默認(rèn)亮當(dāng)所有輸入信號(hào)都強(qiáng)充能該方塊時(shí)火把熄滅。再在這個(gè)火把后面接一個(gè)紅石火把取反就得到了“與”的結(jié)果。但為了得到c我們實(shí)際上需要的是“當(dāng)四個(gè)條件滿足時(shí)輸出0否則輸出1”。這正好是步驟3的描述。我們可以為每個(gè)輸出段都設(shè)計(jì)這樣一個(gè)“唯一熄滅條件”電路。但并非所有段都只有一個(gè)熄滅條件。例如f段在數(shù)字1,2,3,7時(shí)不亮條件更多。這時(shí)我們可以采用“兩級(jí)邏輯”第一級(jí)用與門(mén)識(shí)別出每一個(gè)“熄滅”的輸入組合如0010代表2。第二級(jí)將所有這些第一級(jí)與門(mén)的輸出連接到一個(gè)大的或門(mén)。只要有一個(gè)“熄滅條件”滿足或門(mén)就輸出1。第三級(jí)對(duì)這個(gè)或門(mén)輸出取反就得到f段信號(hào)沒(méi)有熄滅條件滿足時(shí)f1。5.3 模塊化搭建與布線技巧準(zhǔn)備輸入總線將編碼器輸出的4根線Y3-Y0平行鋪設(shè)作為譯碼器的輸入總線。沿途用紅石中繼器引出信號(hào)及其反相信號(hào)通過(guò)紅石火把非門(mén)。分段搭建邏輯單元為a-g七段分別搭建其邏輯電路。建議在地面上分區(qū)規(guī)劃例如第一排做a段邏輯第二排做b段邏輯以此類推。使用墻或分層結(jié)構(gòu)紅石線路復(fù)雜容易交叉干擾。善用方塊墻進(jìn)行立體布線或者將不同段的邏輯電路放在不同高度層用紅石火把或中繼器進(jìn)行垂直信號(hào)傳遞。輸出驅(qū)動(dòng)每個(gè)段邏輯電路的最終輸出信號(hào)用來(lái)驅(qū)動(dòng)一個(gè)紅石燈或激活一排活塞來(lái)推動(dòng)有色方塊從而在遠(yuǎn)處拼成一個(gè)七段數(shù)碼管的形狀。為了驅(qū)動(dòng)多個(gè)燈或活塞可能需要在最終輸出后加裝紅石中繼器進(jìn)行信號(hào)放大。6. 集成測(cè)試從按鍵到顯示將編碼器和譯碼器連接起來(lái)進(jìn)行端到端測(cè)試。連接將編碼器的4位輸出Y3-Y0對(duì)應(yīng)連接到譯碼器的4位輸入A3-A0。準(zhǔn)備顯示面板用7組紅石燈或其他可被紅石控制的發(fā)光/移動(dòng)方塊按照七段數(shù)碼管的“日”字形排列好。將譯碼器的a-g輸出分別連接到對(duì)應(yīng)的段上。功能測(cè)試依次按下編碼器的按鈕0-9。觀察顯示面板是否正確地顯示出數(shù)字0-9。測(cè)試優(yōu)先級(jí)同時(shí)按下按鈕2和按鈕9觀察顯示是否始終為9高優(yōu)先級(jí)。信號(hào)調(diào)試如果某個(gè)數(shù)字顯示錯(cuò)誤例如按5卻顯示3。第一步檢查編碼器輸出。按5時(shí)用紅石燈檢查Y3-Y0是否為0101。如果不是回溯編碼器對(duì)應(yīng)位的邏輯Y2和Y0。第二步如果編碼器輸出正確檢查譯碼器輸入。確認(rèn)A3-A0接收到的信號(hào)確實(shí)是0101。第三步檢查譯碼器邏輯。根據(jù)0101數(shù)字5的真值表a,c,d,f,g段應(yīng)亮b,e段應(yīng)滅。逐一檢查譯碼器各段輸出是否正確。重點(diǎn)檢查顯示錯(cuò)誤的段例如如果b段不該亮卻亮了就檢查b段的邏輯電路。7. 常見(jiàn)問(wèn)題、優(yōu)化與高級(jí)應(yīng)用7.1 常見(jiàn)問(wèn)題排查問(wèn)題現(xiàn)象可能原因排查方式解決方案按下按鍵無(wú)任何反應(yīng)1. 按鈕未正確連接紅石線。2. 紅石線距離過(guò)長(zhǎng)未用中繼器加強(qiáng)。3. 電路被其他方塊意外切斷或充能。1. 從按鈕出發(fā)沿著紅石線逐格檢查信號(hào)。2. 確保紅石線每15格內(nèi)有中繼器。1. 重新連接線路。2. 添加紅石中繼器。3. 清理電路周邊方塊。顯示數(shù)字混亂非預(yù)期段亮起1. 編碼器輸出錯(cuò)誤。2. 譯碼器輸入接錯(cuò)線如A3和A2接反。3. 譯碼器內(nèi)部邏輯電路錯(cuò)誤特別是“非”門(mén)使用不當(dāng)。1. 隔離測(cè)試斷開(kāi)編碼譯碼連接單獨(dú)測(cè)試編碼器輸出。2. 對(duì)照真值表用紅石燈在譯碼器各內(nèi)部節(jié)點(diǎn)測(cè)試邏輯值。1. 修正編碼器邏輯。2. 核對(duì)并更正接線順序。3. 檢查并重建有問(wèn)題的邏輯門(mén)確保紅石火把放置方向正確。多鍵同時(shí)按下時(shí)顯示非最高優(yōu)先級(jí)數(shù)字編碼器優(yōu)先級(jí)邏輯未正確實(shí)現(xiàn)信號(hào)沖突。測(cè)試同時(shí)按下高低優(yōu)先級(jí)鍵用紅石燈監(jiān)控編碼器每一位輸出。在編碼器每個(gè)輸入后添加紅石中繼器作為二極管強(qiáng)制信號(hào)單向流動(dòng)避免反向干擾。顯示暗淡或部分段不亮紅石信號(hào)強(qiáng)度衰減不足以驅(qū)動(dòng)末端的紅石燈或活塞。檢查從譯碼器輸出到顯示單元的紅石線長(zhǎng)度。在驅(qū)動(dòng)顯示單元前添加紅石中繼器將信號(hào)強(qiáng)度恢復(fù)至滿格15。電路體積過(guò)于龐大使用了最基礎(chǔ)的門(mén)電路搭建未做優(yōu)化。-采用下文提到的優(yōu)化策略。7.2 性能與空間優(yōu)化紅石電路三大資源空間、延遲信號(hào)傳播時(shí)間、材料。優(yōu)化通常在其中權(quán)衡??臻g優(yōu)化層疊設(shè)計(jì)將編碼器、譯碼器、顯示器在垂直方向上層疊放置用紅石火把進(jìn)行垂直信號(hào)傳遞大幅減少占地面積。使用紅石比較器對(duì)于某些特定邏輯如判斷輸入是否大于某個(gè)值靈活使用比較器可以替代多個(gè)邏輯門(mén)??偩€結(jié)構(gòu)規(guī)整地布置輸入/輸出總線方便模塊間連接和后續(xù)擴(kuò)展。延遲優(yōu)化減少中繼器數(shù)量在保證信號(hào)不衰減的前提下盡量使用紅石粉直接連接。中繼器會(huì)引入1-4紅石刻的延遲。并行計(jì)算編碼器的4位輸出邏輯是獨(dú)立的可以同時(shí)計(jì)算無(wú)需等待。關(guān)鍵路徑優(yōu)化分析從輸入到輸出最慢的一條路徑嘗試用更少的門(mén)電路實(shí)現(xiàn)。材料優(yōu)化共享非門(mén)多個(gè)地方需要同一個(gè)信號(hào)的反相如非A3可以只用一個(gè)紅石火把非門(mén)然后分支出去。使用更廉價(jià)的方塊用石頭、圓石等代替昂貴的紅石方塊如紅石塊、偵測(cè)器作為支撐結(jié)構(gòu)。7.3 高級(jí)應(yīng)用與擴(kuò)展BCD轉(zhuǎn)二進(jìn)制編碼器上述編碼器輸出的是BCD碼。如果你要構(gòu)建一個(gè)純二進(jìn)制計(jì)算器可能需要一個(gè)將10進(jìn)制輸入直接轉(zhuǎn)為4位二進(jìn)制0-15的編碼器其邏輯略有不同。帶使能端的譯碼器為譯碼器增加一個(gè)“使能”引腳。只有當(dāng)使能信號(hào)有效時(shí)譯碼器才根據(jù)輸入工作否則所有輸出端無(wú)效。這在多位數(shù)碼管動(dòng)態(tài)掃描顯示中非常有用。集成到完整ALU將本課的編碼器作為計(jì)算器的輸入前端譯碼器作為輸出顯示。中間連接你之前構(gòu)建的加法器、寄存器、控制器就構(gòu)成了一個(gè)簡(jiǎn)易的、可進(jìn)行連續(xù)運(yùn)算的紅石計(jì)算器CPU雛形。使用命令方塊或模組對(duì)于超大規(guī)?;蜃非髽O限性能的紅石計(jì)算機(jī)玩家可能會(huì)借助命令方塊生成特定信號(hào)或使用如WorldEdit模組快速?gòu)?fù)制電路模塊。但理解底層紅石邏輯仍是自主設(shè)計(jì)和調(diào)試的基礎(chǔ)。編碼器與譯碼器是數(shù)字世界的翻譯官。在《我的世界》這個(gè)由方塊構(gòu)成的世界里親手用紅石粉、火把和中繼器搭建出這些電路是將抽象的邏輯代數(shù)轉(zhuǎn)化為可見(jiàn)機(jī)械奇跡的過(guò)程。它不僅是完成一個(gè)計(jì)算器模塊的步驟更是理解現(xiàn)代計(jì)算機(jī)如何與人類交互的絕佳實(shí)踐。當(dāng)你成功實(shí)現(xiàn)“按鍵-編碼-計(jì)算-譯碼-顯示”的完整鏈條時(shí)你所掌握的遠(yuǎn)不止是幾個(gè)紅石結(jié)構(gòu)的擺法。你理解了信息表示、信號(hào)轉(zhuǎn)換和系統(tǒng)接口的設(shè)計(jì)思想。接下來(lái)你可以嘗試用同樣的思路去設(shè)計(jì)一個(gè)控制16種狀態(tài)的開(kāi)關(guān)或者一個(gè)驅(qū)動(dòng)16個(gè)不同設(shè)備的遙控器。紅石電路的魅力就在于用簡(jiǎn)單的元件構(gòu)建出詮釋復(fù)雜邏輯的無(wú)限可能。