一碗酸梅湯 作品
第136章 打造算術邏輯單元
在計算機中,二進制數是以補碼的形式進行運算的。
這樣做的目的,是為了用統一的方式,來進行有符號數的加減法運算,使得硬件複雜度最小化。
關於補碼的運算規則比較複雜,這裡不多展開。
江寒首先要實現的,是最簡單的“半加器”。
其功能十分簡單,就是實現兩個二進制位的加法。
之所以叫“半加器”,是因為輸入只有兩個,不考慮其他運算產生的進位。
它的兩個輸入位,只允許傳入兩個1位的二進制數:1或者0。
輸出的運算結果,也有兩個二進制位。
一個叫sum位,表示“和”;另一個則是carry位,保存著“進位”信息。
比如……
輸入:【1,1】,則輸出【1,0】
輸入:【1,0】,則輸出【0,1】
輸入:【0,1】,則輸出【0,1】
輸入:【0,0】,則輸出【0,0】
輸出中,前面的是carry位,後面的是sum位。
如果單看sum位的取值,這不就是把輸入進行了xor(異或)運算的結果嗎?
再看carry位,它的取值也很有規律,就是個and(與)邏輯。
沒錯,就是這麼簡單。
只要將一個“異或門”,並聯上一個“與門”,一隻半加器就做成了。
做好了這隻半加器後,江寒又將其改造了一下。
為了縮減工藝難度,統一基本元器件的種類,可以只用“與非門”,去實現所有的邏輯運算。
江寒很快就完成了這個計劃。
畢竟一隻“半加器”的構造,實在很簡單。
當然,這裡也可以使用“異或門”或其他什麼門,效果都差不太多,沒什麼本質的區別。
江寒試著將這隻半加器扔進了“回收站”。
也不知道,這麼簡單的“半加器”,到底值多少積分?
結果沒什麼驚喜,只有可憐的1.6分,遠遠不能保本。
好吧,繼續改進。
接下來,江寒將“半加器”改造成了“全加器”。
和“半加器”相比,“全加器”只多了一個輸入位。
也就是說,輸入端包含了3個二進制位。
之所以這麼做,是考慮到了來自其他數位的進位。
“全加器”有多種設計。
最簡單的設計,可以用兩個“半加器”,加上一個“或門”來實現。
多個“全加器”級聯,就成了“多位全加器”,也叫“加法器”。
這樣做的目的,是為了用統一的方式,來進行有符號數的加減法運算,使得硬件複雜度最小化。
關於補碼的運算規則比較複雜,這裡不多展開。
江寒首先要實現的,是最簡單的“半加器”。
其功能十分簡單,就是實現兩個二進制位的加法。
之所以叫“半加器”,是因為輸入只有兩個,不考慮其他運算產生的進位。
它的兩個輸入位,只允許傳入兩個1位的二進制數:1或者0。
輸出的運算結果,也有兩個二進制位。
一個叫sum位,表示“和”;另一個則是carry位,保存著“進位”信息。
比如……
輸入:【1,1】,則輸出【1,0】
輸入:【1,0】,則輸出【0,1】
輸入:【0,1】,則輸出【0,1】
輸入:【0,0】,則輸出【0,0】
輸出中,前面的是carry位,後面的是sum位。
如果單看sum位的取值,這不就是把輸入進行了xor(異或)運算的結果嗎?
再看carry位,它的取值也很有規律,就是個and(與)邏輯。
沒錯,就是這麼簡單。
只要將一個“異或門”,並聯上一個“與門”,一隻半加器就做成了。
做好了這隻半加器後,江寒又將其改造了一下。
為了縮減工藝難度,統一基本元器件的種類,可以只用“與非門”,去實現所有的邏輯運算。
江寒很快就完成了這個計劃。
畢竟一隻“半加器”的構造,實在很簡單。
當然,這裡也可以使用“異或門”或其他什麼門,效果都差不太多,沒什麼本質的區別。
江寒試著將這隻半加器扔進了“回收站”。
也不知道,這麼簡單的“半加器”,到底值多少積分?
結果沒什麼驚喜,只有可憐的1.6分,遠遠不能保本。
好吧,繼續改進。
接下來,江寒將“半加器”改造成了“全加器”。
和“半加器”相比,“全加器”只多了一個輸入位。
也就是說,輸入端包含了3個二進制位。
之所以這麼做,是考慮到了來自其他數位的進位。
“全加器”有多種設計。
最簡單的設計,可以用兩個“半加器”,加上一個“或門”來實現。
多個“全加器”級聯,就成了“多位全加器”,也叫“加法器”。