Home
Explore Uedu
Student Console
Register as Member/Login
(2) In future presentations of the research findings, in addition to the course project website and public presentations, your real name and personal information will not appear in this research report. If you are interested in the research results, we can provide you with an executive summary after the study is completed.
問卷中心
Teacher Console
Course Setup
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

0

Local AI

--

CISOSE26 本地 AI UG26
政治大學 AQI 19 29°C

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

邏輯閘與布林代數

邏輯閘進階:從電晶體、延遲到突波的真實電路

真值表騙了你——當訊號開始賽跑,CMOS、傳播延遲與邏輯冒險如何決定一顆晶片跑多快、耗多少電

當邏輯閘「來不及反應」:一條導線上的賽跑

你已經知道一個 AND 閘在真值表裡是怎麼運作的:輸入 $A=1$、$B=1$,輸出立刻變 $1$。但現實中沒有「立刻」這回事。電訊號要穿過電晶體、充放電寄生電容,需要時間。如果同一個訊號 $A$ 同時走了兩條長短不一的路徑才在某個閘會合,較慢的那條會「遲到」,於是輸出可能在穩定下來之前,先閃出一個本不該存在的脈衝——這就是邏輯突波(glitch)。在真值表這個理想化的世界裡它完全不存在,但它真實地讓無數電路在實驗室裡誤觸發。

入門篇把邏輯閘當成瞬時、無損耗的數學符號。進階篇要把這層理想化撕開:邏輯閘是用電晶體做成的物理裝置,它有延遲、有負載、有功耗、有競爭。理解這一層,你才真正從「會算真值表」跨到「會設計電路」。

邏輯閘與布林代數進階概念示意圖

從電晶體看一個閘:CMOS 的對偶結構

現代數位電路幾乎全用 CMOS(互補式金氧半,Complementary MOS) 製成。一個 CMOS 閘由兩半組成:上半是一群 PMOS 組成的上拉網路(pull-up network, PUN),負責在輸出該為 $1$ 時把它接到電源 $V_{DD}$;下半是一群 NMOS 組成的下拉網路(pull-down network, PDN),負責在輸出該為 $0$ 時把它接到地。

關鍵在於:PUN 與 PDN 是對偶(dual) 的——PDN 裡串聯的地方,PUN 就並聯,反之亦然。而且 CMOS 閘天生是反相的(PMOS 用 $0$ 導通、NMOS 用 $1$ 導通)。所以最自然的 CMOS 閘其實是 NAND、NOR、NOT,而不是 AND、OR。

2 輸入 NAND 為例,輸出 $Y = \overline{A \cdot B}$:

  • PDN:兩個 NMOS 串聯($A$、$B$ 都為 $1$ 才把輸出拉到地 $\Rightarrow Y=0$)。
  • PUN:兩個 PMOS 並聯($A$、$B$ 任一為 $0$ 就把輸出拉到 $V_{DD} \Rightarrow Y=1$)。

整個閘只要 4 顆電晶體。這就是為什麼上一篇說「NAND 是萬能閘」不只是邏輯上的漂亮結論——它在製程上也最便宜。注意:要做「真正的 AND 閘」,CMOS 得先做 NAND 再串一個反相器(NOT),總共 6 顆電晶體,比 NAND 還貴。這解釋了一個常被忽略的事實:在 CMOS 世界裡,反相邏輯(NAND/NOR)比正相邏輯(AND/OR)更原生、更省。

看一個例子:用一個閘實現 $Y=\overline{A\cdot B + C}$

這種「先 AND-OR 再整體反相」的式子,CMOS 可以用單一複合閘(compound gate / AOI 閘) 一次做完,不必拆成好幾個閘。規則就是把布林式直接「翻譯」成電晶體網路:

  • PDN(NMOS,對應式子內部的 $A\cdot B + C$):$A$、$B$ 兩顆 NMOS 串聯(對應 $A\cdot B$),再與 $C$ 那顆 NMOS 並聯(對應 $+C$)。
  • PUN(PMOS,取對偶):$A$、$B$ 兩顆 PMOS 並聯,再與 $C$ 那顆 PMOS 串聯

