數字電路基礎知識——組合邏輯電路(數據選擇器MUX、多路復用器)


轉自:https://blog.csdn.net/vivid117/article/details/100747939

數字電路基礎知識——組合邏輯電路(數據選擇器MUX、也即多路復用器)
本次介紹數據選擇器的相關知識,數據選擇器在電路設計中尤為重要,尤其是對於在Verilog中的if-else的語法即 o = a?b :c 都可以看到有數據選擇器的使用。
介紹數據選擇器的設計原則以及實例:用Verilog描述一個多路復用器,輸入的通道數目N,每一路的位寬為M。
求log以2為低的整數的算法(使用移位寄存器、數據比較器)

一、二選一數據選擇器(2-1 MUX)

二選一的數據選擇器是最簡單的結構,其邏輯框圖、門級電路、以及真值表如下:

s為0時,A路導通; s為1時,B路導通
在這里插入圖片描述

二、 用 2輸入mux,實現與,或,非,異或

二選一用Verilog語言描述:
o = s ? a : b;

  1. 與邏輯:
    out = (a == 1’b0)? 1’b0: ((b == 1’b0)? 1’b0: 1’b1);

    out = (a == 1’b1)? b: 1’b0;
    Y=SA+S’B=AB+A’0=AB

  2. 或邏輯:
    out = (a == 1’b1)? 1’b1: ((b == 1’b1)? 1’b1: 1’b0);

    out = (a == 1’b0)? b: 1’b1;
    Y=SA+S’B=A’B+A=A+B

  3. 非邏輯:
    out = (a == 1’b1)? 1’b0: 1’b1;

  4. 異或
    out = (a == 1’b1)? ((b == 1’b1)? 1’b0: 1’b1) : (b);
    Y=AB’+A’B

三、 四選一選擇器

在實際的芯片器件中,用的最多的是雙四選一選擇器 74HC153
下圖是內部邏輯電路圖:
在這里插入圖片描述
四選一只需兩位地址輸入,四個輸入狀態選擇其中一個
而八選一需要三位地址輸入,八個輸入狀態選擇其中一個,利用S’作為第三個地址輸入端
因此可以利用這兩個四選一選擇器接成一個八選一的選擇器
在這里插入圖片描述

四、用選擇器設計組合邏輯電路

基本原理:

利用如下關系
一個具有n位地址輸入的數據選擇器,可以產生任何形式的
輸入不大於n+1的組合函數
在這里插入圖片描述
對於下面的邏輯表達式:
在這里插入圖片描述
即Z=R’(A’G’)+R(A’G)+R((AG’)+1(AG))
在這里插入圖片描述
當然也可以用R A 作為選通地址,G作為選通端,將函數化簡如下:
Z=(R’A’)G’+(RA’)G+(RA)1

五、例:用Verilog描述一個多路復用器,輸入的通道數目N,每一路的位寬為M。
  1. 代碼設計如下:
 1 module mux  2 #(  3     parameter   m = 8,  4     parameter   n = 8,  5     parameter   width = clogb2(n)  6 )  7 (  8     input   [n*m-1:0] indata,  9     input   [width-1:0] sel, 10     output  [m-1:0] outdata 11 ); 12 
13 assign  outdata =   indata[(m*(sel+1)-1)-:m]; 14 
15 //------------------------------------------------------- 16 //以下兩個函數任用一個 17 //求2的對數函數
18 function integer log2; 19  input integer value; 20  begin 21     value = value-1; 22     for (log2=0; value>0; log2=log2+1) 23       value = value>>1; 24  end 25 
26 
27 endfunction 28 
29 //求2的對數函數
30 function integer clogb2 (input integer bit_depth); 31 begin 32     for(clogb2=0; bit_depth>0; clogb2=clogb2+1) 33         bit_depth = bit_depth>>1; 34 end 35 endfunction 36 
37 endmodule

 

這里需要注意:

  1. [n-:m]表示數據位寬為m的從n開始的數據位寬。如reg [6-:3] 表示 reg [6:4]
  2. 參數傳遞必須時具體數值,如在parameter定義。
  3. 求log以2為低的整數,具體方法上面用到的是移位寄存器,即將數據向右移位即可以得到所需最大的整數。
    也可以利用下面的方法:
 1  function integer log2(input integer x);  2  integer i;  3  begin  4             log2 = 1;  5             for (i = 0; 2**i < x; i = i + 1) //不用移位寄存器,只用比較器 
 6  begin  7                 log2 = i + 1;  8  end  9  end 10  endfunction

 

注: 2**i 表示2i

log2(10)等於4

log2(16)等於4

log2(510001000)等於26


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM