HDLBits 练习 Always if2 并给出逻辑简化过程

news2025/2/22 6:14:15

题目 Always if2

在前面的练习中我们使用了简单的逻辑门与一些逻辑门的组合。这些电路都可以作为组合电路的例子。
组合意味着这个电路的输出只是输入的函数(数学意义上的)。数学上的函数就意味着当你给定一个输入的时候
对应的只会有一个输出。因此有一种方式可以清晰的列出所有组合逻辑的所有可能的输入和与之对应的输出。
这中方式就是真值表。

对于有N个输入的布尔函数,有2N种可能的输入组合。真值表的每一行代表一种输入的组合,所以真值表一般都
有 2^N 列。输出的那一列表示每一种可能的输入。

在这里插入图片描述

上面的真值表三个输入对应一个输出。一共有8行代表了输入的8种可能的组合,输出只有一列。
真值表中有四种组合对应的输出是1,其他4种对应的输出是0。

从真值表组合电路

假定我们要设置一个上述的电路,但是我们被限制使用标准的逻辑门。
那如何(从真值表)构建任意verilog逻辑函数?

一种简单的方法是用 sum-of-products 来表示真值表。
sum-of-products(其中sum代表 OR 门, products代表 AND逻辑门电路)的意思对于真值表中输出为 1 的行
使用一个 N个输入的 AND 门电路来表示,然后使用 OR 将他们连接起来。

对于上面的例子,输出 1 的行分别为, 第二行 | 第三行 | 第五行 | 第七行(这四行使用 OR 门电路进行组合)。
对于第二行来说, ~x3 | x2 | ~x1 (这是一个三个输入的 AND 门电路)。因此这个真值表可以使用 4 个被 OR 组合的
AND 门电路来实现。

练习一下

创建一个组合电路完成上面的真值表。
在这里插入图片描述

答案之一

其实按照题目中的描述,这个组合电路的写法已经十分的清晰了。


module top_module( 
    input x3,
    input x2,
    input x1,  // three inputs
    output f   // one output
);
    
    assign f = (~x1 & x2 & x3) | (x1 & x2 & ~x3) | (x1 & ~x2 & x3) | (x1 & x2 & x3);

endmodule

答案二及其简化过程


module top_module( 
    input x3,
    input x2,
    input x1,  // three inputs
    output f   // one output
);
    
    assign f = x1&x3 | x2&~x3;

endmodule

看到上面那么长的式子我就觉得一定能化简,但是作为一个早已将数电还给老师的人,看到竟能简化到如此地步必须学起来。

这里的图我使用了知乎作者 koch 的图,大家可以点击 Link 去看一下,对于这简化这部分总结的很好,并给出了公式的推导过程。
在这里插入图片描述

为了方便观察化简约定: x1 = A, x2 = B, x3 = C, ~A = A’

重写真值表的逻辑表达式:

A'BC + ABC' + AB'C + ABC

