二进制和电路图
本篇筆記理解需要的內容:二進制的基本知識,如何用0,1表示二進制的正負,二進制的加減法等等。邏輯運算與或非;了解電路中的串聯,并聯,電阻等概念。
1.晶體管如何控制邏輯運算:
and:類似于電路中的串聯,用兩個晶體管串聯在一起,可以實現“與”的功能。 or:類似于電路中的并聯,這樣其中一個通路,就可以實現通路。即和‘或’的概念一致。 not: 類似短路和電阻的設計,圖中的表就像開關,該支路是沒有電阻的,都是輸出是在有resistor的一端。如果開關閉合,即輸入是1,則電阻端短路,不通過‘電流’,輸出為0;如果輸出為0,則開關斷開,雖然有電阻,但是也會通過,輸出為1。就實現了‘非’的功能。 總的來說,上面這些圖的開關就是晶體管。實現一個‘與’‘或’的功能要兩個晶體管。實現一個‘非’的功能要一個晶體管。2.設計比較電路
上面我們知道了晶體管,那么實際過程中,計算機都是通過將代碼轉換為機器可以執行的二進制碼,然后機器就允許這些二進制碼就行了。那么我們電腦的電路也是只要設計可以執行二進制碼的電路。我們來簡單看一下幾個簡單的電路。 假設我們要實現一個比較兩個1位數的二進制碼(最簡單的開始),那么我們先畫個表格: a,b束輸入的,電路要實現的輸出是c.只要把輸出是1的內容,通過一個表達式表達出來。(注意這里只能用and和not來寫表達式,后面你就知道為什么)。這里的表達式如下圖所示。“'”表示非,"."表示和,“+”表示或。 因為有很多個輸出為1的需要用or來聯系在一起。所以我們先用and和not就不會亂??幢磉_式,根據表達式我們可以畫出電路圖了。 看這個電路圖,是不是實現了確認兩個1位二進制碼的是否相同的功能。 這里總共用了 2*2(and)+1*2(or)+2*1(not)=8個晶體管 根據這個例子,我們可以總結出從功能設計到畫電路圖總共有以下步驟: 1.建立起對于輸入所有的值,輸出為1的表格 2.用and和not寫出輸出全部為1表達式(sub-expression) 3.用or將所有表達式串在一起(expression) 4.根據表達式畫電路圖。 我們再進階,如果要比較兩個4位二進制的數字是否相同?那么輸入應該是8個數字,a1a2a3a4=b1b2b3b4? 首先我們將比較1位的當作一個小模塊“1-CE(1-bit compare for equality)” 只要把小模塊“1-CE”組合就可以變成"4-CE"(4-bits compare for equality),如下圖所示。 這里總共用了4*8(4個模塊)+3*2=38個晶體管 好講到這里,我們以及實現了代碼里面的比較兩個數值/字符/其他基本元素的大小(因為這些東西都可以化成二進制碼)。那么如何實現加法這種功能?3.加法電路
首先討論一下二進制中的加減法,我們知道(不知道的話自己回去復習)二進制中的加減法需要額外的一位來表示進位。 我們先來實現以下1位數字的加法(1-bit Adder) 圖中的carry就是進位。同樣的我們先把sub-expression表達出來,但是這里要表達兩次,因為有進位。 ? 再用or的方法加起來。得到如下表達式: d = (a'?b'?c) + (a'?b?c') + (a?b'?c') + (a?b?c) e = (a'?b?c) + (a?b'?c) + (a?b?c') + (a?b?c) 根據表達式畫出圖,如下所示: 這里總共用了16*2(and)+6*2(or)+3*1(not)=47個晶體管 我們繼續進一步,如果要畫4位數的加法的電路圖呢?和上面的方法一樣,我們先將1-bit adder簡化為一個模塊 然后把模塊組合就可以實現4-bits加法。其中上面的0是上一位的進位數,是設置為0的,最下面的進位如果有更多的位數是傳給下個進位數的,這里沒有了就懸空不管。 對于32bits adder則需要輸入64個數字,總共需要的晶體管為47*32=1504個晶體管。 part3.簡化電路圖 一般來講我們得到1bit adder的表格如下圖所示: 換一種方法畫他: 就是將兩個數分開,表格上的束表示輸出的值。這樣畫我們會發現有連續幾個數都是1的位置。說明這個位置的數是和其中一個或兩個對應輸入是無關的,就可以簡化表達式。(這個方法不熟悉可以去了解一下數電里面的內容) 表達式簡化我們就可以根據簡化表達式會出簡化的電路。讀者讀到這里可以自己畫一下這個電路,和前面的比較一下晶體管數是否更少了! 參考: https://cs61a.org/總結
- 上一篇: MDN Web Docs
- 下一篇: Error deploying web