当前位置: 首页 > news >正文

逻辑优化基础-shannon decomposition

1. 简介

在逻辑综合中,香农分解(Shannon decomposition)是一种常用的布尔函数分解方法。它将一个布尔函数分解为两个子函数的和,其中每个子函数包含一个布尔变量的取反和非取反的部分

具体来说,假设对于一个布尔函数 F(x1,x2,...,xn)F(x_1, x_2, ..., x_n)F(x1,x2,...,xn)

进行香农分解,首先选定进行分解的变量,假设为xkx_kxk,则该香农分解可以表示为:

F(x1,x2,...,xn)=xk∗Fk(x1,x2,...,xn,xk=1)+xk′∗Fk′(x1,x2,...,xn,xk=0)F(x_1, x_2, ..., x_n) = \\ x_k * F_k(x_1, x_2, ..., x_n, x_k=1) + x'_k * F_k'(x_1, x_2, ..., x_n, x_k=0) F(x1,x2,...,xn)=xkFk(x1,x2,...,xn,xk=1)+xkFk(x1,x2,...,xn,xk=0)
其中,xkx_kxk 是函数 FFF 的一个输入变量,xk′x'_kxkxkx_kxk 的取反,FkF_kFk 是当 xk=1x_k=1xk=1FFF 的取值为真时的部分函数,Fk′F_k'Fk 是当 xk=0x_k=0xk=0FFF 的取值为真时的部分函数。

这个分解的意义在于,它将一个布尔函数 FFF 分解成了两个子函数 FkF_kFkFk′F_k'Fk,这两个子函数相互独立,因为它们只与 FFF 的一个输入变量 xkx_kxk 有关。这种分解可以用于减少门电路的复杂度,从而实现更快的逻辑运算和更小的电路面积,如何拿到更小的面积,后续了解到了再补充,本文主要是得到更快的速度。

香农分解的基本思想可以进一步扩展到多个输入变量的情况,即将一个布尔函数 F(x1,x2,...,xn)F(x_1, x_2, ..., x_n)F(x1,x2,...,xn) 分解成两个子函数 F0 和 F1,其中 F0 和 F1 分别只与 x1x_1x1 取 0 和 1 时的输入变量 x2,x3,...,xnx_2, x_3, ..., x_nx2,x3,...,xn 有关。这种扩展的香农分解方法被称为递归香农分解(Recursive Shannon Decomposition),在实际的逻辑综合和电路设计中得到了广泛的应用。

2. 示例

假设有一个函数:
F=(a,b,c,x)F = (a, b, c, x) F=(a,b,c,x)
以变量 xxx 进行分解,则可以得到以下表达式:
F=x.(a,b,c,1)+x′.F(a,b,c,0)F = x.(a, b, c, 1) + x′.F(a, b, c, 0) F=x.(a,b,c,1)+x′.F(a,b,c,0)
如果用电路图来表示以上分解的话,如下所示:

在这里插入图片描述

更近一步,常数的信号通常可以被优化掉,变成以下的结构:

在这里插入图片描述

我们可以看到,经过香农分解后,信号 xxx 距离输出 outputoutputoutput 最近,xxx 所在的路径是整个 logic cone 中最快的一条。

所以说如果在电路 output required time 确定的情况下,某一个信号的 arrival time 非常的晚,可以把这个信号向靠近output的方向 push,从而降低电路的延迟。

这种做法的缺点也是显而易见的,至少在这个例子中,面积几乎一直出于增长的状态。

按照上面简介部分介绍的递归香农分解继续执行的话,可以得到如下电路:

在这里插入图片描述

2.1 个人理解

做timing优化的时候主要是将那些 arrival time 比较慢的信号尽可能的往 output 推,所以也就是说要基于这些 arrival time慢的信号进行香农分解。

3. 特殊案例(pipeline loop)

香农分解是优化电路中 looplooploop 的一种有效技术。当你对 looplooploop 中的逻辑执行香农分解时,looplooploop 中的逻辑会移动到 looplooploop 外部。从而可以对移动到循环外部的逻辑进行 pipelinepipelinepipeline 处理。