= AB(C + C') + A'BC' + AB'C   // 分配律提取 AB
	
= AB + AB'C + A'BC'			  // 然后使用互补律消去 C+C'

= B(A + A'C') + AB'C          // 分配律提取 B

= B(A + C') + AB'C			  // 吸收率 A + A'C' = A + C'

= AB + BC' + AB'C			  // 分配律

= A(B + B'C) + BC'            // 分配律提取 A

= A(B + C) + BC'			  // 吸收率 B + B'C = B + C

= AB + AC + BC'               // 分配律

= AC + BC'					  // 吸收率 AB + AC + BC' = AC + BC'

对于最后一项使用吸收率 AB + AC + BC’ = AC + BC’ 。需要仔细观察并与上图中
吸收率 公式2 中的最后一项对比,就会发现除了符号不是对应的之外和这个公式一毛一样。

题外话

本来想找个 verilog 的吉祥物作为文章封面,搜索之后发现貌似 verilog 没有吉祥物,如果大家知道还请留言告诉我一下,让我长长见识。
如果内容有用还请大家点赞收藏~ 谢谢。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatPaper临时升级教程

ChatPaper临时升级教程 文章目录 ChatPaper临时升级教程必要的声明:升级教程: 必要的声明: 最近只能手动发卡了,所以单独写一个手动升级的教程。 先声明一下付费的内容: 500K大概是30篇左右的总结; 200k大…

计算机网络的故事——HTTP首部

HTTP首部 在HTTP协议通信交互中使用的首部字段。不限于RFC2616中定义的47种首部字段,还有Cookie、setCookie和Content-Disposition等 HTTP 首部字段将定义成缓存代理和非缓存代理的行为,分成 2 种类型。端到端首部和逐跳首部

单向链表(c/c++)

链表是一种常见的数据结构,其中运用到了结构体指针,链表可以实现动态存储分配,换而言之,链表是一个功能强大的数组,可以在某个节点定义多种数据类型,可以实现任意的添加,删除,插入节…

通过nginx将https协议反向代理到http协议请求上

通过nginx将https协议反向代理到http协议请求上 1、问题背景2、介绍nginx的反向代理功能及配置https协议3、具体实现3.1 后端服务支持方式3.2 nginx重定向方式 3.3、nginx的反向代理方式4、关于nginx常用模块和指令 1、问题背景 目前一个系统仅支持https协议访问,因…

anaconda navigator打不开,一直在loading画面

anaconda navigator打不开,一直在loading画面。百度解决方法,用网上的方法在命令窗口里运行conda update anaconda结果一直显示 solving environment卡在那里。又尝试用管理员身份运行还是不行,打开后出现There in aninstance of Anaconda Na…

在MySQL中查看数据库和表的数据大小

在MySQL中查看数据库和表的数据大小 在管理和维护MySQL数据库时,了解数据库和表的数据大小是非常重要的。这可以帮助您监控数据库的增长、优化性能以及规划存储需求。本博客将介绍如何使用SQL查询来查看MySQL数据库和表的数据大小。 查看MySQL数据库的总数据大小 …

linux并发服务器 —— IO多路复用(八)

半关闭、端口复用 半关闭只能实现数据单方向的传输;当TCP 接中A向 B 发送 FIN 请求关闭,另一端 B 回应ACK 之后 (A 端进入 FIN_WAIT_2 状态),并没有立即发送 FIN 给 A,A 方处于半连接状态 (半开关),此时 A 可以接收 B…

vscode使用delve调试golang程序

环境配置 delve仓库,含有教程:https://github.com/go-delve/delve golang的debugging教程:https://github.com/golang/vscode-go/wiki/debugging > go version go version go1.20 windows/amd64> go install github.com/go-delve/de…

使用 Nacos 在 Spring Boot 项目中实现服务注册与配置管理

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

转录因子分析预测 cistrome db

Toolkit for CistromeDBhttp://dbtoolkit.cistrome.org/基因表达调控系列问题汇总(持续更新) - 知乎 (zhihu.com)

Java环境的安装

最近博主也是在学校开始学习了Java,也通过老师知道了可以通过大学生学生证申(bai)请(piao) IDEA的企业版(社区版也是够学习用的)有很多同学还是没有搞懂便做一下分享。 🌱博客主页:青竹雾色间. 😘博客制作…

初步了解android如何锁键

百年三万六千日,光阴只有瞬息间。 手机下面的三个图形,正方形,园形,三角形分别的什么建?都起到什么功能? 三角形的那个叫返回键,就是可以返回你的上一个操作; 圆形是HOME键,按一下可…

线上 udp 客户端请求服务端客户端句柄泄漏问题

本题分别从如下三个方面来分享: 问题描述 自定义连接池的编写 common_pool 的使用 问题描述 线上有一个业务,某个通服务通知 udp 客户端通过向 udp 服务端(某个硬件设备)发送 udp 包来进行用户上线操作 当同时有大量的请求打到…

Docker 实现 MySQL 一主一从配置

1、新建主服务器容器实例,端口: 3307 docker run \ -p 3307:3306 \ --name mysql-master \ -v /var/docker/mysql-master/log:/var/log/mysql \ -v /var/docker/mysql-master/data:/var/lib/mysql \ -v /var/docker/mysql-master/conf:/etc/mysql \ --p…

MSST-NET:用于高光谱和多光谱图像融合的多尺度空间-光谱Transfomer网络

1.网络结构 主要贡献: 提出了一种多尺度空间光谱Transformer网络光谱多头注意力旨在提取光谱特征引入多尺度波段/补丁嵌入来提取多尺度特征自监督训练 痛点:卷积核的感受野有限,基于卷积神经网络CNN的融合方法无法利用特征图中的全局关系…

pip install mysqlclient报错

安装mysqlclient时报错 先查看安装的python版本 python -V 根据版本下载下载对应的 mysqlclient 文件 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclienthttps://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 我的是3.7版本的 就下载3.7版本,64位系…

aarch64 arm64 部署 stable diffusion webui 笔记 【1】准备 venv 安装pytorch 验证cuda

aarch64 pytorch(没有aarch64对应版本,自行编译) pytorch-v2.0.1 cuda arm64 aarch64 torch 2.0.1cu118 源码编译笔记【2】验证cuda安装 成功_hkNaruto的博客-CSDN博客 创建venv [rootceph3 stable-diffusion-webui]# /usr/local/Python-3.10.12/bin/python3 -m v…

一种结合白平衡统计信息和曝光信息的软光敏算法专利学习(专利四)

图像分块: 参见下图,一幅图像大小为5*6(像素),每个像素包含R、G、B三个分量,该图像划分为4个分块,第一分块的大小为3*3像素,第二分块的大小为3*3(像素),第三分块的大小为2*3像素,第四…

OpenCV基础(一):图片加载,图片腐蚀,图片模糊,图片边缘检测,图片保存

前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。本文是音视频系…

Android逆向学习(四)app修改smali函数跳过弹窗广告,等待广告,更新提醒

Android逆向学习(四)app修改smali函数跳过弹窗广告,等待广告,更新提醒 一、写在前面 这是吾爱破解课程的第三个练习,我在写这篇博客时遇到了vscode插件bug,已经想办法联系原作者了,希望能够尽…