放心鐵子們,本文會從最基礎的講起,適合剛接觸電子的童鞋,就算躺在床上,認真看完本文你將無痛地對數字電路有個全面的了解!數電是一塊硬骨頭,對于很基礎的概念我會細說,對于一些進階的概念我會盡量用語言解釋,所以我會盡量把數字電路涉及的知識點都囊括到,旨在讓各位先見識數字電路的全貌,為以后的學習打基礎!
下圖是數字電路的知識框架,棕色的知識我會詳細說說,大家可以馬上掌握,藍色的知識我會盡量用語言講明白。希望對大家有幫助。
為什么要學數電?毫不夸張地說,數電帶來了信息化時代。大家身邊所有的電器,里面都會有一塊或多塊電路板,上面基本都會有若干個芯片,芯片內部里面跑的全是數字信號0和1。
作為當代人類最高智慧的結晶,芯片的重要性不言而喻,而芯片的最最基本原理,就是數字電路。各位想要為國家芯片事業(yè)做貢獻的有志少年,數電一定要學好。
OK,下面的內容環(huán)環(huán)相扣,事不宜遲,我們開搞!
1數制與編碼
數 制
數電里面跑的全是0和1,所以科學家們引入了二進制。十進制我們熟悉,9之后就進一位;二進制就是1之后就進一位。10這個數字,在二進制里,就是十進制的2,同理1010,在二進制里,就是十進制的 23 + 0 + 21 + 0 = 8 + 2 = 10
除了二進制,為了方便表示多位二進制,還有八進制和十六進制。當然只是給一個10我們不知道它是十進制還是二進制,所以一般我們用括號括住數字,然后在右下角表上字母BODH,表示二進制、八進制、十進制和十六進制。這有個小技巧,BODH可以讀作“撥電話”,現(xiàn)在你肯定記住啦哈哈。對于這四個進制,要懂得熟練地進行相互轉換!
二進制當然也可以運算,要引入原碼、反碼、補碼三個概念。反碼是除了符號位全部取反,補碼是反碼+1,對于正數,原碼反碼補碼不變!負數就按照上面規(guī)則變換為補碼后正常加減,結果再轉為原碼就是答案,有個技巧是補碼取反再+1就是反碼。
編 碼
上面說的十進制轉為二進制就是一種編碼。在數電里有很多的編碼方式,都有其意義。這里列出個人覺得挺重要的兩個。
1、格雷碼:任意相鄰的兩位之間只相差一位!在正常工作電路中,輸入時常會變化,若輸入突然變化多個位,很容易導致輸出不穩(wěn)定,有毛刺。若把輸入編為格雷碼,會有不錯的效果。格雷碼在后面講到的卡諾圖化簡中會有極大的用處。
2、獨熱碼:這是最簡單的一種編碼了,每個狀態(tài)只有一位是1其他都是0,簡單且暴力,在后面設計有限狀態(tài)機的狀態(tài)變量時常常使用。
2門電路
下面進入門電路,這里會涉及模電的知識。數電是由模電發(fā)展而來的,他們之間的緊密關系,就在門電路這章里體現(xiàn)。
學過模電那肯定很熟悉MOSFET場效應管。在數電中,1表示高電平,0表示低電平,晶體管都處于開關狀態(tài),即可以看成一個開關。用一個NMOS和一個PMOS,NMOS下拉,PMOS上拉,就形成一個CMOS,一個CMOS就是最簡單的一個非門?。?!
咱們看,輸入的A為0時,上拉的PMOS導通,輸出C為1。輸入為1時,下拉的NMOS導通,輸出為1,所以這個電路實現(xiàn)輸出對輸入取反的邏輯功能,就叫其非門。
常用的邏輯門還有與門:有0出0;或門:有1出1;與非門:有0出1;或非門:有1出0;
下圖中左圖是與非門,右圖是或非門。(技巧:只看下拉的NMOS!串在一起,就是與非門,并在一起,就是或非門。)
在數電,邏輯門還有許多許多:
大家也要很熟悉右邊對應的邏輯符號哦。所以至此,了解了邏輯門的內部構造后,我們可以把它封裝成一個個邏輯符號,就如同我們把集成運放電路封裝成運放符號一樣。接下來,我們就可以放下模電,進入純邏輯的數字電路!
3邏輯代數
在數電里,我們描述一個電路的功能,有三種方式。邏輯表達式,真值表和邏輯電路圖。
這仨說的是一個事情!就如同西紅柿和番茄。
知道了其中任何一個,其他兩個你就知道了。但其中最重要的,還是真值表,我們的關注點更多會落在它上面。真值表一寫出來,所有東西都明了了。
真值表的左邊,是變量的所有情況,如果兩個變量,那就是有 22=4 種狀態(tài),同理三個變量就 23=8種狀態(tài)。真值表的右邊,是不同狀態(tài)輸入電路之后的輸出。我們在輸出端一般只關注1,像上面的真值表,有三個1,則把他們對應的狀態(tài)都相或,即寫成標準與或式(最小項之和),
Y?= A ′ B ′ + A ′ B + A B ′
經過化簡,就是 Y = ( A B ) ′ Y = (AB)'Y=(AB)?′。
還有一個技巧,當輸出很多1時,我們可以只關注0,那么寫出來的就是 Y′的表達式,再取反一下就行!
化 簡
邏輯表達式很復雜時,我們如何化簡?常用的有公式法和卡諾圖法。
公式法:有大名鼎鼎的摩根公式
還有下面這個公式也是用得非常非常多,推導的話由左往右推比較難,我們試試由右往左推,則會非常簡單。
A+BC=(A+B)(A+C)
其他公式:
卡諾圖化簡
學過數電的童鞋都會驚嘆卡諾圖的巧妙,它的本質就是前面說的格雷碼的邏輯相鄰性,我們拿到一個真值表,就可以畫出一個卡諾圖。三變量的輸入有8個狀態(tài),然后在對應的狀態(tài)框框中寫上它對應的輸出,注意,卡諾圖中的變量時用格雷碼編碼,看下圖中的BC就能知道,只有這樣才能利用上它的邏輯相鄰性,這樣,一個卡諾圖就畫好了,但這只是開始。怎么利用它進行化簡?
下圖中我給分別相鄰的兩個1畫了兩個圈圈,圈圈代表里面的狀態(tài)相或,因為邏輯相鄰性,則兩個狀態(tài)只有一位不同,所以由公式法(A+A'=1)可以消去這一位!即現(xiàn)在這兩個3位的狀態(tài) A′BC′+ABC′可以由一個2位的狀態(tài)代替,即 BC′!
因為前面說過整個輸出的邏輯表達式就是所有輸出為1的狀態(tài)相或,所以我們把所有1圈完,得到的BC'+AB'就是輸出!所以在卡諾圖上畫圈圈就可以把一個復雜的表達式化簡。
前面是最簡單的例子,要想正確使用卡諾圖化簡,要遵守兩個游戲規(guī)則:
1、把1圈完;
2、圈大且少。
第二個尤為重要,即我們畫圈圈時,圈要盡量大,還要盡量少,這樣才能最好地化簡一個表達式。
比如下圖
這樣圈正確嗎?大大地錯誤!沒圈完1。下面這樣呢?
還是不行!因為圈不夠大。下面才為正確:兩個圈圈搞定,結果是 CD' + AB'
卡諾圖還有很多很多的技巧,這里說不完,推薦給大家一個很好的b站視頻:BV16E411s7TE4組合邏輯電路
終于!我們來到了數電的重頭戲之一,組合邏輯電路。其實下面我們才真正開始進入數電。
在數電中,所有的電路,可以分為兩類,一類就是組合邏輯電路,還有一類是時序邏輯電路,這倆占了數電的大半江山。對于組合邏輯電路,定義為輸出只由輸入決定。你可能會問,那還會由什么決定?還會被狀態(tài)決定!這就是時序邏輯電路的特性,等下會講,先搞定這個組合邏輯電路。
小規(guī)模集成電路SSI
如上面這個圖,電路全是由基本邏輯門組成,我們稱其為小規(guī)模集成電路,集成就是邏輯門集成了若干個晶體管嘛,而晶體管是由N型半導體和P型半導體形成,這些半導體是由沙子提煉的硅SI摻雜而成,怎樣,模電數電就串起來了。
對于SSI,我們無非就搞兩件事情,分析和設計。
分析:就是給我一個電路圖,我對他一頓分析得出它的功能。圖→功能
設計:就是我想實現(xiàn)一個功能,通過設計畫出一個對應電路圖。功能→圖
先看分析:現(xiàn)在我有一個電路圖:
然后我可以輕松地將他的表達式寫出,最好再用上化簡知識化簡一下:
然后由表達式我再輕松列出真值表:
由真值表,我們就能分析出它的功能!這回事一個半加器電路(C為進位,S為和),很重要的哦。
再看看設計,現(xiàn)在我們拿到一個想要實現(xiàn)的功能:
由這個功能我們列出對應的真值表,
由真值表輕松地寫出相應的邏輯表達式:
對著表達式,我們就能畫出它的電路圖啦!
你看,組合邏輯電路的設計是分析的逆過程,就是這么程序化,送分的。
中規(guī)模集成電路MSI
一些邏輯門組合在一起能實現(xiàn)特定的功能,比如上面講的半加器,我們將其封裝起來,就成了MSI。
上圖就把所有常見的LSI列了出來,
編碼器:如第一根引腳輸入1,則輸出為00;第二根引腳輸入1,則輸出為01,依此類推;
譯碼器:如輸入為00,則第一根引腳輸出1;如輸入為01,則第二根引腳輸出1,依此類推;
選擇器:比較兩個輸入,如相等就在相等的引腳輸出1;
譯碼器和選擇器尤為重要,因為它們很常用,且能實現(xiàn)任意的組合邏輯表達式。
高規(guī)模集成電路LSI
同理,就是一些MSI組合在一起能表示一個更全面的功能,就將其封裝在一起,變成LSI。
不如PLD(可編程邏輯器件)和 FPGA,這章不是重點,但我想說一下FPGA,這個芯片是相對于單片機來說的另一大控制芯片,使用硬件描述語言(HDL)編程,并行執(zhí)行代碼且性能更強大,目前它的缺點就是太貴了,我相信以后隨著成本下來,它就逐漸進入我們生活,帶來更加智能的世界。
5觸發(fā)器
正式講時序邏輯電路之前,要講講時序邏輯電路的單位模塊,觸發(fā)器。
在平靜祥和的日子里,兩個普普通通的或非門在路上走著,非常純真無邪,
但是突然,一個科學家對它們做了這樣的處理:哈哈哈別害怕
這一搞,整個時代向前推進了一大步!因為這就是RS觸發(fā)器!
我們來看看它的真值表:
相信大家都能分析出來,先說說輸入為11時為什么不允許,因為11會得到輸出00,如果這時輸入再從11變?yōu)?0,那問題就出現(xiàn)了,電路會處于不定的狀態(tài),這肯定不行,所以就禁止了輸入為11的情況。我們重點看看輸入為00時,當電路的狀態(tài)Q為0時,輸出為0;當電路的狀態(tài)Q為1時,輸出為1!組合邏輯電路大為震驚,因為明明輸入是一樣的00,為什么輸出會不同?因為電路的狀態(tài)不同,這就是觸發(fā)器的魅力,也是時序邏輯電路的基礎,也是數電的超級重點!
RS是最初的觸發(fā)器,所以會有一些小問題,隨著時代進步,觸發(fā)器也經歷了許多迭代,好奇的童鞋可以從你們的書上了解這段歷史,這里我直接列出現(xiàn)在用的最多的兩款觸發(fā)器:D觸發(fā)器和JK觸發(fā)器。
這兩款觸發(fā)器都有一個時鐘端,用于輸入時鐘脈沖CLK,輸出會隨著時鐘CLK的變化而刷新,且他們的時鐘觸發(fā)方式是邊沿觸發(fā),即在CLK的上升沿或下降沿觸發(fā),非常的方便。
上圖中下面的公式為觸發(fā)器的輸出方程,對于時序邏輯電路來說就是狀態(tài)方程,是需要我們記住的,相當于這款觸發(fā)器的說明書。我們著重關注D觸發(fā)器!因為它方程最簡單,是最易學的。
6時序邏輯電路
Finally,我們來到了數電的重中之中,也是其魅力所在,時序邏輯電路。
關于它的意義我可以再舉一個例子,有一個機器我每按一下按鈕它會依次輸出12345,這對于組合邏輯電路來說是不可能的任務,因為每一次輸入都是相同的按一下按鈕,為什么輸出會不同,它不理解,而時序邏輯電路說我可以!因為它能記住當前的狀態(tài),從而知道下一步應該怎么走。
觀察上圖能知道時序邏輯電路里面也有組合邏輯電路,是由發(fā)展而來,主要是下面的那個存儲電路,能把電路的現(xiàn)態(tài)(現(xiàn)在的狀態(tài))給記?。亩绊懘螒B(tài)(下一次觸發(fā)的狀態(tài))。
因為時序邏輯電路的主角是觸發(fā)器,也正是由于觸發(fā)器,它引入了時鐘和狀態(tài)這倆重要概念,使我們能通過電路實現(xiàn)的功能更加豐富。
FSM(有限狀態(tài)機)
對于時序邏輯電路,它所有的狀態(tài)變換都可以畫出來,即狀態(tài)轉換圖,就如同真值表描述了整個組合邏輯電路的功能,狀態(tài)轉換圖描述了整個時序電路的功能。這樣在不同狀態(tài)之間跳來跳去的電路或機器,我們就叫它有限狀態(tài)機(Finite State Machine)。(所以FSM肯定是時序邏輯電路)
比如下面這個就是一只貓在一天里的狀態(tài)變化:
這是某人一天的狀態(tài)變化:
寫專業(yè)點(給狀態(tài)編碼),可以是下面這樣,先別害怕,很好分析的:
FSM的分析和設計
各位應該還記得前面組合邏輯電路的分析和設計是多么的簡單,F(xiàn)SM的分析和設計與其概念一樣,分析就是圖→功能,設計就是功能→圖,但過程很不一樣,也是很簡單的!
先看分析,現(xiàn)在我拿到一個電路圖,由兩個D觸發(fā)器組成,所以我知道這個電路狀態(tài)變量為2,即有4個狀態(tài):
由這個電路圖我可以寫出三個方程,激勵方程(輸入方程)、狀態(tài)方程和輸出方程。
激勵方程就是觸發(fā)器的輸入端的方程,D1和D0由圖看很容易寫出表達式;
狀態(tài)方程就是我們之前背的觸發(fā)器的“說明書”,有激勵方程就能輕松寫出Q1n+1和Q0n+1;
輸出方程最簡單,看著輸出端Y,寫出它的表達式就行。
由狀態(tài)方程和輸出方程就可以列出真值表!
由真值表就可以畫出這個FSM的狀態(tài)轉換圖:( X/Y 表示 輸入/輸出 ,該電路沒有輸入所以X沒有)
看著這個狀態(tài)轉換圖,我們可以發(fā)現(xiàn)它的含義,啊,原來它是我的一天的狀態(tài)變化,吃飽了就玩,玩累了就睡,睡醒了就感到餓,餓時突然有吃的,我就會“歡呼”。(歡呼代表輸出為1)
現(xiàn)在來看看設計過程!我有一個功能(我的一天狀態(tài)變化),現(xiàn)在想畫出一個實現(xiàn)該功能的電路:
先經過狀態(tài)編碼,將吃編碼為00,玩編碼為01,餓編碼為10,睡編碼為11,歡呼定義為輸出1,ok,現(xiàn)在就可以畫出整個功能的狀態(tài)轉換圖了!
有狀態(tài)轉換圖,我們畫出對應的真值表,也叫狀態(tài)轉換真值表:
由真值表,我們細心地先看著Y項寫出輸出方程,再看著Q1n+1和Q0n+1寫出狀態(tài)表達式,再由我們背的觸發(fā)器“說明書”,寫出D1和D0的激勵方程,搞定!
三個方程有了,電路圖輕松畫出!
7進階
至此整個數電最基礎的知識我都講到了,雖然很基礎,但是越基礎的東西越重要,其實電路的分析和設計也可以搞得很難,上面那些只是便于大家理解最簡單的例子,想要深入掌握他們還得靠日積月累的做題和鞏固,這篇文章只是幫到大家形成知識框架。
74LS160、74LS194
之后大家會學到74LS160、74LS194這兩個芯片,非常非常的重要,一個是計數芯片,一個是移位芯片,就如譯碼器和選擇器能實現(xiàn)任意組合邏輯電路,它們能實現(xiàn)任意的時序邏輯電路,所以很多題目都會考到它們,讓你用這倆芯片之一設計一個現(xiàn)實生活中的功能。
施密特觸發(fā)電路、單穩(wěn)態(tài)電路、多諧振蕩電路
這三個電路會在波形的發(fā)送與轉換這一章學習到,三個電路都能用邏輯門手搭出來,實現(xiàn)的電路有多種,但波形就是下面這樣,分別是施密特觸發(fā)電路、單穩(wěn)態(tài)電路、多諧振蕩電路。
施密特觸發(fā)電路就是輸入增大到一個A值,輸出取反,但是輸入隨后減小到A值時,輸出沒變化,要繼續(xù)減小到B值,輸出再取反,然后它也還是要增大到A值,輸出才變化,這就是這電路的規(guī)則,很有意思!
單穩(wěn)態(tài)指輸出的穩(wěn)定狀態(tài)只有一個,輸入刺激以下輸出可能會變,但過一段時間它會自己回到穩(wěn)態(tài)。超市的門就是單穩(wěn)態(tài),你推開之后它會自動回到關閉狀態(tài)。
555定時器的重要性就相當于模電中的運放,它每一年的銷量都處于芯片的前列,因為它簡單且太實用了,上面說到的三個電路也可以通過555搭建出來。因為篇幅有限,555的知識得靠各位從書中理解了。
以下分別是555實現(xiàn)施密特觸發(fā)電路、單穩(wěn)態(tài)電路、多諧振蕩電路的電路
AD/DA電路
AD:模擬到數字轉換
DA:數字到模擬轉換
這章你們會學到如何自己手搭一個AD和DA電路。
最后再看一下數電所有知識的知識框架,希望能幫助各位對數電形成大致的了解。