當前位置:首頁 > 公眾號精選 > 小林coding
[導讀]今天的主題十分有趣,我們將在我的世界(Minecraft)這個游戲里,靠一個個邏輯門來組合實現(xiàn)一個簡單的七段顯示器,可以實現(xiàn)將選擇的數(shù)字輸出在顯示器上。

前言

今天的主題十分有趣,我們將在我的世界(Minecraft)這個游戲里,靠一個個邏輯門來組合實現(xiàn)一個簡單的七段顯示器,可以實現(xiàn)將選擇的數(shù)字輸出在顯示器上。

演示視頻在下面,來看看這個宏大的工程:

接下來,我會從最基礎的與或非實現(xiàn)開始,親自畫出電路原理圖,并且用我的世界來帶領大家領略數(shù)字電子技術的精妙之處。

本文所涉及的數(shù)電知識包括電路編碼、基本邏輯門組合電路。

當然,由于電路的精密性以及游戲里實現(xiàn)的復雜性,實現(xiàn)完整的電路是非常困難的,也會讓人難以看懂,一下子就勸退了,這也就違背了我們學習知識的初衷。

所以,我會適當?shù)膶﹄娐愤M行化簡,讓人看起來簡單易懂。

在這個過程中,我相信你一定會加深對數(shù)電的認識。學好數(shù)電,對更好更快地理解計算機組成,乃至于我們吸收軟件知識都十分有幫助。


準備工作

二進制編碼

我們首先復習一下電路是如何傳輸十進制。

當你在電路里傳輸一個十進制數(shù)時,肯定要先轉成二進制,一般有兩種二進制編碼形式,分別是自然二進制碼和 BCD 碼。

自然二進制碼

這是人們常說二進制碼,用除二取余進行真實的轉化,也就是自然二進制。

我們舉個例子,用除二取余法將十進制 123 轉換成二進制:

十進制轉二進制

可以得到 123 的二進制表達為 0111011。其他一些數(shù)的轉換我也列在下面了:

但是在實際電路中,這樣的編碼設計起來太復雜,所以電路里面一般用下面的編碼形式。

BCD 碼

如果單純?yōu)榱?strong style="font-size: inherit;line-height: inherit;color: rgb(48, 79, 254);">傳輸而不需要對數(shù)字進行加減等處理的話,搞個四位對一位的編碼最省力,很容易用一個四輸入一輸出的編碼器電路實現(xiàn),傳過去之后再用譯碼器轉成十進制就行了。

于是有了 BCD 碼(Binary-Code Decimal),常用的 BCD 碼有8421BCD 碼余 3 BCD碼2421BCD 碼 。通常采用 4 位二進制數(shù)表示一位十進制數(shù)中的 0~9 這 10 個數(shù)碼,優(yōu)點是二進制和十進制之間的轉換可以快速進行,缺點就是有 6 種狀態(tài)為冗余狀態(tài)。

這里著重介紹一下?8421BCD 碼。

8421BCD 碼是最基本和最常用的BCD碼,它和四位自然二進制碼相似,各位的權值為 8、4、2、1,故稱為有權 BCD 碼。

和四位自然二進制碼不同的是,它只選用了四位二進制碼中前 10 組代碼,即用 0000~1001 分別代表它所對應的十進制數(shù),余下的六組代碼不用,便是 8421BCD 碼的六種冗余狀態(tài)。

讓我們直接看表格吧,更直觀一點

從表格里可以發(fā)現(xiàn),0~9 的 8421BCD 碼和自然二進制的前十個一模一樣。從 10 開始就有所不同了,舉以下幾個例子:

比如求 16 的 8421BBCD 碼,先將 16 分開成 1 和 6 。因為1 的二進制為 0001 ,6 的二進制為 0110,所以得到 0001 0110。

很顯然,有多少位的十進制,就拆開成多少位,再對每一位進行單個編碼。

實現(xiàn)基本邏輯門

在這一小節(jié)里,我們將開始借助我的世界里的物品實現(xiàn)簡單的邏輯門,看下圖片先熟悉一下這些物品:

