tft每日頭條

 > 生活

 > 邏輯存儲單元

邏輯存儲單元

生活 更新时间:2025-01-09 22:58:56

1)引子

上一集,我們讨論了如何用二進制表示數字。像 00101010 是十進制的 42。表示和存儲數字是計算機的一項重要功能,但真正的目标是以結構化和有目的的方式計算或操作數字,例如将兩個數字相加。這些操作由計算機的算術和邏輯單元處理,但大多數人用它的簡寫來稱呼它:ALU。 ALU 是計算機的數學大腦。當您了解 ALU 的設計和功能時,您就會了解現代計算機的基本組成部分。它是在計算機中完成所有計算的東西。所以基本上,一切都使用它。

不過,首先,看看這個美麗。這可能是有史以來最著名的 ALU:英特爾 74181。當它于 1970 年發布時,它是第一個完全安裝在單個芯片中的完整 ALU,這在當時是一項巨大的工程壯舉。所以今天我們将利用上周學到的那些出色的邏輯門來構建一個簡單的 ALU 電路,其功能與 74181 的大部分功能相同。在接下來的幾集中,我們将使用它從頭開始構建計算機,所以它會變得有點複雜,但我認為你們可以搞定。

(2)ALU概述

ALU 實際上是兩個單元合二為一。有一個算術單元和一個邏輯單元。讓我們從算術單元開始,它負責處理計算機中的所有數值運算,例如加法和減法。它還做一些其他簡單的事情,比如給一個數加 1,這被稱為增量操作,但我們稍後會讨論這些。

今天我們将專注于一切的根本,即運算的精華,它構成計算機所做的幾乎所有其他事情:将兩個數字相加。我們可以完全用單個晶體管來構建這個電路,但這會很快變得混亂。因此,正如我們在第三集中讨論的那樣,我們可以使用更高級别的抽象,并用邏輯門構建我們的組件。 AND、OR、NOT 和 XOR 門。

(3)從邏輯門到半加器

我們可以構建的最簡單的加法電路将兩個二進制數字相加。因此,我們有兩個輸入,A 和 B,以及一個輸出,即這兩位數字的和。澄清一下,A、B 和輸出都是單個位。隻有四種可能的輸入組合。前三個是:

0 0 = 0

1 0 = 1

0 1 = 1

請記住,在二進制中,1 與真相同,0 與假相同。所以這組輸入與 XOR 門的布爾邏輯完全匹配,我們可以将它用作我們的 1 位加法器。但是第四個輸入組合 1 1 是一個特例。 1 1 顯然是2,但二進制中沒有 2 。所以當我們談到上一集時,結果是 0,而 1 被帶到下一列。所以總和實際上是二進制的 10。現在,我們的 XOR 門的輸出是部分正确的。 1 1 輸出 0,但我們需要一個額外的輸出線用于該進位。進位位僅在輸入為 1 和 1 時為真,因為這是結果大于一位可以存儲的唯一時間。方便的是,我們有一個門:一個與門,隻有當兩個輸入都為真時才為真。所以我們也會把它添加到我們的電路中。就是這樣!該電路稱為半加器。沒那麼複雜,隻有兩個邏輯門。但是讓我們抽象出這種級别的細節,并将我們幾乎鑄造的半加器封裝為它自己的組件,具有兩個輸入,位 A 和 B,以及兩個輸出,SUM 和 CARRY 位。

這将我們帶到了另一個抽象層次......我覺得我已經說了很多,我想知道這是否會成為梗?

邏輯存儲單元(ALU數字邏輯單元)1

從邏輯門到半加器(因為隻有後一級進位的輸出,沒有前一級進位的輸入,稱之為半)

(4)從半加器到全加器

無論如何,如果你想加 1 1 以上(比如5 3,101 011),我們将需要一個全加器。那個半加法器給我們留下了一個進位作為輸出,這意味着當我們在多列加法中移動到下一列時,之後的每一列,我們将不得不将三個位加在一起,而不是兩個。

