本練習的目標與方法。每一題都走完同一條完整流程:

  1. 讀題:從真值表(或功能描述)確認哪些輸入組合輸出 1 (即最小項 minterm);

  2. 填圖:把 1 填進卡諾圖——注意行列都用 格雷碼順序(\(00,01,11,10\)),相鄰格只差一個位元;

  3. 圈群:把 1 圈成 \(2^k\) 大小的矩形 (\(1,2,4,8,\dots\) 格),越大越好、可重疊、可迴繞 (左右相接、上下相接、四角相接);

  4. 讀項:每個群裡「不變的變數」留下(1 留原變數、 0 留反相),「有變的變數」消去——\(2^k\) 格的群恰好消 \(k\) 個變數;

  5. 接電路:最簡 SOP(sum of products) \(=\) 反相器+AND 層+OR 層;最後代回真值表驗算

記號慣例:變數依 \(A,B,C,D,E\) 由高位到低位, 最小項編號 \(m_i\)\(i\) 就是把該列輸入讀成二進位 (例如 3 變數的 \(m_5\)\(A{=}1,B{=}0,C{=}1\))。 邏輯閘一律用 2 輸入閘(配合 Logisim 與 NAND 板的習慣), 必要時註明多輸入閘的替代畫法。

一個警報系統有兩個感測器 \(A\)\(B\)(1 \(=\) 觸發)。 只要至少一個感測器觸發,警報 \(f\) 就要響。 真值表如下,請用卡諾圖求出最簡布林式並畫出電路:

\(A\) \(B\) \(f\)
0 0 0
0 1 1
1 0 1
1 1 1

第一步:填圖。最小項 \(= \{m_1, m_2, m_3\}\)

第二步:圈群(兩個 2 格群,重疊在 \(m_3\))。

  • 右欄\(m_1, m_3\)):框內 \(A\) 有 0 有 1(消去), \(B = 1\) 不變 \(\Rightarrow\) 項為 \(B\)

  • 下列\(m_2, m_3\)):\(B\) 有變(消去), \(A = 1\) 不變 \(\Rightarrow\) 項為 \(A\)

第三步:最簡式。 \[\boxed{f = A \lor B}\]

第四步:電路(1 個 OR 閘)。

(o) at (0,0) ; (o.in 1) – ++(-0.5,0) node[left]\(A\); (o.in 2) – ++(-0.5,0) node[left]\(B\); (o.out) – ++(0.5,0) node[right]\(f\);

驗算:\(A{=}0,B{=}0 \Rightarrow 0\) ✓;其餘三列皆 1 ✓。

教學重點:重疊是合法的。\(m_3\) 同時被兩個群圈住—— 完全沒問題:OR 的世界裡「一格被算兩次」不改變結果 (等冪律 \(x \lor x = x\))。新手常犯的錯是把圖切成 「互不重疊的拼圖」,反而圈出比較小的群、留下多餘的變數。

第 2 題(2 變數):樓梯雙控開關——\(A \oplus B\)

樓梯上下各有一個開關 \(A\)\(B\),扳動任一個開關都要讓燈的 狀態反轉;約定兩個開關同為 0 或同為 1 時燈滅。真值表:

\(A\) \(B\) \(f\)
0 0 0
0 1 1
1 0 1
1 1 0

用卡諾圖化簡,並討論結果。

第一步:填圖。最小項 \(= \{m_1, m_2\}\)

第二步:圈群——圈不起來!兩個 1 在對角線上: \(m_1 (01)\)\(m_2 (10)\) 差了兩個位元, 在卡諾圖上不相鄰(相鄰的定義是恰差一位)。 只能各自圈成 1 格的群,一個變數都消不掉。

第三步:最簡 SOP 就是原式。 \[\boxed{f = (\lnot A \land B) \lor (A \land \lnot B) = A \oplus B}\]

第四步:電路。用基本閘要 5 個(2 NOT + 2 AND + 1 OR); 若允許 XOR 閘則 1 個就好。

(a1) at (2.6,1.9) ; (na) at (a1.in 1) ; (a2) at (2.6,-0.1) ; (nb) at (a2.in 2) ; (o) at (5.0,0.9) ; (na.in 1) – ++(-0.4,0) node[left]\(A\); (a1.in 2) – ++(-2.4,0) node[left]\(B\); (a2.in 1) – ++(-2.4,0) node[left]\(A\); (nb.in 1) – ++(-0.4,0) node[left]\(B\); (a1.out) – ++(0.25,0) |- (o.in 1); (a2.out) – ++(0.25,0) |- (o.in 2); (o.out) – ++(0.4,0) node[right]\(f\);

(x) at (0,0) ; (x.in 1) – ++(-0.5,0) node[left]\(A\); (x.in 2) – ++(-0.5,0) node[left]\(B\); (x.out) – ++(0.4,0) node[right]\(f\);

驗算:\(01 \to 1\) ✓、\(10 \to 1\) ✓、\(00,11 \to 0\) ✓。

教學重點:卡諾圖的極限。K-map 只會合併 「漢明距離 1」的格子;XOR 的 1 恰好兩兩距離 2(對角、棋盤), 所以永遠化簡不動。看到對角 1 就要想到 XOR/XNOR—— 這在第 8 題(三變數同位)會再放大一次。

第 3 題(3 變數):偶數偵測器——一個群消兩個變數

輸入 \(A,B,C\) 是一個 3 位元二進位數(\(A\) 為最高位)。 當這個數是偶數\(f = 1\)。真值表:

\(A\) \(B\) \(C\) \(f\)
0 0 0 1
0 0 1 0
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 1
1 1 1 0

第一步:填圖。最小項 \(= \{m_0, m_2, m_4, m_6\}\)

第二步:圈群(一個 4 格群,左右迴繞)。 四個 1 落在 \(BC = 00\)\(BC = 10\) 兩個端欄—— 格雷碼下這兩欄左右相接,合成一個 \(2 \times 2\) 的群。 框內 \(A\) 有變(消去)、\(B\) 有變(消去), 只有 \(C = 0\) 不變。