物品介紹

從左到右分別是:

  • 開關 :可以激活電路,相當于信號源

  • 電線 :用于傳遞信號

  • 紅石火把 :有兩種狀態(tài),當火把被信號激活時會熄滅,此時無法激活后續(xù)電路;當沒有被激活時,本身處于激活狀態(tài),會激活后續(xù)電路,是非門實現(xiàn)的基礎。且有向上傳遞信號的特性。

  • 中繼器 :用于延續(xù)信號。電路傳遞信號時,信號會不斷衰減,所以在適當位置放上中繼器來使信號繼續(xù)傳遞。

好了,有了以上的基礎,我們就可以來實現(xiàn)基本邏輯門了。

非門

非門有一個輸入和一個輸出端。當其輸入端為高電平(邏輯 1 )時輸出端為低電平(邏輯 0 ),當其輸入端為低電平時輸出端為高電平。

也就是說,輸入端和輸出端的電平狀態(tài)總是反相的。非門的邏輯功能相當于邏輯代數(shù)中的非,電路功能相當于反相,這種運算亦稱非運算。

邏輯圖

當 A 端有輸入信號時,Y 端不輸出;

當 A 端無信號時,Y 端輸出。

非門邏輯表達式為:

非邏輯表達式

邏輯圖為:

非邏輯圖

實現(xiàn)圖

利用紅石火把反轉信號的特性,可快速實現(xiàn)一個非門。類比高低電平,游戲里的激活未激活狀態(tài)分別表示了邏輯 1邏輯 0。

  • 當開關沒有打開時,輸入端無信號,即輸入為 0 。因為紅石火把只有被電路激活時才熄滅,所以紅石火把沒有熄滅,會激活后面的電路。紅石燈只有在激活的情況下會亮,可以用來檢測信號的狀態(tài)。雖然輸入端沒有信號,但紅石火把有信號,所以輸出端為 1,激活了紅石燈。

非開

  • 當開關打開時,輸入為 1 。將紅石火把激活,就會熄滅火把,熄滅后輸出端沒有信號,輸出為 0 ,紅石燈不亮。

非關

利用以上裝置可以將輸入的信號進行反相。

或門

或門有多個輸入端,一個輸出端,只要輸入中有一個為高電平時(邏輯 1 ),輸出就為高電平(邏輯 1 );只有當所有的輸入全為低電平(邏輯 0 )時,輸出才為低電平(邏輯 0 )。

邏輯圖

當 A,B 端有一個輸入信號時,Y 端就輸出信號。只有當 A,B 都無信號時,Y 端不輸出。

或門邏輯表達式為∶Y=A+B

或邏輯圖

實現(xiàn)圖

將兩個輸入端用紅石電路并聯(lián)在一起,可實現(xiàn)一個或門。

只有同時沒有輸入,輸出才為 0 。

或關

只要有一個輸入,輸出就為 1 。

或開

與門

與門有多個輸入端,一個輸出端。當所有的輸入同時為高電平(邏輯 1 )時,輸出才為高電平,否則輸出為低電平(邏輯 0 )。

邏輯圖

當 A,B 端同時輸入信號時,Y 端才輸出信號。A,B 有一個無信號時,Y 端不輸出。

與門邏輯表達式為∶Y=AB

與邏輯圖

實現(xiàn)圖

與門作為一個基本的邏輯門電路,可是在我的世界里面沒有現(xiàn)成的電路來表示與門。

但是我們往上翻,會發(fā)現(xiàn)我們已經(jīng)實現(xiàn)完了或門和非門。此時可以用摩根定律來求出與門的等價邏輯表達式:

摩根定律

即兩個輸入端各搭非門,合并信號后再加個非門。如下圖所示,只有當兩個輸入端都有信號時,輸出端才輸出。

與非

只有一個輸入信號則不輸出。

與關

可能你會有點意外,這樣還能叫與門嗎?

其實無論在電路組成上采用什么形式,只要最后的結果是一個與邏輯,那么它就是與門,即使通過與非門和非門組合而成,它也叫做"與門"而不叫"與非非"門。