全位加法器更複雜。它需要三個位作為輸入,A、B 和 C,所以最大可能的輸入是 1 1 1,等于 1 進位 1。所以我們仍然隻需要兩條輸出線,SUM 和 CARRY。

我們可以使用半加器構建一個全加器。為此,我們使用半加器将 A B 相加,就像以前一樣,然後将結果提供給第二個半加器并将 C 輸入。最後,我們需要一個或門來檢查是否有一個進位位為真。而已!我們剛剛做了一個全加器!同樣,我們可以提升一個抽象級别,并将這個全加器包裝為它自己的組件。它需要三個輸入,将它們相加,然後輸出 SUM 和 CARRY(如果有)。

邏輯存儲單元(ALU數字邏輯單元)2

A B後,在本位的結果和C-in繼續相加,得到本位的Sum;進位,要麼是A B直接造成的,要麼是A B沒有進位但是A B的本位結果和C-in相加後進位

(5)從全加器到加法器

有了我們的新組件,我們現在可以構建一個電路,該電路需要兩個 8 位數字,我們稱它們為 A 和 B,然後将它們相加。讓我們從 A 和 B 的第一個位開始,我們将其稱為 A0 和 B0。此時,沒有要處理的進位位,因為這是我們的第一個加法。所以我們可以使用我們的半加器将這兩個位加在一起。輸出為 SUM0。現在我們要将 A1 和 B1 相加。之前的A0和B0相加可能有進位,所以這次我們需要使用一個也輸入進位位的全加器。我們将此結果輸出為 SUM1。然後,我們從這個全加器中取出任何進位,并将其運行到下一個處理 A2 和 B2 的全加器中。我們隻是在一個大鍊中繼續這樣做,所以所有 8 位都已添加。注意進位位是如何向前波動到每個後續加法器的。因此,這稱為 8 位紋波進位加法器。注意我們最後一個全加器是如何進行進位的。如果第 9 位有進位,則表示兩個數之和太大,無​法放入 8 位。這稱為溢出。通常,當加法的結果太大而無法用您使用的位數表示時,就會發生溢出。這通常會導緻錯誤和意外行為。

邏輯存儲單元(ALU數字邏輯單元)3

全加器組成加法器

衆所周知,最初的吃豆人街機遊戲使用 8 位來跟蹤您所處的級别。這意味着,如果您通過第 255 級(8 位中可存儲的最大數字)到達第 256 級,則 ALU 溢出。這導緻了一系列錯誤和故障,使關卡無與倫比。該錯誤成為最偉大的吃豆人玩家的特權。所以如果我們想避免溢出,我們可以用更多的全加器擴展我們的電路,允許我們添加 16 或 32 位數字。這使得溢出不太可能發生,但代價是更多的門。另一個缺點是每個進位需要一點時間才能向前波動。誠然,時間不多。電子移動得非常快,所以我們談論的是十億分之一秒,但這足以對當今的快速計算機産生影響。出于這個原因,現代計算機使用一種略有不同的加法電路,稱為進位前瞻加法器,它速度更快,但最終做的是完全相同的事情:将二進制數相加。

(6)加法器可以完成加、減、乘、除

ALU 的算術單元也有其他數學運算的電路,一般來說,這八種運算總是被支持的(加法、帶進位加法、減法、帶借位的減法、取相反數、加1、減1)。和我們的加法器一樣,這些其他操作是由單獨的邏輯門構建的。有趣的是,您可能已經注意到沒有乘法和除法運算。那是因為簡單的 ALU 沒有用于此的電路,而隻是執行一系列加法。假設您想将 12 乘以 5。這與将 12 加 5 次是一樣的。所以需要五次通過 ALU 來完成這個乘法。很多簡單的處理器,比如恒溫器、電視遙控器和微波爐中的處理器,就是這樣做的。它很慢,但它完成了工作。然而,更高級的處理器,如筆記本電腦或智能手機中的處理器,具有帶有專用乘法電路的算術單元,正如您所料,該電路比加法更複雜。這并不神奇,它隻需要更多的邏輯門,這就是為什麼較便宜的處理器沒有此功能的原因。