總共 $3+3=6$ 顆電晶體就實現了這個三變數函數,這就是 AOI21 閘。若改用獨立的 AND、OR、NOT 閘串接,電晶體數會多得多。這種「複合閘」的設計能力,是入門真值表完全看不到、卻是實際晶片密度的關鍵。

傳播延遲:訊號要花多久才到

每個閘從輸入改變到輸出穩定,需要一段傳播延遲(propagation delay) $t_{pd}$。它來自電晶體導通電阻 $R$ 對下一級輸入電容 $C$ 充放電的過程,可用一階 RC 模型估算。輸出從 $V_{DD}$ 充到一半($50\%$ 判定點)所需時間約為:

$$ t_{pd} \approx 0.69\,R_{on}\,C_L $$

其中 $0.69 = \ln 2$(因為 $V(t)=V_{DD}(1-e^{-t/RC})$,要達到 $0.5V_{DD}$ 需 $t=RC\ln 2$)。$C_L$ 是負載電容——也就是這個閘要驅動的所有下游閘的輸入電容總和。

這帶出一個入門完全不談、卻天天困擾工程師的量:扇出(fan-out)。一個閘輸出接的下游閘越多,$C_L$ 越大,延遲越長:

$$ t_{pd} = t_{p0} + k \cdot N_{\text{fanout}} $$

$t_{p0}$ 是本徵延遲(驅動自身寄生電容),$N_{\text{fanout}}$ 是扇出數,$k$ 為每多接一個負載增加的延遲。所以一條訊號不能無限制地分岔給很多閘——超過某個扇出上限就得插入緩衝器(buffer) 來「中繼放大」。

一條訊號路徑的總延遲,是路徑上各閘延遲相加。電路能跑多快,由最長路徑(關鍵路徑,critical path) 決定。時脈週期必須滿足:

$$ T_{clk} \ge t_{pd,\max} + t_{setup} + t_{skew} $$

這就是為什麼數位設計師永遠在追「縮短關鍵路徑」——它直接決定晶片的最高時脈。

競爭與突波:真值表騙了你

回到開頭那個賽跑問題。考慮這個看似已化到最簡的函數:

$$ Y = A\cdot C + \overline{A}\cdot B $$

這是一個多工器(multiplexer):$A=1$ 選 $C$、$A=0$ 選 $B$。假設此刻 $B=1$、$C=1$,那麼不論 $A$ 是 $0$ 還是 $1$,輸出理論上都該是 $1$。可是當 $A$ 從 $1$ 切到 $0$ 的瞬間:

  • 上半項 $A\cdot C$:$A$ 直接讓它從 $1$ 變 $0$(快)。
  • 下半項 $\overline{A}\cdot B$:$A$ 要先經過一個 NOT 閘變成 $\overline{A}$,多了一級延遲,才讓這項從 $0$ 變 $1$(慢)。

於是出現一個時間縫隙:上半項已經掉到 $0$,下半項還沒升到 $1$,兩者瞬間都是 $0$,輸出 $Y$ 短暫地閃出一個 $0$ 突波——明明真值表說它該穩定在 $1$!這叫靜態 1 型冒險(static-1 hazard)

動手算一下:用卡諾圖消除冒險

把上式畫成卡諾圖(變數 $A$、$B$、$C$),讓輸出為 $1$ 的格子如下($Y=AC+\overline{A}B$):

$A\backslash BC$ 00 01 11 10
0 0 0 1 1
1 0 1 1 0

兩個質蘊涵項 $A\cdot C$(覆蓋右下的 $11,1$ 與 $11,0$?實際對應 $A=1,C=1$ 那兩格)與 $\overline{A}\cdot B$(覆蓋 $A=0,B=1$ 兩格)剛好「相鄰但不重疊」。冒險就發生在這兩個圈圈的邊界——也就是 $B=1,C=1$、$A$ 在切換的地方。

