IC设计中逻辑综合的一般步骤及相关基本概念
逻辑综合

逻辑综合
可逻辑综合的VHDL代码示例
• 异步复位D触发器
DFFA: PROCESS(clk, reset) BEGEN IF (reset = ‘0’) THEN data_out <= (OTHERS => ‘0’); ELSIF (clk’EVENT AND clk = ‘1’) THEN data_out <= data_in; END IF; END PROCESS DFFA;
3
4
5
6
7
8
逻辑综合
• 优化策略
数字电路的设计原则上是分 层次的。最高层(Top-Level) 通常是由互相联系的块组成 右图显示了从VHDL语言到目 标网表的步骤 优化策略包含两项:
• 平面化 • 结构化
technology: mapping netlist in target technology gate level: netlist logical level: boolean equations VHDL description flattening structuring
data_out <= (OTHERS => ‘0’); ELSIF (clk ‘EVENT AND clk = ‘1’) THEN data_out <= in1 XOR in2; END IF; END PROCESS SYNC;
逻辑综合
可逻辑综合的VHDL代码示例
• 带反馈回路的触发器
PROCESS (clk) BEGIN IF (clk ‘EVENT AND clk = ‘1’) THEN IF (ena = ‘1’) THEN data_out <= a; END IF; END IF; END PROCESS;
第7章 ASIC逻辑综合

从上图可以看出,综合是将逻辑电路的寄存器 传输级表现形式转换成为门级网表的表现形式。综 合的输入是寄存器传输级电路描述,综合的输出是 门级网表。寄存器传输级电路描述是对门级网表的 抽象,门级网表是采用实际的逻辑库单元对寄存器 传输级电路的实现。 门级网表主要包含两个部分:第一个部分是实 现逻辑功能的基本逻辑单元及它们之间的连接方式; 第二个部分是这些逻辑单元的时序关系。
asic逻辑综合71综合原理和思想72可综合代码的编写规范73综合步骤74综合的若干问题及解决71综合原理和思想综合简介在集成电路设计领域综合是指设计人员使用高级设计语言对系统逻辑功能的描述在一个包含众多结构功能性能均已知的逻辑元件的逻辑单元库的支持下将其转换成使用这些基本的逻辑单元组成的逻辑网络结构实现
综合策略分为两种:
一种是自上而下(Top-Down), 一种是自下而上(Bottom-Up)。 这两种综合策略适合的目录组织结构分别如下 图所示。
2、 选择和设置逻辑单元库
综合工具利用逻辑单元库中的逻辑器件将 RTL逻辑描述文件进行编译和优化,转换成门级 电路。选择和设置逻辑单元库是综合过程开始的 前提。
文件扩展名
数据类型 设计源代码 扩展名 .v .vhd .edif .con .scr 描述 Veirlog VHDL EDIF 约束条件 脚本文件
综合脚本 报告和日志 设计数据库
.rpt
.log
报告文件
日志文件
.db
Synopsy库文件
在文件的组织过程中,为了对文件进行有效的 控制,简化文件的使用和查找,必须采用一定的文 件目录结构,将文件一一对应放置。文件目录结构 的选择和采用的综合策略有关。
(2)模块划分应注意模块的复用性。可复用的模 块设计可以减轻模块整合和测试的工作量。模块的复 用性设计应注意模块接口的标准化和模块内部的参数 化。 (3)模块的输出信号采用寄存器方式输出。输出 信号采用寄存器方式输出能够使模块综合时输入的信 号延时估计更加容易,也有易于子模块综合出较好的 结果。 (4)将功能上相关联的组合逻辑尽可能放入一个 模块中,在自下而上的综合过程中,综合工具能够很 好地处理模块内部的时序优化问题,而处于模块边缘 的组合逻辑分布在不同的逻辑模块中会导致时序预估 不准确,从而增加了综合的复杂程度。如下图所示。
芯片设计中的逻辑综合与布图方法教程