【擴充】減法是将減數進行補碼運算(取反後加1)後,進入加法器。補碼及其運算,在前面第4節有介紹。除法用減法實現。

(7)ALU的邏輯單元 (測試0電路)

好的,讓我們繼續讨論 ALU 的另一半,即邏輯單元。邏輯單元執行的不是算術運算,而是我們之前讨論過的邏輯運算,例如 AND、OR 和 NOT。它還執行簡單的數值測試,例如檢查數字是否為負數。例如,這是一個測試 ALU 的輸出是否為零的電路。它使用一堆 OR 門來查看是否有任何位為 1。即使單個位為 1,我們也知道該數字不能為零,然後我們使用最終的非門來翻轉此輸入,因此僅當輸入數為 0 時,輸出才為 1。

(8)ALU的總結(74181的描述)

以上是對 ALU 構成的高級概述。我們甚至從頭開始構建了幾個主要組件,比如我們的波紋加法器,你會看到它隻是一大堆以巧妙方式連接的邏輯門。這讓我們回到了你在劇集開始時非常欣賞的 ALU,英特爾 74181。與我們今天制造的 8 位 ALU 不同,74181 隻能處理 4 位輸入,這意味着你構建的 ALU 大約是它的兩倍和那個超級有名的一樣好!用你的頭腦!嗯,有點。我們沒有建造整個東西,但你明白了。 74181 使用了大約 70 個邏輯門,它不能進行乘法或除法運算,但它在小型化方面向前邁出了一大步 ,為功能更強大、價格更便宜的計算機打開了大門。這個 4 位 ALU 電路已經很複雜了,但是我們的 8 位 ALU 需要數百個邏輯門才能完全構建,工程師在使用 ALU 時不希望看到所有的複雜性。所以他們想出了一個特殊的符号來把它包起來,看起來像一個大 V。隻是另一個層次的抽象!

邏輯存儲單元(ALU數字邏輯單元)4

74181的電路圖:2個操作數A、B;M用來代表進行數學運算還是邏輯運算;S用來選擇哪一種數學/邏輯運算

邏輯存儲單元(ALU數字邏輯單元)5

74181在M、S、控制下對A、B進行不同的運算

邏輯存儲單元(ALU數字邏輯單元)6

74181的DIP封裝拆解,注意中心的Die

邏輯存儲單元(ALU數字邏輯單元)7

The 74181 die measures 0.1 inches and has a density of about 200 components per one-tenth of an inch,看到的是74181的金屬層

邏輯存儲單元(ALU數字邏輯單元)8

Ken removed the unique metal layer of the SN74181 and showed that the layout of the die largely matches the gate-diagram of the datasheet.

我們的 8 位 ALU 有兩個輸入,A 和 B,每個輸入 8 位。我們還需要一種方法來指定 ALU 應該執行什麼操作,加法或減法。為此,我們使用 4 位操作碼,我們将在後面的章節中詳細讨論這個,但簡而言之,1000 可能是加法命令,而 1100 是減法命令。基本上,操作碼告訴 ALU 執行什麼操作。對輸入 A 和 B 進行該操作的結果是一個 8 位輸出。 ALU 還輸出一系列标志,這些标志是特定狀态和狀态的 1 位輸出。例如,如果我們減去兩個數字并且結果為 0,則我們的 0 測試電路(我們之前制作的電路)将零标志設置為真。如果我們試圖确定兩個數字是否相等,這很有用。如果我們想測試 A 是否小于 B,我們可以使用 ALU 計算 A 減去 B 并查看負标志是否設置為真。如果是,我們就知道 A 比 B 小。最後,我們構建的加法器上的進位也連接了一根電線。所以如果有溢出,我們會知道的。這稱為溢出标志。更高級的 ALU 會有更多的标志,但這三個标志是通用的并且經常使用。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved