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 04

多工器與解碼器

選資料、選位址:電腦裡到處都是的兩種電路
Interaction 30 minute(s)

Learning Objectives

  • 用閘接出 2 選 1 多工器,再用 3 個組成 4 選 1
  • 寫出有致能的 2 對 4 解碼器的布林式,說明致能腳的用途
  • 用解碼器加 OR、或只用多工器,做出指定的真值表
  • 說明一般編碼器遇到同時輸入會錯在哪裡,並改成優先編碼器
  • 說明匯流排為什麼一次只能有一個來源

投影機上的訊號切換鈕

教室的投影機通常接著好幾個來源:講桌電腦、HDMI 線、無線投影。不管接了幾個,幕上一次只出現一個,按切換鈕決定是哪一個。

電腦裡這種動作多到數不完:這個運算要拿暫存器 1 還是暫存器 2 的資料?加法器的結果和記憶體讀回來的值,哪一個要存進去?負責「從幾條資料裡選一條」的電路叫多工器(multiplexer,常寫成 MUX)。

反過來的動作也一樣常見:手上有一個編號,要叫醒編號對應的那一個東西,例如記憶體的某一列。負責這件事的是解碼器(decoder)。這一課把兩者接出來,也會看到它們的用途不只是選擇:它們可以做出任何真值表。

最簡單的多工器是 2 選 1:一條選擇線 S,兩條資料 D0、D1。

S Y
0 D0
1 D1

寫成布林式是 Y = S′·D0 + S·D1。讀法很直接:S 是 0 時,左邊那一項才可能是 1,右邊一定是 0;S 是 1 時相反。兩個 AND 像兩道閘門,S 只打開其中一道。

4 選 1 用 3 個 2 選 1 就夠了

要從 4 條資料選一條,選擇線要 2 條(2 位元可以表示 0~3)。不必重新推導布林式,把 2 選 1 疊起來:

  1. 第一層兩個 2 選 1:一個在 D0、D1 之間選,一個在 D2、D3 之間選,都看 S0
  2. 第二層一個 2 選 1:在第一層的兩個結果之間選,看 S1

選擇值就是 S1·2 + S0。例如 S1=1、S0=0 是 2,第一層送上來 D0 和 D2,第二層選 D2。

這個結構可以一直疊下去。N 選 1 用 N − 1 個 2 選 1,選擇線是能裝下 N 的位元數(8 選 1 要 3 條、16 選 1 要 4 條)。代價是資料要穿過好幾層:N 越大,訊號經過的閘越多,也就越慢。第 6 課會量這件事。

從這裡開始,模擬器也提供包裝好的 mux2、mux4 元件,就像真實設計裡用現成的單元。它們是行為模型,整顆算一個延遲,看不到內部,但輸入輸出和你用閘接的一樣。下面的練習兩步都做:先用閘接一個 2 選 1,再用 MUX2 把它擴充成 4 選 1。

互動練習:從 2 選 1 接到 4 選 1

第一步只有 P 要對,第二步才看 Y。真值表有 64 列,可以捲動;和目標不同的列會標紅。

解碼器,以及用它們做出任何函數

2 對 4 解碼器有 2 條輸入 A1、A0,4 條輸出 Y0~Y3。輸入是幾,就只有那一條輸出是 1,其他都是 0。例如 A1 A0 = 1 0 時,只有 Y2 是 1。

A1 A0 Y0 Y1 Y2 Y3
0 0 1 0 0 0
0 1 0 1 0 0
1 0 0 0 1 0
1 1 0 0 0 1

每條輸出就是一個最小項:Y2 = A1·A0′。真實的解碼器通常還有一支致能(enable,EN):EN 是 0 時全部輸出都是 0,EN 是 1 時才正常動作,所以 Y2 = EN·A1·A0′。致能讓你決定「現在要不要選」。第 10 課的記憶體就靠它:只有在寫入訊號打開時,解碼器才選中某一列,平常全部不選,資料才不會被亂改。

解碼器加一個 OR,就能做出任何函數。 每條輸出都是一個最小項,而第 1 課說過,任何真值表都能寫成「最小項相加」。真值表哪幾列是 1,就把那幾條輸出接到 OR。

多工器也可以。 把函數的輸入接到選擇線,資料腳接常數,就是把真值表存在資料腳上。而且還能省一半:3 個變數的函數,4 選 1 就夠了。把 A、B 接選擇線之後,對每一種 AB,輸出只剩下四種可能,都用 C 表達得出來:

這兩列的 Y(C=0、C=1) 資料腳接
0、0 常數 0
1、1 常數 1
0、1 C
1、0 C′

