• 数字电路基础知识——组合逻辑电路(数据选择器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

  • 相关阅读:
    shell脚本100例、练习使用
    shell基础编程
    mysql基础理论知识
    Docker 基础
    python基础之类(面向对象编程)
    python基础之函数
    python基础之认知及编码
    python基础之数据类型
    python基础之注意事项
    1.linux使用基础
  • 原文地址:https://www.cnblogs.com/zhj868/p/14153272.html
Copyright © 2020-2023  润新知