第三步:最簡式。\(4 = 2^2\) 格的群消掉 2 個變數, 三個變數只剩一個: \[\boxed{f = \lnot C}\] (道理也很直觀:偶數 \(\iff\) 最低位 \(C = 0\),與高位無關。)

第四步:電路(1 個 NOT 閘)。

(n) at (0,0) ; (n.in 1) – ++(-0.5,0) node[left]\(C\); (n.out) – ++(0.5,0) node[right]\(f\);

驗算:所有 \(C=0\) 的列輸出 1、\(C=1\) 的列輸出 0 ✓ (\(A\)\(B\) 腳位留空不接)。

教學重點:群的大小=化簡的力量。 \(2^k\) 格的群恰好消 \(k\) 個變數: 2 格消 1 個、4 格消 2 個、8 格消 3 個。 所以圈群永遠先試最大的——這題若圈成四個 1 格群, 會得到冗長的原始 SOP;圈成兩個 2 格群,得到 \(\lnot B \lnot C \lor B \lnot C\)(還要再代數化簡); 一次圈 4 格才直接得到 \(\lnot C\)。 也別忘了迴繞:格雷碼讓最左欄與最右欄相鄰。

第 4 題(3 變數):三人多數決——三個重疊的對子

委員會三人 \(A,B,C\) 投票(1 \(=\) 贊成), 過半數贊成時議案通過(\(f = 1\))。真值表:

\(A\) \(B\) \(C\) \(f\)
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1

第一步:填圖。最小項 \(= \{m_3, m_5, m_6, m_7\}\)

第二步:圈群(三個 2 格群,全部疊在 \(m_7\) 上)。

  • \(\{m_3, m_7\}\)\(BC{=}11\) 整欄):\(A\) 消去 \(\Rightarrow B \land C\)

  • \(\{m_5, m_7\}\)(下列中間兩格):\(B\) 消去 \(\Rightarrow A \land C\)

  • \(\{m_6, m_7\}\)(下列右端兩格):\(C\) 消去 \(\Rightarrow A \land B\)

沒有 4 格群可圈(四個 1 不構成矩形), 且三個對子缺一不可\(m_3\) 只有第一群蓋、 \(m_5\) 只有第二群、\(m_6\) 只有第三群——三者都是 必要質蘊涵項(essential prime implicant)

第三步:最簡式。 \[\boxed{f = (A \land B) \lor (A \land C) \lor (B \land C)}\]

第四步:電路(3 AND \(+\) 2 OR \(= 5\) 個 2 輸入閘)。

(a1) at (0,2.4) ; (a2) at (0,0.9) ; (a3) at (0,-0.6) ; (o1) at (2.6,1.65) ; (o2) at (5.0,0.5) ; (a1.in 1) – ++(-0.6,0) node[left]\(A\); (a1.in 2) – ++(-0.6,0) node[left]\(B\); (a2.in 1) – ++(-0.6,0) node[left]\(A\); (a2.in 2) – ++(-0.6,0) node[left]\(C\); (a3.in 1) – ++(-0.6,0) node[left]\(B\); (a3.in 2) – ++(-0.6,0) node[left]\(C\); (a1.out) – ++(0.25,0) |- (o1.in 1); (a2.out) – ++(0.25,0) |- (o1.in 2); (o1.out) – ++(0.25,0) |- (o2.in 1); (a3.out) – ++(0.5,0) |- (o2.in 2); (o2.out) – ++(0.4,0) node[right]\(f\);

驗算:恰一票(\(m_1,m_2,m_4\)):三個 AND 都是 0 \(\Rightarrow f{=}0\) ✓;兩票(如 \(m_6\)\(AB{=}1\)\(\Rightarrow f{=}1\) ✓;三票全 1 ✓。

教學重點:多數決是「重疊」的經典。\(m_7\)(全贊成) 被三個群共用,讓每個群都能湊成一對、各消一個變數。 這個函數也是全加器(full adder)的進位輸出 \(C_{out} = AB \lor AC \lor BC\)——第 2 週會再遇到它。

第 5 題(3 變數):兩個必要群自動蓋滿全圖

求下列真值表的最簡布林式與電路:

\(A\) \(B\) \(C\) \(f\)
0 0 0 1
0 0 1 0
0 1 0 0
0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 1

第一步:填圖。最小項 \(= \{m_0, m_4, m_5, m_7\}\)

第二步:圈群——從「最挑剔」的 1 下手。

  • \(m_0\,(000)\) 的相鄰格中只有 \(m_4\) 是 1 \(\Rightarrow\) 唯一的選擇是 \(\{m_0, m_4\}\)\(BC{=}00\) 整欄): \(A\) 消去 \(\Rightarrow \lnot B \land \lnot C\)(必要);

  • \(m_7\,(111)\) 的相鄰格中只有 \(m_5\) 是 1 \(\Rightarrow\) 唯一的選擇是 \(\{m_5, m_7\}\)\(B\) 消去 \(\Rightarrow A \land C\)(必要)。

兩個必要群已把 \(m_4\)\(m_5\) 一併蓋住——全圖覆蓋完成, 不需要第三個群(例如 \(\{m_4,m_5\} = A\lnot B\) 是質蘊涵項, 但多餘)。

第三步:最簡式。 \[\boxed{f = (\lnot B \land \lnot C) \lor (A \land C)}\]

第四步:電路(2 NOT \(+\) 2 AND \(+\) 1 OR \(= 5\) 閘)。

(nb) at (0,2.9) ; (nc) at (0,1.1) ; (a1) at (2.9,2.0) ; (a2) at (2.9,-0.7) ; (o) at (5.3,0.65) ; (nb.in 1) – ++(-0.4,0) node[left]\(B\); (nc.in 1) – ++(-0.4,0) node[left]\(C\); (nb.out) – ++(0.3,0) |- (a1.in 1); (nc.out) – ++(0.3,0) |- (a1.in 2); (a2.in 1) – ++(-3.6,0) node[left]\(A\); (a2.in 2) – ++(-3.6,0) node[left]\(C\); (a1.out) – ++(0.25,0) |- (o.in 1); (a2.out) – ++(0.25,0) |- (o.in 2); (o.out) – ++(0.4,0) node[right]\(f\);