消除法:補上一個多餘但冗餘(redundant) 的覆蓋項,把那道邊界「橋接」起來。觀察到 $B=1$ 且 $C=1$ 時輸出恆為 $1$,於是加入冗餘項 $B\cdot C$:

$$ Y = A\cdot C + \overline{A}\cdot B + B\cdot C $$

新增的 $B\cdot C$ 在 $A$ 切換時始終維持 $1$(它根本不含 $A$),等於替輸出加了一條「永遠不放手」的支撐線,突波就被填平了。注意這裡的反直覺:為了消除冒險,我們故意違反「閘越少越好」,刻意加回一個邏輯上多餘的閘。這正是「邏輯最簡」與「時序安全」之間的取捨——入門篇教你化到最簡,進階篇告訴你最簡有時反而不安全。

補充:上面處理的是組合電路冒險。在同步時序電路裡,因為輸出只在時脈邊緣被正反器取樣,突波只要在取樣前穩定下來通常無害——這也是為什麼現代設計多採同步時脈,把冒險「容忍掉」而非全部消除。但在非同步電路、時脈閘控、或直接驅動的場合,冒險仍是真實的故障源。

功耗:閘不是免費的

入門把閘當成純邏輯,但每次它翻轉狀態都在耗電。CMOS 的動態功耗主要來自對負載電容充放電:

$$ P_{dyn} = \alpha\, C_L\, V_{DD}^2\, f $$

其中 $\alpha$ 是翻轉活動率(switching activity,平均每週期翻轉幾次)、$f$ 是時脈頻率。這條式子解釋了好幾個產業級現象:

  • 降電壓最有效:功耗與 $V_{DD}^2$ 成平方關係,把電壓砍半,動態功耗降為四分之一。這是低功耗設計的第一招。
  • 時脈閘控(clock gating):把暫時用不到的模組的 $f$ 設為 $0$,動態功耗歸零。
  • 此外還有靜態功耗——電晶體即使不切換也有微小漏電流(leakage)。製程越先進(電晶體越小),漏電佔比越高,這正是當代晶片功耗的主要戰場之一。

一個簡單推論:同樣一個邏輯函數,用 6 個閘實現比用 10 個閘實現,不只更省面積,活動率與總電容都更低,因此更省電。布林化簡(入門篇的主題)在這裡有了物理上的回報。

值得一提的是一種介於動態與靜態之間的損耗:短路功耗(short-circuit power)。在輸入訊號的上升/下降緣,PMOS 與 NMOS 會有一小段時間同時導通,從 $V_{DD}$ 到地形成直通電流。這也是為什麼設計師偏好陡峭的訊號邊緣(fast slew rate)——邊緣拖得越久,兩管同時開的時間越長,白白燒掉的能量越多。這個現象在純邏輯層面完全不存在,卻是高速電路功耗預算裡實實在在的一筆。

多級邏輯與技術映射:化簡之後的世界

入門篇的卡諾圖把函數化成兩級(AND-OR)的最簡式。但真實晶片是多級邏輯(multi-level logic):用更多層、但每層更小的閘,常常總成本反而更低(面積、延遲、功耗的綜合)。例如 $Y=ab+ac+ad$ 兩級需要 3 個 AND + 1 個 OR;但因式分解成 $Y=a(b+c+d)$ 後變成 1 個 AND + 1 個 OR,閘數更少、扇入更均衡。

更進一步,技術映射(technology mapping) 是把抽象布林網路對應到實際標準元件庫(standard cell library) 中真正存在的閘(特定的 NAND2、AOI21、MUX 等,各有不同的面積/延遲/驅動強度)。這是現代 EDA(電子設計自動化)流程的核心步驟,所求的不是「最少布林運算」,而是「在這個製程庫裡,滿足時序約束下總面積/功耗最小」——一個比純布林化簡複雜得多的最佳化問題。

