fpga系列 HDL: 竞争和冒险 01

  • 卡诺图是一种逻辑化简工具,用来在布尔函数的最小项和形式中,找到冗余项并实现逻辑化简。也可用于HDL中竞争和冒险的判断。

最小项

  • 任何一个逻辑函数都能化简为最小项的和的形式
  • 对于 n 个变量的布尔表达式,每个变量都必须以原变量(如A)或非变量(即否定的形式A’)出现,且在每个最小项中只能出现一次。每个最小项代表一个特定的输入组合。
  • 例:假设有两个变量 A A A B B B,则最小项可以表示为:

A ′ B ′ : 对应  ( A , B ) = ( 0 , 0 ) A'B' : \text{对应 } (A, B) = (0, 0) AB:对应 (A,B)=(0,0)

A ′ B : 对应  ( A , B ) = ( 0 , 1 ) A'B : \text{对应 } (A, B) = (0, 1) AB:对应 (A,B)=(0,1)

A B ′ : 对应  ( A , B ) = ( 1 , 0 ) AB' : \text{对应 } (A, B) = (1, 0) AB:对应 (A,B)=(1,0)

A B : 对应  ( A , B ) = ( 1 , 1 ) AB : \text{对应 } (A, B) = (1, 1) AB:对应 (A,B)=(1,1)

格雷码

格雷码(Gray Code)是一种特殊的二进制编码,每相邻两个数之间只有一个位发生变化。格雷码的这种特性在某些应用中可以减少误差和干扰,因此被广泛用于数字电路设计、编码器、存储器地址生成、错误校验等领域。

  • 格雷码可以循环排列,即从最大值到最小值过渡时也只有一个位变化。

  • n 位的格雷码可以通过以下递归方式生成:

    • 0 位格雷码: G ( 0 ) = [ 0 ] \text{G}(0) = [0] G(0)=[0]
    • 1 位格雷码: G ( 1 ) = [ 0 , 1 ] \text{G}(1) = [0, 1] G(1)=[0,1]
    • n 位格雷码:将 n-1 位格雷码的所有数按顺序排列,然后将 n-1 位格雷码的所有数按逆序排列。然后在第一个排列前加 0,在第二个排列前加 1。
  • 2 位格雷码生成过程:

    • 从 1 位格雷码 [ 0 , 1 ] [0, 1] [0,1] 开始。
    • 正序排列:[0, 1],在前面加 0 得到 [ 00 , 01 ] [00, 01] [00,01]
    • 逆序排列:[1, 0],在前面加 1 得到 [ 11 , 10 ] [11, 10] [11,10]
    • 合并得出 2 位格雷码为 [ 00 , 01 , 11 , 10 ] [00, 01, 11, 10] [00,01,11,10]
  • 3 位格雷码生成类似:

    • 正序排列:[00, 01, 11, 10],前面加 0 得到 [ 000 , 001 , 011 , 010 ] [000, 001, 011, 010] [000,001,011,010]
    • 逆序排列:[10, 11, 01, 00],前面加 1 得到 [ 110 , 111 , 101 , 100 ] [110, 111, 101, 100] [110,111,101,100]
    • 合并得到 3 位格雷码为 [ 000 , 001 , 011 , 010 , 110 , 111 , 101 , 100 ] [000, 001, 011, 010, 110, 111, 101, 100] [000,001,011,010,110,111,101,100]
  • 二进制到格雷码的转换:一个给定的二进制数可以通过以下公式转换为格雷码:

    • 对于二进制数 B = B n − 1 B n − 2 … B 1 B 0 B = B_{n-1} B_{n-2} \dots B_1 B_0 B=Bn1Bn2B1B0,相应的格雷码 G = G n − 1 G n − 2 … G 1 G 0 G = G_{n-1} G_{n-2} \dots G_1 G_0 G=Gn1Gn2G1G0 可以表示为:
    • G n − 1 = B n − 1 G_{n-1} = B_{n-1} Gn1=Bn1
    • G i = B i ⊕ B i + 1 G_i = B_i \oplus B_{i+1} Gi=BiBi+1(对相邻位进行异或操作)

卡诺图与最小项的表示

  • 卡诺图是一种将布尔函数的最小项排列在网格上的方法,可以更直观地找到可以合并的最小项。卡诺图中的每个方格代表一个最小项,而方格的排列顺序遵循格雷码,相邻的方格之间仅有一个变量变化。

在卡诺图中,相邻的1最小项可以合并为一个更简化的项。例如:

  • 两个相邻的最小项可以合并为一个二变量的项。
  • 四个相邻的最小项可以合并为一个一变量的项。
  • 八个相邻的最小项可以简化为一个常数项。