芯片设计中的逻辑综合与布图方法教程在芯片设计中,逻辑综合和布图是非常关键的步骤。
逻辑综合是将设计描述转换为逻辑电路,而布图则是将逻辑电路转换为物理实现。
本文将为您介绍芯片设计中的逻辑综合和布图方法。
逻辑综合是将高级语言描述的功能转换为门电路和触发器等逻辑元件的过程。
它的目的是将功能描述转换为可实现的电路结构。
下面是逻辑综合的一般步骤:1. 门级综合:根据设计描述,通过逻辑综合工具将逻辑电路转换为与非门、或门和异或门等基本逻辑门的级联组合。
这一步骤涉及到的主要问题是逻辑优化,即如何用更少的门电路实现相同的功能。
逻辑优化可以提高电路的性能和功耗。
2. 触发器综合:将存储元素(如触发器和锁存器)添加到电路中,以实现需要在不同时间点存储和处理数据的功能。
触发器综合的目标是实现高性能、低功耗的存储元素。
3. 时钟综合:确定电路中的时钟域,设置时钟的频率和相位以及时序约束。
时钟综合是确保电路能够按照设计要求正确工作的关键步骤。
它涉及到时钟分配、时钟树合成和时序优化等问题。
逻辑综合的输入是设计描述,通常是以高级语言(如Verilog或VHDL)编写的。
输出是门级网表,描述了逻辑电路的结构和功能。
门级网表可以作为后续步骤的输入,如布图和物理综合。
布图是将逻辑电路映射到实际器件上的过程。
它涉及到选择和放置逻辑元件、布线和时钟树的设计。
下面是布图的一般步骤:1. 逻辑映射:将门级网表映射到目标技术库中的逻辑元件。
技术库提供了不同类型的逻辑元件,如与非门、或门、触发器等。
在逻辑映射过程中,优化电路的资源利用率和延迟。
2. 布局:选择逻辑元件的具体位置,以及逻辑元件之间的连线路径。
布局是关键的步骤,它决定了电路的性能和功耗。
在布局过程中,需要考虑电路的物理约束,如芯片面积、功耗和信号完整性等。
3. 布线:确定逻辑元件之间的具体连线路径。
布线的目标是实现低延迟、低功耗的互连结构。
布线涉及到的问题包括线长匹配、电源和地线的规划、时钟树设计等。
集成电路(IC)设计完整流程详解及各个阶段工具简介

IC设计完整流程及工具IC的设计过程可分为两个部分,分别为:前端设计(也称逻辑设计)和后端设计(也称物理设计),这两个部分并没有统一严格的界限,凡涉及到与工艺有关的设计可称为后端设计。
前端设计的主要流程:1、规格制定芯片规格,也就像功能列表一样,是客户向芯片设计公司(称为Fabless,无晶圆设计公司)提出的设计要求,包括芯片需要达到的具体功能和性能方面的要求。
2、详细设计Fabless根据客户提出的规格要求,拿出设计解决方案和具体实现架构,划分模块功能。
3、HDL编码使用硬件描述语言(VHDL,Verilog HDL,业界公司一般都是使用后者)将模块功能以代码来描述实现,也就是将实际的硬件电路功能通过HDL语言描述出来,形成RTL(寄存器传输级)代码。
4、仿真验证仿真验证就是检验编码设计的正确性,检验的标准就是第一步制定的规格。
看设计是否精确地满足了规格中的所有要求。
规格是设计正确与否的黄金标准,一切违反,不符合规格要求的,就需要重新修改设计和编码。
设计和仿真验证是反复迭代的过程,直到验证结果显示完全符合规格标准。
仿真验证工具Mentor 公司的Modelsim,Synopsys的VCS,还有Cadence的NC-Verilog均可以对RTL 级的代码进行设计验证,该部分个人一般使用第一个-Modelsim。
该部分称为前仿真,接下来逻辑部分综合之后再一次进行的仿真可称为后仿真。
5、逻辑综合――Design Compiler仿真验证通过,进行逻辑综合。
逻辑综合的结果就是把设计实现的HDL代码翻译成门级网表netlist。
综合需要设定约束条件,就是你希望综合出来的电路在面积,时序等目标参数上达到的标准。
逻辑综合需要基于特定的综合库,不同的库中,门电路基本标准单元(standard cell)的面积,时序参数是不一样的。
所以,选用的综合库不一样,综合出来的电路在时序,面积上是有差异的。
一般来说,综合完成后需要再次做仿真验证(这个也称为后仿真,之前的称为前仿真)逻辑综合工具Synopsys的Design Compiler,仿真工具选择上面的三种仿真工具均可。
IC设计基础-综合

IC设计基础-综合⼀、综合的概念⽤verilog或者vhdl设计电路,需要将语⾔描述转换为电路图描述,即⽤芯⽚制造商提供的基本电路单元(综合库)实现我们⽤硬件描述语⾔(verilog或vhdl)描述的(RTL级)电路的功能,这个过程就称为综合。
1.综合的步骤●转译(Translation):读⼊电路的RTL级描述,将语⾔转译成每条语句所对应的功能块以及功能块之间的拓扑结构,这⼀过程的结果是在综合器内部⽣成电路的布尔函数的表达,不做任何的逻辑重组和优化。
●优化(optimization):基于所施加的⼀定时序和⾯积的约束条件,综合器按照⼀定的算法对转译结果作逻辑重组和优化。
●映射(mapping):根据所施加的⼀定的时序和⾯积的约束条件,综合器从⽬标⼯艺库(Target Technology)中搜索符合条件的单元来构成实际电路。
由芯⽚制造商(Foundry)提供的⼯艺库,是⼀系列的基本单元,如与⾮、或⾮、反相器、锁存器、触发器、选择器等等。
对这些单元的电⽓可以进⾏描述,例如:单元的⾯积、输⼊电容。
输出端的驱动能⼒、单元的逻辑能⼒、单元的时序等等。
综合的⽬标就是⽤⼯艺库⽂件提供的这些单元来实现⽤RTL代码描述的逻辑功能,并满⾜设计者提出的⾯积和时序要求。
2.对设计者的要求⼀个合格的设计者,应该能够在⾃⼰脑⼦⾥再现“转译”这个过程,即清楚⾃⼰⽤HDL 语⾔所构造的电路结构是什么样⼦的。
写代码时,请时刻记住三个准则:“think hardware”:要时刻想着代码所描述的电路结构,熟悉不同代码的结构,清楚通过综合能获得怎样的硬件实现,这个是芯⽚设计者所必须具备的素质。
同时必须记住,综合器⽆法帮助⽤户实现功能,⽆法做算法或功能的优化,⽽只能够在已有功能的基础上按照⽤户的要求选择较优的实现。
“think synchronous”:要时刻关⼼电路的同步问题。
同步电路设计的有点在于系统中信号流的可预见性,因此避免了诸如时序设定和实现上的困难。
集成电路(IC)设计完整流程详解及各个阶段工具简介

