数字逻辑基础与verilog设计_数字电路学习笔记(五):逻辑设计基础
馬上就要正式進入電路設(shè)計了,再來看最后一個知識點:邏輯設(shè)計吧。
之前我們花了兩章,探討了邏輯運算是什么,怎么算;但還有最后一個大問題,巧婦難為無米之炊,我們得先有一個邏輯式,才能對它化簡,并基于結(jié)果做電路設(shè)計。所以,如何把實際生活中的問題轉(zhuǎn)化為邏輯函數(shù)式呢?
先介紹兩種比較標(biāo)準(zhǔn)的函數(shù)的形式:
- 最小項表達式,是若干單項式相加,可以類比成代數(shù)式展開后的樣子,形式類似 ,得名于其因為項中用乘法連接而使得每一項為1的概率都很小。
- 最大項表達式,是若干多項式相乘,可以類比成代數(shù)式因式分解后的樣子,形式類似 ,得名于其因為項中加法連接而使得每一項為1的概率都很大
其中實際中用得比較多的是最小項表達式。本文也將在此式的基礎(chǔ)上討論。
進一步地,我們還會再看邏輯函數(shù)與其他表現(xiàn)形式的轉(zhuǎn)化關(guān)系,并正式介紹兩個工具:邏輯圖和卡諾圖。
一、從對問題的描述得出函數(shù)式
我們開篇的問題中,就是利用了把問題轉(zhuǎn)化為比較“標(biāo)準(zhǔn)”的邏輯命題,加以處理的。一般地說,通過自然語言表述得出方程,首先要把任務(wù)寫成“只有...且...時,才...”(最大項表達式)或“只要...或...時,就...”(最小項表達式)的形式。它要求該問題不能包含太復(fù)雜的嵌套關(guān)系,變量也不能太多,所以局限比較大。但用這種方法得出的函數(shù)式往往可以省去化簡的步驟。
二、從真值表得出函數(shù)式
假設(shè)我們有這樣一個真值表:
如何方便地寫出它的表達式?
先試試把它轉(zhuǎn)述為自然語言后照著寫:“只要A,B,C,D分別為0000,或者0101,或者0110,或者......時,X就為1”。這樣,的確可以寫出方程。
那么,能不能直接通過真值表寫出函數(shù)式呢?想一想,之前提到,所有的描述都可以轉(zhuǎn)化為所謂“最小項表達式”,其中每一個項都是一個單項式,A、B、C、D分別取原變量或反變量。比如先看第一行,當(dāng)ABCD取0000時,最終結(jié)果為1?!@對應(yīng)了A’B’C’D’=1。所以,從真值表寫出最小項表達式的方法是先找出所有使得因變量為1的自變量值的組合,再把每一個組合對應(yīng)的乘積項寫出來,每個變量取值為0則寫上反變量,1則寫上原變量,這樣使得取這組值時該項為1,最后把這些項用加法相連即可。
舉個例子:我們至今沒有推導(dǎo)過異或邏輯如何用與或非表達。現(xiàn)在讓我們證明一遍。
有了真值表,就可以直接看使得X=1的A,B取值組合,發(fā)現(xiàn)有01,10兩個;接著,分別寫出它們對應(yīng)的乘積項,即A'B和AB';最后把它們連在一起:AB'+A'B,即可。
三、從函數(shù)式得出真值表
要畫真值表,首先必須把所有自變量可能的取值都填在前幾列中。建議使用二進制排列,即0000,0001,0010……等,不容易缺漏。
接下來,把函數(shù)式化成最小項表達式。比如,如果初始式為
,則需要先展開成 ,再進一步寫成每一項都含有三個變量的標(biāo)準(zhǔn)形式——具體地說,運用公式 ,得到 。最后,在對應(yīng)的真值表行中“X”一欄填上“1”,其他行則填0——此處,三項分別對應(yīng)110,101,111。如果說這種方法是反向填表,那自然還有另一種正向方法——把每一行的A,B,C的值依次代入函數(shù)式,求出X的值。這種方法適用于變量較多,而且原式比較簡單,如果完全展開很費時間的式子。
四、邏輯圖與函數(shù)式的轉(zhuǎn)化
什么是邏輯圖?我們知道,任何一個函數(shù),比如
,都可以表示為一個“黑箱”——只要輸入一個x,一個y,一個z,這個黑箱就會返回一個對應(yīng)的a的值。而如果我們想查看它的內(nèi)部邏輯,我們可能會看到這樣的:
“+”把x和y連接起來,作m=x+y運算;“/”又連接了“+”的輸出和z,作a=m/z運算,并輸出a。所以,這個圖就可以表示
。同樣地,還記得七個基本邏輯的邏輯符號么?
從左至右,從上至下:或、與、非、異或、同或、與非、或非如果我們有式子
,就可以用同樣的思路,連出一個圖:上半部分,得到A'B;下半部分,是AB'。兩個再用或連接,就有了A'B+AB'。這樣,便可以把一個函數(shù)式直觀地表達出來。并且,在實際的電路制作中,這樣的設(shè)計圖也可以成為抽象的邏輯式與實際的電路板間的橋梁。
所以,要想繪出邏輯圖,一般來說,只要先理清函數(shù)的運算順序,再把對應(yīng)的邏輯符號用線連接起來即可。再看一個例子:經(jīng)典的檔案室開門問題,已有函數(shù)式:
一步步看它的運算順序:B與C相乘;A與乘積相加;D的反變量與這個和相乘。最后輸出X。因此,可以畫出對應(yīng)的邏輯圖。
反向地,如果有了這個邏輯圖,就可以通過沿著邏輯圖走向分析,最終得出函數(shù)式。
還可以發(fā)現(xiàn),邏輯圖和計算機中的運算樹本質(zhì)上是相同的。所以,我們可以用中序遍歷的思路,寫出函數(shù)式。
五、卡諾圖
在最小項表達式的化簡中,我們本質(zhì)上在做什么呢?比如,
——兩項中只有一個變量不同,所以變成了 。如果我們有n變量最小項表達式,那么它至多可以有
項——因為每個變量都會以原變量或反變量出現(xiàn)。而如果原變量表示1,反變量表示0,則每一項都可以對應(yīng)一個唯一的n位二進制碼,比如 就是1001。而
對應(yīng)的二進制數(shù)為101,111,也只差一個數(shù)位。那么,能不能用一個表格,可以容納所有的可能項,并直觀地發(fā)現(xiàn)這些能夠合并的”相鄰項“呢?于是,工程師莫里斯·卡諾便創(chuàng)造了卡諾圖。這是卡諾圖的一般形式。先把所有相關(guān)變量分為數(shù)量大致相等的兩部分,一部分(AB)沿行布置,一部分(CD)沿列布置。再把它們以格雷碼編碼——00,01,11,10等;這樣,每個格子就對應(yīng)了最小項表達式中的唯一一個項,比如
就位于第四列,第二行位置,對應(yīng)AB=10,CD=01。并且注意到,如果兩個項可以化簡,如 :則它們在卡諾圖上必定相鄰。它背后的原理是當(dāng)BCD=111時,無論A為0還是1,結(jié)果都為1,所以A就成了無關(guān)項,可以消去。按照這個道理,只要是圈起的區(qū)域是大小為
的矩形,那么都可以化簡成一個項:圈起的區(qū)域覆蓋了所有A、B的值,所以A、B都是無關(guān)項;同時還覆蓋了CD=01與11,所以C也是無關(guān)項,最終結(jié)果為D。
卡諾圖并不是二維的,而是循環(huán)的,可以從一個邊界來到另一個邊界,形成一個空間中閉合的形狀。比如:
也是可以合并的。
使用卡諾圖化簡時,先把所有最小項在表中對應(yīng)的位置打勾,再用圈覆蓋這些勾。具體有三個原則:
- 圈可以相互重疊交錯,但必須覆蓋所有勾,且不能覆蓋空白格,否則會使函數(shù)發(fā)生改變。
- 每個圈必須盡量大,這樣可以盡可能多地消去無關(guān)變量。
- 圈要盡量少,這樣會使最終的項的數(shù)量最少,因為每個圈會對應(yīng)最簡式中的一個項。
比如,化簡函數(shù)
。先把所有項填入卡諾圖:再把它們?nèi)咳ζ饋?#xff0c;盡量擴大圈的大小和減少圈的數(shù)量:
圈起來的區(qū)域有:(0000,0010), (0010,0110), (1010,0010), (0101,1101,0111,1111)。所以化簡之后,剩下的項分別為:A'B'D', A'CD', B'CD', BD。所以,我們最終的化簡結(jié)果便是
。卡諾圖的使用需要一定技巧,所以不是非常常用。但是,卡諾圖和真值表都可以作為函數(shù)的可視化表達。在“時序電路”一部分,我們將會看到它的作用。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的数字逻辑基础与verilog设计_数字电路学习笔记(五):逻辑设计基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 安卓apk签名提取工具_Android测
- 下一篇: 2018qs计算机科学专业,2018QS
