学习笔记--Verilog HDL高级数字设计--第六章组合逻辑与时序逻辑的综合

2023-11-02

组合逻辑与时序逻辑的综合

综合引擎能够自动完成一组布尔函数的最简化,并将结果映射成能满足设计目标的硬件实现。(转换,优化,映射)
本章将介绍如何编写易于综合的Verilog模型
综合工具完成的工作:
(1)检测并消除冗余项
(2)查找组合反馈环路
(3)利用无关紧要条件
(4)检测出未使用状态
(5)查找并消除等价状态
(6)进行状态分配
(7)在满足物理工艺的面积和/速度限制下,综合出最优多级逻辑实现。(该步既包括了最优化技术,又有工艺映射内容)

综合简介

Y形图

在这里插入图片描述
在这里插入图片描述
三个轴代表看数字电路的三种角度。
同心圆代表不同的抽象程度。
行为描述角度:我们只关心电路和系统的功能,不关心它的具体实现。换句话说,设计被看作是一个black-box,通过产生一些输出符号来响应一些输入符号来处理信息。最重要的是过去输出和当前输入的依赖性,但是输入、输出数据和一些时钟信号之间的时序关系也很重要。
结构描述角度:用组成电路的构件以及它们之间的连接方式(connectivity)作为研究电子电路的结构化方法。行为描述与结构描述之间存在一对多的关系。结构方案通常在电路复杂性、性能、能源效率以及其他实用性方面有所不同。
物理描述角度:我们关心各种硬件组组件和线如何安排在可用的空间中。
不同的抽象层次
在这里插入图片描述
可以看出system和architecture抽象层次无时钟概念。

BFM

以下内容摘抄自我老师的微博:
http://blog.sina.com.cn/s/blog_5e9b181a0100y6lt.html
以做一个MAC的core为例(背板是PCI总线),那么我们需要一个MAC_BFM和PCI_BFM及PCI_BM(PCI behavior. model)。MAC_BFM的主要功能是产生以太网帧(激励源),随机的长度和帧头,内容也是随机的,在发送的同时也将其复制一份到PCI_BM中;PCI_BFM的功能则是仿PCI总线的行为,比如被测收到了一个正确帧后会向PCI总线发送一个请求,PCI_BFM则会去响应它,并将数据收进来;PCI_BM的主要功能是将MAC_BFM发送出来的东西与PCI_BFM接收到的东西做比较,由于它具有了MAC_BFM的发送信息和PCI_BFM的接收信息,只要设计合理,它总是可以自动地、完全地去测试被测是否工作正常,从而实现自动检测。
因此,BFM可以看作是总线接口的行为级模型,他用来测试接在总线上的module。因此,这个测试平台就是BFM。VMM测试模型和VCM模型也许里面就是这样的测试平台的功能集合还有对一些测试激励产生的模型

逻辑综合

综合过程中的转换一定要保证综合前后电路输入-输出的等效性,以及生成电路的可测性
综合过程中的优化是基于迭代搜索的,先逻辑优化再性能优化。
关键算法:分解(decomposition)、因式分解(factoring)、替代(substitution)和消去(elimination)。

分解

分解操作依据新节点来表示一个单一的布尔函数。这些节点对应多个布尔函数的公共因子,可以用来消除重复逻辑
F = abc + abd + a’c’d’ + b’c’d’
分解操作可以用两个附加内部节点——X = ab,Y = c + d——通过复用形成函数,从而减小硬件电路面积。在这里插入图片描述分解后电路

因式分解

在一组函数中寻找公共因子的过程叫因式分解。通过因式分解可产生一组和之积形式的函数,可以利用它将两级实现的电路转换为等效的多级实现。(使面积减小,但可能性能也变差)
假设F = ac + ad + bc + bd +e可因式分解为F = (a + b)(c + d) + e
在这里插入图片描述
在这里插入图片描述符号少逻辑单元便少

替代

