數位邏輯
組合邏輯(combinational logic)
想像一台自動販賣機的投幣計數器:投進幾枚硬幣,顯示螢幕立刻顯示出總額。你一分鐘前投了什麼、機器已經開了一個小時還是剛開機,都無關緊要——輸出完全是此刻投幣口裡這些硬幣的函數。這就是組合邏輯的本質:一種輸出只取決於當前輸入的電路,對之前發生過什麼沒有任何記憶。改變一個輸入,輸出會在極小的傳播延遲後穩定到新值;讓輸入保持不變,輸出也保持不變。
嚴格地說,組合電路實現的是輸入的一個純布林函數——同樣的輸入組合永遠產生同樣的輸出組合。你用邏輯閘(AND、OR、NOT、XOR)搭建它們,再連成更大的模組:從幾路輸入中選出一路的多工器、把兩個數相加的加法器、解碼器、比較器,以及各種查表式的邏輯。關鍵在於:沒有回授迴路,也沒有儲存元件,所以電路裡沒有任何東西會記住過去的狀態。
這是與時序邏輯刻意相反的一面——時序邏輯會把輸出經由正反器這類儲存元件回授回去,因此確實取決於歷史,也取決於時脈。真實晶片把兩者交織在一起:一團團組合邏輯算出下一拍的值,暫存器在每個時脈邊緣把這些值鎖存下來。一個實際後果是時序——訊號以有限的速度逐級穿過各個閘,所以暫存器之間每一條組合路徑的延遲,正是靜態時序分析要拿來和時脈相比對的;其中最慢的那條便成了限制晶片能跑多快的關鍵路徑。
// A 2-to-1 multiplexer: output is a pure function of sel, a, b assign y = sel ? b : a;
連續指派 `assign` 描述的就是組合邏輯——只要任一輸入一變,`y` 立刻重新計算,沒有時脈,也不保存任何狀態。
「combinational(組合)」和「combinatorial」在實務中可以互換使用,不過多數工程師和 IEEE 標準更偏好「combinational」——這種電路是把輸入組合起來,而不是在數學意義上去數有多少種組合。
又稱
另見