Home
探索 Uedu
學生控制台
註冊會員/登入
研究知情同意中心
教師控制台
課程設定
支援與訊息
Uptime 數據

UeduGPTs

--

Jupyters

4

UG26 CISOSE26
臺北 AQI 46 · 臺中 AQI 26 · 臺南 AQI 21 · 高雄 AQI 33

AI 回覆桌面通知

AI 助教回覆完成時顯示桌面通知

聊天訊息通知

同學在討論區發送訊息時通知

聲音通知

每當有新通知時播放提示音

邏輯閘與布林代數

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

真值表騙了你——當訊號開始賽跑,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 共讀助教正在陪你讀:邏輯閘進階:從電晶體、延遲到突波的真實電路
嗨!我是這篇文章的共讀助教,只根據〈邏輯閘進階:從電晶體、延遲到突波的真實電路〉的內容回答。可以問我「解釋某段」「舉個例子」「出題考我」,或反白文中段落後點下方「解釋選取段落」。