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 02

邏輯閘與 NAND 的萬能

把布林式變成電路:只用一種閘就能做出全部
Interaction 30 minute(s)

Learning Objectives

  • 認得六種基本邏輯閘的符號與真值表
  • 把一個布林式接成電路,用真值表確認接對了
  • 只用 NAND 做出 NOT、AND、OR,說明它為什麼叫通用閘
  • 說明晶片為什麼常用 NAND 而不是 AND

布林式怎麼變成真的東西

上一課的 Y = A AND B 是紙上的數學。把它做成實體,只需要一種元件:開關。電晶體就是用電壓控制的開關,兩個開關串聯,兩個都導通電流才過得去,這就是 AND。

晶片設計師不會每次都從電晶體想起,而是用包裝好的單元,叫做邏輯閘(logic gate):

符號名稱 布林式 輸出是 1 的時候
NOT Y = A′ A 是 0
AND Y = A·B 兩個都是 1
OR Y = A + B 至少一個是 1
NAND Y = (A·B)′ 不是兩個都 1
NOR Y = (A + B)′ 兩個都是 0
XOR Y = A ⊕ B 兩個不一樣

符號上的小圓圈代表「反相」,所以 NAND 的符號就是 AND 加一個圓圈。

這條軌道的模擬器。 電路圖不是畫好看的:每條線的值都是模擬器算出來的,綠色是 1、灰色是 0、紅色是未知(x)。輸入腳沒接線時值就是未知,真實晶片的空接腳也一樣不可靠,所以模擬器不會幫你當成 0。模擬是簡化的:每個閘的延遲都是整數個單位,沒有電壓、電流與散熱。

互動練習:認識模擬器

按 A、B 切換 0 與 1,看線的顏色與燈怎麼變。真值表是模擬器把每一種輸入都試過一次算出來的,目前的輸入那一列會標出來。

從布林式接出電路

接電路的順序和算式的順序一樣:括號裡的先算。例如 Y = (A·B) + C′:

  1. A、B 接到一個 AND
  2. C 接到一個 NOT
  3. 兩個結果接到一個 OR,輸出接到燈

接線的方式:按一個元件的輸出腳(右邊),再按另一個元件的輸入腳(左邊)。手機上比較難點的話,用下方的選單一樣可以接;電路圖太寬時可以左右滑動。一個輸出可以接到很多地方,但一個輸入只能接一條線:兩條線同時推同一個點,真實電路會短路,模擬器也不允許。

互動練習:接出 Y = (A·B) + C′

元件從上面加進來,可以拖曳移動。接好之後看真值表,和目標不同的那一列會標紅。

只要一種閘就夠了

做晶片時,閘的種類越少,製程與設計工具越單純。令人意外的是,只要 NAND 一種就能做出任何邏輯。這種閘叫通用閘(universal gate)。

NOT 最簡單:把 NAND 的兩個輸入接在一起,(A·A)′ = A′。

有了 NOT,AND 就是 NAND 後面再反相一次:((A·B)′)′ = A·B。

OR 用上一課的笛摩根定律:A + B = (A′·B′)′,也就是把兩個輸入各自反相,再接一個 NAND。

NOR 也是通用閘,道理相同。

為什麼真實晶片愛用 NAND?在常見的 CMOS 製程裡,NAND 只要 4 顆電晶體;AND 要在 NAND 後面再接一個反相器,共 6 顆。所以 AND 其實比 NAND「多做一步」,又慢又佔面積,雖然它讀起來比較直覺。

互動練習:只用 NAND

這裡只有 NAND 可以用。三個任務都要符合真值表,閘的數量也有上限。每做完一個,把多的閘刪掉、重新接線。

用程式驗證笛摩根定律

窮舉所有輸入是驗證小電路最可靠的方法。下面用 Python 定義 nand,再用它組出 NOT、AND、OR,和 Python 內建的運算比對。

確認一下

1.

NAND 的兩個輸入都接到 A,輸出是什麼?

2.

一個 AND 閘的 A 接到開關,B 沒有接線。把 A 設成 0,輸出是?

3.

下面哪一個式子和 (A + B)′ 相同?

4.

為什麼不能把兩個輸出接到同一個輸入?

5.

用 NAND 做 OR 要 3 個閘,直接用 OR 閘只要 1 個。晶片設計工具為什麼還常常用 NAND 組?

第 1 次作答

重點整理

  • 邏輯閘是電晶體開關的包裝,每種閘對應一個布林運算。
  • 接電路的順序和算式相同;一個輸出可以分給很多輸入,一個輸入只能接一條線。
  • 沒接線的輸入是未知的,不要假設它是 0。
  • NAND 是通用閘,NOT、AND、OR 都能用它做出來。CMOS 裡 NAND 也比 AND 便宜。

閘的數量直接影響成本與速度。下一課學一個化簡的方法:同樣的功能,用更少的閘。

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