--- title: Registers and Counters|第十一週 tags: 數位系統與實驗 --- # Registers 暫存器 顧名思義,就是可以暫存東西的電路。 講到儲存的話,就是我們上週提到的各種 Flip-Flops;所以實作暫存器的方式之一就是把很多的 DFF 串在一起。  串在一起的時候,大家要共用同個 CLK 達到同步的效果;上圖可以看到我們用一個 Load 跟 CLK AND 在一起,達到 CE 的效果,並且由於接入 Latch 前可以看到有 NOT,所以是個下降改變的 CLK;然後還有之前提到的 ClrN。 也有一種畫法是把 CE 作為 中間 Latch 的一個輸入,把 AND 閘弄到裡面去。  可以簡單畫成下圖:  ## 2-to-1 MUX 可以實作出如下面的 MUX  我們使用 EN 來決定要輸出哪條路的值。 ## Register with Tri-State Output 從上面可以看到我們將 FF 搭配 EN 的效果,所以就有一種是搭配 EN 的 Register。  模組化的圖示:  ## BUS 此外還可以搭配上 Decoder ,做出更多樣的變化,下面就是可以四選一的暫存器,四個暫存器的其中一個會把值送到中間的「BUS」上,而上方的兩個暫存器就有 Ld 決定要不要把值讀進去。  # Shift Registers 因為這個電路有「Shift」的效果,所以叫做 Shift Registers;這種效果又叫做「序列輸入/輸出 Serial In / Out」 上圖中也可以把 Serial Out 拉回來,這樣就會弄出一個 Loop。 ## Timing diagram 可以看到各個輸出有初始值,隨著時間演進,各個的值會被傳下去。  ## N-bit Serial-In Serial-Out Shift Registers 上面的普遍版本。總共會需要 N-1 個 Cycle 才可以把輸入給輸出出來  ## Parallel-In Parallel-Out (PIPO) Right Shift Register 既然有 Serial,想當然的就有 Parallel。也就是一次讀全部的輸入,然後一次全部輸出出來。  不過上圖是綜合體,他是 PIPO 加 SISO,所以他的全名才會叫做 PIPO Right Shift Register;可以看到他有用一個 Sh 來判斷要不要 Shift。  ## 實作例子 下面是一種實作的方式:  可以看到關鍵就是把 Sh 跟 L 用 4-to-1 MUX 接在一起,然後搭配上面的真值表,就可以體會這種巧妙的設計。 --- # Shift Register with Inverted Feedback 接下來就要進入 Counter 的部分。所謂的 Counter,就是經過一定的次數,狀態就會循環,例如下面的電路:  ## State graph 狀態圖 畫出他的狀態圖,可以得到如下的結果:  # Counting 0 to 7 (bianry) with TFF 我們來設計會從二進制 0 數到 7 的 Counter,這裡我們想要用 TFF 設計;設計的第一步就是畫出真值表:  有了真值表後,就是畫出卡諾圖畫簡;要注意這裡是以舊的狀態,也就是 ABC 作為輸入,而我們三個 TFF 需要的輸入 T 則是作為輸出。 最後就是來用 TFF 實作。  Synchronous Counter 就是會同步的 Counter。 # Counting 0 to 7 (bianry) with DFF 當然我們可以有別種實作方式,這次我們想要用 DFF 設計,所以一樣畫出卡諾圖:  由於 DFF 的輸入就是舊資料,不像 TFF 代表的是「要不要翻轉」,所以這裡的真值表比較簡單;然後從真值表可以很輕鬆地得到卡諾圖的結果,然後根據結果畫出電路圖: $$ D_{A} = A^{+} = A'\\ D_{B} = B^{+} = A'B+AB' = A\oplus B\\ D_{C} = C^{+} = C'BA + CB' + CA'= C'BA + C(BA)'= C\oplus BA\\ $$  # Up-Down Counter 這是可以「上下」的 Counter;這裡的 Counter 多增加了人為的可操作性,我們可以用 U 跟 D 來控制上跟下,總之先畫出真值表: 然後我們要給一些規則,我們首先「不允許同時為 1」,「以及同時為 0 代表不動」。 有了真值表就可以畫出卡諾圖來化簡:  $$ D_{A} = A^{+} = A\oplus (U+D)\\ D_{B} = B^{+} = B\oplus (UA+DA')\\ D_{C} = C^{+} = C\oplus(UBA+DB'A')\\ $$ 可以看到似乎都會用到 $\oplus$ # State Diagram of Counter / with TFF 這個就是一種沒有人為輸入的 Counter,用來表示狀態圖。  所以一樣先畫出真值表:  可以看到有很多 DC。然後先畫出卡諾圖:  此時我們來想想要怎麼實作。如果我們想要用 TFF 實作...此時要注意的是,TFF 的輸入 T,是決定「要不要翻轉」,所以我們要再建立一個新的卡諾圖,也就是看什麼樣的情況要翻轉:  不過呢,其實我們也可以直接從我們上面建立好的卡諾圖直接推出來,方法很簡單,首先我們知道要翻轉的前提是 $Q$ 跟 $Q^{+}$ 異或要是 1,或者說: $$ T=Q\oplus Q^{+} $$ 以 C 作為例子,在卡諾圖外面的那個 C 就是 $Q$,而在裡面代表輸出的值就是 $Q^{+}$  最後可以畫出我們的電路圖:  ## Don't Care States 但是上面的例子,在我們兜好電路後,如果我們給他意料外的輸入...  上面的例子中,我們假設一開始是 001,那麼很幸運的,我們的電路並沒有跑出其他的結果;但是,在其他情況可就不一定了,所以弄電路之前一定要先分析其他的 State 會造成甚麼效果、或者是給予 Reset,讓他強制回到你要的狀態圖。 # DFF 版本 下面是 DFF 版本的前面例子,根據前面的真值表,畫出卡諾圖:   # SR FF 版本 或者我們來一點不一樣的體驗,我們來用用看 SR FF,不過在那之前我們先看個東西:  原本一開始的真值表是以 SR 作為輸入,然後看輸出會長怎樣;但是我們現在想要知道的是,如果我有舊的狀態,我想要達到某個新狀態,我的輸入要長怎樣,因此也就有了右邊的圖。 有了這個概念後,我們回到原本的狀態圖例子,我們根據我們的上一張圖右邊的SR跟QQ^+^對照表,畫出以下的真值表後,再用卡諾圖化簡得到下面的式子。  或者,我們可以用上面 TFF 提到的類似技巧,也就是利用 SR 跟 QQ^+^的對應關係: $$ S = F(Q,Q^{+})\\ R = F(Q,Q^{+})\\ $$  ## 電路圖  # JK FF 版本 既然提到了 SR,那麼就不能不提 JK,所以我們依樣畫葫蘆,先找出 JK 跟 QQ^+^ 的真值表:  然後一樣可以重新用卡諾圖畫簡,或是使用上面提到的快速技巧,從原先的卡諾圖進行轉換。  ## 電路圖  --- # Flip-Flop Input Equations 上面的快速技巧太重要了,所以我們來給他統整一下:  可以化簡成下面的小表格:  $$ D = Q\\ T = Q\oplus Q'\\ $$ SR 跟 JK 似乎用記得比較快。 :::warning 有空補例子 :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up