邏輯函數(shù)化簡(jiǎn):從公式法到卡諾圖的數(shù)字電路設(shè)計(jì)核心技能
1. 項(xiàng)目概述從“會(huì)算”到“會(huì)變”的思維躍遷剛接觸數(shù)字電路的朋友可能都有過(guò)這樣的經(jīng)歷面對(duì)一個(gè)邏輯函數(shù)表達(dá)式感覺(jué)每個(gè)字母和符號(hào)都認(rèn)識(shí)但組合在一起就像一團(tuán)亂麻不知道從何下手。課本上告訴你邏輯函數(shù)可以化簡(jiǎn)可以變換但為什么要這么做以及更重要的是怎么才能又快又準(zhǔn)地做到這正是“邏輯函數(shù)的變換與化簡(jiǎn)”這個(gè)核心課題要解決的問(wèn)題。它絕不僅僅是書(shū)本上的幾道習(xí)題而是貫穿整個(gè)數(shù)字系統(tǒng)設(shè)計(jì)、從理論到實(shí)踐、從芯片內(nèi)部到電路板上的基本功。簡(jiǎn)單來(lái)說(shuō)邏輯函數(shù)的變換與化簡(jiǎn)目標(biāo)就是用更少的邏輯門、更簡(jiǎn)單的連線實(shí)現(xiàn)完全相同的邏輯功能。這直接關(guān)系到你設(shè)計(jì)的電路成本是高是低、運(yùn)行速度是快是慢、可靠性是好是壞。一個(gè)未經(jīng)化簡(jiǎn)的復(fù)雜表達(dá)式可能需要十幾個(gè)與非門來(lái)實(shí)現(xiàn)而經(jīng)過(guò)巧妙化簡(jiǎn)后可能三四個(gè)門就搞定了。在動(dòng)輒集成上億個(gè)晶體管的芯片里這種“化簡(jiǎn)”思維帶來(lái)的面積和功耗優(yōu)化是天文數(shù)字級(jí)別的。所以無(wú)論你是正在備考的學(xué)生還是初入行的硬件工程師或是嵌入式開(kāi)發(fā)中需要理解底層硬件的程序員掌握這套方法都至關(guān)重要。它就像木匠手中的刨子和鑿子是把你腦中抽象的邏輯構(gòu)思打磨成高效、優(yōu)雅的物理實(shí)現(xiàn)的關(guān)鍵工具。接下來(lái)我將結(jié)合自己多年學(xué)習(xí)和項(xiàng)目中的踩坑經(jīng)驗(yàn)帶你徹底吃透邏輯函數(shù)的變換與化簡(jiǎn)重點(diǎn)聚焦兩個(gè)核心武器公式法的嚴(yán)謹(jǐn)推導(dǎo)與卡諾圖的直觀洞察。2. 邏輯函數(shù)化簡(jiǎn)的核心價(jià)值與底層邏輯在深入具體方法之前我們必須先搞清楚我們費(fèi)這么大勁化簡(jiǎn)到底圖什么這背后的驅(qū)動(dòng)力源于數(shù)字電路設(shè)計(jì)的三個(gè)核心約束成本、速度和可靠性。2.1 化簡(jiǎn)如何直接轉(zhuǎn)化為“真金白銀”成本是最直觀的驅(qū)動(dòng)力。在數(shù)字電路中最基本的成本單元是邏輯門與門、或門、非門等和它們之間的連線。每一個(gè)門都需要硅片面積都需要功耗。一個(gè)未經(jīng)化簡(jiǎn)的邏輯函數(shù)例如F ABC ABC ABC ABC如果用與-或表達(dá)式直接實(shí)現(xiàn)需要4個(gè)三輸入與門和1個(gè)四輸入或門。但如果我們化簡(jiǎn)后得到F A⊕B⊕C異或只需要2個(gè)兩輸入異或門異或門可由基本門構(gòu)成但整體上更簡(jiǎn)潔。門數(shù)量的減少直接意味著芯片面積的縮小、生產(chǎn)成本的降低以及功耗的下降。在大規(guī)模集成電路中這種優(yōu)化是成指數(shù)級(jí)放大的。2.2 性能提升從關(guān)鍵路徑看化簡(jiǎn)的威力速度是另一個(gè)關(guān)鍵指標(biāo)。數(shù)字電路的延遲主要取決于信號(hào)從輸入到輸出所經(jīng)過(guò)的邏輯門級(jí)數(shù)即關(guān)鍵路徑。一個(gè)復(fù)雜的、未化簡(jiǎn)的表達(dá)式可能導(dǎo)致信號(hào)需要串行通過(guò)多個(gè)邏輯門累積的延遲就會(huì)很大?;?jiǎn)后的表達(dá)式往往意味著更少的邏輯級(jí)數(shù)。例如一個(gè)需要先經(jīng)過(guò)兩個(gè)與門再經(jīng)過(guò)一個(gè)或門的路徑如果化簡(jiǎn)后能合并為一個(gè)更復(fù)雜的復(fù)合門如與或非門單級(jí)實(shí)現(xiàn)那么傳播延遲將顯著縮短電路的工作頻率就能提得更高。在高速CPU、內(nèi)存接口等場(chǎng)景下這幾十皮秒ps的優(yōu)化可能就是成敗的關(guān)鍵。2.3 可靠性化簡(jiǎn)如何讓電路更“健壯”可靠性常常被初學(xué)者忽略。一個(gè)復(fù)雜的電路意味著更多的連接點(diǎn)、更多的晶體管。從概率上講元器件越多出故障的可能性就越高?;?jiǎn)減少了元器件的數(shù)量也就直接降低了系統(tǒng)的失效率。此外復(fù)雜的布線容易引入串?dāng)_、反射等信號(hào)完整性問(wèn)題簡(jiǎn)潔的電路布局則更清晰抗干擾能力更強(qiáng)。在一些高可靠性的應(yīng)用領(lǐng)域如航空航天、醫(yī)療電子電路的簡(jiǎn)潔性本身就是可靠性的重要保障。注意化簡(jiǎn)的終極目標(biāo)并非追求“最簡(jiǎn)”的數(shù)學(xué)形式而是尋找在特定工藝庫(kù)如某型號(hào)FPGA或ASIC庫(kù)約束下的“最優(yōu)”實(shí)現(xiàn)。有時(shí)數(shù)學(xué)上的最簡(jiǎn)式由于庫(kù)中缺乏對(duì)應(yīng)的復(fù)合門實(shí)際實(shí)現(xiàn)起來(lái)反而不如一個(gè)稍繁但由標(biāo)準(zhǔn)門高效構(gòu)成的電路。2.4 邏輯函數(shù)的標(biāo)準(zhǔn)形式化簡(jiǎn)的起跑線要進(jìn)行化簡(jiǎn)我們首先要將邏輯函數(shù)置于一個(gè)標(biāo)準(zhǔn)的起跑線上。最常用的兩種標(biāo)準(zhǔn)形式是“最小項(xiàng)之和”與“最大項(xiàng)之積”。最小項(xiàng)之和Standard Sum of Products, SOP也稱為“積之和”形式。每個(gè)乘積項(xiàng)與項(xiàng)包含了所有輸入變量原變量或反變量。例如對(duì)于三變量A, B, C最小項(xiàng)有8個(gè)ABC(m0),ABC(m1), ...,ABC(m7)。任何一個(gè)邏輯函數(shù)都可以唯一地表示為若干個(gè)最小項(xiàng)之和。例如F(A,B,C) Σm(1,3,5,7)表示函數(shù)在最小項(xiàng)m1, m3, m5, m7處取值為1。SOP形式直接對(duì)應(yīng)著由與門陣列后接一個(gè)或門的電路結(jié)構(gòu)PLA結(jié)構(gòu)非常直觀。最大項(xiàng)之積Standard Product of Sums, POS也稱為“和之積”形式。每個(gè)和項(xiàng)或項(xiàng)包含了所有輸入變量。同樣三變量最大項(xiàng)也有8個(gè)(ABC)(M0),(ABC)(M1), ...,(ABC)(M7)。函數(shù)也可以表示為最大項(xiàng)之積如F(A,B,C) ΠM(0,2,4,6)。POS形式對(duì)應(yīng)著或門陣列后接一個(gè)與門的結(jié)構(gòu)。SOP和POS可以通過(guò)德摩根定律相互轉(zhuǎn)換選擇哪種作為起點(diǎn)有時(shí)取決于真值表中0少還是1少以便于化簡(jiǎn)。理解這兩種形式是使用公式法和卡諾圖法的基礎(chǔ)。公式法擅長(zhǎng)處理代數(shù)變形而卡諾圖則為我們提供了基于這兩種標(biāo)準(zhǔn)形式的圖形化化簡(jiǎn)工具。3. 公式法化簡(jiǎn)代數(shù)演算的嚴(yán)謹(jǐn)之美公式法也叫代數(shù)化簡(jiǎn)法其核心是利用一系列基本的邏輯代數(shù)公式和定理對(duì)邏輯函數(shù)表達(dá)式進(jìn)行等價(jià)變換直至無(wú)法再化。這種方法鍛煉的是你的邏輯思維和代數(shù)功底是理解化簡(jiǎn)本質(zhì)的根本。3.1 必須爛熟于心的核心公式工具箱公式法不是漫無(wú)目的地嘗試而是有章可循的。以下這幾組公式是你必須內(nèi)化成本能的工具基本定律交換律、結(jié)合律、分配律和普通代數(shù)類似為變換提供基礎(chǔ)。互補(bǔ)律A A 1,A · A 0。這是產(chǎn)生消去的關(guān)鍵。重疊律A A A,A · A A。用于合并相同項(xiàng)。0-1律A 0 A,A · 1 A,A 1 1,A · 0 0。關(guān)鍵定理吸收律A AB AA(AB) A。這是化簡(jiǎn)中最常用、最有效的武器之一可以直接“吃掉”冗余項(xiàng)。消因律A AB A B。這個(gè)公式非常神奇它允許你在特定條件下消去一個(gè)變量。證明一下A AB (AA)(AB) 1·(AB) AB用了分配律的逆形式。并項(xiàng)律AB AB A。兩項(xiàng)中部分因子互補(bǔ)其余因子相同則可合并為相同的因子。添加項(xiàng)律冗余律AB AC BC AB AC。第三項(xiàng)BC是前兩項(xiàng)的“冗余項(xiàng)”可以去掉。這個(gè)公式在判斷化簡(jiǎn)是否徹底時(shí)很有用。德摩根定律(AB) A B(AB) AB。這是進(jìn)行邏輯形式變換與或、或與非等的橋梁尤其在將SOP轉(zhuǎn)換為只用與非門或只用或非門實(shí)現(xiàn)時(shí)至關(guān)重要。3.2 公式法化簡(jiǎn)的實(shí)戰(zhàn)步驟與心法掌握了工具我們來(lái)看如何運(yùn)用?;?jiǎn)通常是一個(gè)“先合并、再消去”的過(guò)程。步驟一化為標(biāo)準(zhǔn)或易于處理的形式。通常先展開(kāi)成SOP形式積之和因?yàn)槲?、合并等操作在SOP下更直觀。步驟二尋找并應(yīng)用吸收與合并。眼觀六路尋找能應(yīng)用吸收律(AABA)和并項(xiàng)律(ABABA)的項(xiàng)。這是化簡(jiǎn)的主力。步驟三嘗試添加冗余項(xiàng)進(jìn)行反向化簡(jiǎn)。這需要一些技巧和洞察力。有時(shí)直接化不下去可以嘗試反向思考利用冗余律AB AC AB AC BC先故意添加一個(gè)冗余項(xiàng)看看它能否與其他項(xiàng)結(jié)合產(chǎn)生更進(jìn)一步的化簡(jiǎn)。讓我們來(lái)看一個(gè)完整的例子化簡(jiǎn)函數(shù)F AB AC AD ABCD。觀察表達(dá)式已經(jīng)是SOP形式。注意第一項(xiàng)是AB最后一項(xiàng)包含AB。局部合并目前沒(méi)有直接的ABAB或AAB形式。我們注意到AC和AD有公因子A可以嘗試對(duì)它們處理AC AD A(CD)。但這不是SOP了我們通常保持SOP以便繼續(xù)用公式法所以先保留原樣。嘗試添加項(xiàng)關(guān)鍵技巧看看能否利用AB AB。現(xiàn)有AB但沒(méi)有AB我們有ABCD。我們可以利用公式X XY X Y但這里X是BA和ACD是它的系數(shù)這樣看有點(diǎn)亂。換個(gè)思路對(duì)AB和ABCD使用添加項(xiàng)律不直接。更系統(tǒng)的方法——配項(xiàng)為了創(chuàng)造合并機(jī)會(huì)可以重復(fù)寫(xiě)入某一項(xiàng)因?yàn)锳AA。觀察AB如果我們能配出一個(gè)ABCD或許能和ABCD合并ABCD可以從哪里來(lái)可以從AC和AD來(lái)嗎AC A(CC)...這樣配項(xiàng)會(huì)越來(lái)越復(fù)雜。換一個(gè)高效的思路直接對(duì)AB和AC、AD應(yīng)用吸收律的擴(kuò)展形式。實(shí)際上AB AC AD可以把A提出來(lái)A(B C D)。根據(jù)消因律A AB A B的推廣形式其實(shí)這里可以直接用吸收律的思想A(B C D)中只要BCD這個(gè)或項(xiàng)為真結(jié)果就由A決定。但這不是嚴(yán)格的公式法步驟。讓我們嚴(yán)格按公式法做F AB AC AD ABCD A(B C D) ABCD分配律提A 現(xiàn)在令X B C D 則F AX ABCD。 這個(gè)形式很像A AB嗎不像。因?yàn)閄很復(fù)雜。仔細(xì)觀察最后一項(xiàng)ABCD。它和第一項(xiàng)AB有共同的B。我們可以對(duì)AB和ABCD操作嗎把AB寫(xiě)成AB(CD (CD))這又會(huì)引入新變量。其實(shí)這里用公式法已經(jīng)有點(diǎn)繁瑣了。這個(gè)例子恰恰揭示了公式法的局限性對(duì)于變量多、項(xiàng)數(shù)多的函數(shù)尋找配項(xiàng)和合并的機(jī)會(huì)需要很高的技巧和運(yùn)氣。這時(shí)圖形化的卡諾圖方法就顯示出其無(wú)與倫比的直觀優(yōu)勢(shì)。我們通過(guò)這個(gè)例子體會(huì)到公式法的思維過(guò)程即可它的答案通過(guò)卡諾圖可以輕松得到為F A BCD。你可以驗(yàn)證一下。實(shí)操心得公式法更像“內(nèi)功”需要大量練習(xí)來(lái)培養(yǎng)對(duì)公式的敏感度。在實(shí)戰(zhàn)中對(duì)于四變量及以下的函數(shù)我強(qiáng)烈建議直接使用卡諾圖。公式法更適合在卡諾圖化簡(jiǎn)后用于驗(yàn)證結(jié)果或進(jìn)行進(jìn)一步的代數(shù)形式變換如轉(zhuǎn)換為全與非門結(jié)構(gòu)。4. 卡諾圖化簡(jiǎn)圖形直覺(jué)的降維打擊如果說(shuō)公式法是“劍宗”講究招式精巧那么卡諾圖就是“氣宗”一力降十會(huì)憑借直觀的圖形洞察力快速找到最優(yōu)解。它是化簡(jiǎn)邏輯函數(shù)尤其是四變量及以下函數(shù)的首選神器。4.1 卡諾圖的構(gòu)建與編號(hào)奧秘卡諾圖實(shí)際上是真值表的圖形化排列但其排列順序至關(guān)重要必須遵循格雷碼順序。格雷碼的特點(diǎn)是相鄰兩個(gè)編碼之間只有一位不同。這個(gè)特性保證了在卡諾圖上幾何位置相鄰的小格所代表的最小項(xiàng)在邏輯上也是相鄰的即只有一個(gè)變量不同。二變量卡諾圖有4個(gè)格對(duì)應(yīng)m0, m1, m2, m3。變量A和B通常A代表行B代表列。排列順序是00, 01, 11, 10注意不是10, 11。三變量卡諾圖有8個(gè)格。通常用兩行四列。行變量A00, 01, 11, 10列變量BC00, 01, 11, 10。四變量卡諾圖有16個(gè)格四行四列。行變量AB列變量CD均按格雷碼排列。關(guān)鍵理解卡諾圖的“相鄰”不僅是上下左右還包括首尾相鄰和對(duì)折相鄰。即最左列和最右列是相鄰的最上行和最下行也是相鄰的。你可以把它想象成一個(gè)卷起來(lái)的圓筒或者一個(gè)球面。這是卡諾圖能合并更多項(xiàng)的關(guān)鍵。4.2 圈圈的藝術(shù)合并最小項(xiàng)的核心規(guī)則在卡諾圖中填入函數(shù)值1或0或無(wú)關(guān)項(xiàng)X后化簡(jiǎn)工作就變成了“畫(huà)圈圈”的游戲。目標(biāo)是用最少的圈覆蓋所有標(biāo)1的格子并且每個(gè)圈要盡可能大。合并規(guī)則圈的大小必須是2的冪次可以圈2個(gè)、4個(gè)、8個(gè)、16個(gè)……相鄰的“1”。圈越大越好圈住的格子越多消去的變量就越多。一個(gè)圈對(duì)應(yīng)一個(gè)乘積項(xiàng)。圈住2個(gè)“1”可以消去1個(gè)變量。圈住4個(gè)“1”可以消去2個(gè)變量。圈住8個(gè)“1”可以消去3個(gè)變量。以此類推。每個(gè)圈必須是矩形或正方形考慮首尾相鄰后的形狀。每個(gè)“1”至少被一個(gè)圈覆蓋允許被多個(gè)圈覆蓋這對(duì)應(yīng)公式法中的重復(fù)使用某一項(xiàng)AAA。圈的數(shù)量要盡可能少因?yàn)槊總€(gè)圈對(duì)應(yīng)一個(gè)與門。如何寫(xiě)化簡(jiǎn)結(jié)果觀察圈中哪些變量發(fā)生了變化哪些變量是恒定的。發(fā)生變化的變量被消去恒定不變的變量原變量為1反變量為0保留下來(lái)構(gòu)成乘積項(xiàng)。4.3 實(shí)戰(zhàn)演練四變量卡諾圖化簡(jiǎn)精講讓我們化簡(jiǎn)函數(shù)F(A,B,C,D) Σm(0,2,3,5,7,8,10,11,13,15)。畫(huà)出四變量卡諾圖并填入“1”。行AB00, 01, 11, 10列CD00, 01, 11, 10。m0 (0000): AB00, CD00 - 左上角填1。m2 (0010): AB00, CD10 - 00行10列填1。m3 (0011): AB00, CD11 - 填1。m5 (0101): AB01, CD01 - 填1。m7 (0111): AB01, CD11 - 填1。m8 (1000): AB10, CD00 - 填1。m10 (1010): AB10, CD10 - 填1。m11 (1011): AB10, CD11 - 填1。m13 (1101): AB11, CD01 - 填1。m15 (1111): AB11, CD11 - 填1。開(kāi)始畫(huà)圈尋找最大的圈觀察中間四個(gè)“1”m3, m7, m11, m15。它們構(gòu)成一個(gè)2x2的正方形嗎m3(0011), m7(0111), m11(1011), m15(1111)。它們的行AB分別是00,01,10,11——全了說(shuō)明AB變化了列CD都是11恒定。所以這個(gè)圈消去了A和B保留CD因?yàn)镃1,D1。得到一項(xiàng)CD。再找觀察四個(gè)角m0(0000), m2(0010), m8(1000), m10(1010)。它們也構(gòu)成一個(gè)“圈”嗎在卡諾圖上m0和m2相鄰左右m8和m10相鄰左右。m0和m8相鄰嗎是的首尾相鄰上下。m2和m10也首尾相鄰。所以這四個(gè)角在拓?fù)渖鲜窍噜彽目梢匀ζ饋?lái)。在這個(gè)圈里A和C變化了A有0有1C有0有1B和D恒定B0 D0。所以得到項(xiàng)BD。覆蓋剩余的“1”m5(0101)和m13(1101)還沒(méi)被覆蓋。它們上下相鄰嗎m5在AB01行m13在AB11行列都是CD01。它們相鄰AB只有一位不同。圈住這兩個(gè)A變化了B恒定1C恒定0D恒定1。所以得到項(xiàng)BCD。檢查m7(0111)已經(jīng)被第一個(gè)圈(CD)覆蓋了。所有“1”都被覆蓋完畢。寫(xiě)出最簡(jiǎn)與或式F CD BD BCD。注意事項(xiàng)畫(huà)圈時(shí)一定要優(yōu)先畫(huà)最大的圈即使它覆蓋的某些“1”已經(jīng)被其他小圈覆蓋過(guò)。因?yàn)榇笕?duì)應(yīng)更簡(jiǎn)單的項(xiàng)變量少。我們的目標(biāo)是“圈最大”和“圈最少”在兩者沖突時(shí)優(yōu)先保證“圈最大”圈數(shù)量多一點(diǎn)可能也能接受但通常能找到兩者兼顧的方案。4.4 利用無(wú)關(guān)項(xiàng)Don‘t Care進(jìn)行極致化簡(jiǎn)在實(shí)際設(shè)計(jì)中某些輸入組合永遠(yuǎn)不會(huì)出現(xiàn)或者當(dāng)它們出現(xiàn)時(shí)輸出是0是1我們并不關(guān)心。這些最小項(xiàng)稱為無(wú)關(guān)項(xiàng)在卡諾圖中用“X”表示。無(wú)關(guān)項(xiàng)是化簡(jiǎn)的“萬(wàn)能牌”我們可以根據(jù)需要靈活地將它們當(dāng)作“1”或者“0”以幫助畫(huà)出更大的圈。例子設(shè)計(jì)一個(gè)8421BCD碼的“四舍五入”電路。輸入是8421BCD碼ABCDA是最高位當(dāng)輸入大于等于5時(shí)輸出F1否則F0。但8421BCD碼只使用0000到1001這十個(gè)組合1010到1111這六個(gè)組合是無(wú)效的作為無(wú)關(guān)項(xiàng)。真值表m0-m4: F0; m5-m9: F1; m10-m15: d (無(wú)關(guān)項(xiàng))。畫(huà)卡諾圖填入0,1和X。畫(huà)圈如果不利用無(wú)關(guān)項(xiàng)圈住m5,m7,m9等比較麻煩。利用無(wú)關(guān)項(xiàng)后我們可以把m10,m11,m12,m13,m14,m15這些X根據(jù)需要當(dāng)作1。可以畫(huà)一個(gè)很大的圈覆蓋m5,m7,m13,m15以及m12,m14等X這個(gè)圈可能對(duì)應(yīng)A因?yàn)楫?dāng)A1時(shí)數(shù)字肯定8? 不完全是還要看其他位。更合理的畫(huà)法是圈住m5,m7,m13,m15,m12,m14,m8,m9... 實(shí)際上經(jīng)過(guò)優(yōu)化最簡(jiǎn)結(jié)果往往是F A BD BC。這里的關(guān)鍵是通過(guò)把某些X當(dāng)作1我們把原本分散的“1”連接成了更大的矩形塊從而消去了更多變量。處理無(wú)關(guān)項(xiàng)的心得不要一開(kāi)始就把所有X都當(dāng)成1。先圈必須覆蓋的、確定的“1”圈的時(shí)候觀察附近的X如果把這個(gè)X當(dāng)作1能讓我畫(huà)的圈變得更大那就把它拉進(jìn)來(lái)。如果某個(gè)X被所有圈都排除在外那就把它當(dāng)0處理。這個(gè)過(guò)程有一定的試探性。5. 從理論到實(shí)現(xiàn)化簡(jiǎn)結(jié)果的電路轉(zhuǎn)換與優(yōu)化化簡(jiǎn)得到最簡(jiǎn)與或式SOP或或與式POS并不是終點(diǎn)我們還需要將其轉(zhuǎn)換為實(shí)際可用的電路?,F(xiàn)代數(shù)字電路設(shè)計(jì)尤其是基于標(biāo)準(zhǔn)單元庫(kù)或FPGA的設(shè)計(jì)有特定的偏好。5.1 化為全“與非門”或全“或非門”電路在實(shí)際芯片制造中為了簡(jiǎn)化生產(chǎn)工藝、提高成品率常常希望整個(gè)電路只使用同一種基本門電路。最常用的就是“全與非門”和“全或非門”實(shí)現(xiàn)因?yàn)檫@兩種門本身是完備的可以組合實(shí)現(xiàn)任何邏輯功能?;癁槿c非門電路對(duì)最簡(jiǎn)與或式F AB CD求兩次反。應(yīng)用一次德摩根定律F ((AB CD)) ((AB) · (CD))。看結(jié)果最外層是一個(gè)與非門輸入是兩個(gè)內(nèi)部項(xiàng)(AB)和(CD)而這兩項(xiàng)各自又是一個(gè)與非門(AB)是A和B的與非(CD)是C和D的與非。因此F AB CD可以用三個(gè)兩輸入與非門實(shí)現(xiàn)前兩個(gè)分別實(shí)現(xiàn)(AB)和(CD)第三個(gè)將這兩個(gè)輸出作為輸入進(jìn)行與非?;癁槿蚍情T電路 通常先通過(guò)反演規(guī)則或?qū)ε际降玫阶詈?jiǎn)或與式POS然后對(duì)POS式兩次求反再用德摩根定律展開(kāi)為或非-或非形式。例如若F (AB)(CD)則F [((AB)(CD))]這就是一個(gè)或非門輸入到另一個(gè)或非門。實(shí)操技巧在FPGA設(shè)計(jì)中綜合工具會(huì)自動(dòng)完成這些轉(zhuǎn)換和優(yōu)化。但理解這個(gè)過(guò)程能幫助你在閱讀綜合報(bào)告、進(jìn)行手動(dòng)邏輯優(yōu)化或設(shè)計(jì)底層單元時(shí)更有章法。5.2 多輸出邏輯函數(shù)的化簡(jiǎn)資源共享的藝術(shù)現(xiàn)實(shí)中我們經(jīng)常需要設(shè)計(jì)有多個(gè)輸出端的電路。例如一個(gè)編碼器有多個(gè)輸出位。如果對(duì)每個(gè)輸出函數(shù)單獨(dú)進(jìn)行化簡(jiǎn)然后簡(jiǎn)單拼在一起往往不是最優(yōu)的因?yàn)椴煌敵龊瘮?shù)之間可能共享一些相同的子項(xiàng)。多輸出化簡(jiǎn)的核心思想尋找多個(gè)輸出函數(shù)的公共乘積項(xiàng)。即使這個(gè)公共項(xiàng)對(duì)某個(gè)函數(shù)來(lái)說(shuō)不是其最簡(jiǎn)式必需的即單獨(dú)化簡(jiǎn)該函數(shù)時(shí)不會(huì)出現(xiàn)此項(xiàng)但只要它能被多個(gè)函數(shù)共用且引入它不會(huì)過(guò)多增加其他函數(shù)的復(fù)雜度從整體門電路數(shù)量來(lái)看可能就是更優(yōu)的。方法分別列出每個(gè)輸出函數(shù)的卡諾圖或真值表。在畫(huà)圈時(shí)不僅要看單個(gè)圖還要跨圖觀察。尋找那些在多個(gè)卡諾圖的相同位置都為“1”的格子群。嘗試畫(huà)一個(gè)能覆蓋多個(gè)輸出函數(shù)中“1”的公共圈。這個(gè)圈產(chǎn)生的乘積項(xiàng)可以作為多個(gè)輸出函數(shù)的輸入。平衡利弊引入公共項(xiàng)后檢查是否導(dǎo)致某個(gè)單獨(dú)函數(shù)的圈變得復(fù)雜或增多。有時(shí)需要犧牲一點(diǎn)局部最優(yōu)換取全局最優(yōu)。這個(gè)過(guò)程比單輸出復(fù)雜得多常常需要反復(fù)嘗試和比較。在實(shí)際工程中EDA工具的多輸出優(yōu)化算法已經(jīng)非常強(qiáng)大但了解原理對(duì)于人工審查和關(guān)鍵路徑優(yōu)化仍有意義。5.3 軟件工具輔助與手工技能的平衡今天我們有像Logic Friday、Espresso算法在VHDL/Verilog綜合工具中集成等強(qiáng)大的工具可以瞬間完成復(fù)雜邏輯的化簡(jiǎn)和優(yōu)化。那手工學(xué)習(xí)公式法和卡諾圖還有必要嗎絕對(duì)必要。工具是黑箱它給你結(jié)果但不會(huì)給你直覺(jué)和判斷力。手工練習(xí)的價(jià)值在于培養(yǎng)直覺(jué)面對(duì)一個(gè)邏輯問(wèn)題你能快速預(yù)估其電路的復(fù)雜程度。調(diào)試與驗(yàn)證當(dāng)工具輸出一個(gè)看似奇怪的結(jié)果時(shí)你能用手工方法驗(yàn)證其正確性或者理解工具為什么這么優(yōu)化。理解約束工具優(yōu)化是在特定約束面積、速度、功耗下進(jìn)行的。手工經(jīng)驗(yàn)?zāi)軒湍阍O(shè)置合理的約束并理解報(bào)告。應(yīng)對(duì)簡(jiǎn)單需求在嵌入式開(kāi)發(fā)、快速原型驗(yàn)證時(shí)一個(gè)簡(jiǎn)單的邏輯用卡諾圖手推可能比打開(kāi)一套龐大的EDA軟件更快。我的建議是將卡諾圖訓(xùn)練成你的條件反射對(duì)于五變量及以下的問(wèn)題做到“眼中有圖心中無(wú)圖”快速心算化簡(jiǎn)。對(duì)于更復(fù)雜的問(wèn)題放心交給工具但你要能讀懂它的輸出。6. 常見(jiàn)問(wèn)題、易錯(cuò)點(diǎn)與排查技巧實(shí)錄即使理解了原理在實(shí)際操作中還是會(huì)踩坑。下面是我總結(jié)的一些典型問(wèn)題和解決技巧。6.1 卡諾圖畫(huà)圈中的經(jīng)典錯(cuò)誤錯(cuò)誤類型錯(cuò)誤示例正確做法原因分析圈的形狀不對(duì)試圖圈出“L”形或散點(diǎn)必須圈2^n個(gè)相鄰格組成的矩形只有矩形對(duì)應(yīng)的乘積項(xiàng)才能用“與”邏輯表示L形無(wú)法合并變量。圈不夠大四個(gè)可合并的“1”被畫(huà)成兩個(gè)獨(dú)立的2格圈優(yōu)先畫(huà)一個(gè)4格圈圈越大消去的變量越多項(xiàng)越簡(jiǎn)。大圈可能覆蓋已被小圈覆蓋的“1”這沒(méi)關(guān)系。遺漏冗余圈每個(gè)“1”只被一個(gè)圈覆蓋但有些圈很小允許“1”被多個(gè)圈覆蓋優(yōu)先畫(huà)大圈公式法中A A A在卡諾圖中對(duì)應(yīng)一個(gè)“1”可以被重復(fù)使用。不利用這點(diǎn)可能導(dǎo)致結(jié)果不是最簡(jiǎn)。忽略首尾相鄰最左列的“1”和最右列的“1”沒(méi)有圈在一起牢記卡諾圖是循環(huán)的左右、上下邊緣相鄰這是卡諾圖能合并更多項(xiàng)的關(guān)鍵特性忘記這點(diǎn)會(huì)錯(cuò)過(guò)最簡(jiǎn)解。處理無(wú)關(guān)項(xiàng)不當(dāng)把所有無(wú)關(guān)項(xiàng)X都當(dāng)作1根據(jù)需要決定X的取值X是工具目的是幫助畫(huà)更大的圈。只把那些能促成更大圈的X當(dāng)作1否則當(dāng)作0。6.2 公式法應(yīng)用中的思維陷阱濫用分配律A BC (AB)(AC)這是對(duì)的但有時(shí)盲目展開(kāi)反而會(huì)讓式子更復(fù)雜。公式法化簡(jiǎn)的方向通常是“與項(xiàng)”變少、每個(gè)“與項(xiàng)”內(nèi)的變量變少。逆向使用分配律即因式分解有時(shí)是化簡(jiǎn)但順向使用往往是化繁。忘記添加冗余項(xiàng)進(jìn)行反向操作這是公式法的高級(jí)技巧。當(dāng)你化不下去時(shí)想想AB AC BC AB AC。你可以故意加一個(gè)BC項(xiàng)如果它存在或能構(gòu)造看看它能否與其他項(xiàng)結(jié)合產(chǎn)生新的吸收或合并機(jī)會(huì)。對(duì)偶原理運(yùn)用不熟練有時(shí)化簡(jiǎn)或與式POS比較麻煩??梢韵扔脤?duì)偶原理求出其對(duì)偶式的與或式SOP化簡(jiǎn)對(duì)偶式后再求對(duì)偶就得到原函數(shù)的最簡(jiǎn)或與式。6.3 從邏輯式到實(shí)際電路的轉(zhuǎn)換錯(cuò)誤電平與邏輯的混淆最簡(jiǎn)與或式用與非門實(shí)現(xiàn)時(shí)初學(xué)者常畫(huà)錯(cuò)。牢記F ((AB)(CD))是一個(gè)三級(jí)的與非-與非結(jié)構(gòu)。第一級(jí)與非門的輸出是(AB)這是一個(gè)低電平有效的信號(hào)當(dāng)AB全1時(shí)輸出0。第二級(jí)與非門將其作為輸入理解這個(gè)電平變化對(duì)分析電路時(shí)序和故障很重要。冒險(xiǎn)與競(jìng)爭(zhēng)現(xiàn)象化簡(jiǎn)只保證了靜態(tài)邏輯功能正確但可能引入邏輯冒險(xiǎn)。例如函數(shù)F A AB當(dāng)A從1變0B1時(shí)理論上輸出F應(yīng)恒為1。但如果兩個(gè)輸入信號(hào)A和A由于路徑延遲不同時(shí)變化可能在極短時(shí)間內(nèi)出現(xiàn)A0, A0的瞬間導(dǎo)致輸出出現(xiàn)一個(gè)毛刺glitch。這在同步電路中通常由時(shí)鐘沿采樣來(lái)規(guī)避但在異步電路或時(shí)鐘路徑中必須考慮。消除邏輯冒險(xiǎn)的方法是在卡諾圖中增加冗余項(xiàng)冗余圈即使這個(gè)項(xiàng)對(duì)靜態(tài)邏輯是多余的但它能覆蓋所有相鄰“1”的變化路徑。這是化簡(jiǎn)中“功能正確”與“動(dòng)態(tài)可靠”的一個(gè)微妙權(quán)衡。6.4 調(diào)試技巧驗(yàn)證化簡(jiǎn)結(jié)果真值表法這是最可靠的方法。分別列出原函數(shù)和化簡(jiǎn)后函數(shù)的真值表逐行對(duì)比必須完全一致。軟件仿真使用Logisim、Digital、甚至Verilog/VHDL寫(xiě)個(gè)簡(jiǎn)單的測(cè)試平臺(tái)用所有可能的輸入組合進(jìn)行仿真對(duì)比輸出。特殊值代入法選取幾組有代表性的輸入特別是那些在化簡(jiǎn)過(guò)程中被“消去”的變量發(fā)生變化的輸入手工計(jì)算驗(yàn)證。例如化簡(jiǎn)中如果合并了A0和A1的項(xiàng)那么就要驗(yàn)證當(dāng)A變化時(shí)輸出是否真的與A無(wú)關(guān)。邏輯函數(shù)的變換與化簡(jiǎn)這項(xiàng)技能會(huì)隨著你處理的問(wèn)題越復(fù)雜越能體會(huì)到它的價(jià)值。它不僅僅是考試的重點(diǎn)更是高效、可靠數(shù)字系統(tǒng)設(shè)計(jì)的基石。從看懂一個(gè)芯片的數(shù)據(jù)手冊(cè)中的邏輯圖到自己設(shè)計(jì)一個(gè)小型的狀態(tài)機(jī)或控制器這項(xiàng)基本功無(wú)處不在。多畫(huà)圖多練習(xí)多思考“為什么可以這樣合并”讓這種化繁為簡(jiǎn)的思維成為你本能的一部分。