驗算:\(m_0\)\(\lnot B \lnot C = 1\) ✓; \(m_5\,(101)\)\(AC = 1\) ✓; \(m_6\,(110)\):兩項皆 0 \(\Rightarrow\) 0 ✓; \(m_4\,(100)\)\(\lnot B\lnot C = 1\) ✓。

教學重點:先找「只有一種圈法」的 1。 系統化流程是:對每個 1 問「它能參加哪些最大群?」—— 只有一個候選的,就是必要群,先圈; 圈完常常發現其他 1 已被順便蓋住,剩下的再挑最少的群補滿。 這避免「看哪順眼圈哪」導致多圈或漏圈。

第 6 題(3 變數):三個對子缺一不可

求下列真值表的最簡布林式與電路:

\(A\) \(B\) \(C\) \(f\)
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 1

第一步:填圖。最小項 \(= \{m_1, m_2, m_3, m_7\}\)

第二步:圈群。沒有 4 格矩形;逐一檢查每個 1 的歸宿:

  • \(m_1\) 只能和 \(m_3\) 成對(上列中間):\(B\) 消去 \(\Rightarrow \lnot A \land C\)(必要);

  • \(m_2\) 只能和 \(m_3\) 成對(上列右端):\(C\) 消去 \(\Rightarrow \lnot A \land B\)(必要);

  • \(m_7\) 只能和 \(m_3\) 成對(\(BC{=}11\) 整欄):\(A\) 消去 \(\Rightarrow B \land C\)(必要)。

\(m_3\) 被三個群共用(它是全圖「樞紐」),三個對子缺一不可。

第三步:最簡式。 \[\boxed{f = (\lnot A \land C) \lor (\lnot A \land B) \lor (B \land C)}\]

第四步:電路——共用一個反相器! \(\lnot A\) 出現在兩個乘積項裡,接線時只要一顆 NOT: 共 1 NOT \(+\) 3 AND \(+\) 2 OR \(= 6\) 閘。

(na) at (-0.5,3.6) ; (a1) at (2.2,2.6) ; (a2) at (2.2,1.1) ; (a3) at (2.2,-0.4) ; (o1) at (4.6,1.85) ; (o2) at (7.0,0.7) ; (na.in 1) – ++(-0.4,0) node[left]\(A\); (na.out) – ++(0.3,0) node[circle,fill,inner sep=1pt] (j) |- (a1.in 1); (j.center) |- (a2.in 1); (a1.in 2) – ++(-3.5,0) node[left]\(C\); (a2.in 2) – ++(-3.5,0) node[left]\(B\); (a3.in 1) – ++(-3.5,0) node[left]\(B\); (a3.in 2) – ++(-3.5,0) node[left]\(C\); (a1.out) – ++(0.25,0) |- (o1.in 1); (a2.out) – ++(0.25,0) |- (o1.in 2); (o1.out) – ++(0.25,0) |- (o2.in 1); (a3.out) – ++(0.5,0) |- (o2.in 2); (o2.out) – ++(0.4,0) node[right]\(f\);

驗算:\(m_5\,(101)\)\(\lnot A C = 0\)\(\lnot A B = 0\)\(BC = 0\) \(\Rightarrow\) 0 ✓;\(m_3\,(011)\):三項全 1 \(\Rightarrow\) 1 ✓; \(m_7\,(111)\)\(BC = 1\) ✓。

教學重點:最簡式 \(\ne\) 最少接線。 K-map 給的是乘積項最少、每項字面值最少的 SOP; 真正接電路時還能再省——共用反相器、共用子項都是常規操作 (本題 \(\lnot A\) 分給兩個 AND 用)。 也可以再做代數提取:\(f = \lnot A(B \lor C) \lor BC\), 變成 1 NOT \(+\) 2 AND \(+\) 2 OR \(= 5\) 閘—— 化簡到 SOP 之後仍值得多看一眼。

第 7 題(3 變數):循環卡諾圖——最簡解不唯一

求下列真值表所有的最簡布林式:

\(A\) \(B\) \(C\) \(f\)
0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1

第一步:填圖。最小項 \(= \{m_0, m_1, m_2, m_5, m_6, m_7\}\) (0 反而只有兩個:\(m_3\)\(m_4\)):

解 1:\(\lnot A\lnot B \lor AC \lor B\lnot C\) 解 2:\(\lnot A\lnot C \lor \lnot B C \lor AB\)

第二步:圈群——發現「循環」。六個 1 圍成一圈, 每個 1 恰好有兩個相鄰的 1, 六個質蘊涵項(都是對子)首尾相扣: \[\lnot A \lnot B,\;\; \lnot B C,\;\; A C,\;\; A B,\;\; B \lnot C,\;\; \lnot A \lnot C.\] 沒有任何一個是必要的(每個 1 都有兩個群可選)! 蓋滿六個 1 至少要 3 個對子,且必須「隔一個取一個」—— 恰有兩種取法:

  • 解 1\(\{m_0,m_1\}, \{m_5,m_7\}, \{m_2,m_6\}\) \(\Rightarrow f = \lnot A\lnot B \lor AC \lor B\lnot C\)

  • 解 2\(\{m_0,m_2\}, \{m_1,m_5\}, \{m_6,m_7\}\) \(\Rightarrow f = \lnot A\lnot C \lor \lnot BC \lor AB\)

\[\boxed{f = \lnot A\lnot B \lor AC \lor B\lnot C \;=\; \lnot A\lnot C \lor \lnot BC \lor AB \quad(\text{兩解同樣最簡})}\]

第四步:電路(取解 1;3 NOT \(+\) 3 AND \(+\) 2 OR)。

(na) at (0,4.6) ; (nb) at (0,2.8) ; (a1) at (3.0,3.7) ; (a2) at (3.0,1.5) ; (a3) at (3.0,-0.2) ; (nc) at (a3.in 2) ; (o1) at (5.4,2.6) ; (o2) at (7.6,1.2) ; (na.in 1) – ++(-0.4,0) node[left]\(A\); (nb.in 1) – ++(-0.4,0) node[left]\(B\); (na.out) – ++(0.3,0) |- (a1.in 1); (nb.out) – ++(0.3,0) |- (a1.in 2); (a2.in 1) – ++(-3.7,0) node[left]\(A\); (a2.in 2) – ++(-3.7,0) node[left]\(C\); (a3.in 1) – ++(-3.7,0) node[left]\(B\); (nc.in 1) – ++(-0.4,0) node[left]\(C\); (a1.out) – ++(0.25,0) |- (o1.in 1); (a2.out) – ++(0.25,0) |- (o1.in 2); (o1.out) – ++(0.25,0) |- (o2.in 1); (a3.out) – ++(0.5,0) |- (o2.in 2); (o2.out) – ++(0.4,0) node[right]\(f\);

驗算(抽 \(m_3, m_4\) 兩個 0): \(m_3\,(011)\)\(\lnot A\lnot B{=}0\)\(AC{=}0\)\(B\lnot C{=}0\) \(\Rightarrow 0\) ✓;\(m_4\,(100)\):三項皆 0 ✓。 再抽 \(m_0\)\(\lnot A\lnot B = 1\) ✓。

教學重點:「最簡」可以不只一個。 循環圖(cyclic K-map)裡沒有必要質蘊涵項, 兩組互補的圈法一樣好——考試時任一組都是滿分。 但務必完整寫出一組就好,混搭兩組會多圈出第 4 個群。 順帶一提:0 很少時,改圈 0(求 \(\lnot f\) 再取反,得 POS 形式) 往往更快:\(\lnot f = \lnot A B C \lor A\lnot B\lnot C\)

第 8 題(3 變數):奇同位產生器——棋盤格

通訊時要替 3 位元資料 \(A,B,C\) 產生同位位元: 當資料中 1 的個數是奇數\(f = 1\)。真值表:

\(A\) \(B\) \(C\) \(f\)
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 1

第一步:填圖。最小項 \(= \{m_1, m_2, m_4, m_7\}\)

第二步:圈群——棋盤格,全部孤立。 每個 1 的上下左右(含迴繞)全是 0: 任何兩個 1 之間漢明距離都是 2。 K-map 一格都合併不了,最簡 SOP 就是四個最小項: \[f = \lnot A\lnot B C \lor \lnot A B\lnot C \lor A\lnot B\lnot C \lor ABC\]

第三步:換個代數角度。把前兩項與後兩項分組提取: \[f = \lnot A(B \oplus C) \lor A\,\lnot(B \oplus C) = A \oplus B \oplus C.\] \[\boxed{f = A \oplus B \oplus C \quad(\text{奇同位})}\]

第四步:電路。SOP 直譯要 3 NOT \(+\) 8 AND(3 輸入項拆成 2 輸入)\(+\) 3 OR \(\approx 14\) 閘;用 XOR 只要 2 個閘

(x1) at (0,0.3) ; (x2) at (2.4,0) ; (x1.in 1) – ++(-0.5,0) node[left]\(A\); (x1.in 2) – ++(-0.5,0) node[left]\(B\); (x1.out) – ++(0.2,0) |- (x2.in 1); (x2.in 2) – ++(-3.1,0) node[left]\(C\); (x2.out) – ++(0.4,0) node[right]\(f\);

驗算:\(m_7\,(111)\)\(1\oplus1\oplus1 = 1\) ✓(三個 1 是奇數); \(m_3\,(011)\)\(0\oplus1\oplus1 = 0\) ✓。

教學重點:認得棋盤格。 K-map 上 1 與 0 呈國際象棋棋盤分布 \(\Rightarrow\) 函數是 XOR(同位)家族,直接寫 \(\oplus\) 串接,別硬用 SOP 接一大坨閘。 這也解釋了為什麼加法器的和位元 \(S = A \oplus B \oplus C_{in}\) 天生就用 XOR 蓋—— 它就是奇同位。(對比:第 4 題的進位 \(C_{out}\) 是多數決。)

第 9 題(4 變數):四角迴繞——\(\lnot B \land \lnot D\)

求下列真值表(\(A\) 為最高位)的最簡布林式與電路:

\(A\) \(B\) \(C\) \(D\) \(f\)
0 0 0 0 1
0 0 0 1 0
0 0 1 0 1
0 0 1 1 0
0 1 0 0 0
0 1 0 1 0
0 1 1 0 0
0 1 1 1 0
\(A\) \(B\) \(C\) \(D\) \(f\)
1 0 0 0 1
1 0 0 1 0
1 0 1 0 1
1 0 1 1 0
1 1 0 0 0
1 1 0 1 0
1 1 1 0 0
1 1 1 1 0

第一步:填圖。最小項 \(= \{m_0, m_2, m_8, m_{10}\}\)—— 恰好是卡諾圖的四個角落

第二步:圈群(一個 4 格群)。格雷碼讓 最左欄 \(\leftrightarrow\) 最右欄、最上列 \(\leftrightarrow\) 最下列 都相鄰,所以四個角其實是一個 \(2\times2\) 方塊。 框內 \(A\)\(C\) 都有變(消去),\(B = 0\)\(D = 0\) 不變。

第三步:最簡式。4 格消 2 個變數: \[\boxed{f = \lnot B \land \lnot D}\]

第四步:電路(2 NOT \(+\) 1 AND \(= 3\) 閘; 或 1 個 NOR 閘:\(\lnot B \land \lnot D = \lnot(B \lor D)\))。

(nb) at (0,0.8) ; (nd) at (0,-0.8) ; (a) at (2.5,0) ; (nb.in 1) – ++(-0.4,0) node[left]\(B\); (nd.in 1) – ++(-0.4,0) node[left]\(D\); (nb.out) – ++(0.3,0) |- (a.in 1); (nd.out) – ++(0.3,0) |- (a.in 2); (a.out) – ++(0.4,0) node[right]\(f\);

