# 數系 : Chapter 4 ###### tags: `Digital system` ## 一 . 基本概念 ### (一) . 組合電路、循序電路 1. 組合電路(Combinational logic circuits) : - 定義 : 只能和input有關,輸出output。 - function: 是一個input集合mapping到output的關係。 2. 循序電路(Sequential logic circuits) : - 定義 : 只能和input和集中儲存的bit或feeback有關,輸出output。 - function: 是一個input和儲存bit集合mapping到output的關係。 3. 常見的組合電路 : - 常見的組合電路型態如下 : 可以有 $2^n$ 種input。 - 常見的組合電路 : 加法器、減法器、乘法器、解碼器、加密器。 4. 分析一個組合電路 : - step 1 : 拿到真值表。 ### (二) . 設計一個組合電路 1. 前置 : - step 1 : 決定問題的定義。 - step 2 : 問題的輸出輸入。 - step 3 : 將問題的輸出輸入加上變數代號。 2. 電路形成與簡化 : - step 1 : 畫出真值表。 - step 2 : 將k-map化簡真值表。 - step 3 : 用NADN、NOR優化電路。 ### (三) . 範例 : BDC轉Excess-3 1. 前置 : 重點為取得真值表,當然要先觀察是否符合組合電路的特性。 ![](https://i.imgur.com/gJUuIGh.png) 2. K-map : 將『每一個output』都畫成一個個k-map。 - 每一個k-map形成個解就是最佳解。 - 並將每一個解合成一個電路。 ![](https://i.imgur.com/6pyJWuv.png) ![](https://i.imgur.com/qVDaRZM.png) ![](https://i.imgur.com/xE4iabL.png) ## 二 .加法器 ### (一) . 半加器 #### 1. 功用 : 輸入為2個bit的相加,輸出包含進位carry。 - 定義輸出入 : $x、y$ 為輸入;$c、s$ 為輸出。 - 真值表 : 如下,由兩個k-map化簡。 ![](https://i.imgur.com/mZFIaJN.png =400x) #### 2. 電路 : - step 1 : 先找出sum of product。 - step 2 : 在用k-map化簡。 - 註 : 其實這邊看一下就知道一個是and一個是xor。 ![](https://i.imgur.com/U2SW5CP.png =450x) ![](https://i.imgur.com/Qs2iyCm.png =450x) ### (二) . 全加器 #### 1. 功用 : 輸入為3個bit的相加包含進位carray,輸出為兩位的bit。 - 定義輸出入 : $x、y、z$ 為輸入,$z$為上一位的進位;$c、s$ 為輸出。 - 真值表 : 如下,由兩個k-map化簡。 ![](https://i.imgur.com/ZcsZmMn.png =400x) #### 2. 電路 : - 法一 : 視為全新的電路。再用一次新的k-map化簡。 - 法二 : 用兩個半加器相加。先加x和y,再將x加y的s和z相加,注意多一個or閘。 ![](https://i.imgur.com/9kpln0A.png ) ![](https://i.imgur.com/ePyD2mb.png =500x) ``` 若x=1, y=1 , z=1 時 : 1 ->x 0 -> s of x+y +) 1 ->y +) 1 -> z ---- ----- 10 01 ``` ### (三) . 4bit加法器 #### 1. 功用 : 4個bits和一個carry的相加。 #### 2. 電路 : - 不能再用一般一個位的二進位相加減。 - 因為輸入太多,k-map化簡不易。 #### 3. Ripple carry : 將多個全加器相連,形成一個多bit的相加。 ![](https://i.imgur.com/xmvdL2m.png) #### 4. Carry Propagation : 多個全加器相連下,相加會等上一個位的進位,造成delay。 - 雖然exclusive-or的延遲最長,但因為可以於有輸入的時候就加入,因此,比進位的延遲來說較短。 - 對每一位的進位,都有兩個邏輯閘(進位)的延遲 : $n$個bit的相加,要等$2n$個加法器的delay。 ![](https://i.imgur.com/azvT87k.png) #### 5. Carry lookhead優化 : - 方法 : 將每一個進位的關係直接爆開,使其值只和輸入的三個為數有關。 - 可以再有輸入的時候,就直接算出進位值,不用等到上一個位算完。 ![](https://i.imgur.com/wtPE6mp.png =300x) - 如下圖 : 可以有輸入的時候,就直接計算出全部的進位。 ![](https://i.imgur.com/75gFNud.png =400x ) ### (四) . 加減器 #### 1. 功用 : 因為二補數加減可以用同一個方式,此則為實作。 #### 2. 電路 : - step 1 : 若為減,取減數的二補數(M為1時)。 - 取二補數方式 : $not$整個數後,加一($C_0=M=1$)。 - 取二補數實作 : $XOR$的性質,即$X(xor)0=X$和$X(xor)1=X'$。 - step 2 : 為二補數相加,得解即為二補數的形式。 - 正數方面 : 二補數和sign形式一樣。 - 負數方面 : 二補數和sign形式不一樣,所以取二補後,答案為二補形式。 ![](https://i.imgur.com/dH5CE5t.png) ## 三 . 乘法器 ### (一) . 乘法器一 #### 1. 功用 : 將2-bit乘2-bit的二進位進行乘法。 #### 2. 分析二進位乘法 : 展開分析 - 二進位相成的邏輯,就是and二數。 - 乘法可以分析為先and在or。 ![](https://i.imgur.com/iZQv0pr.png =450x) #### 3. 電路 : - step 1 : 先取乘法公式中需要的各項。 - step 2 : 相加各項,用兩個半加器形成的3bit相加。 ![](https://i.imgur.com/fKWEoJT.png =400x) ### (二) . 乘法器二 #### 1. 功用 : 將4-bit乘3-bit的二進位進行乘法。 #### 2. 分析二進位乘法 : 展開分析 - 二進位相成的邏輯,就是and二數。 - 乘法可以分析為先and在or。 ![](https://i.imgur.com/MslISjJ.png =450x) #### 3. 電路 : - step 1 : 先取乘法公式中需要的各項。 - step 2 : 相加各項,用兩個半加器形成的3bit相加。 ![](https://i.imgur.com/EmVMcsE.png =450x) ### (三) . 比較器一 #### 1. 功用 : 比較兩串二進位是否一樣,是大於或小於。 #### 2. 分析 : 分析兩個字串, - 若字串是 : $A_0A_1A_2A_3$、$B_0B_1B_2B_3$。 - 全等下 : $A_0=B_0$ 且 $A_1=B_1$ 且 $A_2=B_2$ 且 $A_3=B_3$。 - 意思 : - 設$x_i=A_iB_i+A_i'B_i'$ : 即若$A_i=B_i=1\ or \ 0$時。 - 也可以視$x_i$為$x_i=A_i\ (xor)\ B_i$。 - 大於下 : $A_3B_3'+x_3A_2B_2'+x3x2A_1B_1'+x_3x_2x_1A_0B_0'$。 - 意思 : - 小於下 : $A_3'B_3+x_3A_2'B_2+x3x2A_1'B_1+x_3x_2x_1A_0'B_0$。 - 意思 : #### 3. 電路 : ![](https://i.imgur.com/XVs5sD4.png =450x) ## 四 . 解碼器 ### (一) . 3轉8Decoder #### 1. 功用 : 將$3\ bit$轉乘$8\ bit$的電路。 - n個輸入有$2^n$個輸出。 - 輸出的只有一個1。 #### 2. 分析 : 由真值表(圖需要記憶一下,什麼minterm是$D_n$為1) - 真值表 : 不用使用k-map化簡,因為變數太多,需要大量時間空間。 ![](https://i.imgur.com/KXClv8E.png =450x) #### 3.電路 : - 用 $sum\ of\ product$去思考。 - 因為and閘在全為1下,才可以為1。 - 所以,每個用not連接後,在分八個,可以變成8不同的狀況。 ![](https://i.imgur.com/v1ZgsdG.png =450x) ### (二) . enable電路 #### 1. 功用 : 可以決定組合電路是否進行 - 利用 : and閘只要有一個0就為0的特性。 - 結果 : 全部電路都連上一個enable,使得 - enable為0時,整個電路都沒有輸出。 - enable為1時,整個電路才可能有輸出。 #### 2. 電路 : - 加入enable後 :當期為0時,整個電路都會輸出0,無法加密。 - 真值表要特別標註enable為非啟動時的情況為$don't care$。 - $enable$為0為啟動 : active-low。 - $enable$為1為啟動 : active-high。 ![](https://i.imgur.com/JnSyQkV.png) ### (三) . 4轉16Decoder #### 1. 功用 : 將$4\ bit$轉乘$16\ bit$的電路。 #### 2. 分析 : 用真值表 - 若用真值表分析,會太花時間。 - 可以視為3轉8加入一個enable。 - 3轉8decoder在enable為0時。 - 3轉8decoder在enable為1時。 ![](https://i.imgur.com/vxLCHih.png =450x) #### 3. 電路 : 為2個decoder。 ![](https://i.imgur.com/HFRe8j7.png =500x) ### (四) . minterm generator #### 1. 概念 : decoder對應唯一的minterm - 由decoder的真值表,我們可以知道。 - 唯一的minterm都有一個唯一的解碼。 - 所以代表每一個decoder的輸出,都代表唯一的minterm。 - 如下 : 當$D_n$為1時,都可以對應到唯一的minterm。 ![](https://i.imgur.com/TRE8jN3.png) #### 2. 應用 : 可以用decoder實作full adder - 由真值表分析 : - S : 為1、2、4、7的sum。 - C : 為3、5、6、7的sum。 ![](https://i.imgur.com/HGhrfkP.png) ## 五 . 編碼器 ### (一) . encoder #### 1. 功用 : 為把decoder的功能翻轉回去 - 限制 : 一次只有1個為1輸入。 - 不合法 : 當輸入為2個1時,會有不可預期的結果。 #### 2. 分析 : 考慮輸入的情況 - 設計 : 只先考慮合法輸入的情況,不處理有多個1時的輸入。 - don't care : 所有非法的輸入。 ![](https://i.imgur.com/sypcQa1.png) #### 3. 電路 : - 直觀邏輯 : 考慮『什麼輸入的時候會為1』。 - 由真值表可以看到,在不同$D_n$為1時才會造成不同的$x、y、z$為1。 ![](https://i.imgur.com/eUZqohW.png =350x) ![](https://i.imgur.com/jKY6Lxt.png =450x) ## 三 . 選擇器、buffer和gate ### (一) . 選擇器 #### 1. 功用 : 在兩個輸入之間選擇一個為輸出。 #### 2. 分析 : - 真值表 : 注意選擇器通常除了一個enable bit外,通常會多一個select bit,為選擇哪一個輸入為輸出。 - 注意 : 通常不用管輸入,因為selcet bit決定了整個輸出。 ![](https://i.imgur.com/TGYO4MM.png =300x) #### 3. 電路 - 用and的特性為選擇器。 - 用or為最後總輸出。 ![](https://i.imgur.com/cngzXIa.png) ### (二) . 1個位元的4選1選擇器 #### 1. 功用 : 在4個1bit的輸入之間選擇一個為輸出。 #### 2. 分析 : - 真值表 : 似前面那個電路,可以只考慮select的可能性。 - 注意 : $n$個select可以決定$2^n$個輸入中選一個。 ![](https://i.imgur.com/ApoEGRX.png) #### 3. 電路 - 有兩個select可以決定$2^2$個輸入中選一個輸出。 ![](https://i.imgur.com/GvxHArD.png =350x) ### (三) . 4個位元的2選1選擇器 #### 1. 功用 : 在2個4bit的輸入之間選擇一個為輸出。 - 並且加入enable。 #### 2. 分析 : - 真值表 : 似之前的電路,可以只考慮select的可能性。 - 注意 : 有enalbe時,要標記enable為off狀態時,輸入為$don't care$。 - enable也有active-high active-low之分。 ![](https://i.imgur.com/XHllW7w.png =350x) #### 3. 電路 ![](https://i.imgur.com/MM2bise.png) ### (四) . Buffer #### 1. 功用 : - 增加電路fan-out的數量。 - 可以用兩個not實作。 #### 2.實作 - 若有一個and閘fan-out為2。 - 但需要驅動4個電路。 - 可以先接上兩個fan-out為2的buffer。 ![](https://i.imgur.com/M8ypG8V.png =500x)