相關(guān)新聞

C語(yǔ)言volatile與extern關(guān)鍵字:底層原理、應(yīng)用場(chǎng)景與實(shí)戰(zhàn)避坑指南

C語(yǔ)言volatile與extern關(guān)鍵字:底層原理、應(yīng)用場(chǎng)景與實(shí)戰(zhàn)避坑指南

1. 項(xiàng)目概述:為什么這兩個(gè)關(guān)鍵字值得深挖? 搞C語(yǔ)言開(kāi)發(fā),尤其是嵌入式、驅(qū)動(dòng)、操作系統(tǒng)內(nèi)核或者高性能服務(wù)端編程,你肯定不止一次在代碼里見(jiàn)過(guò) volatile 和 extern 這兩個(gè)關(guān)鍵字。它們不像 int 、 if 、 for 那樣天天用&…

2026/8/2 8:55:19 閱讀更多
IDEA創(chuàng)建Spring MVC項(xiàng)目全流程:從Maven配置到Tomcat部署

IDEA創(chuàng)建Spring MVC項(xiàng)目全流程:從Maven配置到Tomcat部署

1. 從零到一:為什么需要一個(gè)Spring MVC項(xiàng)目?如果你剛接觸Java Web開(kāi)發(fā),或者從其他IDE(比如Eclipse)轉(zhuǎn)過(guò)來(lái),可能會(huì)覺(jué)得在IDEA里新建一個(gè)項(xiàng)目是件挺簡(jiǎn)單的事。但說(shuō)實(shí)話,我見(jiàn)過(guò)太多新手&#xff0c…

