計(jì)算機(jī)用二進(jìn)制存儲(chǔ)數(shù)字的目的是為了計(jì)算,而計(jì)算的過(guò)程是由“算術(shù)邏輯單元”來(lái)完成的。
那什么是算術(shù)邏輯單元?
算術(shù)邏輯單元(Arithmetic and Logic Unit)簡(jiǎn)稱ALU,就是負(fù)責(zé)實(shí)現(xiàn)計(jì)算機(jī)里的多組算術(shù)運(yùn)算和邏輯運(yùn)算的組合邏輯電路。
看看上面這個(gè)實(shí)物,圖片中是最著名的ALU——英特爾74181,1970年發(fā)布,當(dāng)時(shí)它是第一個(gè)完全被封裝在單個(gè)芯片里的完整ALU,對(duì)人們來(lái)說(shuō)這是一個(gè)驚人的工程。
今天,讓我們一起用布爾邏輯門(mén)來(lái)構(gòu)建一個(gè)簡(jiǎn)單的與74181功能相同的ALU電路吧。
在構(gòu)建ALU之前,我們要知道ALU電路包含2個(gè)單元,一個(gè)是算術(shù)單元和一個(gè)是邏輯單元。
我們先從算術(shù)單元開(kāi)始,算術(shù)單元負(fù)責(zé)計(jì)算機(jī)中所有的數(shù)字操作,比如加減法,當(dāng)然它還會(huì)做一些其他簡(jiǎn)單的事,比如給某個(gè)數(shù)字加1,這叫增量運(yùn)算。
在算術(shù)單元中,我們會(huì)用到AND,OR,NOT和XOR邏輯門(mén),最簡(jiǎn)單的加法電路,就是有2個(gè)二進(jìn)制的輸入:A和B,還有1個(gè)就是輸出,即兩個(gè)二進(jìn)制數(shù)字的和。
假設(shè)A和B都是只有一個(gè)bit,即0或1,那A和B的運(yùn)算就只有下列四種可能的組合:
0+0=0
1+0=1
0+1=1
1+1=10
提醒一下,在二進(jìn)制里,1代表true,0代表false,所以這組輸入和輸出的前三種可能與XOR門(mén)的邏輯關(guān)系是一樣。
第四中輸入組合,顯然1+1≠2,因?yàn)樵诙M(jìn)制里是沒(méi)有2的,所以結(jié)果是0,將1進(jìn)位到下一位,和為二進(jìn)制的“10”,對(duì)于XOR門(mén)的輸出,只對(duì)了一部分,即1加1,輸出0,這個(gè)時(shí)候,我們只需要一根額外的線來(lái)代表進(jìn)位,即只有當(dāng)輸入是1和1時(shí),進(jìn)位才是“true”。
針對(duì)上面出現(xiàn)的問(wèn)題,我們可以把AND門(mén)加到電路中,即當(dāng)兩個(gè)輸入都為“true”時(shí),輸出才為“true”,這樣就組成了“半加器”電路。
如果你想處理大于1+1的情況,就需要“全加器”(full adder),全加器比半加器復(fù)雜點(diǎn),它有3個(gè)bit的輸入:A、B、C,所以最大可能輸入為:1+1+1,總和1,進(jìn)位1,因此需要兩條輸出線,即進(jìn)位線與總和線。
其實(shí),我們也可以用半加器來(lái)實(shí)現(xiàn)全加器的功能,先用半加器將A和B相加,然后把C輸入到第二個(gè)半加器中,最后用一個(gè)OR門(mén)檢查進(jìn)位是不是true就可以了。
現(xiàn)在,我們可以做一個(gè)兩個(gè)8 Bit進(jìn)行相加的電路,這兩個(gè)8 bit分別為A和B,看下圖:
我們從A和B的第一位開(kāi)始相加,第一位分別稱為A0和B0,因?yàn)橹挥?個(gè)數(shù),所以用一個(gè)半加器就可以,我們將它倆的和稱為Sum0,考慮到A1和B1相加的時(shí)候可能會(huì)有A0和B0相加的進(jìn)位,就會(huì)有3個(gè)數(shù),所以從A1和B1相加開(kāi)始就得用全加器,然后依次類推,搞定8個(gè)bit的相加,這叫 “8位脈動(dòng)進(jìn)位加法器”。
請(qǐng)注意:A7和B7的全加器有“進(jìn)位”輸出,如果它倆相加有輸出進(jìn)位,代表數(shù)字A和B相加,和超過(guò)了8位,這叫“溢出”(overflow)。如果想避免溢出,就得加更多全加器,然后相加16或32位數(shù)字,這就會(huì)讓溢出更難發(fā)生,但缺點(diǎn)是每次進(jìn)位都要一點(diǎn)時(shí)間向前移動(dòng)。
簡(jiǎn)單的ALU沒(méi)有專門(mén)的電路去處理乘法和除法,而是用多次加法實(shí)現(xiàn)乘法運(yùn)算,比如:可以將12加5次來(lái)實(shí)現(xiàn)12乘以5。
當(dāng)然,不用去擔(dān)心我們現(xiàn)在的筆記本和手機(jī),因?yàn)樗麄冇懈玫?a target="_blank">處理器,可以專門(mén)做乘法的算術(shù)單元哦。
關(guān)于算術(shù)單元我們說(shuō)的很多了,現(xiàn)在,我們來(lái)說(shuō)一下ALU的另一半:邏輯單元。邏輯單元執(zhí)行的是邏輯操作,像之前討論過(guò)的AND,OR和NOT操作,當(dāng)然也可以執(zhí)行簡(jiǎn)單的數(shù)值測(cè)試,比如檢查數(shù)字的正負(fù)。
上圖是檢查ALU的輸出是否為0的電路,用了一堆OR門(mén)來(lái)檢查其中一位是否為1,哪怕只有一個(gè)Bit (位)是1,我們就可以肯定那個(gè)數(shù)字肯定不是0,然后用一個(gè)NOT門(mén)取反,所以只有輸入的數(shù)字為0時(shí),輸出才為1。
到此,我們已經(jīng)對(duì)ALU進(jìn)行了一個(gè)高層次的概括,甚至做了幾個(gè)主要組件,比如脈動(dòng)進(jìn)位加法器,雖然只是巧妙的將一大堆邏輯門(mén)連在了一起。我們?cè)倩氐介_(kāi)始時(shí)說(shuō)的ALU,英特爾74181,它只有4位輸入,而我們剛才介紹的是8位輸入,是74181的兩倍哦!
雖然我們沒(méi)有做出ALU實(shí)物,但是我們應(yīng)該已經(jīng)對(duì)ALU有了整體的概念,它的誕生打開(kāi)了通向更強(qiáng)大電腦的大門(mén)。
由于ALU在市面的應(yīng)用越來(lái)越多,工程師們?yōu)榱朔奖悖陀昧艘粋€(gè)看起來(lái)很像大“V”的符號(hào)來(lái)代表它。
一個(gè)4位的ALU需要很多邏輯門(mén),一個(gè)8位的ALU需要的邏輯門(mén)肯定更多,我們工程師肯定不想在這里浪費(fèi)很多時(shí)間,那就出現(xiàn)了一種便于ALU執(zhí)行所需要的操作代碼,這個(gè)后面有機(jī)會(huì)再詳細(xì)介紹給大家。
ALU除了輸出計(jì)算結(jié)果外,還會(huì)輸出一系列標(biāo)志(Flag),這個(gè)標(biāo)志代表特定狀態(tài)的1位(bit)輸出,例如,如果我們相減兩個(gè)數(shù)字,結(jié)果為0,我們的零測(cè)試電路就會(huì)將零標(biāo)志設(shè)為T(mén)rue(1),這在確定兩個(gè)數(shù)字是否相等時(shí)是非常有用的。
當(dāng)然這個(gè)標(biāo)志位也可以用來(lái)判斷數(shù)字的大小和是否出現(xiàn)溢出等,如果使用的ALU越好,它的標(biāo)志也會(huì)更多,但剛說(shuō)的這3個(gè)標(biāo)志是ALU普遍會(huì)用到的。
責(zé)任編輯:pj
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7636瀏覽量
90256 -
加法電路
+關(guān)注
關(guān)注
0文章
10瀏覽量
8267 -
ALU
+關(guān)注
關(guān)注
0文章
34瀏覽量
13284 -
華秋DFM
+關(guān)注
關(guān)注
20文章
3503瀏覽量
5282
發(fā)布評(píng)論請(qǐng)先 登錄
一文講清楚芯片的分類-多個(gè)維度
ANet-ESCU儲(chǔ)能柜邏輯控制單元

Imagination D系列GPU:關(guān)于2D 雙速率紋理處理

解密邏輯單元與CoreScore得分的關(guān)系

MPU微處理器的工作原理
由MOSFET構(gòu)成的芯片邏輯門(mén)的最基本單元CMOS介紹

【「算力芯片 | 高性能 CPU/GPU/NPU 微架構(gòu)分析」閱讀體驗(yàn)】--了解算力芯片CPU
《算力芯片 高性能 CPU/GPU/NPU 微架構(gòu)分析》第1-4章閱讀心得——算力之巔:從基準(zhǔn)測(cè)試到CPU微架構(gòu)的深度探索
51單片機(jī)的主要邏輯功能部件是什么
【「算力芯片 | 高性能 CPU/GPU/NPU 微架構(gòu)分析」閱讀體驗(yàn)】--全書(shū)概覽
微處理器的執(zhí)行單元是什么
使用邏輯和轉(zhuǎn)換優(yōu)化數(shù)字駕駛艙處理單元

評(píng)論