---
title: 第四週
tags: 計概
---
# Multiple-Output Circuit
### Priority circuit

就是有多個輸入與對應的輸出 但是輸入有優先之分
如果只有一個輸入,那就只要他對應的輸出輸出就好
但如果有多個輸入,只有優先度高的對應的輸出會輸出

這個的線路直覺推導
最高的就直接輸出
第二高就是 **第二高跟“沒有第一高”** AND
以此類推
### Don't care

就是該值為01不重要,可以是0也可以是1
## Contention:X

當把兩個可能一個0一個1的Node接在一起時會發生:
1. 得出的值會在1跟0之間
2. 輸出的值可能是 1 可能是 0 或是**Forbidden zone**
3. 結果會受電壓、溫度、時間和雜訊等影響
4. 會造成額外的能量損失
此時那個輸出的值就是Contention 通常記為X
通常代表的是一個 **Bug**
通常大 `X` 是拿來代表`Don't care`跟`Contention`
至於是甚麼要依照前後文
## Logic level 如何確保 01 是對的

在設計電路時會給一個閾值 或叫做Range
決定 Input 跟 Output 到底是 0 還是 1
或者視為雜訊 也就是落在所謂的 **Forbidden Zone**
而 Contention會是一個Bug 或者說不好的緣故
就是因為如果值落在 **Forbidden Zone** 東西就不見了
## Floating (by Tristate buffer)
藉由 Tristate Buffer 達成 Floating
>下圖的符號請見 [緩衝閘](https://zh.m.wikipedia.org/zh-tw/%E7%B7%A9%E8%A1%9D%E9%96%98)

多接入一個高電阻的東西 E (Enable的意思)
如果該高電阻是1代表電路是通的
如果是0則會帶來高電阻 使原本的線路斷路,輸出記為Z
可以用來解決上面contention的問題
所以只要在兩個閘都加上 E 其中一個取反
這樣就不會同時有兩個訊號輸出了
## Tristate Busses
匯流排,運送資料的地方,像是PCIE

因為有很多東西會和CPU連在一起,像是顯卡、記憶體、網路
所以每個 `to bus` 那裡就會加上一個 en
所以其實看似簡單的add move 在那之前他們都要先藉由 en 決定誰要開要關
而達成 floating 一樣是用 Tristate Buffer
老師說在後面記憶體的地方會全部都兜起來
---
# Karnaugh Maps / K-Maps 卡諾圖
## 三個變數

拆成2+1 誰2誰1自己挑
找到$PA+P\overline{A}$的情況
:::danger
要注意上面的01值一次只能改變一個值,也就是說01跟10不能相鄰
:::
你排好之後,填入01值,然後圈出相鄰都是1的
此時圈起來的 因為會有 Literal 符合$PA+P\overline{A}$
也就可以消掉
而在填入01時 SOP會比較好填
### 圈的時候
1. 四個角、對側邊邊是相鄰的 可以一起圈
2. 在圈的時後要圈2的k次方 例如 2 個、4 個...
3. 每個1都要圈到,且都要圈到他所能圈的最大範圍
也就是說,如果他可以跟周圍3個圈起來成 4 個
那你就不能只圈周圍 1 個成為 2 個
5. 對於每一組 將有出現0跟1的人削掉的
6. 最後把結果OR起來
## 應用 數字顯示器

將每一條線都當作是一個輸出函數 S~a~
然後依據1到10的四個bit拆成 2×2 K-Maps
然後就填入01 圈起來 OR起來 結束

你就得到一條線要不要亮的邏輯等式
期中考就會有類似的這種題目

## K maps with Don't care

因為 Don't care 本身的意義就是他輸出是 0 還是 1 沒有差別
當我假設該 X 裡面的值是 1 這樣就可以增加我圈的範圍
假設該 X 裡面的是 0 這樣就不必圈他
讓消除的動作更有彈性
>話說...上圖的0101應該不是 X 而是 1
像上面的數字看板 因為數字只到 9 所以代表 10 到 15 的就可以畫上 X
但老師有說這也不是最好的
---
# Multiplexer / MUX

就是很多輸入但只有一個輸出 上圖是 2 to 1 的 MUX
會接入 S (select) 決定是誰要輸出
如果有 n 個輸入,你就需要 log~2~n個 S 幫你判斷
>在電腦的世界log是以2為底
### K-Maps
簡單的Multiplexer 的K-Maps結果也蠻直觀的

S關掉就D0輸出;S打開就D1輸出
### 線路圖

### Tristate buffer

也可以用 Floating 去實現 MUX
不過會變成需要 n 個Trisate 達成相同功能
## 4:1 MUX
### 1. 直接鋪

需要 2 個 Selector 去判定 (log~2~4 = 2)

### 2. Tristate buffer
其實有點困惑 這是 tristate 嗎

### 3. Hierarchical 階層式

也可以以兩個2:1的Multiplexer
兜出4:1的Multiplexer
---
# MUX 的應用
## 雙變數 AND 閘

把 A B 兩個 Node 當成 Selector
然後給 4 個 Input 分別叫做 00, 01, 10, 11
因為只有A = 1, B = 1有輸出 其餘都是0
所以我只要 11 這個輸入固定為 1 由 AB 這兩個 Selector 選擇就好
其餘就直接接地
### 優化

其實回去重新看一次真值表 會發現可以把表改寫為只有A的真值表
然後只要把 B 當 Input, A 當 Selector 就好
## 三變數

跟雙變數一樣 真值表中屬於變數的就當作 Selector
為 0 的就接地 為 1 的就給予 VDD
:::info
那講了那麼多MUX的應用要做啥?
因為有了特定功能的 MUX
除了可以直接使用的方便與效率性
這樣才不用每次畫線路時 還要說這裡有一個 AND閘
我只要說這裡放一個某某 MUX 就知道是 AND 閘了
:::
:::success
老師說常用於 HCI 的實驗室
因為要設計全新的介面
:::
---
# Decoders

n 個輸入 然後 2^n^ 個輸出
==但是一樣輸出一次只能一個bit是1==
## 電路圖

常用來定址,第五週會講到

在要讀取一個東西到cpu的暫存器reg時
暫存器會有一個 w 的floating代表他能否被寫入
記憶體那裡會有一個Decoder
會輸出一個訊號到某個位置,作為該位置的floating用
# Decoders 的應用
## 1. 輸出 Minterm 和 XNOR 閘

上圖就是除了拿來輸出由 AB 組成的 Minterm
同時再把 11 和 00 的輸出拉出來 OR 組成 XNOR 閘
把 10 和 01 OR 起來的話就是 XOR 閘了
## 2. 全加法器
X Y 是要相加的兩個數, Z 是進位

研究一下可以發現

S 只有 1,2,4,7 行會輸出 1
C 只有 3,5,6,7 行會輸出 1
此時:
將 XYZ 看做是 三個輸入
將 C (Carries) 進位 和 S (Sum) 本位看做是兩個輸出
各自把會輸出 1 的情況 OR 起來

你就善用了 Decoder 的方便
但實際Decoder的電路應該要用K-Map去找出來
---
下禮拜要講記憶體 也就是sequential
要考慮先前的state
shift register
每到下一個state都把值往右移
左邊增加的值則看輸入
Markov model
描述一個東西在不同階段state的變化
圖中數字代表的是百分比
藉由東西的行為找到一個transition table
就是下面那串SAAA.....
S代表Start
這樣你就可以預測他的行為
HMM
隱藏式的,感覺就是多個會合成一個