转自: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

数字电路基础知识——组合逻辑电路(数据选择器MUX、多路复用器)的更多相关文章

  1. FPGA入门到精通系列1:数字电路基础知识

      本文主要介绍数字电路基础知识,用最简洁的内容介绍最核心的知识. 1.数字电路是什么? 数字电路是利用电源电压的高电平和低电平分别表示1和0,进而实现信息的表达.模拟信号:随时间连续变化的信号.处理 ...

  2. 多媒体基础知识之PCM数据《 转》

    多媒体基础知识之PCM数据 1.什么是PCM音频数据 PCM(Pulse Code Modulation)也被称为脉冲编码调制.PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样.量化 ...

  3. Python基础知识(六)------小数据池,集合,深浅拷贝

    Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: ​ 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : ​ 一个文 ...

  4. HTML+CSS基础知识(2)选择器的使用、盒子模型的讲解、列表的使用

    文章目录 1.CSS基础知识 2.css样式 2.1.代码: 2.2 测试结果 3.CSS的语法 3.1 代码 4.块元素和行内元素 4.1 代码 4.2 测试结果 5.常用的选择器 5.1 代码块 ...

  5. CSS基础知识笔记(二)之选择器

    CSS选择器 选择器{ 样式; } 每一条css样式声明(定义)由两部分组成,形式如下: 在{}之前的部分就是“选择器”,“选择器”指明了{}中的“样式”的作用对象,也就是“样式”作用于网页中的哪些元 ...

  6. 多媒体基础知识之YUV数据

    1.什么是YUV格式 YUV,是一种颜色编码方法.Y表示明亮度(Luminance.Luma),也就是灰度值.U和V则是色度.浓度(Chrominance.Chroma),作用是描述影像色彩及饱和度, ...

  7. Oracle优化器基础知识之访问数据的方法

    目录 一.访问数据的方法 1.直接访问数据 2.访问索引 一.访问数据的方法 Oracle访问表中数据的方法有两种,一种是直接表中访问数据,另外一种是先访问索引,如果索引数据不符合目标SQL,就回表, ...

  8. CSS回顾(基础知识,元素,选择器,盒子,颜色)

    元素分类: 1.行级元素:内联元素  inline 特征:内容决定元素所占位置,不可以通过CSS改变宽高 span  strong   em  a  del 2.块级元素:block特征:独占一行,可 ...

  9. 多媒体基础知识之PCM数据

    1.什么是PCM音频数据 PCM(Pulse Code Modulation)也被称为脉冲编码调制.PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样.量化.编码转换成的标准的数字音频 ...

随机推荐

  1. 【spring源码系列】之【Bean的销毁】

    以"冬奥之光,多彩冰灯"为主题的第四十一届全国专业冰雕比赛在冰城哈尔滨市进入第二天,60名冰雕高手在哈尔滨冰灯艺术游园会园区展开激烈的竞技比拼. 冰雕艺术 1. 概述 Bean的销 ...

  2. WPF优秀组件推荐之FreeSpire

    概述 Spire是一套可以轻松处理Word.Excel和PDF的商业组件,需要收费,但是他有一套对应的免费组件FreeSpire可以使用,免费组件在功能上有一些限制(比如:excel的sheet数量不 ...

  3. 0x01 向日葵日志溯源

    1.简介 向日葵工具具有linux桌面系统版本,在应急场景中,攻击者通过向日葵远控linux实现入侵是一种常见手法,通过分析向日葵的服务日志,可以分析出安全事件时间发生点前后有无向日葵远控的行为,但由 ...

  4. 函数式组件中实现Antd打开Modal后其Input框自动聚焦(focus)到文字的最后

    目前React使用函数式组件已经成为趋势, 如何把React函数式组件用好, 提高性能, 从而实现业务需求也成为了一种能力的体现......咳咳咳, 进入正题: 现实场景需求 我想实现这一个需求, 父 ...

  5. linux基础篇--复习重点成长之路

    linux阶段性复习提纲 1.xshell与shell之间的区别 shell ​ shell是一个由C语言编写的程序,它的主要作用就是在用户和操作系统之间搭起一道桥梁(人机操作界面).直接在命令行执行 ...

  6. [SWPU2019] NETWORK

    [SWPU2019]Network(TTL隐写) 1.题目概述 2.解题过程 文档中的数字代表什么呢?会不会是RGB? 看了一下以前做过的题目,好像并不是 那是什么呢?百度告诉我这是TTL隐写,哇,长 ...

  7. Linux 中如何使用 Htop 监控工具?【网络安全】

    镜像下载.域名解析.时间同步请点击阿里云开源镜像站 一.Htop 界面展示 "Htop 是一个用于 Linux/Unix 系统的交互式实时进程监控应用程序,也是 top 命令的替代品,它是所 ...

  8. ZYNQ使用88E1510 PHY芯片的驱动程序

    SDK V2014.4 PHY 88E1510 PL端以太网,自协商 standalone应用程序 PL端设计,略. 根据PL端生成的hdf,新建项目,采用官方lwip echo server例程.发 ...

  9. python2,3的区别

    python2和python3的区别: 1.    python 2x:源代码不规范,源码重复多 python 3x:源码 清晰,简单,优美 2.python 2x:默认编码是ASCII码 编码更改: ...

  10. luoguP6623 [省选联考 2020 A 卷] 树(trie树)

    luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...