簡單來說,你去買一個電路的時候,也只會關心它的輸入與輸出間的邏輯關系最終是什么。

至此,與、或、非已全部實現(xiàn),且組成完備集,可以表達所有電路。 但是在實際應用中,我們不得不提到下面這個邏輯門——與非門。

與非門

在集成電路中,與非門或非門是僅次于非門的第二簡單的門,但與非門或非門性能好,而且用與非門可以實現(xiàn)任意邏輯表達式。這么高的性價比,與非門確實是有資格作為表達式的終極化簡因子的。

在手工設計電路時,如果可以的話,工程師是傾向于用與非門的,后續(xù)我們設計電路時,也傾向于把表達式轉換為與非門。

邏輯圖

當 A,B 端同時輸入信號時,Y 端才不輸出信號。其他情況時,Y 端都輸出。

與非門邏輯表達式為∶

與非邏輯表達式

邏輯圖為:

與邏輯圖

實現(xiàn)圖

我們將與門表達式代入以上表達式,并計算

與非表達式化簡

發(fā)現(xiàn)消掉了與門的最后一個非門,與非門實現(xiàn)了對與門的化簡,只要兩個輸入端各搭一個非門,將輸出并聯(lián)在一起就能實現(xiàn)。

這也是我在設計電路時,傾向于把表達式化簡為與非門的原因之一。

與非

組合電路

當然,只有邏輯門還是不夠的,接下來我們將在這些基本邏輯門的基礎上來實現(xiàn)一些復雜的組合電路,最后再連接起來。

為了不被復雜的電路套進去,專注于原理,我對顯示器進行了化簡,功能為可以選擇將 ?0、1、2、3 這四個數(shù)輸出在顯示器上。

編碼器

由前面所介紹的知識可知,十進制在電路里是按 8421BCD 碼進行傳輸?shù)?。那我們要怎么將十進制碼轉換為 8421BCD 碼呢?這就是編碼器要做的事了。

我們的顯示器可以選擇四個數(shù)顯示,所以編碼器只要將 0~3 進行編碼即可。

編碼器的輸入端要有四個,分別是 I?、I? 、I? 和 I?,輸出端為 Y? 和 Y?。

如果要對 2 進行編碼,則將 I? 輸入信號,其他輸入端無信號,為 0。對應的輸出端為 10,這個 10 就是 2 的 BCD 碼。

對其他數(shù)編碼同理,完整的功能表如下,輸入端 I 為 1 時,表示對應的數(shù)被按下:

根據(jù)功能表寫出輸出邏輯函數(shù)表達式:

  • Y? = I? + I?

  • Y?= I? + I?

將表達式變換為與非表達式:

編碼器邏輯表達式

根據(jù)以上與非表達式可畫出邏輯圖。

編碼器邏輯圖

即輸入端各搭非門,按邏輯表達式加與非門。

實現(xiàn)圖

這是我們的五個輸入端,第一個消隱端/總開關將在下面的小節(jié)進行講解,后面四個就是我們可以選擇的數(shù)字。

編碼器輸入

從上面俯瞰一下,電路從這五個輸入端引出。

編碼器俯視圖

這是編碼器的具體實現(xiàn)部分:

編碼器實現(xiàn)部分

應當指出,當 I? ~ I? 都為 0 時,輸出 Y?Y?=00,所以 I? 輸入線可以不接入編碼器。

好了,一個簡單的 4 線 - 2 線編碼器就完成啦。輸入端按下對應十進制的按鈕,輸出端就輸出對應的 8421BCD 碼。如果有興趣的可以按以上步驟設計出 8 線 - 3 線的完整編碼器,可以對 0~9 進行編碼。

七段顯示器

有了編碼器,自然就有譯碼器。但是在介紹譯碼器之前,我們得先了解一下七段顯示器。

七段數(shù)字顯示器由七個發(fā)光二極管構成,七段 a,b,c,d,e,f,g 分別對應一只發(fā)光二極管,利用不同段的組合,可以顯示十進制數(shù)字 0 到 9。