2026/8/2 8:45:19 閱讀更多
數(shù)學(xué)建模實(shí)戰(zhàn):基于MILP與啟發(fā)式算法的疫苗生產(chǎn)排程優(yōu)化

數(shù)學(xué)建模實(shí)戰(zhàn):基于MILP與啟發(fā)式算法的疫苗生產(chǎn)排程優(yōu)化

1. 項(xiàng)目概述:從一道賽題到一套完整的工業(yè)優(yōu)化方案2021年“五一杯”數(shù)學(xué)建模競(jìng)賽的A題“疫苗生產(chǎn)問(wèn)題”,在當(dāng)時(shí)那個(gè)特殊的時(shí)期,無(wú)疑是一個(gè)極具現(xiàn)實(shí)意義和挑戰(zhàn)性的題目。它不僅僅是一道數(shù)學(xué)題,更是對(duì)當(dāng)時(shí)全球面臨的疫苗生產(chǎn)與分配瓶…

2026/8/2 8:45:19 閱讀更多
QQ空間歷史說(shuō)說(shuō)數(shù)據(jù)導(dǎo)出工具GetQzonehistory:技術(shù)實(shí)現(xiàn)與隱私保護(hù)完整指南

QQ空間歷史說(shuō)說(shuō)數(shù)據(jù)導(dǎo)出工具GetQzonehistory:技術(shù)實(shí)現(xiàn)與隱私保護(hù)完整指南

