【導讀】多路選擇器是數據選擇器的別稱(chēng)。在多路數據傳送過(guò)程中,能夠根據需要將其中任意一路選出來(lái)的電路,叫做數據選擇器,也稱(chēng)多路選擇器或多路開(kāi)關(guān)。
什么是多路選擇器
多路選擇器是數據選擇器的別稱(chēng)。在多路數據傳送過(guò)程中,能夠根據需要將其中任意一路選出來(lái)的電路,叫做數據選擇器,也稱(chēng)多路選擇器或多路開(kāi)關(guān)。
FPGA中多路選擇器結構
典型的FPGA器件主要包含3類(lèi)基本資源:可編程邏輯塊(configurablelogicblock,CLB)、布線(xiàn)資源和可編程輸入/輸出模塊??删幊踢壿媺K四周被預制的布線(xiàn)資源通道包圍,可編程輸入/輸出模塊分布在FPGA四周,除了上述3種資源以外,通常在FPGA中還包含塊RAM、乘法器等可選資源。
在FPGA各種資源中,可編程邏輯塊是實(shí)現用戶(hù)功能的基本單元,每個(gè)可編程邏輯塊包含1個(gè)互連開(kāi)關(guān)矩陣和4個(gè)SLICEs,其中每個(gè)SLICE包括2個(gè)查找表(Look-Up-Table,LUT)、2個(gè)觸發(fā)器和一些多路選擇器?;ミB開(kāi)關(guān)矩陣主要由不同長(cháng)度導線(xiàn)和多個(gè)布線(xiàn)開(kāi)關(guān)組成,典型的布線(xiàn)開(kāi)關(guān)結構如圖1所示。

由圖1可見(jiàn):每個(gè)布線(xiàn)開(kāi)關(guān)由多路選擇器、緩沖器和一些可編程的SRAM單元構成。其中多路選擇器是連接各布線(xiàn)軌道和可編程邏輯塊的橋梁,其結構對FPGA的性能和功耗都有較大的影響。根據多路選擇器所驅動(dòng)的導線(xiàn)長(cháng)度不同,FPGA中多路選擇器的規模從4選1到30選1不等。圖2所示為16選1的多路選擇器晶體管級電路結構。

多路選擇器的左邊是 16 條輸入線(xiàn),用于連接布線(xiàn)軌道或可編程邏輯塊等資源,S1~S6 代表 6 個(gè)可編程SRAM 單元,通過(guò)配置 SRAM 單元的內容可以從 16條輸入線(xiàn)中選出 1 條作為有效輸入端,例如,當 S1~S6存儲單元的存儲值為“000100”時(shí),輸入線(xiàn) I3被選擇中,信號所經(jīng)過(guò)的有效路徑如圖 2 中虛線(xiàn)所示。多路選擇器的主體部分是傳輸晶體管,由于 NMOS 晶體管載流子的遷移效率高,電路速度快,因此,多路選擇器中的傳輸晶體管均采用 NMOS 晶體管實(shí)現。
多路選擇器工作原理
常用的多路選擇器有4選1、8選1、16選1等多種類(lèi)型。下面以4選1數據選擇器為例介紹數據選擇器的工作原理。根據前面介紹的數據選擇器的功能,可以列出4選1數據選擇器的邏輯功能表,如表5-7-1所示。其中D0~D3為數據輸入端,A0、A1為數據選擇端。

由邏輯功能表可以寫(xiě)出輸出與輸入之間的表達式為

由邏輯表達式畫(huà)出4選1數據選擇器邏輯電路2所示。

74LS153是一種集成的雙4選1數據選擇器邏輯器件。圖3所示為74LS153的邏輯電路圖和框圖。

由圖3(a)可知,74LS153的邏輯電路中包含兩個(gè)4選1數據選擇器,它們的數據輸入端分別為D10、D11、D12、D13和D20、D21、D22、D23,數據輸出端分別為Y1和Y2。它們有公共的地址選擇輸入端A0、A1。除此之外,還各自有有一個(gè)使能控制端

由圖3(a)可以寫(xiě)出輸入與輸出之間的邏輯函數式為

由式(2)可以看出,只有當使能控制端

時(shí),數據選擇器才能正常工作,否則數據輸出端鎖定在低電平。故使能控制端為低電平有效。
74LS153的邏輯功能表如表2所示。
表2 74LS153的邏輯功能表

