National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 03

卡諾圖化簡

同樣的功能用更少的閘:看圖合併
Interaction 45 minute(s)

Learning Objectives

  • 說明相鄰格子為什麼可以合併,以及卡諾圖為什麼用格雷碼排列
  • 在 2 到 4 變數的卡諾圖上圈出最簡的乘積相加式
  • 利用隨意項讓式子更短,並說明這樣做的代價
  • 把化簡結果接成電路,比較閘的數量與延遲

同一個功能,閘越少越好

三位評審表決,至少兩位同意才通過。把同意記成 1,從真值表直接寫最小項相加,會得到:

Y = A′·B·C + A·B′·C + A·B·C′ + A·B·C

4 個乘積、12 個文字(literal,一個變數或它的反相算一個文字)。可是這個功能只需要 A·B + B·C + A·C:3 個乘積、6 個文字。每少一個文字,就少一條線接進閘裡;每少一個閘,晶片面積就小一點、耗電少一點,訊號要經過的層數也可能變少。

化簡靠的是一條規則:

A·B + A·B′ = A·(B + B′) = A·1 = A

兩個乘積只差一個變數的反相時,可以合併,那個變數會消失。 意思很直白:不管 B 是什麼結果都一樣,那 B 就不重要。

難處在於怎麼找出這些配對。項目一多,靠代數改寫容易漏掉,也不知道什麼時候算寫完了。

把真值表排成一張圖

卡諾圖(Karnaugh map)把真值表換個排法,讓「只差一個變數」變成「在圖上相鄰」,用眼睛就能找到可以合併的項目。Edward Veitch 在 1952 年發表用圖表化簡真值函數的方法,Maurice Karnaugh 在 1953 年的論文裡重新安排了這張圖,成為今天通用的形式。

3 個變數的卡諾圖長這樣,格子裡的數字是最小項的編號(把 ABC 當成二進位,m5 就是 A=1、B=0、C=1):

A\BC   00   01   11   10
  0     m0   m1   m3   m2
  1     m4   m5   m7   m6

注意欄的順序是 00 01 11 10,不是 00 01 10 11。這是格雷碼(Gray code):相鄰兩個只差一個位元。如果照二進位順序排,01 和 10 會成為鄰居,但它們差了兩個位元,兩格圈在一起也消不掉變數。

最左邊的 00 和最右邊的 10 也只差一個位元,所以卡諾圖的左右邊緣是相連的,上下邊緣也一樣。想像把紙捲起來接成一個圈。

確認格雷碼的相鄰關係

用程式檢查四個位置的相鄰關係,包括最後一個接回第一個的那一對,再和二進位順序比較。

互動練習:第一次圈卡諾圖

圈選方法:按一個角落的格子,再按對角的格子;也可以用下方的選單。圈好之後看右邊的乘積項與式子怎麼變。圈錯了可以按「復原上一個圈」。

格子左上角的小字是最小項編號,展開圖下方的「對照真值表」可以比對每一格是真值表的哪一列。

圈選的規則與背後的理由

規則 理由
圈內只能有 1(或等一下會講的 d) 圈到 0,那一格的輸入就會輸出 1,功能錯了
大小只能是 1、2、4、8、16 格 每對折一次消掉一個變數,3 格不可能剛好對折
形狀是矩形,邊緣可以環繞 只有這樣圈裡的格子才兩兩配對
所有的 1 都要被圈到 沒圈到的列會輸出 0
圈越大越好 每放大一倍少一個文字
圈越少越好 每多一圈多一個乘積,也多一個閘

讀出乘積項的方法:看圈裡的格子,值有變化的變數消失,值固定的變數留下,固定是 1 就直接寫,固定是 0 就加反相。在 4 個變數的圖上,2 格留 3 個文字、4 格留 2 個、8 格留 1 個、16 格全部消失,式子就是 1。

每個不能再放大的圈叫做質蘊涵項(prime implicant)。最簡的式子一定由它們組成,但不一定全部都要用,所以「永遠先圈最大的」並不保險。比較可靠的順序是:先找只有一種最大圈包得住的 1,那個圈一定要選(叫做必要質蘊涵項),剩下的再用最少的圈補齊。

下面第二題就是這個陷阱。第三題則有不只一種最簡答案,這是正常的。

互動練習:4 個變數與大圈的陷阱

這裡的判斷由程式算出全部質蘊涵項、再窮舉最小覆蓋得到:圈數最少,圈數相同時文字最少。卡住時可以按「提示」,它會標出選擇最少的那一格。

