1.33k likes | 2.78k Views
數位邏輯 -使用 Verilog 設計. 第 6 章 組合電路建構區塊 Combinational-Circuit Building Blocks. 目錄. 6.1 多工器 6.2 解碼器 6.3 編碼器 6.4 編碼轉換器 6.5 算術比較電路 6.6 組合電路的 Verilog 程式碼 6.7 總結評論. 6.1 多工器 Multiplexers. 多工器電路有許多資料輸入,一個或多個選擇輸入,以及一個輸出。它將其中一個資料輸入傳遞到輸出,此資料輸入由選擇輸入的值所決定。
E N D
數位邏輯-使用Verilog設計 第6章 組合電路建構區塊 Combinational-Circuit Building Blocks
目錄 • 6.1 多工器 • 6.2 解碼器 • 6.3 編碼器 • 6.4 編碼轉換器 • 6.5 算術比較電路 • 6.6 組合電路的Verilog程式碼 • 6.7 總結評論
6.1 多工器Multiplexers • 多工器電路有許多資料輸入,一個或多個選擇輸入,以及一個輸出。它將其中一個資料輸入傳遞到輸出,此資料輸入由選擇輸入的值所決定。 • 圖6.1為二對一多工器。(a)部分為常用的符號。選擇(select)輸入s選擇w0或w1成為多工器的輸出。多工器的功能性可由圖中(b)部分的真值表來描述。(c)部分為二對一多工器的乘積總和實作,而(d)部分說明如何以傳輸閘建構而成。
圖6.2a為較大的多工器,四個資料輸入w0、w1、w2和w3,兩個選擇輸入s0和s1。如圖中(b)部分的真值表,二位元數值s1 s0選擇其中一個資料輸入作為多工器輸出。四對一多工器的乘積總和實作如圖6.2c所示。它實現下列多工器函數
較大的多工器也可以由小型多工器組成。例如,四對一多工器可以由三個二對一多工器組成,如圖6.3所示。 • 圖6.4是以五個四對一多工器構成十六對一多工器。
範例6.1 • 圖6.5的電路有兩個輸入x1和x2,以及兩個輸出y1和y2。如同圖中的藍線,此電路的函數透過輸入s的控制,允許任一輸入連接到任一輸出。有n個輸入和k個輸出,唯一功能為任一輸入可連接到任一輸出的電路,通常稱為交叉開關(crossbar switch)。有各種尺寸的交叉開關,也就是各種不同的輸入和輸出個數。因為此處有兩個輸入和兩個輸出,所以稱為交叉開關。 • 圖6.5b顯示如何以二對一多工器實作22交叉開關。多工器的選擇輸入由訊號s控制。若s = 0,交叉開關將x1連到y1,將x2連到y2;若s = 1,交叉開關將x1連到y2,將x2連到y1。交叉開關在很多實際應用是相當有用的,連接一組接線到另一組接線,而這些連接樣式會隨時間改變。
範例6.2 • 我們在3.6.5節介紹過場域可程式邏輯閘陣列(FPGA)晶片。圖3.39為小型FPGA,被程式化以實作特定電路。FPGA中的邏輯區塊有兩個輸入,每個繞線通道有四個軌道。將邏輯區塊的輸入或輸出連接到互連接線的每個可程式開關都以表示。我們將圖3.39的一小部分重製於圖6.6a。為了說明清楚,此圖只顯示單一邏輯區塊和連接其輸出的互連接線與開關。 • 圖6.6b為一種實作可程式開關的方法。圖中 (a) 部分的每個都以儲存單元控制的NMOS電晶體實作。這種可程式開關也顯示於圖3.68。我們在3.6.5節簡單介紹過儲存單元,在10.1節會有更詳細的討論。每個單元都儲存單一邏輯值,0或1,且提供此值作為該單元的輸出。每個儲存單元都是由數個電晶體所構成。因此圖中的八個單元使用相當大的晶片面積。所需的儲存單元個數可以用多工器來減少,如圖6.6c所示。
6.1.1 使用多工器的邏輯函數合成Synthesis of Logic Functions Using Multiplexers 圖6.7 使用多工器的邏輯函數合成。
範例6.3 • 圖6.8a為三輸入多數函數的真值表,也顯示如何修改真值表可以用四對一多工器實作此函數。可以選擇三個輸入的任意兩個作為多工器選擇輸入。我們選擇w1和w2作為選擇輸入,產生的電路如圖6.8b所示。
範例6.4 • 圖6.9a顯示如何以二對一多工器實作函數。當w1 = 0,f值等於w2和w3的XOR,當w1 = 1,f 值等於w2和w3的XNOR。電路左邊的多工器產生,使用圖6.7的結果,而右邊多工器以w1值選擇或其互補值。注意,我們可以直接得到此電路,只要函數寫成 。 • 圖6.10是以四對一多工器實作三輸入XOR函數。以w1和w2作為選擇輸入,可以產生圖中的電路。
6.1.2 2 以向農展開式合成多工器 Multiplexer Synthesis Using Shannon’s Expansion • 圖6.8到6.10說明如何以真值表使用多工器實作邏輯函數。 圖6.8 使用四對一多工器的三輸入多數函數實作。
此實作可由下列的代數運算得到。圖6.11a的函數可表示成乘積總和形式此實作可由下列的代數運算得到。圖6.11a的函數可表示成乘積總和形式 • 可以經由運算變成 • 對應於圖6.11b的電路。
向農展開式定理Shannon’s Expansion Theorem • 任何布林函數f(w1,…,wn)都可以寫成 • 此展開式可以任意n個變數完成。 • 為說明其使用,我們可以將此定理應用在三輸入多數函數,寫成 • 以w1展開此函數,得到 • 即為上面得到的式子。
對三輸入XOR函數而言, • 產生圖6.9b的電路。 • 在向農展開式定理中,f (0,w2,…,wn)稱為f 對 的共因子(cofactor),表示為 。類似地, f (0,w2,…,wn)稱為f 對w1的共因子,表示為 。因此可以寫成 • 通常來說,若對變數wi作展開,則fwi表示f (w1,…,wi-1,1,wi+1,…,wn)和
範例6.5 • 對於函數 ,以分解產生 • 使用w2而不是w1,得到 • 最後,使用w3得到 • 使用w1和w2產生的結果成本相同,但此式使用w3的成本較低。
向農展開式定理可以使用超過一個變數。例如,以w1和w2展開函數得到向農展開式定理可以使用超過一個變數。例如,以w1和w2展開函數得到 • 此展開式可以四對一多工器實作。若向農展開式定理使用全部n個變數,則結果為標準的乘積總和形式,如2.6.1節所定義的。
範例6.6 • 假設我們要實作下列函數 • 使用一個二對一多工器和任何其他邏輯閘。向農展開式定理使用為 • 對應的電路如圖6.12a所示。假設我們現在想改用一個四對一多工器。使用進一步分解得到 • 此電路如圖6.12b所示。
範例6.7 • 考慮三輸入多數函數 • 我們希望只用二對一多工器實作此函數。向農展開式使用w1產生 • 令g=w2w3和h=w2+w3。使用w2展開g和h,得到 • 對應的電路如圖6.13所示,等效於使用圖6.8真值表得到的四對一多工器電路。
範例6.8 • 我們在3.6.5節說過,多數的FPGA使用對照表作為邏輯區塊。假設有個FPGA,其中每個邏輯區塊都是三輸入對照表(3-LUT)。因為它儲存真值表,所以3-LUT可以實現任何三個變數的邏輯函數。使用向農展開式,任何四變數函數可以最多三個3-LUT來實現。考慮函數 • 以w1展開得到
以三個3-LUT的電路實作此式如圖6.14a所示。使用w2而不是w1分解此函數,得到以三個3-LUT的電路實作此式如圖6.14a所示。使用w2而不是w1分解此函數,得到 • 觀察發現 ,因此只需要兩個3-LUT,如圖6.14b所示。右邊的LUT實作二變數函數 。 • 因為可以多工器實作任何邏輯函數,現有的一般用途晶片都包含多工器作為基本邏輯資源。Actel公司[2]和QuickLogic公司都提供由多工器排列組成邏輯區塊的FPGA。德州儀器也提供包含多工器邏輯區塊的邏輯閘陣列晶片。
6.2 解碼器Decoders • 解碼器電路是用來將編碼資訊解碼。 • 圖6.15的二進位解碼器羅n個輸入和2n個輸出的邏輯電路。 • 一次只有一個位元被設為1的n位元二進位編碼稱為單一熱門編碼(one-hot encoded),表示被設為1的位元很『熱門』。 • 圖6.16為二對四解碼器。 • 圖6.17是以兩個二對四解碼器建構三對八解碼器。 • 圖6.18是以五個二對四解碼器建構四對十六解碼器。因為其架構為樹狀,這種電路稱為解碼器樹(decoder tree)。
圖6.17 以兩個二對四解碼器建構三對八解碼器。
範例6.9 • 解碼器在許多實際用途上相當有用。圖6.2c為四對一多工器的乘積總和實作,需要AND邏輯閘將輸入s1和s0的四個不同估值分開。因為解碼器對其輸入作估值,所以可用來建構多工器如圖6.19所示。此例中解碼器的致能訊號是不需要的,被設為1。解碼器的四個輸入代表選擇輸入的四個估值。
範例6.10 • 我們在圖3.59說明過如何以兩個三態緩衝器建構二對一多工器。這觀念可以應用在任何尺寸的多工器和解碼器。範例如圖6.20所示。解碼器對每個選擇線的估值致能其中一個三態緩衝器,而此三態緩衝器以選定的資料輸入驅動輸出f。我們已經知道實作多工器的許多方法。根據晶片上可用的資源,可以選擇乘積總和形式、傳輸閘或三態緩衝器。例如,大多數使用對照表作為邏輯區塊的FPGA不包含三態緩衝器。因此必須以對照表以乘積總和形式實作多工器。
圖6.20 以解碼器和三態緩衝器建構四對一多工器。
6.2.1 解多工器 Demultiplexers • 多工器電路的目的是在選擇輸入的控制下,將n個資料輸入多工(multiplex)到單一資料輸出。執行相反函數的電路稱為解多工器(demultiplexer),也就是將單一資料輸入放到多個資料輸出。
範例6.11 • 解碼器最重要的應用之一為記憶體區塊,用來儲存資訊。這些記憶體區塊包含於數位系統,例如電腦,必須大量儲存電子化資訊。一種記憶體區塊稱為唯讀記憶體(read-only memory, ROM)。ROM是由一組儲存單元所組成,每個單元都永久儲存單一邏輯值,0或1。圖6.21為ROM區塊的例子。儲存單元排列成列,每列有n個單元。每一列儲存n位元的資訊。每一列在ROM的位置都由其位址(address) 表示。此圖中ROM最上方的列位址為0,最下方的列位址為。透過選擇線到,可以存取儲存在列裡的資訊。如圖所示,m個輸入和2m個輸出的解碼器是用來產生選擇線的訊號。因為解碼器的輸入選擇了特定的位址(列),稱為位址線(address line)。儲存在列裡的資訊表現在ROM的資料輸出dn-1,…,d0,稱為資料線(data line)。圖6.21顯示每個資料線都有對應的三態緩衝器,被ROM輸入所致能,其名稱為Read。若要從ROM存取或讀資料,必須將要求列的位址放在位址線,且將Read設為1。
6.3 編碼器Encoders • 編碼器的功能和解碼器相反,將給定資訊編碼成更精簡的形式。
6.3.1 二進位編碼器 Binary Encoders • 二進位編碼器(binary encoder) 將資訊從2n個輸入編碼成n位元,如圖6.22所示。 • 只有一個輸入值為1,輸出則為該輸入的二進位數值。四對二編碼器的真值表如圖6.23a所示。 • 因此這些輸出可由圖6.23b的電路產生。
6.3.2 優先權編碼器Priority Encoders • 在優先權編碼器(priority encoder) 中每個輸入都有其優先等級。 • 只有當相同索引的輸入wk為1時,每個訊號ik才等於1,代表最高優先權的輸入為1。i0,…,i3的邏輯表示式為
使用中間訊號,優先權編碼器電路的其他部分就和圖6.23的二進位編碼器架構一樣,即為使用中間訊號,優先權編碼器電路的其他部分就和圖6.23的二進位編碼器架構一樣,即為 • 輸出z為