前言
最近?拜讀了《漫畫數位電路》一書,在此簡要記錄。
書中許多內容並未收錄於此。
前情提要
數位電路分為 組合電路 與 時序電路。
組合電路:由目前輸入資訊的組合決定輸出的電路。
時序電路:帶有「記憶」的電路。
MIL 符號
邏輯電路的 及閘 與 或閘 符號引申為多個輸入一個輸出。
- 符號含義
及閘 (ALL):多個輸入全為 1,輸出為 1。
或閘 (EXIST):若有一個輸入為 1,輸出為 1。
- 電路線
有 圓圈 的為 低電位 (0、L)。
無 圓圈 的為 高電位 (1、H)。
組合電路的製作
多數決投票電路
多位投票人從兩個結果中選出一個。
列出真值表,即所有可能發生的情況。
在真值表 H 輸出處加上底線。
「輸入線」與「將輸入取反的線」架設框架。
兩條向下的電路線,第二條為反相線,即從第一條連接 反閘 到第二條。
連接到 AND (及閘)
輸入為 L 時,從將輸入取反處開始 (第二列)。
輸入為 H 時,從最開始的地方畫線 (第一列)。
然後,接入 AND。
重複此過程,完成第二步所畫的所有線。
將 AND 的所有輸出連接到 OR。
電路的化簡
數位電路設計流程:釐清問題 - 真值表 - 化簡 - 繪製電路。
透過 卡諾圖 進行化簡。
真值表轉換為卡諾圖。
製作真值表時,欄位從最高位元開始,例如 [C、B、A],結果為 Z。
卡諾圖是二維的真值表,通常用 0 與 1 表示電位。
如果三個輸入,可以將行設為 B、A,列設為 C,然後將結果填入二維表。
化簡前須知
卡諾圖的 左右 與 上下 都是相連的,因為卡諾圖的橫向與縱向都是按 位元 (1 位) 變化的。
化簡
將相鄰的 1 劃分為一個集合。
尋找行與列的共同點。
若共同點為某值為 0,則使用 負運算 (或反運算),即字母上方加一橫槓。
範例
| C\BA | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 0 | 1 | 1 | ||
| 1 |
上表中 共同點為 C 為 0,A 為 1,則運算式為 !C * A。
- 化簡的規則
集合的形狀只能是長、寬為 1、2、4 的矩形 (或正方形)。
集合可以相互重疊。
集合的個數越少,面積越大越好。
註:左右和上下可以構成一個集合;如果無法進一步「形成集合」,則表示電路已無法再化簡。
化簡後繪製電路圖,只需將所有運算式依照上一步驟的繪圖步驟 (從第三步開始) 進行即可。
電路的忽略
在剛開始確定輸入時,因為二進位數的特性,可能會有一些不需考慮的輸入。
例如輸入為月份,需要使用四位二進位數,總共有 16 個輸入,其中 0、13、14、15 均為不需考慮的輸入。
這類輸入在卡諾圖中可以使用 - 代替,可以納入集合進行化簡。
時序電路的製作
時序電路需要 組合電路 與 觸發器。
關於 時序電路 的「記憶」,例如自動販賣機在投幣時會記錄目前投幣總數,若無記憶,則僅有最後一個硬幣的面額。
引入一個觸發器,例如 時脈 (CLK),僅在 CLK 觸發時,輸入才會對輸出有影響,否則輸出保持不變。
以繪製電子骰子為例。
繪製狀態轉移圖
隨著時間的變化,電子骰子如何變化?
若停止為低電位,從 1 開始到 6 再到 1。
如果為高電位,則在某點一直保持停止。
用二進位數來表示狀態
將每種情況或者說狀態使用二進位表示,然後繪製出 狀態轉移表。
透過狀態轉移表繪製電路,可以使用 D 觸發器儲存狀態。
設計組合電路
從 目前的狀態 決定 下一個狀態,實際上就是 組合電路。