多路選擇器的應用
(1)多路選擇器的擴展應用
可以用多片少數據輸入的數據選擇器設計多數據輸入的多路選擇器。
例1:用74LS153設計一個(gè)8選1的數據選擇器。
解:74LS153是一個(gè)雙4選1多路選擇器。有兩個(gè)公用的地址選擇輸入端,8個(gè)數據輸入端。8選1數據選擇器需要3個(gè)地址輸入端(23=8),因此需要用使能控制端來(lái)補充地址輸入端的不足。用雙4選1數據選擇器芯片74LS153設計的8選1數據選擇器的電路如圖4所示。

當A2=0時(shí),上邊的4選1數據選擇器工作,根據地址輸入端A0、A1的狀態(tài),輸出端Y1選擇輸出D0~D3,此時(shí)Y2=0,故Y=Y1;當A2=1時(shí),下邊的4選1數據選擇器工作,根據地址輸入端A0、A1的狀態(tài),輸出端Y2選擇輸出D4~D7,此時(shí)Y1=0,故Y=Y2。邏輯函數式為

也可以添加使能控制端對所接成的8選1數據選擇器的工作狀態(tài)進(jìn)行控制。添加使能控制端的8選1數據選擇器的電路如圖5所示。

由圖5可知,當=0時(shí),8選1數據選擇器正常工作;當=1時(shí),8選1數據選擇器的輸出被鎖定在低電平。
(2)用多路選擇器設計組合邏輯電路
由表2可知,具有兩位地址輸入A0、A1的4選1數據選擇器,當使能控制端=0時(shí),輸出與輸入之間的邏輯關(guān)系式為

若將A0、A1作為兩個(gè)輸入變量,同時(shí)令D0~D3為第三個(gè)變量的適當狀態(tài)(包括原變量、反變量、0和1),就可以用4選1數據選擇器實(shí)現任何形式的三變量組合邏輯函數。
同理,用由n位地址輸入端的多路選擇器可以實(shí)現任何形式的變量數不大于n+1的組合邏輯函數。
例2:用4選1數據選擇器實(shí)現以下組合邏輯函數:

解:將式(4)化成與式(5)相對應的形式:

將式(6)與式(4)比較可知,只要令數據選擇器的數據輸入端為

則多路選擇器的輸出就是所要表達的組合邏輯函數。
多路選擇器的設計實(shí)現
設計一個(gè)二位4路選擇器,由于選擇器使用條件觸發(fā)的方法對應真值表進(jìn)行匹配輸出與輸入,因此可以聯(lián)想到在C程序設計中的條件語(yǔ)句“If”和“Case”兩種,那么這兩種設計從硬件的角度出發(fā)有什么不同呢?
代碼如下:

為了區別兩種設計的不同,可以查看ISE提供的綜合報告,操作如下:

綜合報告對比:

使用Case條件語(yǔ)句 使用IF條件語(yǔ)句
由綜合報告查看可知,if語(yǔ)句運用的元器件多于case語(yǔ)句運用的元器件,同時(shí),if語(yǔ)句中每一個(gè)分支之間具有優(yōu)先級(串行),得到類(lèi)似級聯(lián)的結構;而case語(yǔ)句所有分支處于同一優(yōu)先級(并行),綜合可以得到一個(gè)多路選擇器。因此,對于設計多路選擇器而言,if語(yǔ)句所造成的延時(shí)往往比case語(yǔ)句的大,所以對于多路選擇器而言,運用case語(yǔ)句的效果會(huì )更好。
Case語(yǔ)句下可能出現鎖存器。注釋case條件下的case語(yǔ)句塊的某一行可以得到不完整的case語(yǔ)句下的2位四路選擇器。由不完整case語(yǔ)句下的2位四路選擇器可知:由于case語(yǔ)句所有分支處于同一優(yōu)先級,所以當條件不完整時(shí),對于處理結果,它不取決于語(yǔ)句的先后順序,只取決于待處理信號,而處理結果為與待處理信號相差1’b1的信號的處理結果,在這一條件下相當于與待處理信號相差1’b1的信號的處理結果得到了鎖存,鎖存器因此產(chǎn)生。
對與鎖存器而言,鎖存器在待處理信號存在Glitch的情況下,可能會(huì )對Glitch產(chǎn)生鎖存,從而導致鎖存出現嚴重錯誤,是目標信號處理結果與預期目的產(chǎn)生極大的偏差,因此鎖存器存在不穩定因素,所以在使用鎖存器時(shí),要牢記優(yōu)先消除待處理信號的Glitch。
測試文件:
initial begin
// Initialize Inputs
d0 = 0;
d1 = 1;
d2 = 2;
d3 = 3;
select = 0;
#100;
select = 1;
#100;
select = 2;
#100;
select = 3;
#100;
// Add stimulus here
end
仿真結果:

推薦閱讀: