典型组合逻辑电路设计

目录

行为级描述方式基本运算电路

一、半加器(Half Adder)

二、全加器(Full Adder)

1、逻辑门构成加法器

2、集成全加器

3、串行加法器

4、超前进位加法器

三、全减器(Full Deductor)

数值比较电路

一、一位比较器

二、四位比较器

三、集成比较器

编码器

4 线 -2 线编码器

8 线-3 线编码器

译码器

一、二进制译码器

2线-4线译码器

3 线- 8 线译码器

二、 二-十进制译码器

三、数字显示译码器

数据选择器

一、2 选 1 数据选择器

二、4 选 1 数据选择器

三、4 位 2 选 1 多路选择器

总结


行为级描述方式基本运算电路

一、半加器(Half Adder)

半加器:不考虑低位的进位输入,将两位数相加得到本位和进位。

AB为输入,本位S=A\oplus B,进位C=AB。

所以使用verilog的数据流级描述如下

module halfadd (a, b, c, s);
    input wire a, b;
    output wire c, s
    assign s=a^b;
    assign c=a&b;
endmodule 

二、全加器(Full Adder)

全机器与半加器相比考虑低位的进位输入,本位是否为1要看加数、被加数和低位进位中一的个数,奇数个1本位就是1,而1的个数为奇数个,异或结果为1,

所以S=A\bigoplus B\bigoplus C

是否进位,要么AB都是1,或者AB有一个1且低位进位是1,所以

C=AB+(A\bigoplus B)C_{i-1}

至于形式,因为ABC同为加数的一份子,地位等价,所以格式可以变化不唯一。

1、逻辑门构成加法器

AB为加数和被加数,C_{i-1}为低位进位,列出真值表

由真值表得到卡诺图,根据卡诺图得出化简公式,与上面理解的一致

S=A\bigoplus B\bigoplus C

C=BC+(B\bigoplus C)A_{i-1}(ABC等价,所以公式与上面的是等价的)

根据化简表达式画出逻辑电路图

用verilog数据流级描述

module adder (a, b, cl, ch, s);
    input wire a, b, cl;//cl为低位进位
    output wire ch, s;//ch为产生的进位
    assign ch = (a&b) | ((a|b)&cl); 
    assign s = a^b^cl; 
endmodule
2、集成全加器

双全加器具有独立的全加和与进位输出,这 样每个全加器既可单独使用也可级连起来使用 ,即二位进制器加法 。下图是集成全加器 74183

3、串行加法器

使用 4 个全加器实现一个 4 位串行进位加法器,产生的进位C与高位进行运算

ab和结果s都为4位,所以线宽为[4:0]

module adder4 (a, b, s, cf, ovf);
    input wire[3:0] a, b;
    output wire [3:0] s;
    output wire cf, ovf;//ovf为溢出标记
    wire [4:0] c;
    assign c[0]=0;//最低位还没有进位,置0
    assign s= a^b^c[3:0];
    assign c[4:1]=a&b | (a|b)&c[3:0];
    assign cf=c[4];
    assign ovf= c[4]^c[3];
endmodule

以下两句体现了串行的思想

assign s= a^b^c[3:0];
assign c[4:1]=a&b | (a|b)&c[3:0];//ab要与低位的进位进行运算才得到本位的进位

ovf是溢出标记,对一个N位二进制补码,其可以表达的范围是-2^{N-1}~2^{N-1}-1之间。如果超出这个范围就称为溢出了。

例如计算-2-6,带上符号位就是1010+1110=11000,超出一位。而我们能表示的最小为-7,比范围的最小值还要小,这个叫做负溢出。同理如果想要的结果比最大值还要大,那么就叫做正溢出。

4、超前进位加法器

为了提高运算速度,必须减小或消除由于进位逐级传递(串行加法器)所浪费的时间。超前进位加法器就是根据 这样的思路而设计的。

因此,只要 A3A2A1A0 、 B3B2B1B0 和 C 给出, 就直接可求出 C3 、 C2 、 C1 、 C0 ,进而得到 4 位加法器的结果 S3S2S1S0 。

