多工器(multiplexer)
/ MUL-ti-plex-er /
多工器(mux)是硬體用來說「在這些裡選一個」的方式。想像一個有好幾條進來的軌道、一條出去的軌道的鐵路轉轍器:一根控制桿決定哪條進來的軌道接到輸出。多工器有好幾個資料輸入、一個輸出,以及若干選擇輸入;選擇線上的值挑出哪一個資料輸入被原封不動送到輸出,其餘的都被忽略。它是 if-then-else 或 switch 敘述的實體化身——依據一個條件來選一個值。
一個 2 選 1 多工器有兩個資料輸入(叫它們 I0 和 I1)、一條選擇線 S、一個輸出 Y。當 S=0 時輸出 Y 等於 I0;當 S=1 時等於 I1。寫成布林式 Y =(S' AND I0)OR(S AND I1)——幾個被 S 及其反相控制的 AND 閘,再用一個 OR 接起來。要在更多輸入中選擇就用更多選擇位元:一個 4 選 1 多工器有 2 條選擇線(00 選 I0、01 選 I1、10 選 I2、11 選 I3),一般而言一個 2^n 選 1 多工器需要 n 條選擇線。較寬的資料則靠把相同的多工器一位元一個地疊起來處理。
它為何重要:多工器在處理器裡無所不在,因為運算有太多就是「選擇」。資料路徑用多工器來決定,比方說,算術單元的第二個運算元是來自暫存器、還是來自指令裡內嵌的立即值,又或者要把哪個結果寫回。控制訊號其實就是那些選擇線,而控制單元的工作大半就是每個週期把它們設對。所以當你讀到「控制單元操縱資料路徑」時,那個方向盤實實在在就是一排多工器。
一個用同一個顯示器顯示室內或室外溫度的恆溫器,用的是 2 選 1 多工器:I0 = 室內讀數、I1 = 室外讀數、S =「室外」按鈕。按下按鈕(S=1)顯示器顯示 I1;放開(S=0)顯示 I0。一個輸出、兩個來源、一個選擇位元。
多工器是用電線做成的 if 敘述:選擇線是條件,資料輸入是各個分支。
多工器是選一個輸入送到一個輸出。它的鏡像、解多工器則相反——把一個輸入導向多個輸出之一——並與解碼器密切相關;別把這兩個方向搞混。