隨意項:不會出現的輸入

有些輸入在實際使用時根本不會出現,它們的輸出是什麼都無所謂,這些列叫做隨意項(don't care),圖上寫成 d。

典型的例子是用 4 個位元表示一個十進位數字(BCD,binary-coded decimal),再點亮七段顯示器。4 個位元能表示 0~15,但數字只到 9,所以 10~15 是隨意項。

 aaa
f   b
 ggg
e   c
 ddd

看最上面那一橫 a。以常見的字形,數字 0、2、3、5、6、7、8、9 要亮,1 和 4 不亮。

隨意項的用法是:對你有利時當成 1 圈進去,否則當成 0 不理它。圈裡可以有 d,只包 d 的圈沒有意義。下面的練習先假裝沒有隨意項,再加上去,比較兩個結果。

互動練習:七段顯示器的 a 段

ABCD 是輸入的 4 個位元,A 是最高位。比較兩題最簡答案的文字數。

化簡結果接回電路

回到一開始的表決電路。下面第一個電路是不化簡的版本,第二個由你接。兩個真值表應該完全相同,差別在閘的數量與訊號要經過的層數。

SOP 接成電路的方式固定:每個乘積一個 AND,全部接到一個 OR,需要反相的變數加 NOT。這叫兩層邏輯(two-level logic),AND 一層、OR 一層,不算反相器。

互動練習:不化簡的表決電路

這個電路已經接好,是每個最小項一個 AND3 的版本。切換開關,看看它的輸出與下方的波形,也數一數有幾個閘。這一題不用改線。

互動練習:接出化簡後的表決電路

照 Y = A·B + B·C + A·C 接,這裡只有 2 輸入的閘,三個乘積要用兩個 OR 串起來。上一個電路訊號從開關到燈最多要等 4 個延遲單位(模擬器量出來的,延遲是簡化的整數單位,不是奈秒)。這一個要做到 3 個單位以內。

用窮舉確認化簡沒有改變功能

卡諾圖是手工方法,圈錯了不會有人提醒你。變數不多的時候,窮舉每一種輸入是最可靠的檢查。

變數再多就換工具

卡諾圖適合 4 個變數以內。5、6 個變數要疊成好幾張圖,不同層之間也算相鄰,用眼睛已經不好找;更多變數就沒辦法了。

電腦用的方法有兩類。Quine-McCluskey 方法(Quine 1952 年提出,McCluskey 1956 年擴充)把乘積項列成表,兩兩比較合併,保證找到最簡結果,但執行時間隨變數數量指數成長。ESPRESSO(Brayton 等人在 1980 年代開發)是啟發式方法:不保證是最簡,但速度快很多,結果通常很接近。保證最好與來得及算完,在這裡是要取捨的。

另外要知道卡諾圖的範圍:它找的是兩層 SOP 裡最簡的。例如剛才 a 段的 A + C + B·D + B′·D′,其中 B·D + B′·D′ 就是 XNOR,所以可以接成 1 個 XNOR 加 1 個 OR3,只要 2 個閘。多層電路可能比最簡的兩層 SOP 更省,真實的合成工具會考慮這些,也會考慮延遲與面積的平衡。

確認一下

1.

卡諾圖的欄為什麼排成 00 01 11 10?

2.

4 變數的卡諾圖上,一個 8 格的圈化簡後是什麼樣子?

3.

同學圈了一個包到 0 的 4 格圈,因為這樣文字比較少。結果會怎樣?

4.

一個隨意項 d 被圈進某個圈裡,對這個電路的意思是?

5.

為什麼「永遠先圈最大的」不一定得到最簡答案?

第 1 次作答

重點整理

  • A·B + A·B′ = A:只差一個變數的兩項可以合併。卡諾圖用格雷碼排列,讓這些項在圖上相鄰,邊緣也相連。
  • 圈只能是 1、2、4、8、16 格的矩形,不能包到 0。值有變化的變數消失,固定的留下。
  • 最簡答案由質蘊涵項組成,但不一定全用,也可能不只一種;先選必要質蘊涵項。
  • 隨意項對你有利就當 1。硬體不知道它「不該出現」,所以要確認真的不會出現。
  • 變數多時改用 Quine-McCluskey 或 ESPRESSO;兩層 SOP 的最簡不一定是整體最省的電路。

下一課看兩種到處都用得到的組合電路:多工器與解碼器。

這一課完成了!
Next lesson:多工器與解碼器
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。