三、全减器(Full Deductor)

考虑低位借位进行减法运算。

如果被减数为1,那么最后本位为1就是减数和借位同为0或1;如果被减数为0,那么最后本位为1就是减数和借位有一个为1。所以这里又是奇数个1的规律,若D本位,G低位借位

由此D=A\bigoplus B\bigoplus G

对于借位,B和G都为1肯定产生借位,B和G有一个为1,要产生借位A就是0

所以G_{i}=BG_{i-1}+(B\bigoplus G_{i-1})\bar{A}

可以验证一下公式:

1.先画真值表

2.利用卡诺图化简

得到D=A\bigoplus B\bigoplus G

得到G_{i}=BG_{i-1}+(B\bigoplus G_{i-1})\bar{A}

3.画出电路图

数值比较电路

一、一位比较器

列真值表

得到F_{1}=A\bar{B}F_{2}=A\bigodot BF_{3}=\bar{A}B

电路图如下

二、四位比较器

比较大小就是从高位依次向低位比较,本位不同出结果,本位相同继续比

若A>B,F_{1}=A_{3}\bar{B_3}+(A_{3}\bigodot B_{3})A_{2}\bar{B_2}+(A_{3}\bigodot B_{3})(A_{2}\bigodot B_{2})A_{1}\bar{B_1}+(A_{3}\bigodot B_{3})(A_{2}\bigodot B_{2})(A_{1}\bigodot B_{1})A_{0}\bar{B_0}

若A=B,F_{2}=(A_{3}\bigodot B_{3})(A_{2}\bigodot B_{2})(A_{1}\bigodot B_{1})(A_{0}\bigodot B_{0})

若A<B,F_{3}=\bar{A_{3}}B_3+(A_{3}\bigodot B_{3})\bar{A_{2}}B_2+(A_{3}\bigodot B_{3})(A_{2}\bigodot B_{2})\bar{A_{1}}B_1+(A_{3}\bigodot B_{3})(A_{2}\bigodot B_{2})(A_{1}\bigodot B_{1})\bar{A_{0}}B_0

下图为典型的集成比较器 7485 的引脚图

用verilog行为级描述方式

module comp4bita (A, B, gt, eq, lt);
    input wire [3:0] A,B;
    output reg gt, eq, lt;
    always @(A, B)//A或B一旦有点电平变化,就进行比较
    begin
    if (A>B) begin gt = 1; eq = 0; lt = 0; end
    if (A=B) begin gt = 0; eq = 1; lt = 0; end
    if (A<B) begin gt = 0; eq = 0; lt = 1; end
    end
endmodule

三、集成比较器

八位比较器就是将四位比较器7485串联,低四位比较结果传给高位进行最后的判断,(低四位比较器如果再无更低位时,将A=B赋值为0)

编码器

编码:是指用文字、符号和数码来表示 某种信息的过程

编码器:实现编码的数字电路,把输入 的每个高低电平信号编成一组对应的二 进制代码

二进制编码器:输入信号可以是低电平有效或高电平 有效的形式 ;编码器的输出码可以是原码形式也可以是反码形式

比如输入0010,输出01,输入信号为某一位为1,输出指示哪一位为1

4 线 -2 线编码器

真值表如下:

verilog数据流级描述

module ENC4_2a (i, y);
    input wire [3:0] i;
    output wire [1:0] y;
    assign y[1] = i[3] | i[2]; 
    assign y[0] = i[3] | i[1]; 
endmodule

行为级描述方式 

module ENC4_2b (i, y);
    input wire [3:0] i;
    output reg [1:0] y;
always @(i)
    4’b0001: y = 2’b00; 
    4’b0010: y = 2’b01; 
    4’b0100: y = 2’b10; 
    4’b1000: y = 2’b11;
endmodule
8 线-3 线编码器

低电平有效,即对输入为“ 0” 的位编码

真值表如下