QQ空間歷史說(shuō)說(shuō)數(shù)據(jù)導(dǎo)出工具GetQzonehistory:技術(shù)實(shí)現(xiàn)與隱私保護(hù)完整指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在數(shù)字化記憶日益珍貴的今天,QQ空間承載…

2026/8/2 10:15:21 閱讀更多
工業(yè)蒸汽量預(yù)測(cè)實(shí)戰(zhàn):從數(shù)據(jù)清洗到XGBoost模型部署

工業(yè)蒸汽量預(yù)測(cè)實(shí)戰(zhàn):從數(shù)據(jù)清洗到XGBoost模型部署

1. 從鍋爐房到數(shù)據(jù)表:一個(gè)工業(yè)預(yù)測(cè)問(wèn)題的真實(shí)起點(diǎn)如果你在工廠里待過(guò),或者和工藝工程師聊過(guò)天,就會(huì)知道“蒸汽量”這三個(gè)字的分量。它不是什么高深莫測(cè)的學(xué)術(shù)概念,而是實(shí)實(shí)在在驅(qū)動(dòng)著生產(chǎn)線、影響著能耗賬單、甚至關(guān)乎生產(chǎn)安全的關(guān)…

2026/8/2 10:15:21 閱讀更多
I2C ADC模塊實(shí)戰(zhàn)指南:從ADS1115原理到Arduino/樹(shù)莓派高精度數(shù)據(jù)采集

