---
# System prepended metadata

title: 數位邏輯

---

# 數位邏輯
## Chapter 1 數位系統與二進位碼
### 數字基底轉換
1. 數字 / 基底 = 商 + 餘數
2. 餘數為轉換之位數，從最高位開始
3. 再將商 / 基底 = 新商 + 新餘數，重複至結束
### 補數
#### - ( r - 1 )補數
- N的 ( r - 1 )補數 = ( 基底r^位元數n^ - 1 ) - N
#### - r補數
- N的r補數 = 基底r^位元數n - N = (  ( 基底r^位元數n^ - 1 ) - N ) + 1
#### - 補數減法
- M - N = M + ( r^n^ - N ) = M - Ｎ + r^n^
- if M >= N，產生末端進位r^n^，去掉剩M - N 
=> M + N的r補數，去除進位
- if M < N，不產生末端進位，得r^n^ - (N - M) = N - M 
=> ( M + N的r補數 )的r補數，加負號
- 若改用( r - 1 )補數做：有末端進位時加1
### 二進位有號數
- 最高位數表正負，0為正，1為負
- 負數 = 正數的補數 + 最高位數為1
#### - 加法
- 符號相同 => 相加
- 符號不同 => 大減小，再補上與最大數相同之符號
### BCD碼(Binary-Coded_Decimal)
- 各位0~9皆一致，若>9，+6修正
- ![](https://i.imgur.com/oswgHJR.jpg)
- ![](https://i.imgur.com/t5SqnWC.jpg)
### 葛雷碼
- 反射二進碼
- ![](https://i.imgur.com/9H3pH2z.jpg)
- 葛雷碼0~9
![](https://i.imgur.com/YG1knYN.jpg)
### ASCII
- 0 = 0x30，9 = 0x39
- A = 0x41，Z = 0x5A
- a = 0x61，z = 0x7A
- 同位位元：在最前面加上第8碼，形成奇或偶同位。
## Chapter 2 布林代數
### 布林代數公理定理
- +和 * 具有封閉性
- +的單位元素 0
```    
    x + 0 = 0 + x = x
```
- *的單位元素 1 
```
    x * 1 = 1 * x = x
```
- +和 * 具有交換律
```
    x + y = y + x 
    x * y = y * x
```
- +和 * 具有分配律
```
    x * ( y + z ) = xy + xz
    x + ( y * z ) = (x + y)(x + z)
```
- 補數
```
    x + x' = 1
    x * x' = 0
```
### 布林代數基本性質
- 對偶性：布林運算式中AND <=> OR，0<=>1。
```
    x + 0 = x <=> x * 1 = x
```
- 迪摩根定理
```
    (x + y)' = x'y'
    (xy)' = x' + y'
```
- 運算子優先順序：括號 -> NOT -> AND -> OR。
### 布林函數
- n個變數 => 表值表有2^n^列，2^2n^個函數。
- 全及項(標準積)：由AND項組成，對應真值表的1。
- 全或項(標準和)：由OR項組成，對應真值表的0。
```
                 0 0 1   10 0    111
    F(x, y, z) = x'y'z + xy'z' + xyz = m1 + m4 + m7 = Σ(1, 4, 7) = Π(0, 2, 3, 5, 6)

                  1   0    0   0    1   0   0    0    1
    F(x, y, z) = (x + y' + z')(x' + y + z')(x' + y' + z) = M1 * M2 * M3 = Π(1, 2, 3) = Σ(0, 4, 5, 6, 7)
```
-  任何函數都能用正規形式表示：全及項之和(SOP)、全或項之積(POS)。
-  SOP <=> POS：列出缺少的項即可。
## Chapter 3 邏輯閘層次最小化
### 卡諾圖
- 圈1、2、4、8或16個
- 圈越大越好、越少越好
- 可以重複圈
- 不理會條件也能一起圈
- 看1化簡成SOP； 看0化簡成POS
### NAND
- 將函數化為積項和，用1化簡
- AND = NAND + NOT
- NOT + OR = NAND
- ![](https://i.imgur.com/V2zPjko.jpg)

### NOR
- 將函數化為和項積，用0化簡
- OR = NOR + NOT
- NOT + AND = NOR
- ![](https://i.imgur.com/f44xFPT.jpg)

### 線節邏輯
#### - 開集極TTL NAND -> AND-OR-INVERT(AOI)
- 看0化簡，找F'
- ![](https://i.imgur.com/bQPtngd.jpg)

#### - ECL NOR -> OR-AND-INVERT(OAI)
- 看1化簡，找F'
- ![](https://i.imgur.com/qDGfex8.jpg)

### XOR ⊕
- x ⊕ y = xy' + x'y
- XNOR = ( x ⊕ y )'
```
    (x⊕y') = (x'⊕y) = (x ⊕ y)'
```
- 交換性
```
    A ⊕ B = B ⊕ A
```
- 結合性
```
    (A ⊕ B) ⊕ C = A ⊕ (B ⊕ C) = A ⊕ B ⊕ C
```
- ![](https://i.imgur.com/ryCSmIV.jpg)
### 同位產生器與檢查
- 偶同位位元 P = x ⊕ y ⊕ z
- 同位檢查器 C = x ⊕ y ⊕ z ⊕ P。輸出1，資料有誤；輸出0，資料無誤或偶數個誤。
## Chapter 4 組合電路
### 分析步驟
1. 確認其不是序向電路(有儲存元件)
2. 求其布林函數或列出真值表
3. 設計驗證
### 設計步驟
1. 決定輸入、輸出個數和變數符號
2. 列出真值表，用卡諾圖化簡布林函數
3. 畫出邏輯圖，並驗證
### 二進位加法器
#### - 半加器
- 兩個變數輸入，處理兩位數
- 兩個輸出C(進位)、S(和)
- ![](https://i.imgur.com/giejayB.jpg)
- ![](https://i.imgur.com/OmmYXhD.jpg)
#### - 全加器
- 三個變數輸入，處理三位數
- 兩個輸出C(進位)、S(和)
- ![](https://i.imgur.com/9hyA5wp.jpg)
- ![](https://i.imgur.com/E9nPVfn.jpg)
### 二進位減法器
- A - B = A + (B的2補數) = A + B' + 1
#### - 溢位 V
- 保存數字位元數有限
- 正數相加得負數；負數相加得正數
- V = 0，無溢位；V = 1，溢位
- ![](https://i.imgur.com/JdvPJ5b.jpg)
### 十進位加法器
- 9輸入，兩四位BCD數，一進位
- 5輸出，一四位BCD數，一進位
- ![](https://i.imgur.com/XSkmdc6.jpg)
- 和 <= 9(BCD) + 9(BCD) + 1(進位) = 19
- 有進位，二進位碼轉BCD碼調整：+6，或C = K + Z~8~Z~4~ + Z~8~Z~2~
- ![](https://i.imgur.com/ZJGQOeI.jpg)
### 二進位乘法器
- 用AND和HA(半加器)運算
- ![](https://i.imgur.com/9y4VIk6.jpg)
- ![](https://i.imgur.com/mzAwdvk.jpg)
- 四位元 X 三位元
![](https://i.imgur.com/vLz6uO2.jpg)
### 大小比較器
- 輸出：A > B、A < B、A = B
- x~i~ = A~i~ XNOR B~i~
- ![](https://i.imgur.com/A0zyNeR.jpg)
- 四位元大小比較器
![](https://i.imgur.com/SSHyt3o.jpg)
### 解碼器
- n個輸入 => 2^n^條輸出線，每個輸出組合只有一個1，其他皆為0
- 致能Enable：似開關，E = 1，輸入不理會，輸出皆為1
- ![](https://i.imgur.com/z45goz7.jpg)
## --------------------期中上--------------期末下--------------------
### 編碼器
- 解碼器反向操作
- 輸出結果能推斷輸入
- ![](https://hackmd.io/_uploads/BkWQq1WI2.jpg)

#### 優先權編碼器
-  多V(valid)輸出，解決非法輸入
-  非法輸入變為Don't care幫助化簡
-  Don't care -> D~3~有最高優先
-  ![](https://hackmd.io/_uploads/SksIq1ZLh.jpg)

### 多工器
- 二進位選擇輸入指向單一輸出
- ![](https://hackmd.io/_uploads/HJzuqk-In.jpg)

#### 解多工器
- 負責分配，似HUB
- 二進位選擇輸入指向多個輸出之一
- ![](https://hackmd.io/_uploads/Skfo5JWI3.jpg)

#### 解布林代數
1. 列真值表，輸入配在選擇輸入，留下最後一個
2. 觀察留下的輸入和輸出的關係
3. 留下的輸入配上輸入
- ![](https://hackmd.io/_uploads/BJia9yZ82.jpg)

### 三態閘
- 0, 1 和高阻抗(Z)：電流無法進出
- 使用緩衝器 buffer
- 用在Bus上，無使用元件在高阻抗狀態
- ![](https://hackmd.io/_uploads/r1sxsJZ8n.jpg)
### 三態閘做多工器
- ![](https://hackmd.io/_uploads/B1C7syWI3.jpg)
### 各種三態閘
- ![](https://hackmd.io/_uploads/S1HUiyWL2.jpg)

## Chapter 5 同步序向邏輯
### 序向邏輯
- 包含儲存元件，和騎回授路徑
- 輸入 + 目前狀態 -> 輸出 + 次一狀態
- ![](https://hackmd.io/_uploads/HJsOikZU2.jpg)
- 時脈：決定儲存速度
### 儲存元件
- 記憶一位元，0 or 1，準位觸發
- 有設置、重置、維持功能
#### SR-LATCH
1. NOR
- R = 1重置，S = 1設置，S = R = 0維持
- S = R = 1禁止，呈不穩定狀態
- ![](https://hackmd.io/_uploads/HJ7poy-83.jpg)
2. NAND
- R = 0重置，S = 0設置，S = R = 1維持
- S = R = 0禁止，呈不穩定狀態
- ![](https://hackmd.io/_uploads/rk9Jn1bI3.jpg)
#### 具Enable的SR-LATCH
- E = 0關閉，E = 1啟動
- R = 1重置，S = 1設置，S = R = 0維持
- S = R = 1禁止，呈不穩定狀態
- ![](https://hackmd.io/_uploads/SyBhnkb8h.jpg)

#### D型LATCH
- 能排除不穩定狀態
- D = 0重置，D = 1設置
- ![](https://hackmd.io/_uploads/BJamnyWL3.jpg)
### 正反器
- 儲存元件搭配時脈，邊緣觸發
#### 邊緣觸發D型正反
- 由兩個LATCH組成，分為主(正緣)、僕(負緣)
- Q(t+1)次態 = D
- 最經濟、有效率
- 正緣(0->1)、負緣(1->0)觸發皆可
- ![](https://hackmd.io/_uploads/SJvA2J-Lh.jpg)

#### JK正反器
- Q(t + 1) = JQ'(t) + K'Q(t)
- | J | K | **Q(t+1)** |
  |:--|:-:|------:|
  | 0 | 0 | **Q(t)**|
  | 0 | 1 |  **0**  |
  | 1 | 0 |  **1**  |
  | 1 | 1 |**Q'(t)**|
- ![](https://hackmd.io/_uploads/S1C3FJ-In.jpg)

#### T型正反器 (Toggle)
- D = T ⊕ Q = TQ' + T'Q
- | **T** | Q(t + 1) |
  |:------|---------:|
  | **0** | Q(t) |
  | **1** | Q'(t) |
- ![](https://hackmd.io/_uploads/SyKAKkZI2.jpg)

### 直接輸入
- Resret功能的強制性
- ![](https://hackmd.io/_uploads/rJsbMqy8h.jpg)

### 時序分析
1. 列出正反器輸入輸出(D = Q)
- ![](https://hackmd.io/_uploads/HJh-L5k82.jpg)

2. 用輸入輸出配合正反器找出布林函數
```
    A(t+1) = Ax + Bx
    B(t+1) = A'x
    y = Ax' + Bx'
```
3. 列狀態表，目前狀態、次態、輸出
- ![](https://hackmd.io/_uploads/r1s6UqkI2.jpg)

4. 畫狀態圖
- ![](https://hackmd.io/_uploads/S16VDc1Lh.jpg)
- 圓圈：狀態
- 連接射線：狀態彼此的轉換，以輸入/輸出標示(0/1)
### 有限狀態機
#### 密利模型 Mealy Machine
- 輸入、正反器共同組成輸出，Clock改變便正反器內容
- 輸出與狀態、輸入有關
- 較難設計，但狀態較少
- ![](https://hackmd.io/_uploads/SJgD_ckIh.jpg)

#### 莫爾模型 Moore Machine
- 暫存器決定輸出
- 輸出與狀態有關
- ![](https://hackmd.io/_uploads/H1OPdckI3.jpg)

### 設計程序
1. 畫狀態圖，指定狀態binary
2. 列狀態表
3. 選擇正反器
4. 簡化
## Chapter 6 暫存器與計數器
### 暫存器
- 一群正反器
- 串列轉移：從原來暫存器移至下一個
- 並列轉移：相同時間轉移暫存器的全部資料
### 移位暫存器
- 製造延遲：一個暫存器延遲一個Clk
- 環形暫存器：似解碼器的功能
- 圖
- 單向移位暫存器：左移或右移
- 雙向移位暫存器：左移和右移
#### 通用移位暫存器
- 清除功能
- 左移右移控制
- 並列載入
- 維持資料不變
- ![](https://hackmd.io/_uploads/B1zQ8ixUh.jpg)
- ![](https://hackmd.io/_uploads/S14TUseU2.jpg)

### 計數器
- 根據時脈，行經規定狀態順序
#### 漣波計數器
- 正反器輸出為下個的時脈
- 時脈為上一個的k/2
- 可做上(負緣)、下(正緣)數計數器
- ![](https://hackmd.io/_uploads/Hy2WqsxLn.jpg)
- ![](https://hackmd.io/_uploads/B1mGcjgU2.jpg)
##### BCD計數器
- 用AND閘，在1010(10)reset
- ![](https://hackmd.io/_uploads/rJh9hjgL3.jpg)
##### 多位元BCD計數
- 負緣觸發(最高位在1 -> 0時)
- ![](https://hackmd.io/_uploads/ByA23ilU2.jpg)

#### 同步計數器
- 所有正反器接受相同時脈
- 正反器輸入另行設計
##### BCD計數器
- ![](https://hackmd.io/_uploads/Syi5GJbI2.jpg)
##### 任何區間計數
- LOAD初始值，終點AND判斷 + reset
- ![](https://hackmd.io/_uploads/BkxdX1WU2.jpg)

### 環形計數器
- 做時序控制
- 用循環移位暫存器作
- Alt：用3 bits計數器 + 3 to 8解碼器
- ![](https://hackmd.io/_uploads/HJJfrkWIn.jpg)
- n-bit環形計數器 -> 頻率變為1/n Hz
### 詹森計數器
- 移位暫存器，但最後一位的反向回到最前面
- n-bit環形計數器 -> 頻率變為1/2n Hz
- k位元詹森計數器 + 2k解碼器 -> 做時序控制
- ![](https://hackmd.io/_uploads/S1PnP1ZIn.jpg)
#### 防錯誤
1. 挑一位，框出讓該位變1的狀態
- ![](https://hackmd.io/_uploads/SklR_JWU2.jpg)
2. 化簡，加入修正電路
- D~C~ = B(A + C)
- ![](https://hackmd.io/_uploads/rywHtyb83.jpg)

### 除頻器
1. 設計0 ~ n-1 counter
2. 從MSB拉出，即為k/n Hz