得到表达式后绘制 逻辑电路图

译码器

译码是编码的逆过程,其功能是将具有特定含义 的不同二进制代码“翻译”出来。

二进制译码器属于完全译码器 ( 设译码器有 n 个输入和 m个输出,则 m=2^n ) ,不满足该条件 的称为部分译码器。

一、二进制译码器

编码器和译码器的比较

2线-4线译码器

E为使能端,只有为1时,才进行译码,此外低电平有效,所以真值表如下

函数表达式

电路图

数据流级描述

module DEC2_4a (a, z);
    input wire [1:0] a;
    output wire [3:0] z;
    assign z[0] = ~a[1]&~a[0]; 
    assign z[1] = ~a[1]&a[0]; 
    assign z[2] = a[1]&~a[0];
    assign z[3] = a[1]&a[0]; 
endmodule

行为级描述方式

module DEC2_4b (a, z);
    input wire [1:0] a;
    output reg [3:0] z;
always @(a)

    2’b00: z = 4’b0001; 
    2’b01: z = 4’b0010; 
    2’b10: z = 4’b0100; 
    2’b11: z = 4’b01000;
endmodule
3 线- 8 线译码器

与2线-4线同理,不过多赘述,注意输出是高电平有效还是低电平有效

二、 二-十进制译码器

二-十进制译码器的功能是将 8421BCD 码翻译成十个不同点位的指定电平。

假如低电平有效,真值表为

三、数字显示译码器

最常见的七段数字 显示译码器

高电平有效,输出0-9的数字,真值表为

得到表达式

数据流级描述方式

module hex7seg1 (x, a_to_g);
    input wire [3:0] x;
    output wire [6:0] a_to_g;
    assign a_to_g[6] = x[3] | x[2]&x[0] |x[1]&x[0] | ~x[2]&~x[0]; 
    assign a_to_g[5] = ~x[2] | x[1]&x[0] |~x[1]&~x[0]; 
    assign a_to_g[4] = x[2] | ~x[1] | x[0]; 
    assign a_to_g[3] = ~x[2]&~x[1] | x[1]&~x[0] | ~x[2]&x[1] | x[2]&~x[1]&x[0];
    assign a_to_g[2] = ~x[2]&~x[0] | x[1]&~x[0]; 
    assign a_to_g[1] = x[3] | ~x[1]&~x[0] |x[2]&~x[0] | x[2]&~x[1]; 
    assign a_to_g[0] = x[3] | x[1]&~x[0] | ~x[2]&x[1] | x[2]&~x[1]; 
endmodul

当然,如果只是为了写verilog,可以使用行为级更为简便

module hex7seg2 (x, a_to_g);
input wire [3:0] x;
output reg [6:0] a_to_g;
always @ ( x )
case (x)
0: a_to_g = 7'b1111110;
1: a_to_g = 7'b0110000;
2: a_to_g = 7'b1101101;
3: a_to_g = 7'b1111001;
4: a_to_g = 7'b0110011;
5: a_to_g = 7'b1011011;
6: a_to_g = 7'b0011111;
7: a_to_g = 7'b1110000;
8: a_to_g = 7'b1111111;
9: a_to_g = 7'b1110011;
default: a_to_g =7'bxxxxxxx;
endcase
endmodule

因为x的范围是0-15,所以含default部分,这部分设置为未知状态x。

数据选择器

数据选择器是根据地址选择码从多路输入数据中 选择一路数据输出,也称复用器。

一、2 选 1 数据选择器

有ab两路数据输入,s选择接收a还是b的数据,也就是当 s=0 时, y=a; 当 s=1 时, y=b 。

表达式y=\bar{s}a+sb

门级 Verilog 描述

module mux21a(a, b,s, y);
    input a, b, s ;
    output y ;
    wire ns, c, d ;
    not U1(ns, s);
    and U2(c, ns, a) ;
    and U3(d, s, b) ;
    or U4(y, c, d) ;
endmodule

其中的not、and、or就是已经实现的逻辑运算,我们也可以定义自己的门运算,例如

selfDesign U(.arg1(a),.arg2(b));        //arg1为函数的形参,a为实参

其他verilog描述大家自己尝试 

二、4 选 1 数据选择器

A1A0决定选择哪路输入,如A1A0=10时,Y=D2

逻辑电路如下

verilog大家自行设计。

三、4 位 2 选 1 多路选择器

与之前没有较大差别,只是输入的数据由一位变成四位

总结

可以看出对于这部分,理清逻辑电路有固定顺序,作真值表、卡诺图、表达式、电路图以及进行verilog描述。

各种电路也是对于其他电路的扩展,大家要做到融会贯通。多种电路拼接也要能识别出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925165.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读】三平面相关与变体

文章目录 1. 【CVPR2023】Tri-Perspective View for Vision-Based 3D Semantic Occupancy Prediction动机可视化方法Pipeline 2. 【2023/08/31】PointOcc: Cylindrical Tri-Perspective View for Point-based 3D Semantic Occupancy Prediction动机&#xff08;针对雷达点云、与…

修改bag的frame_id的工具srv_tools

在使用数据集导航或者建图时&#xff0c;bag中的点云或者其他话题的frame_id没有和需要的对应 1.创建工作空间 2.cd xxxx/src 3.git clone https://github.com/srv/srv_tools.git cd .. catkin_make source ./devel/setup.bash rosrun bag_tools change_frame_id.py -t /要改…

hue 4.11容器化部署,已结合Hive与Hadoop

配合《Hue 部署过程中的报错处理》食用更佳 官方配置说明页面&#xff1a; https://docs.gethue.com/administrator/configuration/connectors/ 官方配置hue.ini页面 https://github.com/cloudera/hue/blob/master/desktop/conf.dist/hue.ini docker部署 注意&#xff1a; …

如何用Excel做数据可视化自动化报表?

作为一个经常需要做数据报表的人&#xff0c;我最常用的工具是Excel&#xff0c;对于我来说用Excel处理繁琐冗杂的数据并不难&#xff0c;但是我发现身边很多人用Excel做的数据报表非常的耗时&#xff0c;而且最后的成品也是难以直视&#xff0c;逻辑和配色等都非常的“灾难”。…

layui table 纵向滚动条导致单元格表头表体错位问题

我用的时layui2.6.8版本 历史项目维护&#xff0c;bug给我让我做了&#xff0c;本来利用前端手段强解决&#xff0c;后来发现很多table 找了解决办法 打开layui-v2.6.8/lay/modules/table.js 如果打开后时压缩的代码 直接搜索 e.find(".layui-table-patch") …

C语言学习笔记:流程控制和数据输入输出

流程控制和数据的输入输出 算法 著名计算机科学家沃思提出了一个公式&#xff1a; 数据结构 算法 程序 数据结构&#xff1a;对数据的描述 算法&#xff1a;对操作步骤的描述 算法定义 广义的说&#xff0c;为解决一个问题而采取的方法和有限的步骤&#xff0c;就称为“…

旋转图像(java)

题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 代码思路&#xff1a; class Solution {public void ro…

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环&#xff0c;网络上也有很多 UI 自动化相关的知识或资料&#xff0c;具体到 windows 端的 UI 自动化&#xff0c;我们需要从以下几个方面考虑&#xff1a; 开发语言 毋庸置疑&#xff0c;在 UI 自动化测试领域&am…

【R语言管理】Pycharm配置R语言及使用Anaconda管理R语言虚拟环境

目录 使用Anaconda创建R语言虚拟环境1. 安装Anaconda2. 创建R语言虚拟环境 Pycharm配置R语言1. 安装Pycharm2. R Language for IntelliJ插件 参考 使用Anaconda创建R语言虚拟环境 1. 安装Anaconda Anaconda的安装可参见另一博客-【Python环境管理工具】Anaconda安装及使用教程…

C语言进程编程

