數位電路/卡諾圖
此頁面討論卡諾圖,它是分析和最佳化數位電路的基本工具。
卡諾圖(簡稱 K 圖)是一種有用的工具,用於簡化組合布林方程和建立時序邏輯電路。卡諾圖由 Maurice Karnaugh 於 1953 年建立。卡諾圖的尺寸可能非常大,但是四列四行的尺寸比任何更大的地圖都更容易理解。
這些圖背後的理念是,布林方程邏輯中只有一位不同的項彼此相鄰。這只是布林邏輯真值表的組織方法,但它可以幫助你簡化邏輯方程。這已被證明對數位電路設計人員特別有用,因為它可以建議可以消除的元件或簡化電路設計的方法。這降低了這些設計的成本和複雜性,甚至是一種自動化方法來開發這些電路,假設你可以首先得出邏輯真值表。
這裡將演示如何手動評估卡諾圖。對於涉及數十甚至數百個變數的非常複雜的電路設計,有可用的軟體可以自動化此過程。
卡諾圖的結構是網格狀的。用於教學或小型專案的兩種最常見的尺寸是三變數(2x4 網格或 4x2 網格,具體取決於使用者)和四變數圖(4x4 網格)。

只有在存在真值表的情況下才能建立 K 圖;它在時序邏輯中以不同的方式工作,這將在後面討論。一個完成的 K 圖可以生成真值表,或者布林方程反之亦然。一旦獲得真值表,就可以建立卡諾圖。K 圖的左上角(有時只是頂部和左側)顯示了用於該邊的變數。K 圖示例的圖片顯示了與該邊關聯的變數。頂部是 A 和 B,下面的數字是 A 和 B 處於該列的哪個狀態(即,列 10 是當 A 為真(高)且 B 為假(低)時)。從真值表中,我們將其輸出放在相應的方塊中(即,如果在真值表中,當 ABCD 為 1011 且輸出為 1 時,那麼在四變數圖上,1 將放在第四列第二行)。以下示例顯示瞭如何將真值表轉換為 K 圖,然後將 K 圖轉換為布林方程。
在 K 圖上,輸入值組合的排列順序至關重要。透過檢視上面的示例影像,可以注意到它沒有使用正常的或數字順序的值(00, 01, 10, 11),而是使用(00, 01, 11, 10)。雖然通常可以使用許多排序方法,但並非所有可能的排序方法都適用於 K 圖。有效 K 圖排序的正式描述將由以下規則定義
- 兩行或兩列相鄰的輸入值組合必須恰好有一位不同。
- 該圖是迴圈的:第一行和最後一行被認為是相鄰的,第一列和最後一列也是相鄰的。
- 每個可能的位組合必須在圖中恰好出現一次。
對於二維圖,滿足這些規則很簡單:一個變數分配給行,另一個變數分配給列,可以繪製一個 2x2 圖,其中兩個可能的序列(0,1 和 1,0)都是有效的。即使使用 (0,1) 表示一個變數,使用 (1,0) 表示另一個變數也是有效的。在三變數或四變數上,列或行(或兩者,對於 4 個變數)都需要包含兩個變數。上面示例中使用的序列 (00, 01, 11, 10) 很有效,也是最常用的;另一種選擇可能是 (00, 10, 11, 01)。如果需要一個 5 個或更多輸入電路的 K 圖,那麼需要組成更長的序列來滿足上述規則。對於三個變數(8 種組合),通常使用 (000, 001, 011, 010, 110, 111, 101, 100) 序列。這足以用於最多 6 個輸入或 64 種組合的地圖;更大的電路很少用手繪製,最常見的是使用專門的軟體來構建地圖,甚至從中檢索資訊;但是,如果有需要,可以透過 構建 n 位格雷碼 來構建合適的組合序列。
正如從後面的部分中可以注意到,透過 K 圖最佳化電路完全依賴於上述規則或這些圖的屬性,因此使用錯誤的組合序列可能會導致電路不最佳化,甚至導致電路無法產生預期的輸出。