I2C ADC模塊實(shí)戰(zhàn)指南:從ADS1115原理到Arduino/樹(shù)莓派高精度數(shù)據(jù)采集

1. 項(xiàng)目緣起:為什么需要一塊獨(dú)立的I2C ADC模塊?在嵌入式開(kāi)發(fā)和電子DIY項(xiàng)目中,模擬信號(hào)采集是一個(gè)繞不開(kāi)的經(jīng)典需求。無(wú)論是讀取電位器的旋轉(zhuǎn)角度、測(cè)量光照強(qiáng)度、監(jiān)控電池電壓,還是采集各類傳感器的模擬輸出(如溫度、壓…

2026/8/2 10:15:21 閱讀更多
PCA9685 PWM驅(qū)動(dòng)器:16通道舵機(jī)/LED控制解決方案與Arduino實(shí)戰(zhàn)

PCA9685 PWM驅(qū)動(dòng)器:16通道舵機(jī)/LED控制解決方案與Arduino實(shí)戰(zhàn)

1. 項(xiàng)目概述:為什么你需要一個(gè)16通道的PWM驅(qū)動(dòng)器?如果你玩過(guò)Arduino控制舵機(jī)或者LED燈帶,大概率會(huì)遇到一個(gè)頭疼的問(wèn)題:板子上的PWM引腳不夠用。Arduino Uno只有6個(gè)數(shù)字PWM引腳,就算全用上,想做個(gè)多關(guān)節(jié)的機(jī)…

2026/8/2 10:15:21 閱讀更多
馮·諾依曼與哈佛架構(gòu):從原理到實(shí)戰(zhàn)的深度解析與選型指南

馮·諾依曼與哈佛架構(gòu):從原理到實(shí)戰(zhàn)的深度解析與選型指南

1. 項(xiàng)目概述:兩種經(jīng)典架構(gòu)的“靈魂”之爭(zhēng)在計(jì)算機(jī)的世界里,架構(gòu)是它的靈魂。我們每天都在和計(jì)算機(jī)打交道,從手機(jī)到服務(wù)器,但你是否想過(guò),這些設(shè)備處理指令和數(shù)據(jù)的方式,其實(shí)源于幾十年前的一場(chǎng)設(shè)計(jì)哲學(xué)之爭(zhēng)&…

2026/8/2 10:15:21 閱讀更多
芯片工藝節(jié)點(diǎn)背后的真相:從晶體管密度到PPA平衡的全面解析

芯片工藝節(jié)點(diǎn)背后的真相:從晶體管密度到PPA平衡的全面解析

1. 芯片制造工藝:從“納米”數(shù)字到真實(shí)性能的橋梁每次看到手機(jī)發(fā)布會(huì)上,廠商們爭(zhēng)相宣傳“我們采用了最新的3nm工藝制程”,你是不是也會(huì)好奇,這個(gè)“3nm”到底意味著什么?它和隔壁廠商的“4nm”相比,強(qiáng)在哪里…

2026/8/2 10:05:21 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多