getpid函数&#xff1a; 原型&#xff1a;pid_t getpid(void) 特性&#xff1a;返回值是PID值 用途&#xff1a;获取当前进程PID 用法例 #include<stdio.h> #include <sys/types.h> #include<unistd.h> int main() {pid_t pid;pid getpid();printf(&qu…

SpringMVC |(一)SpringMVC概述

文章目录 &#x1f4da;SpringMVC概述&#x1f407;三层架构&#x1f407;异步调用 &#x1f4da;SpringMVC入门案例&#x1f407;入门案例&#x1f407;注意事项 &#x1f4da;小结 学习来源&#xff1a;黑马程序员SSM框架教程_SpringSpringMVCMaven高级SpringBootMyBatisPlus…

Android 桌面窗口新功能推进,聊一聊 Android 桌面化的未来

Android 桌面化支持可以说是 Android 15 里被多次提及的 new features&#xff0c;例如在 Android 15 QPR1 Beta 2 里就提到为 Pixel 平板引入了桌面窗口支持&#xff0c;桌面窗口允许用户在自由窗口同时运行多个应用&#xff0c;同时可以像在传统 PC 平台上一样调整这些窗口的…

Vue+Vite 组件开发的环境准备(零基础搭建)

一、什么是Vite Vue3作为一款现代化的JavaScript框架&#xff0c;配合Vite这样的构建工具&#xff0c;极大地简化了流程&#xff0c;提升了效率。Vite 是一个基于现代浏览器原生的 ES 模块系统&#xff0c;能够以原生模块导入的方式运行源代码的开发服务器。它被设计用来替代传…

linux高级系统编程之进程

进程 一个正在进行的程序 并行与并发 并行:执行的程序在不同CPU上同时执行 并发:一个CPU,多个进程交替执行,因为交替速度很快,所以从宏观上来看是同时执行的,但是从围观的角度是交替执行的 单道与多道 单道程序设计:所有进程一个一个排队执行,若A阻塞,B只能等待,,即使CPU处于空…

git 命令之只提交文件的部分更改

git 命令之只提交文件的部分更改 有时&#xff0c;我们在一个文件中进行了多个更改&#xff0c;但只想提交其中的一部分更改。这时可以使用 使用 git add -p 命令 Git add -p命令允许我们选择并添加文件中的特定更改。它将会显示一个交互式界面&#xff0c;显示出文件中的每个更…

Excel中根据某列内容拆分为工作簿

简介&#xff1a;根据A列的内容进行筛选&#xff0c;将筛选出来的数据生成一个新的工作簿(可以放到指定文件夹下)&#xff0c;且工作簿名为筛选内容。 举例&#xff1a; 将上面的内容使用VBA会在当前test1下生成5个工作簿&#xff0c;工作簿名分别为TEST1.xls TEST2.xls TEST3…

数据结构 (10)队列

前言 队列是一种特殊的数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。 一、定义与基本概念 定义&#xff1a;队列是一种只允许在一端&#xff08;队尾&#xff09;进行插入操作&#xff0c;而在另一端&#xff08;队头…

Tomcat10部署Servlet加载错误问题解决

Servlet加载错误&#xff1a;HelloServlet不是Servlet 环境信息&#xff1a;IDEA中的maven项目&#xff0c;tomcat10.1.33 问题信息&#xff1a;XXX.Servlet不是Servlet 问题原因&#xff1a;tomcat10将JavaEE也换成了Jakarta EE&#xff1b; Jakarta EE较以前的JavaEE有一个重…

2024年第十三届”认证杯“数学中国数学建模国际赛(小美赛)

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

百度智能云发布首个空间智能解决方案,百度AI优势如何分析?

首先&#xff0c;百度智能云此次推出的空间智能解决方案&#xff0c;在技术底座上展现了其强大的AI异构计算能力。百度百舸AI异构计算平台作为该方案的底层支撑&#xff0c;为2D和3D应用中的人物、物件及场景生成提供了强大的算力支持。这一平台的推出&#xff0c;不仅提升了空…