假设有以下一个 looplooploop 电路,因为是在一个 looplooploop 里面,所以这一部分信号不能进行 pipelinepipelinepipeline

在这里插入图片描述

该电路有一个单独的 registerregisterregister 和一个额外的输出,我们可以通过执行香农分解将这个 looplooploop 的逻辑移动到外部以进行 pipelinepipelinepipeline,具体的做法如下:

我们知道 registerregisterregister outputoutputoutput的值只能为 0 或者 1,所以我们可以将驱动 registerregisterregister 的逻辑复制(duplicate)一份,一份 registerregisterregister 的输入为 000, 一份为 111,即对于这个outputoutputoutput 进行香农分解,即可得到以下的电路:

在这里插入图片描述

相关文章:

逻辑优化基础-shannon decomposition

1. 简介 在逻辑综合中,香农分解(Shannon decomposition)是一种常用的布尔函数分解方法。它将一个布尔函数分解为两个子函数的和,其中每个子函数包含一个布尔变量的取反和非取反的部分。 具体来说,假设对于一个布尔函…...

Java中线程池的创建与使用

前言:默认线程池的弊端在线程池应用中,参考阿里巴巴java开发规范:线程池不允许使用Executors去创建,不允许使用系统默认的线程池,推荐通过ThreadPoolExecutor的方式,这样的处理方式让开发的工程师更加明确&…...

关于HashMap与OkHttp的使用

写了一个okhttp的post请求方法,添加参数很麻烦,需要封装: //post请求public static void sendOkHttpRequestPost(String address , Callback callback) {OkHttpClient client new OkHttpClient();// 创建表单参数RequestBodyRequestBody fo…...

华为OD机试 - 单词倒序(C 语言解题)【独家】

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:单词倒序…...

搭建Samba服务器

搭建Samba服务器 文章目录搭建Samba服务器samba安装安装命令配置-ubuntu侧为samba服务器创建一个共享目录share创建使用该共享文件夹的账号修改samba服务器配置文件重启samba服务windows创建映射1.点击映射网络驱动器2.输入Ubuntu中的ip地址及其用户信息3.输入用户信息及其密码…...

Matlab进阶绘图第5期—风玫瑰图(WindRose)

风玫瑰图(Wind rose diagram)是一种特殊的极坐标堆叠图/统计直方图,其能够直观地表示某个地区一段时期内风向、风速的发生频率。 风玫瑰图在建筑规划、环保、风力发电、消防、石油站设计、海洋气候分析等领域都有重要作用,所以在一些顶级期刊中也能够看…...

【SQL开发实战技巧】系列(二十四):数仓报表场景☞通过执行计划详解”行转列”,”列转行”是如何实现的

系列文章目录 【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧…...

XILINX AXI总线学习

AXI介绍什么是AXI?AXI(高级可扩展接口),是ARM AMBA的一部分;AMBA:高级微控制器总线架构;是1996年首次引入的一组微控制器总线;开放的片内互联的总线标准,能在多主机设计中实现多个控…...

2022CCPC女生赛(补题)(A,C,E,G,H,I)

迟了好久的补题&#xff0c;&#xff0c;现在真想把当时赛时的我拉出来捶一拳排序大致按照题目难度。C. 测量学思路&#xff1a;直接循环遍历判断即可&#xff0c;注意角度要和2π取个最小值。AC Code&#xff1a;#include <bits/stdc.h>typedef long long ll; const int…...

【Nginx】Nginx的安装配置

环境说明系统&#xff1a;Centos 7一、编译安装Nginx官网下载地址nginx: download#安装依赖 [rootnginx nginx-1.22.1]# yum install gcc pcre pcre-devel zlib zlib-devel -y #从官网下载Nginx安装包&#xff0c;并进行解压、编译、安装 [rootnginx ~]# wget https://nginx.or…...

数学小课堂:统计时有效地筛选数据