卡诺图在最小项和表达式中的应用

  • 通过卡诺图,可以将最小项的和形式转换成更简化的逻辑表达式,步骤如下:
  1. 标记最小项:在卡诺图中标记所有输出为1的最小项。
  2. 寻找合并区域:将相邻的1组成成组的区域,尽可能合并更多的相邻项(如2的幂次个:2、4、8等)。
  3. 写出化简表达式:合并后的区域直接写出更简单的逻辑表达式。例如,四个相邻的最小项可以写成一个没有变化变量的项。
  4. 得到简化的SOP表达式:最终通过卡诺图的合并过程得到逻辑函数的最简化 SOP 表达式。

举例说明

假设一个布尔函数 F ( A , B , C ) F(A, B, C) F(A,B,C) 的最小项和为:

F ( A , B , C ) = m 1 + m 3 + m 5 + m 7 F(A, B, C) = m_1 + m_3 + m_5 + m_7 F(A,B,C)=m1+m3+m5+m7

  • 在三变量的卡诺图中标记出 m 1 , m 3 , m 5 , m 7 m_1, m_3, m_5, m_7 m1,m3,m5,m7 所对应的格子,并进行合并,得出最简化的表达式

在这里插入图片描述

  • F ( A , B , C ) = m 1 + m 3 + m 5 + m 7 F(A, B, C) = m_1 + m_3 + m_5 + m_7 F(A,B,C)=m1+m3+m5+m7

  • F ( A , B , C ) F(A, B, C) F(A,B,C)中任意相邻的两项可以消掉一个变量,比如 m 1 m_1 m1 m 3 m_3 m3相邻, m 1 + m 3 = ( A ′ B ′ C ) + ( A ′ B C ) = A ′ ( B ′ + B ) C = A ′ C m_1 + m_3=(A'B'C)+(A'BC)=A'(B'+B)C=A'C m1+m3=(ABC)+(ABC)=A(B+B)C=AC

  • 同样 m 5 + m 7 = ( A B ′ C ) + ( A B C ) = A ′ ( B ′ + B ) C = A C m_5 + m_7=(AB'C)+(ABC)=A'(B'+B)C=AC m5+m7=(ABC)+(ABC)=A(B+B)C=AC

  • F ( A , B , C ) = C F(A, B, C) = C F(A,B,C)=C

  • 使用卡诺图时,圈出这四个最小项,可发现,这四个最小项可以被一个2x2的方块覆盖。所以 m 1 + m 3 + m 5 + m 7 m_1+m_3+m_5+m_7 m1+m3+m5+m7 可以简化为 C C C(因为四个相邻的最小项可以合并为一个一变量的项,且所有这些项都有 C C C的出现)

CG

  • 图片地址:添加链接描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pyramidal Flow使用指南:快手、北大、北邮,开源可免费商用视频生成模型,快速上手教程

什么是 Pyramidal Flow? Pyramidal Flow 是由快手科技、北京大学和北京邮电大学联合推出的开源视频生成模型,它是完全开源的,发布在 MIT 许可证下,允许商业使用、修改和再分发。该模型能够通过文本描述生成最高10秒、分辨率为128…

10分钟使用Strapi(无头CMS)生成基于Node.js的API接口,告别繁琐开发,保姆级教程,持续更新中。

一、什么是Strapi? Strapi 是一个开源的无头(headless) CMS,开发者可以自由选择他们喜欢的开发工具和框架,内容编辑人员使用自有的应用程序来管理和分发他们的内容。得益于插件系统,Strapi 是一个灵活的 C…

数字IC后端实现 | Innovus各个阶段常用命令汇总

应各位读者要求,小编最近按照Innovus流程顺序整理出数字IC后端项目中常用的命令汇总。限于篇幅,这次只更新到powerplan阶段。有了这份Innovus常用命令汇总,学习数字IC后端从此不再迷路!如果大家觉得这个专题还不错,想继…

[Redis] Redis数据持久化

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

C#与C++交互开发系列(十):数组传递的几种形式

前言 在C#和C的交互开发中,数组传递是一个非常常见且实用的场景。数组可以作为方法的参数,也可以作为响应结果返回。在本篇博客中,我们将探讨几种常见的数组传递方式,展示如何在C#与C之间进行有效的数据交换。我们将主要介绍以下…

【HarmonyOS Next】原生沉浸式界面

背景 在实际项目中,为了软件使用整体色调看起来统一,一般顶部和底部的颜色需要铺满整个手机屏幕。因此,这篇帖子是介绍设置的方法,也是应用沉浸式效果。如下图:底部的绿色延伸到上面的状态栏和下面的导航栏 UI 在鸿蒙…

爱奇艺大数据多 AZ 统一调度架构

01# 导语 爱奇艺大数据技术广泛应用于运营决策、用户增长、广告分发、视频推荐、搜索、会员营销等场景,为公司的业务增长和用户体验提供了重要的数据驱动引擎。 多年来,随着公司业务的发展,爱奇艺大数据平台已积累了海量数据,这…

crc, md5 和 sha的区别

效率不同: 直接看代码 import zlib import hashlib import timewith open(rD:\data., rb) as f:x f.read()s time.time() for i in range(100000):d zlib.crc32(x) print(time.time() - s)s time.time() for i in range(100000):m hashlib.md5()m.update(x)d m.hexdige…

边缘计算路由网关R40钡铼技术3LAN口1WAN口Modbus协议

在当今快速发展的工业互联网时代,随着物联网(IoT)与大数据分析的日益融合,边缘计算成为了提高数据处理效率、降低延迟的关键技术。 产品特点: 多接口支持:R40B拥有3个LAN口和1个WAN口的设计,能…

鸿蒙next之导航组件跳转携带参数

官方文档推荐使用导航组件的形式进行页面管理,官方文档看了半天也没搞明白,查了各种文档才弄清楚。以下是具体实现方法: 在src/main/resources/base/profile下新建router_map.json文件 里边存放的是导航组件 {"routerMap" : [{&q…

创建型模式-----建造者模式

目录 背景: 构建模式UML 代码示例 房子成品: 构建器抽象: 具体构建器: 建筑师: 测试部…

【C++篇】栈的层叠与队列的流动:在 STL 的韵律中探寻数据结构的优雅之舞

文章目录 C 栈与队列详解:基础与进阶应用前言第一章:栈的介绍与使用1.1 栈的介绍1.2 栈的使用1.2.1 最小栈1.2.2 示例与输出 1.3 栈的模拟实现 第二章:队列的介绍与使用2.1 队列的介绍2.2 队列的使用2.2.1 示例与输出 2.3 队列的模拟实现2.3.…

vue文件报Cannot find module ‘webpack/lib/RuleSet‘错误处理

检查 Node.js 版本:这个问题可能与 Node.js 的版本有关。你可以尝试将 Node.js 的版本切换到 12 或更低。如果没有安装 nvm(Node Version Manager),可以通过以下命令安装: curl -o- https://raw.githubusercontent.co…

论文速读:YOLO-G,用于跨域目标检测的改进YOLO(Plos One 2023)

原文标题:YOLO-G: Improved YOLO for cross-domain object detection 中文标题:YOLO-G:用于跨域目标检测的改进YOLO 论文地址: 百度网盘 请输入提取码 提取码:z8h7 代码地址: GitHub - airy975924806/yolo…

【虚幻引擎UE】UE5 音频共振特效制作

UE5 音频共振特效制作 一、基础准备1.插件准备2.音源准备 二、创建共感NRT解析器和设置1.解析器选择依据2. 创建解析器3. 创建解析器设置(和2匹配)4.共感NRT解析器设置参数调整5.为共感NRT解析器关联要解析的音频和相应设置 三、蓝图控制1.创建Actor及静…

排序(一)插入排序,希尔排序,选择排序,堆排序,冒泡排序

目录 一.排序 1.插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 二.整体代码 1.Sort.h 2.Sort.c 3.test.c 一.排序 1.插入排序 插入排序基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为 止…

计算机网络原理总结C-网络层

网络层 网络层提供的两种服务网际协议IP 虚拟互连网络IP地址子网掩码(无分类编址CIDR)IP地址和MAC地址IP数据报格式(路由)转发分组的流程 因特网的路由选择协议(动态路由协议) 网际控制报文协议ICMPIP多播…

纯血鸿蒙的最难时刻才开始

关注卢松松,会经常给你分享一些我的经验和观点。 纯血鸿蒙(HarmonyOS NEXT)也正式发布了,绝对是一个历史性时刻,但最难的鸿蒙第二个阶段,也就是生态圈的建设,才刚刚开始。 目前,我劝你现在不要升级到鸿蒙…

最新版本jdbcutils集成log4j做详细sql日志、自动释放连接...等

maven坐标 <!-- MySQL 8 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency><!-- Druid连接池 --><dependency><groupId&…

软考中级嵌入式系统设计师笔记分享(二)

1.TTL 电路是电流控制器件&#xff0c;而CMOS 电路是电压控制器件。 2.TTL 电路的速度快&#xff0c;传输延迟时间短(5-10ns)&#xff0c;但是功耗大。 常见的串行总线有 SPI、II2C、USB、RS232/RS422/RS485、CAN等;高速串行总线主要有 SATA、PCIE、IEEE 1394、Rapidl0、USB 3…