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

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

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

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

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

評論