逻辑优化-rewrite

news/2024/11/12 5:09:16/

简介

逻辑综合中的rewrite算法是一种常见的优化算法,其主要作用是通过对逻辑电路的布尔函数进行等效变换,从而达到优化电路面积、时序和功耗等目的。本文将对rewrite算法进行详细介绍,并附带Verilog代码示例。

一、算法原理

rewrite算法的核心思想是通过布尔代数中的等价变换来达到电路优化的目的。具体而言,算法将电路的原始布尔函数通过一系列等价变换转化为更简单的布尔函数,从而达到优化的目的。

二、算法流程

rewrite算法的流程如下所示:

Created with Raphaël 2.3.0开始输入电路的原始布尔函数根据规则库中定义的等价变换规则,将原始布尔函数转化为一个或多个新的布尔函数对新的布尔函数重复上述步骤,直到布尔函数无法继续化简为止输出化简后的布尔函数结束

具体来说,rewrite算法通过一系列等价变换规则将布尔函数转化为其等效的形式,例如如下所示:

同一律: A+A=A; A*1=A;
零元素: A+0=A; A*0=0;
吸收律: A+AB=A; A(A+B)=A;
分配律: A*(B+C)=AB+AC;
德摩根定律: ~(A+B)=~A~B; ~(AB)=~A+~B;
布尔恒等式: A+~A=1; A*~A=0;
交换律: A+B=B+A; AB=BA;
结合律: A+(B+C)=(A+B)+C; A*(BC)=(AB)*C;
分配律的逆定理: (A+B)C=(AC)+(B*C);
吸收律的逆定理: A+(AB)=A; A(A+B)=A。

通过这些等价变换规则,rewrite算法可以将一个布尔函数化简为其最简形式,从而达到电路优化的目的。

3. 示例

假设我们有一个简单的逻辑电路,其功能等价于两个输入a和b做异或运算,输出结果为c:

module xor_gate(input a, b, output c);assign c = a ^ b;
endmodule

我们可以使用逻辑综合中的rewrite算法对这个电路进行优化,从而得到一个更为简单的电路。

具体来说,我们可以应用一个rewrite规则:将异或门替换为两个AND门、一个OR门和两个NOT门的等效电路。下面是应用这个规则后的Verilog代码:

module xor_to_and_or(input a, b, output c);wire not_a, not_b, and_a_b, and_not_a_not_b, or_a_b;assign not_a = ~a;assign not_b = ~b;assign and_a_b = a & b;assign and_not_a_not_b = not_a & not_b;assign or_a_b = and_not_a_not_b | and_a_b;assign c = ~or_a_b;
endmodule

然后,我们可以在原始的xor_gate模块中,使用新的xor_to_and_or模块来实现优化后的电路,如下所示:

module xor_gate(input a, b, output c);xor_to_and_or rule(.a(a), .b(b), .c(c));
endmodule

通过这个优化,我们将一个异或门转化为了两个AND门、一个OR门和两个NOT门的电路结构,从而实现了对电路的优化,事实上这是一个反向的 “优化”。

当然,这只是一个简单的例子,实际应用中rewrite算法的规则和应用方法可能会更加复杂和多样化,需要根据具体的设计需求和约束来确定。同时,需要注意电路优化可能会对电路的性能、功耗、可靠性等方面产生影响,需要进行综合分析和评估。

了解ABC中的rewriting,请参考博客:【逻辑综合知识点总结】


http://www.ppmy.cn/news/30141.html

相关文章

JOSN数据转换和解析

文章目录JOSN数据转换和解析内容回顾Map 集合转成 JSON 字符串List 集合转换成 JSON 字符串Ajax 异步和同步异步概念同步概念异步和同步区别异步请求案例同步请求时间格式化旧时间 api 格式化格式化和解析的工具类JSTL 时间格式化JSTL 使用JOSN数据转换和解析 内容回顾 ajax …

【Linux】基本系统维护命令

😊😊作者简介😊😊 : 大家好,我是南瓜籽,一个在校大二学生,我将会持续分享C/C相关知识。 🎉🎉个人主页🎉🎉 : 南瓜籽的主页…

Django学习17 -- ManytoManyField

1. ManyToManyField (参考:Django Documentation Release 4.1.4) 类定义 class ManyToManyField(to, **options)使用说明 A many-to-many relationship. Requires a positional argument: the class to which the model is related, which w…

Qt安装与使用经验分享;无.pro文件;无QTextCodec file;Qt小试;界面居中;无缝;更换Qt图标;更换Qt标题。

1、切换安装下载源 《Qt安装教程》先推荐一篇安装文章:《Qt安装教程》 Qt 5.15 之后已经不提供离线安装包了,就是那个 3.7G 的 exe 安装包。请看官方说明,所以只能用在线安装包。 1,下载在线安装包 QT 在线安装包链接&#xff…

【第二章】谭浩强C语言课后习题答案

1. 什么是算法?试从日常生活中找3个例子,描述它们的算法 算法:简而言之就是求解问题的步骤,对特定问题求解步骤的一种描述。 比如生活中的例子: 考大学首先填报志愿表、交报名费、拿到准考证、按时参加考试、收到录取通知书、按照日期到指定学校报到。 去北京听演唱会首先…

为什么人们宁可用Lombok,也不把成员设为public?

目录专栏导读一、从零了解JavaBean1、基本概念2、JavaBean的特征3、JavaBean的优点二、定义最简单的JavaBean三、思考一个问题,为何属性是private,然后用get/set方法?四、下面系统的分析以下,why?五、不和谐的声音,禁…

企业选择人力资源管理系统(HRMS)的一些建议

HR管理系统,全称为人力资源管理系统(HRMS)。企业选择HR管理系统,首先要了解这个系统是什么。 什么是HRMS? 一个人力资源管理系统,通常简称为人力管理系统,是一个软件应用程序,使人力…

二分查找与判定树

二分查找的算法思想二分查找也称“折半查找”,要求查找表为采用顺序存储结构的有序表。本例一律采用升序排列。二分查找每一次都会比较给定值与序列[low,high]的中间元素,该元素的下标为mid (lowhigh)/2,若两者相等,则返回元素的下标为mid;如…