加法器和減法器的實現

最近一直在刷力扣。然後突然又想二刷計算機組成與設計。就結合計算機組成與設計這本書以及北大的同名精品課開始複習。看的是真的舒服。

唔,我自己看計算機組成與設計的時候,看了後面的邏輯設計部分,學到的最大的收穫就是,從真值表出發,或許可以推出簡單的邏輯運算公式,但是一定可以推出對應的電路圖。從邏輯運算公式出手,是一定能夠推出真值表的,也一定可以推出電路圖的。有了電路圖,真值表和邏輯運算公式也一定能夠推理出來。

因此,就從半加器出發吧。來試著推一下玩玩。

加法器和減法器的實現

這是一個半加器的真值表。直接就可以看出C是與,S是異或。

這個比較簡單,電路如圖所示。

加法器和減法器的實現

那如果是全加器呢?

加法器和減法器的實現

加法器和減法器的實現

來看,A B C 和OUT,很簡單,我們直接轉換真值表。

第一個A:1 B:1 C: 0 OUT:1。

那麼對應得就是

加法器和減法器的實現

一般邏輯設計,有了真值表,可以直接看輸出為1的部分,只要能實現1,那麼0自然也實現了。

再來看其它部分:

加法器和減法器的實現

那麼OUT的表示式整體上就是:並且化簡以後那就是:

加法器和減法器的實現

那麼看最後的式子來翻譯OUT:

那就是 AB的與電路+(AB的異或電路)與C。

那麼結構如下:

加法器和減法器的實現

好了,用同樣的道理進行化簡,就可以得到S的電路:

加法器和減法器的實現

兩個內容一合成,就是全加器的電路:

加法器和減法器的實現

4 bit加法器具體是這樣形成的:

加法器和減法器的實現

也就是很簡單的4個1 bit 全加器串聯在一起就好了。

然後的話每一位分別對應一位加法器。

接下來是我做的一個例項:

加法器和減法器的實現

好了,我們輕鬆地做出來了一個4Bit加法器。出發點是什麼?真值表和邏輯公式和電路的相互轉化!

具體32位加法器我就不具體做了,然後的話32位加法器差不多,下面是1個圖:

加法器和減法器的實現

好了,問題來了,可能出現溢位的情況。具體的話得看到具體的操作。

如果是add,那是有符號數,就可能出現溢位,如果是addu,那是無符號數,那就問題不是太大。

具體的話是這樣的:

加法器和減法器的實現

有符號數嘛,就是因為補碼造成的這種情況。無符號數就好多了,不會出現這種尷尬的情況。

當然了,溢位和進位不能一概而論,所以又有了下列的情況:

加法器和減法器的實現

溢位又要怎麼檢測呢?很簡單,最高位的輸出不等於最高位的輸入。這就是溢位了。用什麼電路合適檢測?都是0和1的話輸出是0,否則為1。那麼顯然直接就是異或了。

減法器怎麼辦?A-B可以看成A+(-B)。那麼直接用補碼把B取反再+1即可。在具體的加法器的做法是這樣的:

加法器和減法器的實現

當sub訊號為0時,那麼還是進行加法操作。當sub訊號為1時,B取反,之後C0置為1,進位輸入為1,那麼就做到了按位取反再加1的操作。

以上就是加減法的實現。