(n) at (0,0) ; (n.in 1) – ++(-0.5,0) node[left]\(B\); (n.in 2) – ++(-0.5,0) node[left]\(D\); (n.out) – ++(0.4,0) node[right]\(f\);

驗算:\(m_0\,(0000)\)\(m_{10}\,(1010)\)\(B{=}0,D{=}0 \Rightarrow 1\) ✓;\(m_5\,(0101)\)\(B{=}1 \Rightarrow 0\) ✓。

教學重點:卡諾圖其實是「甜甜圈」。 平面只是畫法;拓撲上左右緣相接、上下緣相接(環面)。 「四個角合成一群」是最容易漏看的迴繞—— 看到角落有 1,先檢查其他三個角。 另外注意 De Morgan:\(\lnot B \land \lnot D = \lnot(B \lor D)\), 一顆 NOR 就解決,比 3 顆閘更省。

第 10 題(4 變數):中央方塊——\(B \land D\)

求下列真值表的最簡布林式與電路:

\(A\) \(B\) \(C\) \(D\) \(f\)
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 0
0 1 0 1 1
0 1 1 0 0
0 1 1 1 1
\(A\) \(B\) \(C\) \(D\) \(f\)
1 0 0 0 0
1 0 0 1 0
1 0 1 0 0
1 0 1 1 0
1 1 0 0 0
1 1 0 1 1
1 1 1 0 0
1 1 1 1 1

第一步:填圖。最小項 \(= \{m_5, m_7, m_{13}, m_{15}\}\)—— 圖的正中央 \(2\times2\)

第二步:圈群。一個 4 格方塊: 列(\(AB \in \{01,11\}\))裡 \(A\) 有變、\(B=1\) 不變; 欄(\(CD \in \{01,11\}\))裡 \(C\) 有變、\(D=1\) 不變。

第三步:最簡式。 \[\boxed{f = B \land D}\]

第四步:電路(1 個 AND 閘)。

(a) at (0,0) ; (a.in 1) – ++(-0.5,0) node[left]\(B\); (a.in 2) – ++(-0.5,0) node[left]\(D\); (a.out) – ++(0.4,0) node[right]\(f\);

驗算:16 列中恰好 \(B{=}1\)\(D{=}1\) 的四列 (\(m_5,m_7,m_{13},m_{15}\))輸出 1 ✓,其餘 0 ✓。

教學重點:位置決定「長相」。 同樣是 4 格群,第 9 題散在四角、本題聚在中央, 本質相同:都是「兩個變數固定、兩個變數自由」。 訣竅是別數格子的位置,而是讀出框內 哪些變數從頭到尾沒變

第 11 題(4 變數):8 格大群+補一對——\(\lnot B \lor (A \land C \land D)\)

求下列真值表的最簡布林式與電路:

\(A\) \(B\) \(C\) \(D\) \(f\)
0 0 0 0 1
0 0 0 1 1
0 0 1 0 1
0 0 1 1 1
0 1 0 0 0
0 1 0 1 0
0 1 1 0 0
0 1 1 1 0
\(A\) \(B\) \(C\) \(D\) \(f\)
1 0 0 0 1
1 0 0 1 1
1 0 1 0 1
1 0 1 1 1
1 1 0 0 0
1 1 0 1 0
1 1 1 0 0
1 1 1 1 1

第一步:填圖。最小項 \(= \{m_0,\dots,m_3, m_8,\dots,m_{11}\} \cup \{m_{15}\}\)

第二步:圈群。

  • 8 格群(上下列迴繞)\(AB{=}00\) 整列與 \(AB{=}10\) 整列相接;框內 \(A,C,D\) 都有變,只剩 \(B=0\) \(\Rightarrow \lnot B\)——\(2^3\) 格一口氣消 3 個變數;

  • 孤 1 補對\(m_{15}\,(1111)\) 不在大群裡, 它相鄰的 1 只有 \(m_{11}\,(1011)\),成對後 \(B\) 消去 \(\Rightarrow A \land C \land D\)(必要)。

第三步:最簡式。 \[\boxed{f = \lnot B \lor (A \land C \land D)}\]

第四步:電路(1 NOT \(+\) 2 AND \(+\) 1 OR \(= 4\) 閘)。

(a1) at (0,-0.2) ; (a2) at (2.6,-1.4) ; (nb) at (2.6,1.3) ; (o) at (5.0,-0.1) ; (a1.in 1) – ++(-0.5,0) node[left]\(A\); (a1.in 2) – ++(-0.5,0) node[left]\(C\); (a1.out) – ++(0.25,0) |- (a2.in 1); (a2.in 2) – ++(-3.1,0) node[left]\(D\); (nb.in 1) – ++(-3.1,0) node[left]\(B\); (nb.out) – ++(0.3,0) |- (o.in 1); (a2.out) – ++(0.3,0) |- (o.in 2); (o.out) – ++(0.4,0) node[right]\(f\);

驗算:\(m_9\,(1001)\)\(\lnot B = 1\) ✓; \(m_{15}\)\(ACD = 1\) ✓;\(m_{13}\,(1101)\)\(B{=}1\)\(C{=}0\) \(\Rightarrow\) 兩項皆 0 ✓。

教學重點:大群優先,再救孤兒。 先圈到最大的 \(\lnot B\)(8 格),剩下的 \(m_{15}\) 再找最大的可用群收編——注意收編時可以 「借用」已圈過的格子(\(m_{11}\) 被圈第二次), 群才能大、變數才消得多。若怕重疊而讓 \(m_{15}\) 自成 1 格群, 就會得到囉嗦的 \(ABCD\) 四字面值項。

第 12 題(4 變數):4 格群+上下迴繞對——提取公因式

求下列真值表的最簡布林式與電路:

