# 數位邏輯
## 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 - N + 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修正
- 
- 
### 葛雷碼
- 反射二進碼
- 
- 葛雷碼0~9

### 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
- 
### NOR
- 將函數化為和項積,用0化簡
- OR = NOR + NOT
- NOT + AND = NOR
- 
### 線節邏輯
#### - 開集極TTL NAND -> AND-OR-INVERT(AOI)
- 看0化簡,找F'
- 
#### - ECL NOR -> OR-AND-INVERT(OAI)
- 看1化簡,找F'
- 
### 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
```
- 
### 同位產生器與檢查
- 偶同位位元 P = x ⊕ y ⊕ z
- 同位檢查器 C = x ⊕ y ⊕ z ⊕ P。輸出1,資料有誤;輸出0,資料無誤或偶數個誤。
## Chapter 4 組合電路
### 分析步驟
1. 確認其不是序向電路(有儲存元件)
2. 求其布林函數或列出真值表
3. 設計驗證
### 設計步驟
1. 決定輸入、輸出個數和變數符號
2. 列出真值表,用卡諾圖化簡布林函數
3. 畫出邏輯圖,並驗證
### 二進位加法器
#### - 半加器
- 兩個變數輸入,處理兩位數
- 兩個輸出C(進位)、S(和)
- 
- 
#### - 全加器
- 三個變數輸入,處理三位數
- 兩個輸出C(進位)、S(和)
- 
- 
### 二進位減法器
- A - B = A + (B的2補數) = A + B' + 1
#### - 溢位 V
- 保存數字位元數有限
- 正數相加得負數;負數相加得正數
- V = 0,無溢位;V = 1,溢位
- 
### 十進位加法器
- 9輸入,兩四位BCD數,一進位
- 5輸出,一四位BCD數,一進位
- 
- 和 <= 9(BCD) + 9(BCD) + 1(進位) = 19
- 有進位,二進位碼轉BCD碼調整:+6,或C = K + Z~8~Z~4~ + Z~8~Z~2~
- 
### 二進位乘法器
- 用AND和HA(半加器)運算
- 
- 
- 四位元 X 三位元

### 大小比較器
- 輸出:A > B、A < B、A = B
- x~i~ = A~i~ XNOR B~i~
- 
- 四位元大小比較器

### 解碼器
- n個輸入 => 2^n^條輸出線,每個輸出組合只有一個1,其他皆為0
- 致能Enable:似開關,E = 1,輸入不理會,輸出皆為1
- 
## --------------------期中上--------------期末下--------------------
### 編碼器
- 解碼器反向操作
- 輸出結果能推斷輸入
- 
#### 優先權編碼器
- 多V(valid)輸出,解決非法輸入
- 非法輸入變為Don't care幫助化簡
- Don't care -> D~3~有最高優先
- 
### 多工器
- 二進位選擇輸入指向單一輸出
- 
#### 解多工器
- 負責分配,似HUB
- 二進位選擇輸入指向多個輸出之一
- 
#### 解布林代數
1. 列真值表,輸入配在選擇輸入,留下最後一個
2. 觀察留下的輸入和輸出的關係
3. 留下的輸入配上輸入
- 
### 三態閘
- 0, 1 和高阻抗(Z):電流無法進出
- 使用緩衝器 buffer
- 用在Bus上,無使用元件在高阻抗狀態
- 
### 三態閘做多工器
- 
### 各種三態閘
- 
## Chapter 5 同步序向邏輯
### 序向邏輯
- 包含儲存元件,和騎回授路徑
- 輸入 + 目前狀態 -> 輸出 + 次一狀態
- 
- 時脈:決定儲存速度
### 儲存元件
- 記憶一位元,0 or 1,準位觸發
- 有設置、重置、維持功能
#### SR-LATCH
1. NOR
- R = 1重置,S = 1設置,S = R = 0維持
- S = R = 1禁止,呈不穩定狀態
- 
2. NAND
- R = 0重置,S = 0設置,S = R = 1維持
- S = R = 0禁止,呈不穩定狀態
- 
#### 具Enable的SR-LATCH
- E = 0關閉,E = 1啟動
- R = 1重置,S = 1設置,S = R = 0維持
- S = R = 1禁止,呈不穩定狀態
- 
#### D型LATCH
- 能排除不穩定狀態
- D = 0重置,D = 1設置
- 
### 正反器
- 儲存元件搭配時脈,邊緣觸發
#### 邊緣觸發D型正反
- 由兩個LATCH組成,分為主(正緣)、僕(負緣)
- Q(t+1)次態 = D
- 最經濟、有效率
- 正緣(0->1)、負緣(1->0)觸發皆可
- 
#### 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)**|
- 
#### T型正反器 (Toggle)
- D = T ⊕ Q = TQ' + T'Q
- | **T** | Q(t + 1) |
|:------|---------:|
| **0** | Q(t) |
| **1** | Q'(t) |
- 
### 直接輸入
- Resret功能的強制性
- 
### 時序分析
1. 列出正反器輸入輸出(D = Q)
- 
2. 用輸入輸出配合正反器找出布林函數
```
A(t+1) = Ax + Bx
B(t+1) = A'x
y = Ax' + Bx'
```
3. 列狀態表,目前狀態、次態、輸出
- 
4. 畫狀態圖
- 
- 圓圈:狀態
- 連接射線:狀態彼此的轉換,以輸入/輸出標示(0/1)
### 有限狀態機
#### 密利模型 Mealy Machine
- 輸入、正反器共同組成輸出,Clock改變便正反器內容
- 輸出與狀態、輸入有關
- 較難設計,但狀態較少
- 
#### 莫爾模型 Moore Machine
- 暫存器決定輸出
- 輸出與狀態有關
- 
### 設計程序
1. 畫狀態圖,指定狀態binary
2. 列狀態表
3. 選擇正反器
4. 簡化
## Chapter 6 暫存器與計數器
### 暫存器
- 一群正反器
- 串列轉移:從原來暫存器移至下一個
- 並列轉移:相同時間轉移暫存器的全部資料
### 移位暫存器
- 製造延遲:一個暫存器延遲一個Clk
- 環形暫存器:似解碼器的功能
- 圖
- 單向移位暫存器:左移或右移
- 雙向移位暫存器:左移和右移
#### 通用移位暫存器
- 清除功能
- 左移右移控制
- 並列載入
- 維持資料不變
- 
- 
### 計數器
- 根據時脈,行經規定狀態順序
#### 漣波計數器
- 正反器輸出為下個的時脈
- 時脈為上一個的k/2
- 可做上(負緣)、下(正緣)數計數器
- 
- 
##### BCD計數器
- 用AND閘,在1010(10)reset
- 
##### 多位元BCD計數
- 負緣觸發(最高位在1 -> 0時)
- 
#### 同步計數器
- 所有正反器接受相同時脈
- 正反器輸入另行設計
##### BCD計數器
- 
##### 任何區間計數
- LOAD初始值,終點AND判斷 + reset
- 
### 環形計數器
- 做時序控制
- 用循環移位暫存器作
- Alt:用3 bits計數器 + 3 to 8解碼器
- 
- n-bit環形計數器 -> 頻率變為1/n Hz
### 詹森計數器
- 移位暫存器,但最後一位的反向回到最前面
- n-bit環形計數器 -> 頻率變為1/2n Hz
- k位元詹森計數器 + 2k解碼器 -> 做時序控制
- 
#### 防錯誤
1. 挑一位,框出讓該位變1的狀態
- 
2. 化簡,加入修正電路
- D~C~ = B(A + C)
- 
### 除頻器
1. 設計0 ~ n-1 counter
2. 從MSB拉出,即為k/n Hz