--- title: 第四週 tags: 計概 --- # Multiple-Output Circuit ### Priority circuit ![image alt](https://drive.google.com/uc?id=1awxYa_ElyiIin1RQcLVT1JJzTYItsT2I&export=download) 就是有多個輸入與對應的輸出 但是輸入有優先之分 如果只有一個輸入,那就只要他對應的輸出輸出就好 但如果有多個輸入,只有優先度高的對應的輸出會輸出 ![](https://drive.google.com/uc?id=1K2U8qVLv1Nop3R7NgG8NWBt2507fEzSz&export=download) 這個的線路直覺推導 最高的就直接輸出 第二高就是 **第二高跟“沒有第一高”** AND 以此類推 ### Don't care ![](https://drive.google.com/uc?id=11FkpsdZ0IzmZL1uTfkfzuJLFG3nxzKv6&export=download) 就是該值為01不重要,可以是0也可以是1 ## Contention:X ![](https://drive.google.com/uc?id=1Thazdg763lX_xBGl1n1FX_srQEFXOZAo&export=download) 當把兩個可能一個0一個1的Node接在一起時會發生: 1. 得出的值會在1跟0之間 2. 輸出的值可能是 1 可能是 0 或是**Forbidden zone** 3. 結果會受電壓、溫度、時間和雜訊等影響 4. 會造成額外的能量損失 此時那個輸出的值就是Contention 通常記為X 通常代表的是一個 **Bug** 通常大 `X` 是拿來代表`Don't care`跟`Contention` 至於是甚麼要依照前後文 ## Logic level 如何確保 01 是對的 ![](https://drive.google.com/uc?id=1xq83PJpHNFTELsDg44wYl3hYwwn_Z5X-&export=download) 在設計電路時會給一個閾值 或叫做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) ![](https://drive.google.com/uc?id=1j8PGboudNXvkUGW4ADvAKyMqyS-c-C0W&export=download) 多接入一個高電阻的東西 E (Enable的意思) 如果該高電阻是1代表電路是通的 如果是0則會帶來高電阻 使原本的線路斷路,輸出記為Z 可以用來解決上面contention的問題 所以只要在兩個閘都加上 E 其中一個取反 這樣就不會同時有兩個訊號輸出了 ## Tristate Busses 匯流排,運送資料的地方,像是PCIE ![](https://drive.google.com/uc?id=1KdEIzCxxq76H-REeORoWOPjEUO2htzE5&export=download) 因為有很多東西會和CPU連在一起,像是顯卡、記憶體、網路 所以每個 `to bus` 那裡就會加上一個 en 所以其實看似簡單的add move 在那之前他們都要先藉由 en 決定誰要開要關 而達成 floating 一樣是用 Tristate Buffer 老師說在後面記憶體的地方會全部都兜起來 --- # Karnaugh Maps / K-Maps 卡諾圖 ## 三個變數 ![](https://drive.google.com/uc?id=1xeu9udgOVVL04gHzo60Adb9DYKIu3aH7&export=download) 拆成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起來 ## 應用 數字顯示器 ![](https://drive.google.com/uc?id=1VsKOvuM1gDTKv5y87fq2qiBYA-70fWPG&export=download) 將每一條線都當作是一個輸出函數 S~a~ 然後依據1到10的四個bit拆成 2×2 K-Maps 然後就填入01 圈起來 OR起來 結束 ![](https://drive.google.com/uc?id=1r04q47sHn6Sn2VpxybdF8nHe9fsE0Bc6&export=download) 你就得到一條線要不要亮的邏輯等式 期中考就會有類似的這種題目 ![](https://drive.google.com/uc?id=1jGY3DiomQgtnCgU9BGCyZVK4uXsmFEnu&export=download) ## K maps with Don't care ![image alt](https://drive.google.com/uc?id=13_7r1l64VCEKCj3GVgf8bKzeftNHEVHq&export=download) 因為 Don't care 本身的意義就是他輸出是 0 還是 1 沒有差別 當我假設該 X 裡面的值是 1 這樣就可以增加我圈的範圍 假設該 X 裡面的是 0 這樣就不必圈他 讓消除的動作更有彈性 >話說...上圖的0101應該不是 X 而是 1 像上面的數字看板 因為數字只到 9 所以代表 10 到 15 的就可以畫上 X 但老師有說這也不是最好的 --- # Multiplexer / MUX ![image alt](https://drive.google.com/uc?id=1xXKGuAczJxH04lXulVCtxyQe4AgM_Jsv&export=download) 就是很多輸入但只有一個輸出 上圖是 2 to 1 的 MUX 會接入 S (select) 決定是誰要輸出 如果有 n 個輸入,你就需要 log~2~n個 S 幫你判斷 >在電腦的世界log是以2為底 ### K-Maps 簡單的Multiplexer 的K-Maps結果也蠻直觀的 ![image alt](https://drive.google.com/uc?id=1zz8mjZiYXusUF9hjuSYB97R830UoqpjJ&export=download) S關掉就D0輸出;S打開就D1輸出 ### 線路圖 ![image alt](https://drive.google.com/uc?id=1DnFg2MAl4LafEn1yN28DMo2RkYwN_c04&export=download) ### Tristate buffer ![image alt](https://drive.google.com/uc?id=1JV6aldNWFZy_DT8oj5dWGtvXgijzTANt&export=download) 也可以用 Floating 去實現 MUX 不過會變成需要 n 個Trisate 達成相同功能 ## 4:1 MUX ### 1. 直接鋪 ![image alt](https://drive.google.com/uc?id=1hJWBwGIzVHxlbSMfT08kWnDCTR6JSkg-&export=download) 需要 2 個 Selector 去判定 (log~2~4 = 2) ![image alt](https://drive.google.com/uc?id=19VrvmNIfouLnxVze_Hj2xE-CALhquXTY&export=download) ### 2. Tristate buffer 其實有點困惑 這是 tristate 嗎 ![image alt](https://drive.google.com/uc?id=14K9tBYWCBCBEizeHjmUSdn8t43DEMHdc&export=download) ### 3. Hierarchical 階層式 ![image alt](https://drive.google.com/uc?id=1rCBUM3cJRJpkITTF6W4VwxyUBzjhpgX0&export=download) 也可以以兩個2:1的Multiplexer 兜出4:1的Multiplexer --- # MUX 的應用 ## 雙變數 AND 閘 ![image alt](https://drive.google.com/uc?id=1ccG9JkT8Xo-eUlTrYhD2qICCf-EOIF_a&export=download) 把 A B 兩個 Node 當成 Selector 然後給 4 個 Input 分別叫做 00, 01, 10, 11 因為只有A = 1, B = 1有輸出 其餘都是0 所以我只要 11 這個輸入固定為 1 由 AB 這兩個 Selector 選擇就好 其餘就直接接地 ### 優化 ![image alt](https://drive.google.com/uc?id=1RJp49yalgC6MgDC3MLRBV5pxaypP11Nk&export=download) 其實回去重新看一次真值表 會發現可以把表改寫為只有A的真值表 然後只要把 B 當 Input, A 當 Selector 就好 ## 三變數 ![image alt](https://drive.google.com/uc?id=1-JXrZ1ejuyWS_Faq70CmwPdbEXOFK-WM&export=download) 跟雙變數一樣 真值表中屬於變數的就當作 Selector 為 0 的就接地 為 1 的就給予 VDD :::info 那講了那麼多MUX的應用要做啥? 因為有了特定功能的 MUX 除了可以直接使用的方便與效率性 這樣才不用每次畫線路時 還要說這裡有一個 AND閘 我只要說這裡放一個某某 MUX 就知道是 AND 閘了 ::: :::success 老師說常用於 HCI 的實驗室 因為要設計全新的介面 ::: --- # Decoders ![image alt](https://drive.google.com/uc?id=1vpKMD9y9aMBjXcWgXWa6aSuTvBS-CVxw&export=download) n 個輸入 然後 2^n^ 個輸出 ==但是一樣輸出一次只能一個bit是1== ## 電路圖 ![image alt](https://drive.google.com/uc?id=1TzZJCpQDjFyz6DxHxXWCPT2QPmVeq_d3&export=download) 常用來定址,第五週會講到 ![image alt](https://drive.google.com/uc?id=1Hiryn_LZ5hcbMXl9vB5v5tYrkAJ6qAr7&export=download) 在要讀取一個東西到cpu的暫存器reg時 暫存器會有一個 w 的floating代表他能否被寫入 記憶體那裡會有一個Decoder 會輸出一個訊號到某個位置,作為該位置的floating用 # Decoders 的應用 ## 1. 輸出 Minterm 和 XNOR 閘 ![image alt](https://drive.google.com/uc?id=1R-ukYFc2MWZNeEfxpZhHOoZwo75kWC0b&export=download) 上圖就是除了拿來輸出由 AB 組成的 Minterm 同時再把 11 和 00 的輸出拉出來 OR 組成 XNOR 閘 把 10 和 01 OR 起來的話就是 XOR 閘了 ## 2. 全加法器 X Y 是要相加的兩個數, Z 是進位 ![image alt](https://drive.google.com/uc?id=1OGt9z1EOGOn_4HenpVSLEKGJWIu8Mar7&export=download) 研究一下可以發現 ![image alt](https://drive.google.com/uc?id=1bfSAP8hULus62x11CI7Anm1XWZ_GUhWc&export=download) S 只有 1,2,4,7 行會輸出 1 C 只有 3,5,6,7 行會輸出 1 此時: 將 XYZ 看做是 三個輸入 將 C (Carries) 進位 和 S (Sum) 本位看做是兩個輸出 各自把會輸出 1 的情況 OR 起來 ![image alt](https://drive.google.com/uc?id=1IPeAUp6VeKvVylFV8r4dQNNKeaA6GMnc&export=download) 你就善用了 Decoder 的方便 但實際Decoder的電路應該要用K-Map去找出來 --- 下禮拜要講記憶體 也就是sequential 要考慮先前的state shift register 每到下一個state都把值往右移 左邊增加的值則看輸入 Markov model 描述一個東西在不同階段state的變化 圖中數字代表的是百分比 藉由東西的行為找到一個transition table 就是下面那串SAAA..... S代表Start 這樣你就可以預測他的行為 HMM 隱藏式的,感覺就是多個會合成一個