\(A\) \(B\) \(C\) \(D\) \(f\)
0 0 0 0 0
0 0 0 1 1
0 0 1 0 0
0 0 1 1 1
0 1 0 0 0
0 1 0 1 1
0 1 1 0 0
0 1 1 1 1
\(A\) \(B\) \(C\) \(D\) \(f\)
1 0 0 0 0
1 0 0 1 1
1 0 1 0 0
1 0 1 1 0
1 1 0 0 0
1 1 0 1 0
1 1 1 0 0
1 1 1 1 0

第一步:填圖。最小項 \(= \{m_1, m_3, m_5, m_7, m_9\}\)

第二步:圈群。

  • 4 格群 \(\{m_1,m_3,m_5,m_7\}\)(左上 \(2\times2\)): \(B,C\) 消去 \(\Rightarrow \lnot A \land D\)\(m_5,m_7\) 只有它蓋, 必要);

  • 迴繞對 \(\{m_1, m_9\}\)\(CD{=}01\) 欄的頭尾兩格, 上下相接):\(A\) 消去 \(\Rightarrow \lnot B \land \lnot C \land D\)\(m_9\) 的唯一夥伴是 \(m_1\),必要)。

第三步:最簡式。 \[\boxed{f = (\lnot A \land D) \lor (\lnot B \land \lnot C \land D)}\]

第四步:電路。兩項都含 \(D\),提取後 \(f = D \land \bigl(\lnot A \lor (\lnot B \land \lnot C)\bigr)\): 3 NOT \(+\) 2 AND \(+\) 1 OR \(= 6\) 閘。

(nb) at (0,2.7) ; (nc) at (0,0.9) ; (a1) at (2.8,1.8) ; (na) at (2.8,-0.9) ; (o) at (5.0,0.8) ; (a2) at (7.4,0.35) ; (nb.in 1) – ++(-0.4,0) node[left]\(B\); (nc.in 1) – ++(-0.4,0) node[left]\(C\); (na.in 1) – ++(-2.9,0) node[left]\(A\); (nb.out) – ++(0.3,0) |- (a1.in 1); (nc.out) – ++(0.3,0) |- (a1.in 2); (a1.out) – ++(0.25,0) |- (o.in 1); (na.out) – ++(0.25,0) |- (o.in 2); (o.out) – ++(0.2,0) |- (a2.in 1); (a2.in 2) – ++(-8.1,0) node[left]\(D\); (a2.out) – ++(0.4,0) node[right]\(f\);

驗算:\(m_9\,(1001)\)\(D{=}1\)\(\lnot B\lnot C = 1\) \(\Rightarrow 1\) ✓;\(m_{11}\,(1011)\)\(\lnot A = 0\)\(\lnot C = 0\) \(\Rightarrow 0\) ✓;\(m_7\,(0111)\)\(\lnot A D = 1\) ✓。

教學重點:迴繞不只在左右。 \(m_1\,(0001)\) 在最上列、\(m_9\,(1001)\) 在最下列, 同一欄頭尾相接成合法的對子(兩者只差 \(A\) 位元)。 另外,K-map 之後再做代數提取(此處提出公因式 \(D\)) 常能進一步省閘——K-map 保證 SOP 最簡, 但「兩層 AND–OR」不一定是閘數最少的形狀。

第 13 題(4 變數):兩個 4 格群——\((\lnot A \lor \lnot B) \land C\)

求下列真值表的最簡布林式與電路:

\(A\) \(B\) \(C\) \(D\) \(f\)
0 0 0 0 0
0 0 0 1 0
0 0 1 0 1
0 0 1 1 1
0 1 0 0 0
0 1 0 1 0
0 1 1 0 1
0 1 1 1 1
\(A\) \(B\) \(C\) \(D\) \(f\)
1 0 0 0 0
1 0 0 1 0
1 0 1 0 1
1 0 1 1 1
1 1 0 0 0
1 1 0 1 0
1 1 1 0 0
1 1 1 1 0

第一步:填圖。最小項 \(= \{m_2, m_3, m_6, m_7, m_{10}, m_{11}\}\)

第二步:圈群(兩個 4 格群,共用 \(m_2, m_3\))。

  • 上方 \(2\times2\)\(AB\in\{00,01\}\)\(CD\in\{11,10\}\)): \(B,D\) 消去 \(\Rightarrow \lnot A \land C\)\(m_6,m_7\) 只有它蓋,必要);

  • 上下迴繞 \(2\times2\)\(AB\in\{00,10\}\)\(CD\in\{11,10\}\)): \(A,D\) 消去 \(\Rightarrow \lnot B \land C\)\(m_{10},m_{11}\) 只有它蓋,必要)。

六個 1 無法圈成 8 格群(不成矩形),兩群即最簡。

第三步:最簡式。 \[\boxed{f = (\lnot A \land C) \lor (\lnot B \land C) = C \land \lnot(A \land B)}\]

第四步:電路。SOP 直譯要 5 閘; 提取 \(C\)\(f = C \land \lnot(A \land B)\), 用 1 NAND \(+\) 1 AND \(= 2\)

(nd) at (0,0.55) ; (a) at (2.5,0.25) ; (nd.in 1) – ++(-0.5,0) node[left]\(A\); (nd.in 2) – ++(-0.5,0) node[left]\(B\); (nd.out) – ++(0.2,0) |- (a.in 1); (a.in 2) – ++(-3.2,0) node[left]\(C\); (a.out) – ++(0.4,0) node[right]\(f\);

驗算:\(f = 1\) 需要 \(C{=}1\) 且「\(A,B\) 不同時為 1」: \(m_{14}\,(1110)\)\(AB{=}11 \Rightarrow 0\) ✓; \(m_{10}\,(1010)\)\(C{=}1\)\(AB{\ne}11 \Rightarrow 1\) ✓; \(m_1\,(0001)\)\(C{=}0 \Rightarrow 0\) ✓。

教學重點:De Morgan 是省閘神器。 \(\lnot A \lor \lnot B = \lnot(A \land B)\)—— 兩顆反相器加一顆 OR,坍縮成一顆 NAND。 第 1.4 講「NAND 萬能」的實戰意義就在這: 化簡後多看一眼有沒有 \(\lnot x \lor \lnot y\)\(\lnot x \land \lnot y\) 的模式,直接換成 NAND/NOR。