文章目录引言I 被爆冷门的原因II 统计时有效地筛选数据2.1 统计数据的常见问题2.2 大数据的特征2.3 有效筛选数据的原则引言 在博弈论中很多结果有发生的概率&#xff0c;而概率这件事只是估计出来的&#xff0c;并不准确。因此&#xff0c;一旦加入博弈的选手多了之后&#x…...

MySQL安装优化

hello&#xff0c;大家好&#xff0c;我是小鱼 本文主要通过针对 MySQL Server&#xff08;mysqld&#xff09;相关实现机制的分析&#xff0c;得到一些相应的优化建议。主要 涉及 MySQL 的安装以及相关参数设置的优化&#xff0c;但不包括 mysqld 之外的比如存储引擎相关的参…...

RocketMQ系列开篇

RocketMQ系列开篇 今天开始学习RocketMQ相关系列源码。我会带着自己的目的去学习源码。所以不会像一般的技术博客一样&#xff0c;写一个完整的流程&#xff0c;介绍每一步干了啥。而是提出一个问题&#xff0c;然后去看代码里面是怎么实现的。说明一下&#xff0c;本次系列我…...

logback无法删除太久远的日志文件?logback删除日志文件源码分析

logback无法删除太久远的日志文件&#xff1f;logback删除日志文件源码分析 最近发现logback配置滚动日志&#xff0c;但是本地日志文件甚至还有2年前的日志文件&#xff0c;服务器是却是正常的&#xff01; 网上搜索了一波没有发现&#xff0c;只找到说不能删除太久远的旧日志…...

【MyBatis-Plus】基于@Version注解的乐观锁实现

引入mybatis-plus依赖&#xff0c;注意这里的版本要求 since 3.4.0&#xff1b;&#xff08;3.4.1,3.4.2已测&#xff09; 3.2.0肯定是不支持的&#xff0c;无法引入MybatisPlusInterceptor&#xff1b; 乐观锁 当要更新一条记录的时候&#xff0c;希望这条记录没有被别人更新…...

ubuntu20.04搭建detectron2环境

Ubuntu22.04安装Cuda11.3 Linux下驱动安装 # 以下命令按顺序执行 sudo apt update && sudo apt upgrade -y # or sudo apt update # 查看显卡信息 ubuntu-drivers devices sudo ubuntu-drivers autoinstall # or sudo apt install nvidia-driver-510 reboot nvidia-s…...

Navicate远程连接Linux上docker安装的MySQL容器

Navicate远程连接Linux上docker安装的MySQL容器失败 来自&#xff1a;https://bluebeastmight.github.io/ 问题描述&#xff1a;windows端的navicat远程连接不上Linux上docker安装的mysql&#xff08;5.7版本&#xff09;容器&#xff0c;错误代码10060 标注&#xff1a; 1、…...

基于Jetson NX的模型部署

系统安装 系统安装过程分为3步&#xff1a; 下载必要的软件及镜像 Jetson Nano Developer Kit SD卡映像 https://developer.nvidia.com/jetson-nano-sd-card-image Windows版SD存储卡格式化程序 https://www.sdcard.org/downloads/formatter_4/eula_windows/ 镜像烧录工具…...

【PaddlePaddle onnx】PaddlePaddle导出ONNX及模型可视化教程

文章目录1 背景介绍2 实验环境3 paddle.onnx.export函数简介4 代码实操4.1 PaddlePaddle与ONNX模型导出4.2 ONNX正确性验证4.3 PaddlePaddle与ONNX的一致性检查4.4 多输入的情况5 ONNX模型可视化6 ir_version和opset_version修改7 致谢原文来自于地平线开发者社区&#xff0c;未…...

虹科案例 | 如何可持续的对变压器进行温度监控?

为了延长变压器的使用寿命&#xff0c;需要一个测量系统来监测内部整个绕组区域的温度。它必须明确温度升高发生的位置及其强度。您可以在此处了解为什么会这样以及如何在实践中实施? PART 1 变压器多点测温问题 变压器的工作温度越高&#xff0c;使用寿命越短。这里主要存在…...

Go之入门(特性、变量、常量、数据类型)

