數位邏輯與基本元件

卡諾圖(Karnaugh map)

/ KAR-noh /

卡諾圖是把邏輯電路變小的手算工具。你從一張真值表出發,但不是把它寫成一長串,而是重畫成一個方格,使相鄰的格子之間只有一個輸入不同。一旦這樣排好,原本要用代數苦苦尋找的化簡就會在視覺上跳出來:任何一塊你能圈起來的相鄰 1,都對應到一個項,其中圈內變動過的那些輸入根本無關緊要、可以丟掉。它是一張圖,把「化簡這個布林式」變成「圈出最大的矩形」。

格子以格雷碼(Gray code)順序排列——欄與列標成 00、01、11、10(不是平常的 00,01,10,11),使任何兩個相鄰格,包括從最後繞回最前的環繞,恰好只差一個變數。你把每格填上該輸入組合的輸出(1 或 0),然後圈出一群群的 1。每群必須是大小為 1、2、4、8(2 的次方)的矩形,而且圈得越大越好,因為能消去越多變數:圈住兩格的圈從那一項移除一個輸入,圈住四格的移除兩個。每個圈變成一個 AND 項;再把各項用 OR 串起來。結果就是一個近乎最簡的「積之和」式。

它為何重要與它的極限:卡諾圖為布林代數靠操作完成的化簡,提供了一條直觀、視覺化的路徑,而且看出那些群組遠比擺弄各種恆等式不易出錯。但它是人類尺度的工具——對 2 到 4 個變數運作得很漂亮,到 5 或 6 個就變得笨拙,再多就無能為力。對大型函數,電腦改用系統化的演算法(如 Quine-McCluskey 與現代的邏輯合成)。誠實的結論:化簡能省下閘、面積、延遲和功耗,但卡諾圖是教學工具,不是工業工具。

函數「A OR B」的 2 變數卡諾圖有四格;其中三格是 1(除了 A=0,B=0 之外的每種情況)。圈住上面那一列(兩個 A=1 的格),再圈住左邊那一行(兩個 B=1 的格)。第一個圈說的是「只看 A」,第二個說的是「只看 B」,所以整個函數讀起來就是單純的 A OR B——卡諾圖證實它不能再小了。

除一個輸入外其餘相同的相鄰 1 會塌縮成更小的項——圈越大,閘越便宜。

讓卡諾圖能運作的那條不明顯規則,是格雷碼排序(00,01,11,10):如果你用普通二進位順序標格,物理上相鄰的格就不再只差一個位元,視覺分群會悄悄失效。

又稱
K-mapK 圖卡諾map