重點回顧

  • 邏輯閘是物理裝置:CMOS 用對偶的上拉(PMOS)/下拉(NMOS)網路實現,天生反相,因此 NAND/NOR/NOT 比 AND/OR 更原生、更省電晶體。
  • 傳播延遲 $t_{pd}\approx 0.69\,R_{on}C_L$ 來自 RC 充放電;負載越大(扇出越多)越慢,電路速度由關鍵路徑決定。
  • 真值表騙人:路徑長短不一會造成競爭與突波(冒險),可用加入冗餘項的方式填平——這時「最簡」反而要讓步給「安全」。
  • 功耗 $P_{dyn}=\alpha C_L V_{DD}^2 f$:與電壓平方成正比,是低功耗設計與布林化簡的物理動機。
  • 真實設計用多級邏輯 + 技術映射,目標是製程庫下的面積/延遲/功耗最佳化,而非單純最少布林運算。

深入探討(研究所視角)

把邏輯閘從「布林函數的實現」提升到計算模型,會打開幾扇通往理論計算機科學的門。

電路複雜度(circuit complexity) 以兩個量刻畫一個布林函數的難度:大小(size,閘數)深度(depth,最長路徑的閘層數)。深度直接對應傳播延遲,也對應「平行運算所需的時間步數」。一個經典而深刻的限制是 $\mathrm{AC}^0$ 類——常數深度、多項式大小、扇入不限的 AND/OR/NOT 電路——無法計算 PARITY(奇偶校驗,即 $n$ 個位元的 XOR)。這由 Furst–Saxe–Sipser 與 Håstad 的切換引理(switching lemma) 嚴格證明。它的工程含意很實在:XOR 鏈(如同位元檢查、加密)本質上需要對數深度,不可能壓成常數層,這替「為何加法器有進位延遲」提供了理論下界。

閾值邏輯(threshold logic) 則把閘一般化為「加權多數決」:$f(\mathbf{x})=1 \iff \sum_i w_i x_i \ge \theta$。單一閾值閘就能實現 AND(權重全 $1$、$\theta=n$)、OR($\theta=1$)、多數決等;由閾值閘構成的電路($\mathrm{TC}^0$)能在常數深度內做 PARITY 與乘法,威力遠超 $\mathrm{AC}^0$。更耐人尋味的是,閾值閘正是人工神經元的數學原型(McCulloch–Pitts 神經元就是一個閾值閘)——數位邏輯與神經網路在這裡共用同一個代數骨架。

表示與驗證層面,二元決策圖(Binary Decision Diagram, BDD),特別是 Bryant 提出的 ROBDD(reduced ordered BDD),提供布林函數的正規式(canonical form):在固定變數順序下,兩個函數相等 $\iff$ 它們的 ROBDD 同構。這讓「兩個電路是否等價」這種看似要指數枚舉的問題,常能在多項式時間內判定,是形式驗證(formal verification) 的基石。但 BDD 大小對變數順序極度敏感(最差仍指數爆炸,且找最佳順序是 NP-hard),所以現代等價檢查與模型檢查更倚重 SAT 求解器——而布林可滿足性 SAT 正是 Cook–Levin 定理裡第一個被證明為 NP-complete 的問題。於是一條清晰的脈絡浮現:你手上這顆小小的邏輯閘,往上延伸就是延遲與冒險的工程現實,再往上就是 $\mathrm{AC}^0$、$\mathrm{TC}^0$、$P$ 與 $NP$ 之間那些至今未解的計算複雜度疆界。

AI 共讀助教正在陪你讀:邏輯閘進階:從電晶體、延遲到突波的真實電路
嗨!我是這篇文章的共讀助教,只根據〈邏輯閘進階:從電晶體、延遲到突波的真實電路〉的內容回答。可以問我「解釋某段」「舉個例子」「出題考我」,或反白文中段落後點下方「解釋選取段落」。