第 14 題(4 變數):質數偵測器——必要項與自由選擇

輸入 \(A,B,C,D\) 是 4 位元二進位數 \(N\)\(A\) 為最高位, \(N = 0 \sim 15\))。當 \(N\)質數\(2,3,5,7,11,13\))時 \(f = 1\)。真值表:

\(N\) \(A\) \(B\) \(C\) \(D\) \(f\)
0 0 0 0 0 0
1 0 0 0 1 0
2 0 0 1 0 1
3 0 0 1 1 1
4 0 1 0 0 0
5 0 1 0 1 1
6 0 1 1 0 0
7 0 1 1 1 1
\(N\) \(A\) \(B\) \(C\) \(D\) \(f\)
8 1 0 0 0 0
9 1 0 0 1 0
10 1 0 1 0 0
11 1 0 1 1 1
12 1 1 0 0 0
13 1 1 0 1 1
14 1 1 1 0 0
15 1 1 1 1 0

第一步:填圖。最小項 \(= \{m_2, m_3, m_5, m_7, m_{11}, m_{13}\}\)

第二步:先鎖定必要群。沒有 4 格以上的矩形, 逐一問「這個 1 有哪些可成的對」:

  • \(m_2\):唯一相鄰的 1 是 \(m_3\) \(\Rightarrow \lnot A \lnot B C\)(必要,蓋 \(m_2,m_3\));

  • \(m_{11}\):唯一相鄰的 1 是 \(m_3\)(上下迴繞) \(\Rightarrow \lnot B C D\)(必要,蓋 \(m_{11},m_3\));

  • \(m_{13}\):唯一相鄰的 1 是 \(m_5\) \(\Rightarrow B \lnot C D\)(必要,蓋 \(m_{13},m_5\));

  • \(m_7\) 未蓋:它可以配 \(m_5\)\(\Rightarrow \lnot A B D\)) 或配 \(m_3\)\(\Rightarrow \lnot A C D\))——任選其一, 兩種都最簡。

第三步:最簡式(擇 \(\lnot A B D\))。 \[\boxed{f = \lnot A \lnot B C \;\lor\; \lnot B C D \;\lor\; B \lnot C D \;\lor\; \lnot A B D}\] (把最後一項換成 \(\lnot A C D\) 亦為最簡。)

第四步:電路。用 3 輸入 AND 與 4 輸入 OR 畫骨架 (實作時各拆成兩顆 2 輸入閘即可); \(\lnot A\)\(\lnot B\)\(\lnot C\) 各一顆反相器共用:

(na) at (-0.7,4.8) ; (nb) at (-0.7,3.4) ; (nc) at (-0.7,2.0) ; (a1) at (2.6,4.5) ; (a2) at (2.6,2.9) ; (a3) at (2.6,1.3) ; (a4) at (2.6,-0.3) ; (o) at (5.6,2.1) ; (na.in 1) – ++(-0.4,0) node[left]\(A\); (nb.in 1) – ++(-0.4,0) node[left]\(B\); (nc.in 1) – ++(-0.4,0) node[left]\(C\); (na.out) – ++(0.35,0) |- (a1.in 1); (nb.out) – ++(0.55,0) |- (a1.in 2); (a1.in 3) – ++(-3.8,0) node[left]\(C\); (nb.out) ++(0.55,0) |- (a2.in 1); (a2.in 2) – ++(-3.8,0) node[left]\(C\); (a2.in 3) – ++(-3.8,0) node[left]\(D\); (a3.in 1) – ++(-3.8,0) node[left]\(B\); (nc.out) – ++(0.35,0) |- (a3.in 2); (a3.in 3) – ++(-3.8,0) node[left]\(D\); (na.out) ++(0.35,0) |- (a4.in 1); (a4.in 2) – ++(-3.8,0) node[left]\(B\); (a4.in 3) – ++(-3.8,0) node[left]\(D\); (a1.out) – ++(0.3,0) |- (o.in 1); (a2.out) – ++(0.25,0) |- (o.in 2); (a3.out) – ++(0.25,0) |- (o.in 3); (a4.out) – ++(0.3,0) |- (o.in 4); (o.out) – ++(0.4,0) node[right]\(f\);

驗算:\(N{=}9\,(1001)\):四項依序 \(\lnot A{=}0\)✗、\(C{=}0\)✗、\(B{=}0\)✗、\(\lnot A{=}0\)\(\Rightarrow 0\) ✓(9 不是質數); \(N{=}13\,(1101)\)\(B\lnot C D = 1\) ✓; \(N{=}15\,(1111)\)\(\lnot A{=}0\)\(\lnot B{=}0\)\(\lnot C{=}0\) \(\Rightarrow 0\) ✓。

教學重點:完整的質蘊涵項流程。 這題把 Quine–McCluskey 的精神走了一遍: (1) 列出所有質蘊涵項(可成的最大群); (2) 找必要的(某個 1 只有它能蓋); (3) 剩餘的 1 用最少的群補滿——補的時候若有多種選擇, 任一種都算最簡解。考卷上寫「\(m_7\)\(\lnot ABD\)\(\lnot ACD\) 皆可」會讓閱卷者知道你真的懂。

第 15 題(5 變數):雙層卡諾圖——\((\lnot C \land D) \lor (A \land B \land E)\)

\(f(A,B,C,D,E)\) 由最小項給定(\(A\) 為最高位): \[f = \Sigma m(2,\,3,\,10,\,11,\,18,\,19,\,25,\,26,\,27,\,29,\,31).\] 等價的功能描述:「\(C{=}0\)\(D{=}1\)」時輸出 1; 另外「\(A{=}B{=}E{=}1\)」時也輸出 1。 請畫出 5 變數卡諾圖(\(A=0\)\(A=1\) 兩層)、 求最簡布林式並畫出電路。

