- 計算機系統解密:從理解計算機到編寫高效代碼
- (美)喬納森·E.斯坦哈特
- 1910字
- 2021-09-27 16:57:02
2.5 構建更復雜的電路
門的引入極大地簡化了硬件設計過程,人們不再需要從分立元件設計一切。例如,原來制造一個雙輸入的NAND門需要大約10個元件,而7400系列電路將4個雙輸入NAND門包含在一個封裝中,稱為小規模集成(Small-Scale Integration, SSI)部件,因此一個封裝可以替代40個元件。
硬件設計人員可以用SSI門構建任何東西,就像使用分立元件那樣。這使得成本變低、硬件內部更緊湊。而且由于某些門的組合被大量使用,因此引入了包含這些組合的中等規模集成(Medium-Scale Integration, MSI)部件,進一步減少了所需部件的數量。后來又出現了大規模集成(Large-Scale Integration, LSI)、超大規模集成(Very Large-Scale Integration, VLSI)等。
下面的內容將介紹一些門的組合。但這不是終點,我們將使用這些更高級別的功能部件制造出更高級別的部件,類似于用較小的程序構建復雜的計算機程序。
2.5.1 制作加法器
我們來構建一個二進制補碼加法器。盡管很可能永遠不需要設計這樣的加法器,但這個例子可以讓你明白怎么巧妙地操作邏輯來提高硬件和軟件的性能。
我們在第1章中提到,2個位的和是這兩個位的XOR結果,進位是這些位的AND結果。圖2-39為門的實現。

圖2-39 半加器
可以看到XOR門實現了和運算,AND門實現了進位功能。圖2-39中門的實現之所以被稱為半加器,是因為缺少了一些東西。兩個位的相加沒問題,但有第三個輸入我們才可以進位。這意味著得出每個位的和需要兩個加法器。至少有兩個輸入為1,才可以進位。表2-1是全加器的真值表。
表2-1 全加器真值表

構建全加器比較復雜,其結構如圖2-40所示。

圖2-40 全加器
圖2-41所示的行波進位加法器內部包含很多門。但我們可以使用全加器來構建超過一位的加法器。圖2-41展示了行波進位加法器的構造圖。

圖2-41 行波進位加法器
行波進位加法器得名于從一個位進位到下一個位的方式。兩位之間進位的方式就像波浪一樣。可以看到每個位都有兩個門發生延遲,如果構建一個32位或64位的加法器,延遲會增加很多。我們可以用一個超前進位加法器來消除這些延遲,我們可以通過一些基本的基礎運算來弄清楚超前進位加法器的工作原理。
從圖2-40可以看出,全加器對位i的進位會被輸入位i+1的進位:
Ci+1 = (AiANDBi)OR(AiANDCi)OR(BiANDCi)
最大的癥結在于,我們需要Ci才能得到Ci+1,這一步會產生波紋。從Ci+2的公式中可以看出這點:
Ci+2 = (Ai+1ANDBi+1)OR(Ai+1ANDCi+1)OR(Bi+1ANDCi+1)
將第一個方程代入第二個方程可以消除這種依賴性:
Ci+2 = (Ai+1ANDBi+1)
OR(Ai+1AND((AiANDBi)OR(AiANDCi)OR(BiANDCi)))
OR(Bi+1AND((AiANDBi)OR(AiANDCi)OR(BiANDCi)))
請注意,雖然多了很多AND和OR,但仍然只有兩個門的傳播延遲。Cn只依賴于A和B輸入,所以進位時間及加法時間并不取決于位數。Cn由Cn–1生成,隨著n的增加,Cn–1使用的門的數量越來越多。雖然門成本低廉,但也會消耗功率,所以在速度和功耗之間得有權衡。
2.5.2 制作解碼器
在1.5節中,我們用位構建編碼數字。解碼器的作用正好相反,它將編碼后的數字還原成一組獨立的位。解碼器的一個應用是驅動顯示器。你可能在老科幻電影中看到過數碼管(如圖2-42所示),它們是一種非常酷的復古數字顯示器。數碼管本質上是一組霓虹燈,每個數字都對應一個霓虹燈。由于每根發光的線都有自己的連接,所以需要我們把一個4位的二進制數變成10個獨立的輸出中的一個。

圖2-42 數碼管
回想一下,八進制表示法將8個不同的數值編碼為3位的數字。圖2-43顯示了一個3:8解碼器,它將一個八進制的值轉化為到一組獨立的位。

圖2-43 3:8解碼器
當輸入為000時,Y0輸出為真;當輸入為001,Y1輸出為真,以此類推。解碼器是以輸入和輸出的數量來命名的,圖2-43中的例子有3個輸入和8個輸出,所以它是一個3:8解碼器。這種解碼器通常繪制成圖2-44所示的樣子。

圖2-44 3:8解碼器原理圖符號
2.5.3 制作多路輸出選擇器
你可以使用解碼器來構建多路輸出選擇器(demultiplexer),通常簡稱為dmux。它允許一個輸入定向到多個輸出中的一個輸出,就像用分院帽把霍格沃茨的學生分到不同的學院一樣。多路輸出選擇器按圖2-45所示的方式將一個解碼器與一些門結合起來。

圖2-45 1:4多路輸出選擇器
多路輸出選擇器根據解碼器的輸入S0-1使輸入信號D與四個輸出端Y0-3中的一個對應。圖2-46為多路輸出選擇器的原理圖符號。

圖2-46 多路輸出選擇器原理圖符號
2.5.4 制作選擇器
從多個輸入中選擇一個輸入是另一個常用功能。例如,一個加法器可能有幾個操作數源,我們需要從中選擇一個。通過使用門,我們可以創建稱為選擇器或多路選擇器(multiplexer, mux)的功能塊。
選擇器將一個解碼器與一些附加門結合了起來,如圖2-47所示。

圖2-47 4:1選擇器
選擇器的使用頻率也很高,它有自己的原理圖符號,圖2-48所示的是4:1選擇器的符號,幾乎是解碼器符號的反轉。

圖2-48 4:1選擇器原理圖符號
你可能不知道,其實你對選擇器還挺熟悉的。你可能見過轉盤上標有“關閉”“吐司(烘烤)”“面包(烘焙)”和“肉或魚(烤、炙)”的烤箱,那就是有四個位置的選擇器開關。烤箱有兩個加熱元件,一個在頂部,另一個在底部。烤箱邏輯工作原理如表2-2所示。
表2-2 烤箱工作邏輯

我們可以用組合在一起的4:1選擇器實現這個邏輯,如圖2-49所示。

圖2-49 烤箱選擇器開關
- Dynamics 365 for Finance and Operations Development Cookbook(Fourth Edition)
- 玩轉Scratch少兒趣味編程
- Learning Linux Binary Analysis
- Blockly創意趣味編程
- Learning Apache Mahout Classification
- Getting Started with NativeScript
- 精通MATLAB(第3版)
- PySpark Cookbook
- HTML5 APP開發從入門到精通(微課精編版)
- Python程序設計與算法基礎教程(第2版)(微課版)
- 深度探索Go語言:對象模型與runtime的原理特性及應用
- Java程序設計與項目案例教程
- 奔跑吧 Linux內核
- Continuous Delivery and DevOps:A Quickstart Guide Second Edition
- Beginning C# 7 Hands-On:The Core Language