#2 算術(shù)運(yùn)算、儲(chǔ)存器(Part.4)8位全加器


這一關(guān),很容易玩,也很難玩
我很喜歡這一關(guān)因?yàn)閷?shí)在是太多可以優(yōu)化的細(xì)節(jié)了
先上一個(gè)標(biāo)準(zhǔn)答案
8位全加器1.0

就是把8個(gè)全加器全部連一起
很簡(jiǎn)單易懂
門數(shù)量72總延遲64
但很顯然這是一個(gè)非常慢的線路
這一關(guān)有一個(gè)成就,是要總延遲在35以下
所以就想一下怎么做啦

首先八位數(shù)的加法如果想要提速
第一個(gè)想法就是并行計(jì)算
因?yàn)榘藗€(gè)全加器連在一起只是普通的線性計(jì)算
先把低位算完,得出進(jìn)位,再算高位
延遲也是延遲在這一個(gè)地方
所以首先我們的思路是要并行計(jì)算
所以我設(shè)計(jì)了這樣子的線路圖

8位全加器2.0

看起來(lái)很復(fù)雜,我把每一個(gè)單體抽出來(lái)

從左到右可以分為三個(gè)部分
左邊兩個(gè)部分是兩個(gè)全加器的結(jié)構(gòu)(最左邊的一個(gè)半加器是共用的)
這是分別模擬了低位進(jìn)位是0和1的結(jié)果,然后在右邊通過(guò)低位進(jìn)位和開關(guān)進(jìn)行結(jié)果選擇
這樣子就實(shí)現(xiàn)了并行計(jì)算
(也就是說(shuō)原本的方法是,等低位進(jìn)位的結(jié)果出來(lái)了,我再算本位的結(jié)果
但是現(xiàn)在的方法是,不管你低位進(jìn)位的結(jié)果,反正不是0就是1
所以我兩個(gè)都先算出來(lái),然后等你進(jìn)位的結(jié)果出來(lái)了,再選擇一個(gè)輸出,實(shí)現(xiàn)了低延遲)
但是這樣子的線路的延遲還是很高,達(dá)到了38
通過(guò)檢查發(fā)現(xiàn)延遲主要是在進(jìn)位的控制線上

可以發(fā)現(xiàn)平均每算一位數(shù)值,延遲增加4
而這個(gè)+4來(lái)自一個(gè)非門+2和一個(gè)開關(guān)+2
開關(guān)肯定不能去掉,因?yàn)槭且脕?lái)做控制的
所以為了將延遲壓下去,只能對(duì)非門動(dòng)手腳了
分析一下,非門的功能是拿來(lái)將低位的進(jìn)位進(jìn)行分選
然后分別選擇我的輸出
但是如果我能同時(shí)得到兩條控制線路,分別是0和1那不就行了?
也就是要么左0右1或者左1右0,這樣子也可以做到選擇的效果
那么如何不用非門來(lái)做到這個(gè)效果呢
檢查一下進(jìn)位線是怎么來(lái)的
是對(duì)兩個(gè)AND門進(jìn)行OR
也就是檢查進(jìn)來(lái)的三個(gè)數(shù)字當(dāng)中是不是有兩個(gè)以上,然后選擇要不要進(jìn)位
這時(shí)我驚喜的發(fā)現(xiàn),有一個(gè)門叫NOR
它的輸出跟OR門剛好相反,也就是NOR跟OR接一個(gè)N門完全等效
但是它只有+2延遲
也就是說(shuō)如果我多造一個(gè)NOR門在這里進(jìn)行進(jìn)位選擇
就可以做到不增加延遲但是達(dá)到了用N門進(jìn)行選擇的效果!
于是我設(shè)計(jì)出了這個(gè)單體線路

8位全加器3.0

全線路圖:

8位全加器3.0
最終門數(shù)量177總延遲24
效果不錯(cuò),但是我的能力到這里就差不多了(
我已經(jīng)很滿意了