第一步:分層填圖。5 變數 \(= 2^5 = 32\) 格, 拆成兩張 \(4\times4\) 圖:左層 \(A=0\)\(m_0\)\(m_{15}\))、 右層 \(A=1\)\(m_{16}\)\(m_{31}\),層內編號減 16)。 兩層同位置的格子互為相鄰(只差 \(A\))。

\(A = 0\) \(A = 1\)

第二步:圈群(跨層思考)。

  • 跨兩層的 8 格群:兩層的相同位置各有一個 「\(BC{=}00\) 列與 \(BC{=}10\) 列、\(DE\in\{11,10\}\) 欄」 的迴繞 \(2\times2\)\(m_2,m_3,m_{10},m_{11}\) 層內編號)。 上下疊起來共 8 格:\(A,B,E\) 都有變, 只剩 \(C{=}0\)\(D{=}1\) \(\Rightarrow \lnot C \land D\) (消 3 個變數!);

  • \(A=1\) 層內的 4 格方塊 \(\{m_9,m_{11},m_{13},m_{15}\}\)(層內編號; \(BC\in\{10,11\}\)\(DE\in\{01,11\}\)):\(C,D\) 消去, 加上整群都在 \(A{=}1\)\(\Rightarrow A \land B \land E\)

\(m_{29}, m_{31}\) 只有第二群能蓋、\(m_2\) 等只有第一群能蓋, 兩群皆必要且已蓋滿全部 11 個 1。

第三步:最簡式。 \[\boxed{f = (\lnot C \land D) \lor (A \land B \land E)}\]

第四步:電路(1 NOT \(+\) 3 AND \(+\) 1 OR \(= 5\) 閘)。

(nc) at (0,2.3) ; (a1) at (2.6,1.75) ; (a2) at (0,-0.5) ; (a3) at (2.6,-0.9) ; (o) at (5.0,0.5) ; (nc.in 1) – ++(-0.4,0) node[left]\(C\); (nc.out) – ++(0.3,0) |- (a1.in 1); (a1.in 2) – ++(-3.3,0) node[left]\(D\); (a2.in 1) – ++(-0.65,0) node[left]\(A\); (a2.in 2) – ++(-0.65,0) node[left]\(B\); (a2.out) – ++(0.25,0) |- (a3.in 1); (a3.in 2) – ++(-3.3,0) node[left]\(E\); (a1.out) – ++(0.25,0) |- (o.in 1); (a3.out) – ++(0.25,0) |- (o.in 2); (o.out) – ++(0.4,0) node[right]\(f\);

驗算:\(m_{27}\,(11011)\)\(C{=}0,D{=}1 \Rightarrow\) 第一項 \(=1\) ✓(它同時也滿足 \(ABE\)——重疊無妨); \(m_{29}\,(11101)\)\(C{=}1\) 使第一項 \(=0\), 但 \(A{=}B{=}E{=}1 \Rightarrow 1\) ✓; \(m_{17}\,(10001)\)\(D{=}0\)\(B{=}0\) \(\Rightarrow 0\) ✓。

教學重點:第三個維度。 5 變數把「甜甜圈」再加一維:同位置的上下兩層格子相鄰。 圈群時先問「這個群兩層都有嗎?」——有就把 \(A\) 消掉 (本題的 \(\lnot C D\));只出現在單層的群則保留 \(A\)\(\lnot A\)(本題的 \(ABE\))。 Lab 1 的第 5 題用的正是同一招。

總結:15 題速查表

最小項 最簡布林式 本題教的招
1 \(\Sigma m(1,2,3)\)(2 變數) \(A \lor B\) 群可以重疊
2 \(\Sigma m(1,2)\)(2 變數) \(A \oplus B\) 對角 1 \(=\) XOR,圈不動
3 \(\Sigma m(0,2,4,6)\) \(\lnot C\) 4 格群消 2 變數、左右迴繞
4 \(\Sigma m(3,5,6,7)\) \(AB \lor AC \lor BC\) 多數決、三群共用一格
5 \(\Sigma m(0,4,5,7)\) \(\lnot B\lnot C \lor AC\) 從最挑剔的 1 下手
6 \(\Sigma m(1,2,3,7)\) \(\lnot AC \lor \lnot AB \lor BC\) 三對子皆必要、共用反相器
7 \(\Sigma m(0,1,2,5,6,7)\) \(\lnot A\lnot B \lor AC \lor B\lnot C\) 循環圖、最簡解不唯一
8 \(\Sigma m(1,2,4,7)\) \(A \oplus B \oplus C\) 棋盤格 \(=\) 同位、用 XOR
9 \(\Sigma m(0,2,8,10)\) \(\lnot B\lnot D = \lnot(B{\lor}D)\) 四角迴繞、NOR 省閘
10 \(\Sigma m(5,7,13,15)\) \(BD\) 中央方塊
11 \(\Sigma m(0\text{–}3,8\text{–}11,15)\) \(\lnot B \lor ACD\) 8 格群+借格救孤 1
12 \(\Sigma m(1,3,5,7,9)\) \(\lnot AD \lor \lnot B\lnot CD\) 上下迴繞、提取公因式
13 \(\Sigma m(2,3,6,7,10,11)\) \(C \land \lnot(AB)\) De Morgan 換 NAND
14 \(\Sigma m(2,3,5,7,11,13)\) 四項 SOP(見內文) 必要項+自由選擇
15 \(\Sigma m(2,3,10,11,18,19,\) \(\lnot CD \lor ABE\) 雙層(5 變數)K-map
\(\;25,26,27,29,31)\)

通用檢查清單(考前背這五條):

  1. 行列標籤是格雷碼(\(00,01,11,10\))了嗎?

  2. 每個群都是 \(2^k\) 格的矩形嗎?有沒有更大的圈法?

  3. 迴繞檢查過了嗎(左右、上下、四角、跨層)?

  4. 每個群至少擁有一個「別群蓋不到」的 1 嗎 (否則它是多餘的)?

  5. 化簡完,代 2–3 列回真值表驗算了嗎?