重學計算機組成原理(十二) 加法器

2021-09-26 07:08:23 字數 3107 閱讀 6897

下面這些閘電路的標識,你需要非常熟悉,後續的電路都是由這些閘電路組合起來的。

這些基本的閘電路,是我們計算機硬體端的最基本的「積木」

包含十億級別電晶體的現代cpu,都是由這樣乙個乙個的閘電路組合而成的。

基礎閘電路

2個8 位(bit)數的與/或/非邏輯運算

連續擺放8個開關,代表乙個8位數

這樣的兩組開關,從左到右,上下單個的位開關之間,都統一用「與門」或者「或門」連起來,就是兩個8位數的and或者or的運算了

最簡單的8位的無符號整數的加法

「無符號」表示不需要使用補碼來表示負數

無論高位是「0」還是「1」,這個整數都是乙個正數

表示乙個8位數的整數,簡單地用8個bit,也就是8個電路開關

那2個8位整數的加法,就是2排8個開關

加法得到的結果也是乙個8位的整數,所以又需要1排8位的開關

要想實現加法,我們就要看一下,通過什麼樣的閘電路,能夠連線起加數和被加數,得到最後期望的和

人在計算加法的時候一般怎麼操作

二進位制的加法和十進位制沒什麼區別,一樣可以用列豎式

我們仍然是從左到右,一位一位進行計算,只是把從逢10進1變成逢2進1

一位數的加法

輸入一共是4種組合,00、01、10、11

這個輸入和輸出的對應關係,其實就「異或門(xor)」

與/或/非門,很容易就能和程式裡面的「and(&)」「 or( | )」和「 not( !)」對應

為什麼需要異或(xor)

這樣乙個在邏輯運算裡面沒有出現的形式,作為乙個基本電路

異或門就是乙個最簡單的整數加法,所需要使用的基本閘電路

輸入的兩位都是11時,還需要向左側一位進製

這就對應乙個與門

也就是有且只有在加數和被加數都是1的時候,進製才是1

所以,通過乙個

就通過電路算出了乙個一位數的加法

把兩個閘電路打包,給它取乙個名字,就叫作半加器(half adder)

半加器可以解決個位的加法問題,但放到二位上,就不夠用

這裡的豎式是個二進位制的加法,所以從右往左數,第二列不是十位,稱為「二位」

對應的再往左,就應該分別是四位、八位

二位用乙個半加器不能計算完成的原因也很簡單

因為二位除了乙個加數/被加數,還需要加上來自個位的進製訊號,一共需要三個數進行相加

無論是最簡單的閘電路,還是用兩個閘電路組合而成的半加器,輸入都只能是兩個bit,也就是兩個開關。該怎麼辦呢?

兩個半加器和乙個或門,就能組合成乙個全加器

第乙個半加器,我們用和個位的加法一樣的方式,得到是否進製x和對應的二個數加和後的結果y,這樣兩個輸出

然後,我們把這個加和後的結果y,和個位數相加後輸出的進製資訊u,再連線到乙個半加器上,就會再拿到乙個是否進製的訊號v和對應的加和後的結果w。

這樣,通過兩個半加器和乙個或門,我們就得到了乙個,能夠接受進製訊號、加數和被加數,這樣三個數組成的加法。這就是我們需要的全加器。

有了全加器,我們要進行對應的兩個8 bit數的加法就很容易了

只要把8個全加器串聯起來就好了

個位的全加器的進製訊號作為二位全加器的輸入訊號,二位全加器的進製訊號再作為四位的全加器的進製訊號

這樣一層層串接八層,我們就得到了乙個支援8位數加法的算術單元

如果要擴充套件到16位、32位,乃至64位,都只需要多串聯幾個輸入位和全加器就好了

既然int這樣的16位的整數加法,結果也是16位數,那我們怎麼知道加法最終是否溢位了呢?因為結果也只存得下加法結果的16位數。我們並沒有留下乙個第17位,來記錄這個加法的結果是否溢位。

看到全加器的電路設計,相信你應該明白,在整個加法器的結果中,我們其實有乙個電路的訊號,會標識出加法的結果是否溢位。我們可以把這個對應的訊號,輸出給到硬體中其他標誌位里,讓我們的計算機知道計算的結果是否溢位

而現代計算機也正是這樣做的。這就是為什麼你在撰寫程式的時候,能夠知道你的計算結果是否溢位在硬體層面得到的支援。

兩個閘電路,搭出乙個半加器,就好像我們拿兩塊樂高,疊在一起,變成乙個長方形的樂高,這樣我們就有了乙個新的積木元件,柱子。我們再用兩個柱子和乙個長條的積木組合一下,就變成乙個積木橋。然後幾個積木橋串接在一起,又成了積木樓梯。

從簡單到複雜,我們一層層搭出了擁有更強能力的功能元件

在上面的一層,我們只需要考慮怎麼用下一層的元件搭建出自己的功能,而不需要下沉到更低層的其他元件。就像你之前並沒有深入學習過計算機組成原理,一樣可以直接通過高階語言撰寫**,實現功能。

在硬體層面,我們通過閘電路、半加器、全加器一層層搭出了加法器這樣的功能元件。我們把這些用來做算術邏輯計算的元件叫作alu,也就是算術邏輯單元。當進一步打造強大的cpu時,我們不會再去關注最細顆粒的閘電路,只需要把閘電路組合而成的alu,當成乙個能夠完成基礎計算的黑盒子就可以了。

以此類推,後面我們講解cpu的設計和資料通路的時候,我們以alu為乙個基礎單元來解釋問題,也就夠了。

出於效能考慮,實際cpu裡面使用的加法器,比起我們今天講解的電路還有些差別,會更複雜一些。真實的加法器,使用的是一種叫作超前進製加法器的東西。你可以找到北京大學在coursera上開設的《計算機組成》課程中的video-306 「加法器優化」一節,了解一下超前進製加法器的實現原理,以及我們為什麼要使用它。

計算機組成原理cu 計算機組成原理 計算機概論

現代計算機樣式千奇百怪,常見的有我們的筆記本,台式電腦,也有各種伺服器 手機 攝像頭等都屬於計算機範疇。計算機包含我們看得見摸得著的計算機實體,稱為計算機硬體,如cpu 記憶體 各種掛接裝置等 還有我們看不見摸不著的軟體,它支援著硬體按照我們的預想在操作,包括系統軟體和應用軟體 計算機硬體樣式千奇百...

Labview設計計算機 加法器 1

首先,需要說明電路中常用的兩個概念 組合邏輯電路和時序邏輯電路 組合邏輯電路的輸出僅與輸入有關,當輸入發生變化時,輸出幾乎立刻發生變化 時序邏輯電路的輸出不僅與當前輸入有關,還與電路過去的狀態有關,具有一定的記憶能力,通常由乙個時鐘驅動 加法器是乙個簡單的運算部件 加法器的結構由簡單到複雜分別為 半...

Labview設計計算機 加法器 3

首先複習一下全加器的3個輸出和兩個輸入之間的關係 3個輸出 ia ib分別為1位資料位,icarry為1位的低位進製 2個輸出 os為1位的結果值,ocarry為1位的本級進製 關係運算為 os ia ib icarry ocarry ia ib ia ib icarry 可見,每乙個全加器的運算中...