一、Go语言特性 语法简单并发性。Go语言引入了协程goroutine&#xff0c;实现了并发编程内存分配。Go语言为了解决高并发下内存的分配和管理&#xff0c;选择了tcmalloc进行内存分配&#xff08;为了并发设计的高性能内存分配组件&#xff0c;使用cache为当前线程提供无锁分配…...

第九届省赛——8等腰三角形(找规律)

题目&#xff1a;本题目要求你在控制台输出一个由数字组成的等腰三角形。具体的步骤是&#xff1a;1. 先用1,2,3&#xff0c;...的自然数拼一个足够长的串2. 用这个串填充三角形的三条边。从上方顶点开始&#xff0c;逆时针填充。比如&#xff0c;当三角形高度是8时&#xff1a…...

【产品设计】ToB 增删改查显算传

入职培训时技术leader说&#xff1a;“我不需要你们太聪明&#xff0c;做好基础的增删改查就可以了。”看似很简单的活&#xff0c;要做好并不容易。基础的坑在哪里呢&#xff1f; 一、 增&#xff08;新增、创建、导入&#xff09; 1. 明确表字段类型 新增的业务是由不同类型…...

MySQL(二)视图、锁、存储过程、触发器、锁以及常用工具

MySQL进阶视图检查选项视图的更新存储过程存储过程基本语法变量系统变量用户自定义变量局部变量if判断参数casewhile循环repeat循环loop循环cursor游标handler条件处理程序存储函数触发器锁全局锁表级锁表锁元数据锁意向锁行级锁行锁间隙锁&临键锁InnoDB引擎逻辑存储结构事…...

CorelDRAW Graphics Suite2023更新内容介绍

懂设计的职场人都知道这款软件&#xff0c;CorelDRAW是一款非常高效的矢量图形设计软件。CorelDRAW操作界面简洁易懂&#xff0c;能够为用户提供精确地创建物体的尺寸和位置的功能&#xff0c;减少点击步骤&#xff0c;提高设计效率&#xff0c;节省设计时间。功能比普通的美图…...

2021牛客OI赛前集训营-提高组(第三场) T1变幻

2021牛客OI赛前集训营-提高组&#xff08;第三场&#xff09; 题目大意 对于一个大小为nnn的数组aaa的任意一点iii&#xff0c;若满足ai−1>aia_{i-1}>a_iai−1​>ai​且ai<ai1a_i<a_{i1}ai​<ai1​&#xff0c;则称iii为山谷点。111和nnn不可能为山谷点。…...

你还在使用if-else写代码吗,今天带你领略下策略模式的魅力!

1、什么是策略模式 策略模式其实也是在解耦&#xff0c;把策略的定义、创建、使用这三个部分解耦开来&#xff0c;因为本身策略模式也是基于接口编程&#xff0c;这样其实可以简单的理解客户端调用使用接口进行编程&#xff0c;可以通过工厂方法创建对应的策略模式&#xff0c…...

Leetcode. 21 合并两个有序列表

尾插 核心思路&#xff1a;依次比较 &#xff0c;取经过比较后较小值进行尾插 cur1 指向list1 ,cur 2指向list2 ,当cur1走完list1 或者cur2 走完list2 后停止 如果cur1走完list1 ,可以将cur2 整个拿下来尾插 如果cur2走完list2 ,可以将cur1 整个拿下来尾插 特殊情况 &#xff1…...

使用 Wall 教你搭建 照片墙 和 视频墙

下载 Github:https://github.com/super-tongyao/wall 国内仓库&#xff08;不推荐&#xff0c;只做加速访问&#xff0c;无编译包和发行版&#xff0c;以github仓库为准&#xff09;&#xff1a;https://gitee.com/Super_TongYao/wall 推荐github仓库&#xff0c;下载最新版…...

0103 MySQL06

1.事务 1.一个事务其实就是一个完整的业务逻辑 如&#xff1a;转账&#xff0c;从A账户向B账户转账10000&#xff0c;将A账户的钱减去10000&#xff08;update&#xff09;&#xff0c;将B账户的钱加上10000&#xff08;update&#xff09;&#xff0c;这就是一个完整的业务逻…...