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 72 24°C PM2.5 13
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 07

栓鎖與正反器

電路怎麼記住東西:回授、SR 栓鎖、D 正反器與時脈
Interaction 35 minute(s)

Learning Objectives

  • 說明回授為什麼能讓電路記住一個位元,以及奇數個反相器繞一圈為什麼會振盪
  • 接出 SR 栓鎖,說明開機未知與 S=R=1 的問題
  • 區分栓鎖的透明期間與正反器的邊緣觸發,用兩個栓鎖接出主從式 D 正反器
  • 說明建立時間、保持時間與重設各自解決什麼問題

放開按鈕之後,燈為什麼還亮著

電梯按鈕按一下就放開,燈卻會一直亮到電梯抵達。前面幾課接過的電路都做不到這件事:輸出只看「現在」的輸入,開關放開,輸出就變回去。這種電路叫組合電路(combinational circuit)。

要記住東西,輸出必須繞回來影響自己的輸入,這叫回授(feedback)。最簡單的回授是兩個 NOT 頭尾相接:

Q -> NOT -> Q′ -> NOT -> Q

假設 Q=1,經過第一個 NOT 得到 Q′=0,再經過第二個 NOT 又得到 Q=1,電路自己撐住這個值。假設 Q=0 也一樣成立。同一個電路有兩個穩定狀態,正好可以存一個位元。

能存一個位元的電子電路比電腦還早:William Eccles 與 F. W. Jordan 在 1918 年為真空管版本的電路申請專利,當時是給無線電用的。

用窮舉找出穩定狀態

下面讓一個值繞著一圈反相器走一次,看回來時有沒有變。注意 n=2 和 n=3 的結果差在哪裡。

加上把手:SR 栓鎖

上面兩個 NOT 的迴路有個問題:沒有地方可以把值寫進去。在模擬器裡,這個迴路的兩條線都是未知(x),因為模擬器不知道它落在哪一邊;真實電路開機時會被微小的雜訊推向其中一邊,但你事先不知道是哪一邊。

解法是把 NOT 換成 NOR。NOR 的另一隻腳是 0 的時候,(0 + A)′ = A′,它就是一個 NOT;另一隻腳是 1 的時候,輸出被強迫成 0。多出來的那隻腳就是把手:

S R Q 的結果 叫做
1 0 變成 1 設定(set)
0 1 變成 0 重設(reset)
0 0 維持原來的值 保持
1 1 Q 和 Q′ 都是 0 不該這樣用

這個電路叫 SR 栓鎖(SR latch)。接法:上面的 NOR 輸入是 R 和 Q′,輸出是 Q;下面的 NOR 輸入是 S 和 Q,輸出是 Q′。圖上的 Qn 就是 Q′。

模擬器的顏色與延遲。 綠色是 1、灰色是 0、紅色是未知(x)。每個閘的延遲是整數個單位,不是真實的奈秒;這是簡化的模型,沒有電壓與雜訊。

互動練習:接一個 SR 栓鎖

按一個接腳再按另一個接腳接線,手機上也可以用下方的選單。兩個燈已經接好,你要接的是 S、R 與兩條交叉的回授線。接好時兩個燈都是未知,這就是開機的狀態。

S 和 R 同時放開會怎樣

S 和 R 都是 1 之後,一個一個放開,結果很明確:比較晚放開的那一邊贏。模擬裡 S 先放,留下 R,得到 Q=0;R 先放,留下 S,得到 Q=1。

如果同時放開呢?你可以在上面的電路自己試:把下面 NOR 原本接 S 的那隻腳改接到 R 開關,這樣一個開關同時控制兩邊。切到 1 再切回 0,模擬器會判定「振盪」:兩個 NOR 同時變 1、又同時變 0,每一個延遲單位翻一次,停不下來。

這是因為模擬裡兩個閘的延遲完全相等。真實的閘不可能完全相等,總有一邊快一點,所以會落到某一邊,但你不知道是哪一邊。在模擬裡把上面的 NOR 延遲改成 2 個單位,結果是 Q=0;改成下面的 NOR 是 2 個單位,結果是 Q=1:比較快的那個閘先把輸出變成 1,反過來把另一邊壓成 0。

結果取決於誰快一點,這種情況叫做競爭(race)。設計時要避開的不是某個值,而是這種結果由微小時間差決定的情況。

奇數個反相器:環形振盪器

剛才的窮舉說奇數個反相器繞一圈沒有穩定狀態。值繞回來總是相反,電路只好一直改:這就是環形振盪器(ring oscillator),不需要外加訊號就會產生方波。

週期可以直接推算:訊號繞一圈會翻一次值,繞兩圈才回到原值,所以週期是「閘的數量 × 每個閘的延遲 × 2」。

但是只把 NOT 接成一圈,在模擬器裡什麼也不會發生。未知的反相還是未知,x 一直繞下去。所以環裡要放一個可以控制的閘:用 NAND 取代其中一個 NOT,另一隻腳叫 E。E=0 時 NAND 輸出固定是 1,全部的線都有確定的值;E 變 1 時它就是一個 NOT,環開始轉。這一步叫初始化,真實電路同樣需要。