七段數(shù)字

在我的世界里面,可以將三個紅石燈利用紅石連成一段,當成一個發(fā)光二極管。

下面則是七段顯示器正面圖:

七段顯示器正面

下面則是七段顯示器背面圖:

七段顯示器背面

這樣,只要信號從輸入端輸入,屏幕上對應輸出端的那一段就會亮起。

二線七段驅動/譯碼器

現(xiàn)在,編碼器和七段顯示器已經(jīng)完成,剩下了最關鍵的一個電路——顯示譯碼器,也可以稱之為顯示驅動器。

顯示譯碼器把 BCD 碼作為輸入編碼,通過譯碼器產(chǎn)生一組信號,用于驅動七段數(shù)字顯示器。

七段顯示器

A、B 為輸入的 BCD 碼,a,b,c,d,e,f,g 則是對應編碼的輸出信號。

比如輸入的 A、B 是 0 0,代表著要將 0 顯示出來。于是 0 所對應的 a,b,c,d,e,f 段二極管要亮起來,剛好組成一個「0」的形狀,要亮起來輸出就要為 1 ,所以 a,b,c,d,e,f 都為1。

以下為完整的功能表:

根據(jù)功能表,寫出與非邏輯表達式:

譯碼器邏輯表達式

按表達式將譯碼器搭建完成,效果圖如下所示:

譯碼器輸入端

下圖是譯碼器的俯視視角圖:

譯碼器

現(xiàn)在一個顯示器的基本功能有了,可是還有一點不足,就是無法將屏幕完全熄滅。沒有任何輸入的情況也代表著 0 ,所以屏幕上會一直顯示 「0」。

但是我們回憶一下輸入端的第一個按鈕,這個輸入就是要起到一個消隱的作用。當消隱按鈕打開,屏幕完全熄滅,不論輸入什么都不顯示數(shù)字;關閉時,才能將對應的數(shù)字顯示出來。

編碼器輸入

根據(jù)我們的需求,要實現(xiàn)這樣的電路也很簡單,只要將這個輸入端和顯示器的 a,b,c,d,e,f,g 各段分別進行與門連接,只有兩個輸入端同時有信號才可以輸出。

顯示器消隱邏輯圖

圖中從消隱端延伸到顯示器的七段輸入,再每段連接與門。

顯示器消隱

至此,一個顯示器基本大功告成。讓我們總覽一下這件藝術品

線路總覽

尾聲

其實關于程序員要不要學習這么底層的知識向來是有些爭議的。

我要說的是,盡量去打開你身邊的「盒子」。 ?

本文所涉及的是數(shù)電,算是最為底層的了,甚至可以說數(shù)字電路是計算機體系結構的基礎。

你會發(fā)現(xiàn)計算機的內(nèi)存,ALU 等等都是基于來實現(xiàn)的?;镜拈T只有與,或和非,但是他們的各種組合卻可以完成各種 NB 的功能比如說加法器減法器時鐘。在邏輯層面進行推導和組合這難道不是很有趣嗎?

他只是邏輯而已,涉及不到太多的電路和計算,很容易感興趣的。

現(xiàn)在的開發(fā)都是使用別人封裝好的包。如果只是當碼農(nóng),數(shù)電模電底層東西不懂也好,但這些底層東西的學習和理解能讓你對計算機有更本質的認識,在程序員的道路上才能走的更遠。

當你把你的底層知識征服了,你就有資本去征服更高層的知識了。

不學習底層的知識是否會阻礙成為大師?

思考中。。。


哈嘍,我是小林,就愛圖解計算機基礎,如果覺得文章對你有幫助,歡迎分享給你的朋友,也給小林點個「在看」,這對小林非常重要,謝謝你們,給各位小姐姐小哥哥們抱拳了,我們下次見!


推薦閱讀

10 張圖打開 CPU 緩存一致性的大門

知道硬盤很慢,但沒想到比 CPU Cache 慢 10000000 倍

免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