替代操作就是用原有的输入和其他函数表示布尔方程的过程。(减少重复逻辑
假设*G = a + b, F = a + b + c *
替换之后:F = G + c
在这里插入图片描述
a图需要三个加法器,b图需要两个。

消去

消去过程可去除函数中的某个节点并简化电路结构,这一步也称为电路展平。(创建一个更快速的两级结构)
假设F = Ga + G’b, G = c + d
消去之后:F = ac + ad + bc’d’
在这里插入图片描述

高级综合

又称为“行为综合”和“结构综合”。高级综合是从一个不包含具体实现细节的输入-输出算法开始的。
执行的两个主要步骤:资源分配和资源调度,以产生一个包含数据通路单元、控制通路单元和存储器的电路结构。
一个假象算法如图:
一个假象算法
数据流图(b)显示了数据之间的依赖关系。
资源分配标识出算法中所用的运算符(逻辑单元),并且推断出用于保存算法顺序执行过程中产生的数据所需的存储资源,还将操作符(运算资源)以及存储资源绑定到数据通路资源中。
资源调度将行为描述中的操作分配到特定的时钟周期(隐含状态),以实现算法设定的操作顺序。
这将最终确定在一个给定时钟周期中将要使用的,以及不同时钟周期之间共享的计算单元(操作符)数量。

组合逻辑的综合

利用无关紧要项

在综合时caseif语句中使用x的赋值将被处理成无关紧要项。即在此输入下,不关心case中的赋值情况,以减少实现电路所需的逻辑。

带锁存器的时序逻辑综合

综合要点
(1)含反馈的组合原语网表和一组连续赋值语句描述可能会被标为一个错误条件,且不可综合。但连续复制语句中使用带反馈的条件操作符时,综合工具会判定这是一种有意生成锁存器的方法(这种情况会用组合逻辑实现,不会在单元库中寻找单元去实现)。
(2)在电平敏感周期性行为中,如果if和case语句只是条件不完整则综合出锁存器;如果条件完备,但出现变量将其指显示地赋给它自身的情况,则综合出带反馈的多路复用器(类似带反馈的使用条件操作符的assign)。

带有触发器的时序逻辑综合

触发器仅有边沿敏感的行为综合而来,但并不是在边沿敏感的行为中赋值的每一个寄存器变量都会综合成触发器。那么就需要考虑一下几个问题。
(1)综合工具如何推导出对触发器的需求的?
(2)边沿敏感行为中被赋值的寄存器变量,什么时候会自动综合成一个触发器?
(3)触发器是由一个时钟信号进行同步的——综合工具如何从其他信号中区分出同步信号来?或者它必须要用特定的标识符来识别么(如clock)?
(4)如果一个设计中包含多级触发器,那么应该怎样描述模型才能确保它们能够并行工作?

综合工具如何推导出对触发器的需求的? && 边沿敏感行为中被赋值的寄存器变量,什么时候会自动综合成一个触发器?

在边沿敏感行为中:
(1)如果该寄存器变量在进行行为描述的范围外被使用。
(2)如果该寄存器变量在未被赋值前就已在行为描述中被用到。(反馈)
(3)如果该寄存器变量仅在行为描述动作的某些分支上被赋值。
综合要点
当一个变量在被内部行为(而不是外部行为)引用前就被周期性行为赋值,综合过程将消除这个变量。
例:
在这里插入图片描述
寄存器变量k仅在内部使用(对应第一条)
它被赋值前未被引用(对应第二条),所以变量k仅仅用来支持算法,并不需要实际的硬件存储器,因此它将在综合时被消除。
综合要点:
由边沿敏感行为赋值并在该行为之外会用到的变量会被综合为一个触发器输出。
例:
在这里插入图片描述
D_out会被消除,但如果将D_out定义为输出端口,则它将被综合为一个触发器输出。

触发器是由一个时钟信号进行同步的——综合工具如何从其他信号中区分出同步信号来?或者它必须要用特定的标识符来识别么(如clock)?

在一个边沿敏感周期性行为的事件控制表达式中,边沿敏感信号由译码的顺序决定哪些是控制信号,哪一个是时钟信号(同步信号)。
如果事件控制表达式对多个信号都是边沿敏感的,那么在该行为描述中必须首先声明if条件语句。
该事件控制表达式的控制信号必须在if条件分支中优先进行译码(例如。首先对复位信号进行译码)。
同步信号不会在if语句条件中被明确地写出,但默认情况下,if语句中最后一个分支的动作必须进行同步操作。

显示状态级的综合

在介绍该内容之前,先来学习一下人工设计状态级的方法,这对后续内容的理解会有帮助。

人工方法设计

设计步骤:
(1)构建状态机的STG
(2)消去等价状态
(3)选取状态码(如二进制码)
(4)对状态编码
(5)求解描述D触发器输入的布尔方程
(6)利用卡诺图化简布尔方程
假设要设计一个将串行发送的BCD码Bin转换为一个余3码的串行比特流Bout的转换器。且Bin和Bout都是先从LSB发送。
在这里插入图片描述
(1)构建状态机的STG
在这里插入图片描述
假设Bin[0]为LSB,如果Bin[0]做完加法运算有进位则跳转到S_2,否则跳转到S_1;若Bin[1]有进位则跳转到S_4……
(2)分配码字
在这里插入图片描述
(3)求解并化简布尔方程
在这里插入图片描述
将q2+和Bout转换为与非门结构得
在这里插入图片描述
在这里插入图片描述
可以得到原理图为:
在这里插入图片描述

状态编码

状态编码决定了保存状态所需要的触发器数量,它会影响状态机的下一状态和输出逻辑复杂度。综合工具内嵌了各种算法以寻找优化的状态分配方案,设计者也可以采取手动方式进行状态编码的分配。
手动分配原则:
(1)如果对于某个给定输入,两个状态会跳转到相同的下一状态,则给它们分配相邻的码字。
(2)对相邻的状态分配相邻的码字。
(3)对于某个给定的输入具有相同的输出的状态,分配相邻的码字。
常见的状态分配编码
在这里插入图片描述
Gray码和Johson码特点是相邻编码仅有一个位不同,可以减少相邻物理信号线信号同时变化的情况,从而减少串扰的可能。而且在实际硬件操作中发生状态变化时,该类编码可减少通过中间状态的过度时间
One-Hot编码使用的触发器数目相对较多,但其状态级中只需要对寄存器中的个位进行译码,所以它的译码逻辑比较简单。因此One-Hot编码速度更快,且额外的触发器面积可被译码电路节省的面积抵消。而且使用case语句来描述的One-Hot编码可能与if语句描述产生不同的结果(case是对所有bit进行判断,if可检测单一bit)。
注意,如果一个状态编码没有覆盖所有码值,那么需要附加的逻辑来检查无效状态,并从无效状态中恢复(不会跳转进入无效状态,而可能由噪声将状态级带入无效状态)。这种附加逻辑会影响实现设计所需的面积。

综合要点

一般来说,应避免输入的变化与状态的变化同步进行,除非输入对于跳变沿来说是无关紧要状态。

寄存器逻辑

利用时钟进行同步赋值的变量称为寄存器类型变量。Moore状态机的输出不是寄存器类型变量,但当输入端变化时它不会产生毛刺。

寄存输出的状态机

在这里插入图片描述
其中c和d的结构满足寄存器的输出与状态级当前时钟周期的状态相对应。
但是我认为Mealy型状态级的状态转移和输入是相同沿同步时,即使使用c的结构也还是会延迟一个周期输出,因为Mealy输出与当前输入有关,即使能预测下一周期状态也无法预测下一周期的输入信号。

隐式状态机综合

在这里插入图片描述
隐式状态机在一个行为中具有一个或多个时钟同步的(边沿敏感的)时间控制表达式。显式状态机的同步行为只能有一个这样的事件控制表达式。隐式状态机中的多个事件表达式将行为动作分配到状态机的不同时钟周期。
隐式状态机不使用明确的reg来表示状态值,而是由周期性 行为中的动作变化来隐性地定义状态。
隐式状态机的限制:每一状态只能由其他一种状态进入,因为状态是由一个时钟周期进入下一时钟周期时行为的进展情况决定的,而一个时钟周期只能从他紧邻的前一个时钟周期进入。

预测综合结果

运算符的综合:①通过综合工具中的专用映射器以某种特殊的方式来处理;②综合工具将会把这些运算符转换成等效的布尔方程组并进行优化。
综合结果的结构将会反映出编译器的语法分析过程(从左到右)和运算符的优先级,设计者可以是用括号来形成子表达式,以影响综合结果。

循环的综合

在这里插入图片描述

带内嵌定时控制的静态循环

如果一个静态循环包含内嵌的边沿敏感事件控制表达式,该循环的计算行为会被同步,且会分布到一个或多个时钟周期上执行。因此该行为就是循环的每次迭代都在时钟沿之后进行的隐式状态机
在这里插入图片描述
在这里插入图片描述

带内嵌定时控制的非静态循环

非静态循环可以实现多周期操作。因为可以将循环的动作分配到多个时钟周期去执行。为了综合,非静态循环的迭代操作必须通过一个同步的边沿敏感的事件控制表达式来分割。

不带内嵌定时控制的非静态循环

我认为语义就是一个带反馈的组合逻辑,能够仿真但不能综合。

状态机替代不可综合循环

循环结构可由等效的可综合时序行为来代替。替代的关键是用显示有限状态机来描述这种行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习笔记--Verilog HDL高级数字设计--第六章组合逻辑与时序逻辑的综合 的相关文章

  • chisel快速入门(三)

    前一篇见此 chisel快速入门 二 沧海一升的博客 CSDN博客简单介绍了chisel 使硬件开发者能快速上手chisel https blog csdn net qq 21842097 article details 121418806
  • ARM架构和x86架构有什么区别?

    X86结构和ARM架构是主流的两种CPU架构 X86架构的CPU是PC服务器行业的老大 ARM架构的CPU则是移动端的老大 X86架构和arm架构实际上就是CISC与RISC之间的区别 很多用户不理解他们两个之间到底有那些区别 实际就是他们
  • 【HDLBits 刷题 12】Circuits(8)Finite State Manchines 27-34

    目录 写在前面 Finite State Manchines 2014 q3c m2014 q6b m2014 q6c m2014 q6 2012 q2fsm 2012 q2b 2013 q2afsm 2013 q2bfsm 写在前面 HD
  • IC笔试: 时钟约束中 clock,generated clock ,virtual clock区别与联系

    时钟约束sdc常用的命令有 creat clock creat generated clock set clock uncertainty set clock groups 时钟的三要素 Waveform uncertainty 和cloc
  • spyglass的waiver使用问题总结-工具(八)

    spyglass使用过程中waiver warning及error过程中总会出现生效不成功的问题 总结使用步骤供参考 实践出真知 解决问题就是好方法 1 在spyglass的prj中设置默认waiver文件 2 如何waiver 3 查看已
  • 数字后端知识点扫盲——芯片harden block的划分

    后端在floorplan阶段 如何摆放macro是一个很重要的问题 如果采用层次化设计 对于每一个block来说都需要在block内部把锁分配的macro摆好 如果某一个block里的macro很多 而且又很大 std cell再多一些 这
  • Vcs+Verdi 联调

    lmg vcs lmdown y 等待两分钟 再次输入指令 lmg vcs 激活license 目录 主要参考示例 问题1 需要修改默认的shell 问题2 v 快速在flist添加路径失败 问题0 bash alias verdi 未找到
  • 芯片设计制造全过程

    芯片设计制造全过程 将一颗芯片从0到1 可以分为芯片设计和芯片制造两部分 芯片设计对应市场上一些fabless公司 这类公司只做芯片设计 而芯片制造对应的是foundary 比如国内的smic TSMC 国外的Samsung GlobalF
  • disable path和false path的作用与区别

    disable path和false path的作用与区别C 欢迎使用Markdown编辑器 链接 disable与false的相同与不同 false path 指定某一条path 工具计算delay 但不报时序 disable path
  • 【HDLBits 刷题 13】Buliding Larger Circuits

    目录 写在前面 Buliding Larger Circuits count1k shiftcount fsm seq fsmshift fsm fancytimer fsm onehot 写在前面 以下的解题方法不一定为最佳解决方案 有更
  • CRC算法并行运算Verilog实现

    因为CRC循环冗余校验码的算法和硬件电路结构比较简单 所以CRC是一种在工程中常用的数据校验方法 尽管CRC简单 但在工程应用中还是有些问题会对工程师产生困惑 这篇文章将介绍一下CRC 希望对大家有所帮助 一 CRC算法介绍 CRC校验原理
  • 【HDLBits 刷题 6】Circuits(2)Sequential Logic---Latches and Filp Flops

    目录 写在前面 Latches and Filp Flops Dff Dff8 Dff8r Dff8p Dff8ar Dff16e D Latch DFF1 DFF2 DFF gate Mux and DFF1 Mux and DFF2 D
  • 【HDLBits 刷题 15】Verification Writing Testbenches

    目录 写在前面 Verification Writing Testbenches clock Tb tb1 Tb and Tb tb2 Tb tff 写在前面 以下的解题方法不一定为最佳解决方案 有更好的方法欢迎提出 共同学习 共同进步 终
  • 数字SOC设计之低功耗设计入门(三)——系统与架构级低功耗设计

    前面讲解了使用EDA工具 主要是power compiler 进行功耗分析的流程 这里我们将介绍在数字IC中进行低功耗设计的方法 同时也结合EDA工具 主要是Design Compiler 如何实现 我们的讲解的低功耗设计主要是自顶向下的设
  • 【EDA Tools】Spyglass 检查 Verilog 和 SystemVerilog 混合语言及 Lint 检查

    目录 写在前面 读入设计 发现问题并解决 Lint 检查 写在前面 Spyglass可以用于检查混合设计中的语言互操作性和一致性问题 对于设计中包含多种硬件描述语言的情况 Spyglass 能够识别并解析其中的模块及其互连 并对其进行验证
  • Design Compiler指南——设计综合过程

    在前面一章介绍完施加约束之后 接下来要做的工作就是将设计进行综合编译 compile 本文我们将主要讨论综合编译的过程 主要分为这样几个部分 优化的三个阶段及其特点 编译的策略 编译层次化的设计 一 优化的三个阶段 这一节我们介绍Desig
  • 【数字电路基础】三态门

    目录 前言 三态门 经典问题 前言 文主要讲解三态门 三态门 其模型为 其实际电路为 其真值表为 B A C 0 0 Z 0 1 Z 1 0 0 1 1 1 注意 Z是高阻 不代表没有电压 而是电压不确定 受自身 旁边cell的影响 经典问
  • IC封装——从基本概念到TSV

    一 IC封装 在之前文章中有大致提过封装 这里展开讲讲 芯片生产流程 沧海一升的博客 CSDN博客每个半导体产品的制造都需要数百个工艺 泛林集团将整个制造过程分为八个步骤 晶圆加工 氧化 光刻 刻蚀 薄膜沉积 互连 测试 封装 芯片生产流程
  • verdi中如何查看force信号信息

    转载 verdi中如何查看force信号信息 骏的世界 lujun org cn 在仿真中 我们会有对信号进行force的操作 从而实现某些特定的功能 但是在仿真波形中 不能直接从波形上看出 这些信号的驱动 是因为前级电路的驱动 还是因为f
  • IC Compiler指南——数据准备

    一 概述 ICC数据设置的文件关系框图如图 后端工具在数据设置阶段需要对两大类数据进行设置 包括从前端设计继承的综合数据 以及后端设计需要的物理数据 综合数据主要包括前端逻辑综合已经设置过的逻辑与时序库文件 设计约束文件sdc以 及综合网表

随机推荐

  • Python学习——作图plt.cm.Set()用法

    https blog csdn net qq 41938858 article details 87705470
  • 解决Springboot 'jmsMessagingTemplate' not loaded because Ancestor org.springframework.boot.autoconfig

    问题来源 SpringBoot集成Activemq 报错内容 Description Field jmsTemplate in com xihuanyuye Producer required a bean of type org spri
  • Android爬取网页JSON数据详细教程【新手向】

    这几天做一个Android获取Json的任务 发现Jsoup只能获取静态页面 无法获取动态页面的Json数据 有同学给我更正 Jsoup可以爬取动态页面 但必须要加请求头 data 以下为正确例子 String url 你的网页接口 Map
  • PAT题库代码(个人版本)~~持续更新,持续改进!

    引言 之前在网上看到浙江大学的题目系统PAT 想要刷一刷玩 目前是乙级题库 题目不多 持续更新 努力 话不多说 上代码 题目以及运行效果这里就不给出了 与PAT网站上的相同 1002 写出这个数 include
  • CMOS到触发器(一)

    1 MOS晶体管结构与工作原理简述 我们或多或少知道 晶体管在数字电路中的主要作用就是一个电子开关 通过电压或者电流 控制这个 开关 开还是关 晶体管大概有两种分类 一种是双极性晶体管 BJT bipolar junction transi
  • AJAX模拟Form表单上传

    当前端上传图片的时候 需要传递给后端的是一个file对象 而不是一个路径 而files就是包含了图片的所有设置 包括大小 类型 内容等等 var xxx this container find xxx 0 files 将jquery转换成d
  • IDEA主菜单栏不小心按消失了的解决方法

    如图所示 这两行的消失解决方法如下 第一行 在代码区按两下shift键 出现搜索栏 在搜索栏里输入view 如下 这里没有找到Main Menu 点击左下方的很小的more 显示如下 找到Main Menu 点击使其变为ON即可 第二行 点
  • 【C++】map/multimap容器

    1 map基本概念 2 map构造和赋值 include
  • numpy如何将数组元素全部输出,不折叠展示!

    在print之前添加 np set printoptions threshold np inf 将数组的元素全部打印出来 添加前 添加后
  • 本网站服务器。。。。。。。。这句话是什么意思呢?

    网站一般是建立在服务器中 服务器一般是由中央机房管理 所以中央机房在哪个国家地区 一般是由当地的政府进行管理 其他的地方暂时无法管理 今天我们在分享一些写真壁纸 更多写真壁纸 可以关注公众号 优星馆
  • python导入模块的变量,使用python中的变量导入模块

    本问题已经有最佳答案 请猛点这里访问 我有一个即时导入模块的脚本 由于模块名称会在新版本出现时立即更改 因此很难检查脚本中的特定模块名称是否也发生了更改 因此 我将模块名保存在脚本顶部的变量中 如本例中所示 var1 moduleName1
  • 我接手前同事写的烂Java代码,不小心搞出了一个内存泄露事故

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 String 字符串在内存里是如何存储的 String intern 方法 String 字符串是如何引发内存泄漏呢 总结 今天给大家聊聊咱们平时写代码的时候
  • 【python】12.比较运算符与逻辑运算符

    比较运算符 运算符 描述 示例 判断相等 如果两个操作数的结果相等 则条件结果为真 True 否则条件结果为假 False a 3 b 3 则 a b 为True 不相等 如果两个操作数的结果不相等 则条件结果为真 True 否则条件结果为
  • Springbot启动报错-类文件具有错误的版本 61.0, 应为 52.0

    这是由于Spring6以及SprinBoot3 0开始最低支持JDK17 所以如果springboot版本设置过高 而jdk过低的话 就会报该错误 可以降低springboot或是提高jdk版本 降低springboot方式如下 打开pom
  • 【xshell】xshell 自动换行设置

    1 概述 linux连接终端使用从putty切换到xshell时 发现xshell中在显示长文本时不会自动换行 甚是郁闷 查看官方文档 解决方法为启用xshell中VT模式下的Auto Wrap Mode 搞定 如下图 初始VT模式 Aut
  • RTThread中falut定位方法

    RTThread中fault定位方法 在 RTThread中HardFault Handler分析 一文中已经分析了RTThread中对于fault中断的处理方法 接下来讲解如何根据错误输出信息对程序出现fault的位置进行定位 rtthr
  • Python基础(list列表的扩展方式和dict的用法)

    一 list列表扩展的方式有几种 或者说添加元素的方法 1 append 将对象追加到列表中最后一个元素的末尾 2 extend 通过从可选对象追加元素来扩展列表 3 insert 在索引前插入对象 以此来扩展列表 二 对 cherry l
  • 车与羊的选择

    电影 决胜21点 开始部分 课堂上教授问了这样一个问题 假设你正在参加一个电视游戏节目 被要求在三扇门中选择一扇 其中一扇后面有一辆车 其余两扇后面则是羊 你选择了一扇门 假设是1号门 这时候不知什么原因 主持人 他知道各个门后面都有什么
  • Typec协议之PD通信消息详解一

    Messages 消息由消息头和可变长度 包括零 数据部分组成 消息 头 数据 格式如下图 1 只包含头消息 其它为PHY Layer 2 包含消息头和数据消息 3 包含消息头和数据消息 和扩展的消息 Message Header 从表中可
  • 学习笔记--Verilog HDL高级数字设计--第六章组合逻辑与时序逻辑的综合

    组合逻辑与时序逻辑的综合 综合引擎能够自动完成一组布尔函数的最简化 并将结果映射成能满足设计目标的硬件实现 转换 优化 映射 本章将介绍如何编写易于综合的Verilog模型 综合工具完成的工作 1 检测并消除冗余项 2 查找组合反馈环路 3