互動練習:環形振盪器

一開始 E=1,環已經接好,燈卻是未知。照任務切換 E,右下的波形會畫出最近 60 個延遲單位。下面兩個 NOT 暫時沒有接上。

D 栓鎖的透明期間,與主從式正反器

SR 栓鎖要操作兩條線,而且要避開 S=R=1。實務上多半只想說「把這個值存起來」。D 栓鎖(D latch)只有資料 D 與致能 E:

  • E=1:Q 跟著 D 走,叫透明(transparent)
  • E=0:Q 維持最後的值

它可以用 SR 栓鎖前面加兩個 AND 和一個 NOT 做出來(S=D·E、R=D′·E)。下面的練習用另一種更短的接法:多工器選回自己。MUX2 的 S=E,D1 接資料,D0 接自己的輸出;E=0 時選到自己,就記住了。

透明有什麼問題?想像 Q 經過一個反相器接回 D,希望每次 E 打開時翻一次。E=1 的期間,Q 翻了 D 就跟著翻,D 翻了 Q 又跟著翻,一路翻到 E 關閉為止。用閘接出這個電路在模擬器跑一次,結果是振盪(一個週期 8 個單位),翻了多少次全看 E 開多久。

正反器(flip-flop)的解法是讓輸出只在時脈變化的那一瞬間改變。最經典的做法是把兩個栓鎖串起來,致能相反,叫主從式(master-slave):

時脈 主栓鎖 從栓鎖 結果
0 透明,跟著 D 關閉,Q 不動 輸入改變不影響輸出
上升的瞬間 關閉,留住這時的 D 打開 Q 變成上升前一刻的 D
1 關閉 透明,但主栓鎖不動 輸入改變不影響輸出

任何時刻總有一個栓鎖是關的,所以資料不可能一路穿過去。這就是上升緣觸發(rising-edge triggered)。模擬器的 dff 元件做的就是這件事,把內部包起來。

開機時正反器的內容同樣是未知,而且 Q′ 接回 D 的時候,未知反相還是未知,按多少次時脈都不會自己變好。所以要有重設(reset):R=1 時不管時脈,直接把 Q 變成 0。

互動練習:從 D 栓鎖到 D 正反器

先用右邊的從栓鎖接一個 D 栓鎖,感受透明,再加上主栓鎖變成正反器,最後用現成的 dff 元件做除以 2。按「時脈切換一次」可以讓時脈在 0 和 1 之間切換,「跑一個週期」是上升加下降。

上升緣前後,資料要穩定多久

「只在上升緣取樣」聽起來是一個瞬間,但真實的正反器需要一小段時間才能把值抓穩。所以規格書會給兩個數字:

  • 建立時間(setup time):上升緣之前,D 至少要穩定多久
  • 保持時間(hold time):上升緣之後,D 至少還要維持多久

資料如果剛好在這段時間內改變,正反器可能進入介穩態(metastability):輸出暫時停在 0 和 1 之間,要過一段不確定的時間才落到其中一邊,而且你無法預知落到哪一邊。

這個模擬器不模擬介穩態,也沒有建立與保持時間。它在上升緣直接讀 D 的值,訊號也只有 0、1、x。所以你在這裡看不到這個問題,但它是真實晶片跨時脈傳資料時最常要處理的事情之一:輸入按鈕、感測器這類和時脈無關的訊號,隨時可能剛好踩在上升緣附近。

組合電路的延遲也和這件事有關:上升緣之後,資料要穿過組合電路,趕在下一個上升緣之前(再扣掉建立時間)到達,這就是時脈週期有下限的原因。

確認一下

1.

SR 栓鎖目前 Q=1。S 和 R 都是 0。這時把 R 切到 1 再切回 0,Q 是多少?

2.

一個 NAND 加 6 個 NOT 接成環(共 7 個閘),每個閘延遲 1 單位,E 初始化之後變 1,週期是幾個單位?

3.

為什麼把 Q′ 接回 D 做「每次翻一下」,用 D 栓鎖不行、用 D 正反器可以?

第 1 次作答

再想一下

1.

主從式正反器如果把主栓鎖前面的 NOT 拿掉(兩個栓鎖的致能都接 CLK),會發生什麼事?

2.

一個 D 正反器開機之後 D 接 1,沒有接重設,按一次時脈,Q 是多少?

3.

按鈕訊號和時脈完全無關,直接接到 D 正反器的 D。真實晶片可能遇到什麼問題?這個模擬器看得到嗎?

第 1 次作答

重點整理

  • 回授讓電路有記憶:偶數個反相繞一圈有兩個穩定狀態,奇數個會振盪。
  • SR 栓鎖可以設定、重設、保持;開機是未知,S=R=1 之後的結果取決於誰晚放開。
  • D 栓鎖在致能打開時透明,輸入變動會穿到輸出。
  • D 正反器只在上升緣取樣,用兩個致能相反的栓鎖就能做出來。
  • 開機狀態未知,要靠重設或第一次取樣才有值。建立與保持時間是真實電路的限制,這個模擬器不模擬。

一個正反器存一個位元。下一課把很多個正反器接同一個時脈,存數字、數數、移位。

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