該選哪一種? 解碼器的輸出全部都算好了,要好幾個函數時可以共用同一顆,加上不同的 OR 就好。多工器一次只出一個值,但是換函數只要改資料腳,不用動其他線路。可程式邏輯元件 FPGA 的基本單元查找表(look-up table),也是用類似的多工器結構實作的。

互動練習:用解碼器和多工器做函數

上面的解碼器接燈 Y,下面的多工器接燈 Z,A、B 都接好了。先想真值表是 1 的是哪幾列,再決定要接哪些線。

用程式算出資料腳該接什麼

上面的對照表可以寫成很短的程式:每一種 AB 對應真值表裡連續兩列,比較這兩列就知道資料腳要接什麼。看兩個函數的結果和你接的是不是一樣。

編碼器:同時按兩個會怎樣

編碼器(encoder)和解碼器相反:一排輸入裡有一條是 1,輸出它的編號。4 對 2 編碼器很短,A1 = I3 + I2、A0 = I3 + I1。

這個式子假設一次只有一條是 1。真實世界不會這麼客氣:鍵盤可能兩個鍵一起按,電腦的中斷可能同時來兩個。如果 I2、I1 同時是 1,A1 和 A0 都變成 1,輸出 3。可是根本沒有人按 I3:答案不是其中一個,而是兩個都不對的第三個值。

優先編碼器(priority encoder)的解法是定一個順序:編號大的優先,比它小的當作沒看到。還要多一條 V(valid),分辨「按了 0 號」和「什麼都沒按」,兩者的編號都是 00。

  • A1 = I3 + I2(沒變)
  • A0 = I3 + I2′·I1:I1 只有在 I2 沒按時才算數
  • V = I3 + I2 + I1 + I0

互動練習:把編碼器改成優先編碼器

情境是四位同學搶答,I3 的優先順序最高。電路目前是一般編碼器,先重現錯誤,再修好它。

匯流排:大家共用一組線

CPU 裡的暫存器、ALU、記憶體都要互傳資料。如果每一對都拉一組線,線的數量會隨元件數平方成長,所以實際作法是共用一組線,叫匯流排(bus)。誰要傳資料,就輪到誰把資料放上去。

選「輪到誰」有兩種作法:

  • 用多工器:所有來源接進一顆多工器,輸出就是匯流排。選擇線一次只會選中一個,結構上不可能打架。缺點是所有來源都要拉線到同一顆多工器。
  • 用三態緩衝器(tri-state buffer):每個來源經過一個開關才接到共用線。開關關閉時,輸出是第三種狀態「高阻抗」(high impedance,常寫成 Z),等於和線斷開。

三態的規則很嚴格:同一時間只能有一個開關打開。兩個都打開,一個推 1、一個推 0,電流會從電源直接流到地,資料變成亂碼,還可能燒壞晶片。這叫匯流排衝突(bus contention)。通常用解碼器產生這些開關訊號,因為解碼器一次只有一條輸出是 1,正好保證一次只有一個來源。

模擬器的簡化。 這個模擬器沒有高阻抗狀態,一個輸入也只能接一條線,所以這條軌道用多工器表現匯流排。第 11 課的資料路徑工具會擋下同時兩個來源的操作,並說明為什麼。

確認一下

1.

要從 16 條資料選一條,只用 2 選 1 多工器,最少要幾個、選擇線幾條?

2.

有致能的 2 對 4 解碼器,EN=0、A1 A0=1 1,輸出是什麼?

3.

一個 3 輸入函數的真值表有 3 列是 1。用 3 對 8 解碼器加 OR 來做,OR 要接幾條輸入?

4.

一般 4 對 2 編碼器(A1 = I3 + I2、A0 = I3 + I1),I2、I1 同時是 1 時,下游收到的編號會發生什麼事?

5.

優先編碼器輸出編號 00,為什麼還需要 V?

6.

用三態緩衝器做匯流排,兩個來源同時打開,會發生什麼事?

第 1 次作答

重點整理

  • 多工器依選擇線從多條資料選一條:Y = S′·D0 + S·D1。N 選 1 用 N − 1 個 2 選 1。
  • 解碼器把編號變成一條亮起來的線,每條輸出都是一個最小項;致能腳決定「現在要不要選」。
  • 解碼器加 OR 可以做出任何函數;多工器也可以,而且第三個變數可以放進資料腳,省掉一半。
  • 一般編碼器遇到同時輸入會誤報第三個值;優先編碼器定下順序,並用 V 表示有沒有輸入。
  • 匯流排一次只能有一個來源,可以用多工器或三態緩衝器;三態要避免同時打開造成衝突。

有了選擇資料的能力,下一課做要被選擇的東西:會算加減法的電路。

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