9 / 63 · 概念
卡諾圖與 don’t-care 的條件
利用格雷碼的相鄰關係化簡邏輯式,並明確寫出未使用輸入的假設。
單元可免費閱讀,註冊課程即可儲存學習進度。
從真值表連結到實作成本
真值表真值表完整列出所有可能的輸入組合,以及每個組合的輸出。隨時間的變化須另外以波形確認。 詳細內容定義功能,邏輯最小化則決定以哪個算式實作。三個輸入時,最小項編號定義為以 A 為最高位元的二進位 ABC。
例如最小項 4 是 ABC=100,未列出的 0、2、6 輸出為 0。不必每次都用五個乘積項實作,可以合併只差一個位元的項。
卡諾圖是重新排列的真值表
欄依 BC=00、01、11、10 排列。這是相鄰欄只改變一個位元的格雷碼順序,最左欄與最右欄也相鄰。
| A / BC | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 |
群組必須為矩形,格數必須是 。包含 0 的格子會改變功能,但同一個 1 可以屬於多個群組。
- 將 C=1 的兩欄、共四格合併;不論 A、B 如何變動,輸出都是 1,因此留下 C。
- 合併 A=1 這列的 BC=00 與 01,只有 C 改變,因此留下 。
- 將兩群組以 OR 合併,就覆蓋所有 1 且避開所有 0。
以八組輸入比對原始定義與化簡式。要養成分別確認「算式變短」與「功能相同」的習慣。
下方流程把卡諾圖的兩組轉成算式。C 群組中 A、B 改變,兩格群組中 C 改變,因此從各項移除這些變數。
- m1,3,5,7: A 與 B 改變時,C 仍為 1
- m4,5: A=1、B=0 時,只有 C 改變
- 兩個群組的和: F = C + A · NOT B
Don’t-care 是最佳化權限,也是輸入假設
假設系統契約保證 ABC=000 絕不出現。把該格設為 X,就可視需要當成 0 或 1。合併 B=0 的四格後,可得到更簡單的式子。
新式子在 ABC=000 時為 1,已不同於原本完整真值表。因此宣稱「相同電路」時,必須附上輸入不會是 000 的條件。若初始化或錯誤復原期間可能出現 000,這項最佳化就可能破壞系統要求。
算式最小化不等於晶片最小化
文字項較少的式子,在特定標準元件庫中不一定也有最佳面積、延遲與功耗。負載、扇出、可用複合閘、配線與毛刺都會影響結果。此階段先確定功能等價與輸入假設,實體成本則依合成和時序結果判斷。
延伸閱讀:MIT OpenCourseWare — Combinational Logic
實作 · 確認群組重疊與 don’t-care 條件
F = C + A · ¬B
| ABC | F |
|---|---|
| 000 | 0 |
| 001 | 1 |
| 010 | 0 |
| 011 | 1 |
| 100 | 1 |
| 101 | 1 |
| 110 | 0 |
| 111 | 1 |
- 點選 C 群組。四格中 A、B 都改變,所以只剩 C。
- 點選 A·¬B 群組。它覆蓋 m4、m5,m5 與 C 群組重疊。重疊允許,但不得包含 0 格。
- 點兩次 m0,使其 0 → 1 → X。成為 X 後,就是包含 d(0) 的不完整規格;B=0 群組可擴大,算式變成 。
- 再點一次 m0,恢復為 0。原始要求已復原,較大的群組應消失。
選取群組不會修改數值。覆蓋全部 1 的完整算式仍然保留,邊框只強調目前觀察的那一項。此處的「最小」先比較乘積項數,再比較文字項數;若有多個解,就顯示其中一個。
自己試試看
把 m0 改為 X 後,以 F=C+NOT B 實作。若新增要求:重設時可能出現 ABC=000,且此時 F 必須為 0,還能保留這項最佳化嗎?
查看解說
不能。新要求把 m0 重新指定為 0,但最佳化的式子在 000 時輸出 1,違反要求。必須回到符合所有指定列的式子,例如原本的 C+A·NOT B。