IC设计完整流程及工具IC的设计过程可分为两个部分,分别为:前端设计(也称逻辑设计)和后端设计(也称物理设计),这两个部分并没有统一严格的界限,凡涉及到与工艺有关的设计可称为后端设计。
前端设计的主要流程:1、规格制定芯片规格,也就像功能列表一样,是客户向芯片设计公司(称为Fabless,无晶圆设计公司)提出的设计要求,包括芯片需要达到的具体功能和性能方面的要求。
2、详细设计Fabless根据客户提出的规格要求,拿出设计解决方案和具体实现架构,划分模块功能。
3、HDL编码使用硬件描述语言(VHDL,Verilog HDL,业界公司一般都是使用后者)将模块功能以代码来描述实现,也就是将实际的硬件电路功能通过HDL语言描述出来,形成RTL(寄存器传输级)代码。
4、仿真验证仿真验证就是检验编码设计的正确性,检验的标准就是第一步制定的规格。
看设计是否精确地满足了规格中的所有要求。
规格是设计正确与否的黄金标准,一切违反,不符合规格要求的,就需要重新修改设计和编码。
设计和仿真验证是反复迭代的过程,直到验证结果显示完全符合规格标准。
仿真验证工具Mentor 公司的Modelsim,Synopsys的VCS,还有Cadence的NC-Verilog均可以对RTL 级的代码进行设计验证,该部分个人一般使用第一个-Modelsim。
该部分称为前仿真,接下来逻辑部分综合之后再一次进行的仿真可称为后仿真。
5、逻辑综合――Design Compiler仿真验证通过,进行逻辑综合。
逻辑综合的结果就是把设计实现的HDL代码翻译成门级网表netlist。
综合需要设定约束条件,就是你希望综合出来的电路在面积,时序等目标参数上达到的标准。
逻辑综合需要基于特定的综合库,不同的库中,门电路基本标准单元(standard cell)的面积,时序参数是不一样的。
所以,选用的综合库不一样,综合出来的电路在时序,面积上是有差异的。
一般来说,综合完成后需要再次做仿真验证(这个也称为后仿真,之前的称为前仿真)逻辑综合工具Synopsys的Design Compiler,仿真工具选择上面的三种仿真工具均可。
第5章 逻辑综合

第5章逻辑综合5.1 逻辑综合(Synthesis)的概念逻辑综合是指将硬件描述语言描述的RTL级的代码转换为由芯片制造商(Foundry)提供的基本单元电路实现的门级网表的过程。
逻辑综合是由综合工具完成的,但设计者必须提供对芯片的时序、面积、功耗等方面的约束。
综合过程可以分为三个步骤:(1)翻译(Translation)将硬件描述语言翻译为符合综合工具内部规定的逻辑方程,不做任何逻辑优化,与具体工艺无关。
(2)优化(Optimization)根据时序和面积约束,对逻辑方程进行重组和优化。
(3)映射(Mapping)根据时序和面积约束,从目标工艺库(Target Technology)中搜索适当的单元来实现实际电路。
芯片制造商(Foundry)提供的工艺库中,有各种基本单元,如各种逻辑门、触发器、数据选择器等。
在工艺库中,对这些基本单元电路的特性有完整的描述,如面积、输入端电容、输出端的驱动能力等等。
综合的目标就是用工艺库中的这些单元实现RTL代码描述的逻辑功能,并满足设计者提出的面积和时序要求。
逻辑综合将生成门级网表文件、标准延迟文件(SDF)和各种报告。
面向ASIC的主流综合工具是Synopsys公司的Design Compiler。
本章主要介绍用基于的Design Compiler逻辑综合方法。
5.2 Design Compiler 简介5.2.1 Linux Red Hat 7.2 基本操作Design Compiler有Unix和Linux两种平台下的版本,Linux下的版本必须使用Linux Red Hat 7.2操作系统。
软件安装参见本章附录。
以下介绍Linux文件系统的基本思想和基本操作命令。
●基本思想初学Linux要适应文件系统基本思想,Linux将整个计算机中的各种软件、硬件都理解为文件,以统一的文件系统方式组织。
其中/ 为最上层的根目录,其它都是根目录下的子目录。
Linux的文件路径分为绝对路径和相对路径。
逻辑综合中的基本概念

逻辑综合中的基本概念第一篇:逻辑综合中的基本概念1.逻辑综合(Logic Synthesis)EDA工具把数字电路的功能描述(或结构描述)转化为电路的结构描述。
实现上述转换的同时要满足用户给定的约束条件,即速度、功耗、成本等方面的要求。
2.逻辑电路(Logic Circuit)逻辑电路又称数字电路,在没有特别说明的情况下指的是二值逻辑电路。
其电平在某个阈值之上时看作高电平,在该阈值之下时看作低电平。
通常把高电平看作逻辑值1;把低电平看作逻辑值0。
3.约束(restriction)设计者给EDA工具提出的附加条件,对逻辑综合而言,约束条件一般包括速度、功耗、成本等方面的要求。
4.真值表(Truth Table)布尔函数的表格描述形式,描述输入变量每一种组合情况下函数的取值。
输入变量组合以最小项形式表示,函数的取值为真或假(1 或0)。
5.卡诺图(Karnaugh Map)布尔函数的图形描述形式,图中最小方格和最小项对应,两个相邻的最小方格所对应的最小项只有一个变量的取值不同。
卡诺图适合于用观察法化简布尔函数,但是当变量的个数大于4时,卡诺图的绘制和观察都变得很困难。
6.单输出函数(Single-output Function)一个布尔函数的单独描述。
7.多输出函数(Multiple-output Function)输入变量相同的多个布尔函数的统一描述。
8.最小项(Minterm)设a1,a2,…ai,…an是n个布尔变量,p为n个因子的乘积。
如果在p中每一变量都以原变量ai或反变量的形式作为因子出现一次且仅出现一次,则称p为n个变量的一个最小项。
最小项在卡诺图中对应于最小的方格;在立方体表示中对应于顶点。
9.蕴涵项(Implicant)布尔函数f的“与-或”表达式中的每一乘积项都叫作f的蕴涵项。
例如:f=+中的乘积项和都是函数f的蕴涵项。
蕴涵项对应于立方体表示法中的立方体。
10.质蕴涵项(Prime Implicant,PI)设函数f有多个蕴涵项,若某个蕴涵项i所包含的最小项集合不是任何别的蕴涵项所包含的最小项集合的子集的话,则称i为函数f的质蕴涵项。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
IC设计中逻辑综合的一般步骤及相关基本概念
综合中的延迟及关键路径
图1 常见的时序路径示意图
图1中给出了常见的两个寄存器R1和R2之间的时序路径。
R1和R2分别具有延迟Tck-q 和Tsetup,TM和TN分别是M和N逻辑具有的延迟。
B对R1来说是输出端口,输出延迟为Tsetup+TN,而对R2是输入端口,输入延迟为Tck-q+TM,于是这条单周期路径的总延迟为Tck-q+TM+Tsetup+TN。
从延迟的角度来说,关键路径就是指那些总延迟大于相应周期时间的路径。
消减关键路径的延迟要从消减路径中的各部分延迟入手,主要方法就是利用综合工具对路径施加约束条件来限制优化,达到减小路径延迟的目的。
综合的主要过程
1.翻译:读入电路的RTL级描述,并将语言描述翻译成相应的功能块以及功能块之间的拓扑结构。
这一过程的结果是在综合器内部生成电路的布尔函数表达式,不做任何逻辑重组和优化。
2.优化:根据所施加的时序和面积约束,按照一定的算法对翻译结果进行逻辑重组和优化。
3.映射:根据所施加的时序和面积约束,从目标工艺库中搜索符合条件的单元来构成实际电路的逻辑网表。
一般的综合步骤如表1所示。
从表1中可以看出,约束条件是综合过程的重要组成部分。
综合正是通过设置约束条件来优化设计,以达到设计要求的。
对关键路径延迟的
主要约束处理方法
通过选择器件的处理方法
从最直观的角度看,时序逻辑和组合逻辑都由基本的电路单元组成,因此,选择延迟小且不影响芯片性能的器件是既简易又高效的处理方法。
例如,基本电路单元库中的DFFXL寄存器虽然面积较小,但它的延迟相关参数Tck-q、Tsetup较大,容易形成关键路径,于是可以通过设置set_dont_use等约束来禁用它。
在一些特殊情况下,基本电路单元库中的器件不能满足要求,这时需要采用自定义的电路单元。
对端口间逻辑的处理方法
这是诸方法中最常用、最有效、最重要的,一般通过set_input_delay、set_output_delay、set_max_delay等来实现,有以下几种情况:
如果两个寄存器之间的逻辑比较少,那么可以对其输入延迟和输出延迟施加较宽裕的约束,即设置较大的set_input_delay和set_output_delay值,表明所做逻辑不受压缩,映射电路基本单元库的自由度较大。
这样,两者的实际延迟之和将不大于单周期时间(非关键路径),不仅满足设计要求,而且对其他关键路径的影响很小。
如果两个寄存器之间的逻辑比较多,那么就要对其输入延迟和输出延迟施加较严厉的约束,即设置较小的set_input_delay和set_output_delay值,表明所做逻辑需要压缩,而映射电路基本单元库的自由度也较小。
但这并不表示越小越好,如果设的值很小(甚至为零),那么会使综合器对这条路径的逻辑压缩得过大,而导致其它关键路径的延迟增加,甚至导致其它非关键路径转化为关键路径。
因此要凭借经验,不断改变所设的约束值,最终使所有路径的延迟都不大于单周期时间,满足设计要求。
对于一般芯片设计(中小规模),在以上两种情况下,对其输入延迟和输出延迟合理施加约束,基本就能满足设计要求。
如有个别几条关键路径延迟仍然较长,可以通过设置
set_critical_range和group_path来加以约束。
这两种约束对所约束路径的逻辑压缩效果较好,且不会影响其它路径的延迟。
采用这样的约束之后,关键路径通常都能被消除了。
对于一些大规模的芯片设计和上述处理后仍然存在关键路径的情况,就要用set_max_delay 来进行约束,这种约束的效果非常明显,但会影响其它路径的延迟。
因此也要凭借经验,不断改变所设的约束值,最终使所有路径的延迟都能满足设计要求。
对层次间边界的处理方法
图2 边界转化示意图
硬件描述语言描述的RTL级电路通常是多层次模块,对其进行综合后得到的电路依然以独立模块的方式存在,即存在边界问题,因此综合中有专门针对边界问题的约束,利用这些约束可以打散边界、保持边界,或重新整合边界,从而优化边界,达到设计要求。
如图2所示,约束group用来生成新的层次模块,而约束ungroup的作用刚好相反,它用来打散边界,消除层次模块。
通常它们都会结合起来使用,但不管以哪种方式选择边界,都应该根据具体的设计要求,参照综合结果,选择最好的方法。
在用硬件描述语言描述RTL级电路时,有时会专门设计某些单独模块(类似全定制电路)来简化实现一定的功能,从而缩短延迟并减小面积。
在综合中利用约束set_dont_touch可以保证这类模块不受影响,保持边界。
对电路结构的处理方法
综合概述
一般情况下,设计者在描述RTL级电路时就应该考虑诸多因素,对电路结构进行规划,而在综合中只要将RTL代码映射到基本电路单元库几乎就能达到预期要求。
但在有些状况下,还是需要利用一些约束来进行优化,这里仅以最常见的set_structure和set_flatten来加以说明。
structuring是综合中默认的逻辑优化策略,它同时考虑了延迟(速度)优化及面积优化;而flattening这种策略往往以牺牲面积来达到缩短延迟的目的。
对某一逻辑的RTL级描述采用structuring和flattening两种策略得到的综合电路分别如图3、图4所示。
flattening策略下得到的电路只有两级,延迟小于structuring策略下得到的三级电路,但电路面积比较大。
当今IC工艺已经进入深亚微米级,因而在设计中往往需要首先考虑延迟因素,但究竟选择哪种策略,还是要根据具体的设计要求而决定。
如果采用上述方法后还不能消除关键路径达到设计要求,就需要改进系统级设计,修改RTL 代码,再重新进行综合。