DC综合简单总结(1)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DC综合简单总结(1)相关的知识,希望对你有一定的参考价值。

参考技术A DC综合简单总结(1) 

*****************set_dont_touch 和set_dont_touch_network ****************



在综合的过程中,为了不让DC工具自动优化一些我们不希望其优化的模块(比如CLK)我们通常都会设置set_ideal_network和set_dont_touch,我理解为前者在timing_report的时候忽略延迟,后者阻止DC插入buffer。

那么dont_touch的属性,能不能穿过logic?

set_dont_touch和set_dont_touch_network有什么区别,为什么普遍认为set_dont_touch_network会造成未知问题而不推荐使用?

对于ideal_net的这个属性,是不是说直接忽略了延迟,忽略了DRC,如果将clk设定为ideal_net,是不是就不用再设定dont_touch了?

说的有点混乱,请各位大神技术支持,小弟不胜感激!!

=

set_dont_touch不会穿过logic,可以用于cells, nets, references, 和 designs。你不希望DC碰的地方,都可以用它。

set_dont_touch_network可以穿过logic,可以用于clocks, pins, 或 ports,比上面的范围小。当你对设计不十分熟悉时,这个属性可能会传到你不希望的地方去。

ideal_net 顾名思义就是把这条net完全理想化--无穷大的驱动能力,没有延迟。有时会和上面的命令一起用。当你知道了它们的意思,如何使用取决于你的目的和得到的结果



对于Ideal_net这个属性,设置的时候有个no_propagate的属性,对于net来说一定要设这个,是不是就是为了阻止其穿过逻辑?那如果我设的是pin并且不加上no_propagate能穿过逻辑吗?

在建立clock的时候,我看到它会自动的设为ideal_net,但是却还是会计算延迟,会不会因为clock path有逻辑的原因?

=

set_ideal_net = set_ideal_network -no_propagate

clock net 如果被用作data,就会有delay,那是因为net上面挂的clk pin的负载,不是ideal net本身



我大体上明白了, clk 在创建的时候,会默认为 ideal net 的,但当 clk 接入到 data path 的时候, D 端就会考虑我 clk 上的负载,但并不会影响 clk 的 ideal net 的属性。

假如我的 clk 需要门电路做 gating , gating 后的时钟也有很大的扇出,那我为了忽略掉延迟,是不是需要在 gating 后重新给 clk 定义 ideal net? 因为 ideal net 不能穿过逻辑。

=

如果你的CG集成好的标准单元,它会自动继承ideal的属性。

*****************set_dont_touch 和set_dont_touch_network ****************

 

 

输入端口到时序器件的数据端口。

要求时间=T2+Tlatency-Tuncertainty_setup-Tsetup

到达时间=T1+Tlantency+Tinput_delay+Tlogic2

时序器件的输出管脚到输出端口

上图中:

要求时间=T2+Tlatency-Toutput_delay-Tuncertainty_setup

到达时间=T1+Tlatency+Tcell+Tlogic5

时序器件到时序器件

路径上的  cell  延迟由  input_transition  和  output_load( 包括扇出  pin  上的  load )决定,这个由查抄表可以得到。

而  net  延迟是由  net  上的  R ,  C  决定的。在没有布局布线之前,我们不知道实际的  R ,  C  是多少,  dc  根据互联线模型( set_wire_load_model) 来计算出  R ,  C 。然后根据得到的  R ,  C  计算出  net  上的延迟: Net_delay=R*C*OC 其中系数  OC  是根据操作环境( set_opearting_conditions) 中设置的  rc 树模型得到。

一般的工艺库的操作环境有三种, WORST, TYPICAL, BEST,分别是最差,典型,最坏。

T=4 ,周期为4,Tdata为2,两个clk同时到达,slack=4-2=2,

setup check 是latch和lauch间隔一个时钟周期,hold check才是在同一个时钟沿

input_transition输入信号的转换时间可以采用两种约束:

1 直接设置转换时间

set_input_transition 0.1 [get_ports A]

2 采用设置输入驱动能力,驱动能力越大,转换时间越小,驱动能力越小,转换时间越大

set_drive或者set_driving_cell

Slew Rate vs. Transition Time

首先,我要说明一下,slew和transition其实并非独立存在使用的词汇。在诸多教材中,一般是以slew rate和transition time,两个词组出现的。

Slew rate ,信号改变的速率。

Transition time ,信号改变的持续时间。

在 静态时序分析( STA ) 中,一个上升或者下降的波形通常用slew rate来表征其跳变的 快与慢 。Transition time就是用来记录这个信号在两个电平之间的 转换时间 。

这里需要注意的是,transition time实际是slew rate的倒数。Transition time如果越大,那么slew rate就会越慢,反之亦然。

上图展示了一些CMOS器件的输出波形图。理想状态下,我们期望得到一个完美的方波,不过,这显然不够现实。实际上,由于对电容的充放电,一个数字信号的波形往往存在上升和下降的 电压缓冲区间 。

为了能量化这样的波形,我们近似采用一个线性上升或者下降的信号来模拟真实信号波形。注意到,真实信号波形里,不管是上升还是下降的时候,都会存在一定时间的线性区域。

这个线性区域的 起点和终点 ,可能因为某些估算模型而有所不同。在STA中,我们有时候会采用比较宽松的约束模式,例如20%/80%、10%/90%。

当然,我们也可以采用激进一些的模式,如30%/70%。

在一个 线性时序模型 里,一个信号经过一个时序单元可能产生两种新的信号波形。

当输出信号的slew rate比输入信号的要快,也就是transition time变短了,说明这个单元对这个信号起到了 增强驱动 的作用。

反之,当输出信号的slew rate比输入信号还要慢,就是transition time变长了,说明这个单元对这个信号起到了 削弱驱动 的作用。可能的原因是,这个单元的输出端驱动了较大的 负载 。

所以,当我们要描述一个信号电平有所变化的时候,记得要用slew rate来表述 快慢 ,用transition time来描述 持续时间 。

》》对于 cell 的延迟,dc 是根据 input_transition 和 out_load 对应的查找表来计算的。

》》 对于 net 的延迟,dc 是根据 wire_load_model 中的fanout_length 和 resistance,capacitance, area 的查找表计算的。

》》 负载其实有两个概念,一个是阻性负载,这个负载当你提供了足够的驱动力就能够正确输出,否则电压就不对;另一个是容性负载,这个负载一般在系统里头,和系统能跑到什么速度相关。

一个输出驱动力大的话就能够带更大的负载,从这个意义上说,认为驱动=负载也是可以理解的。但其实这两个概念还是有些区别,侧重点不同。你上面也引用了,“电路的负载能力是下一级的load(即电容)总和”,这都是完全不同的两个量纲,怎么会一样。系统设计上,假设你需要跑10MHz的频率,你需要10mA的驱动力,则同一个容性负载上,要跑到20MHz的频率,你就需要20mA的驱动力。

原文链接:https://www.cnblogs.com/lantingyu/p/10782978.html

DC综合及仿真验证和DFT测试

       综合技术是提高设计产能的一个很重要的技术,没有综合技术的发展就不可能用HDL实现电路的设计,因为HDL开始是用来供电路仿真建模使用的,到了后来才把其中一部分子集作为可综合的语言,也就是RTL CODE。很多人入门都用HDL做设计,就以为HDL就只是用来做设计的,没有看到HDL最初始的一面,所以在验证时,就无法用好HDL另外一部分强大的功能。有时间还是可以看看Writing Testbench这本书,增强对HDL语言在验证方面作用的了解,也是提高对HDL认识很好的补充。
       这里以Design Compiler为例子讲解综合的过程。
       首先,综合就要必须要用综合库,这个你可以向厂家要,综合库可以通过.lib这个库文件转变成.db综合库,这个过程可以在DesignCompiler里面用实现。
       综合库里面有什么内容呢?.db 是无法阅读的,.lib是可以阅读的,里面有库的基本参数的单位,库运行的条件,各种参数,最重要的是两个部分,一个是WLM-Wire Load Model,一个Gate的定义(输入输出,功能,时序参数,面积等等);这只是StandarCell的库,另外还有其他库,如RAM,DSP的综合库,都以.db的形式存在。        
      综合需要三种输入,一个是代码,一个是综合库,一个是综合脚本 script。
      综合脚本主要包括了一下内容,对综合工具环境的配置,对综合对象外部环境的设置(operation condiction),对WLD的设置,对综合对象的时序的约束,综合策略,综合优化,综合报告和输出。
      综合技术的研究可以追溯到20世纪60年代,IBM公司T.J.Watson研究中心开发ALERT系统,将寄存器传输级算法描述转化成逻辑级的结构实现;20世纪70年代,综合技术发展迅速,但主要致力于较低层次的逻辑综合和版图综合;20世纪80年代中期,专用集成电路的广泛应用,要求芯片设计大规模、高性能、短周期,大大推动了从算法级设计描速向寄存器传输级设计描述转换的高层次综合技术。
      逻辑综合负责将寄存器传输级的结构描述转化为逻辑层的结构描述,以及将逻辑层的结构描述转化为电路的结构描述。在数字IC设计领域常用的EDA综合工具中,最权威的要算Synopsys公司提供的综合工具。Synopsys公司提供的Design Compiler(DC)是业界流行的、功能强大的逻辑综合工具。用户只需要输入设计规格的HDL描述和时间约束,就可能得到较为优化的门级综合网表。此外,DC还集成了功能强大的静态时序分析引擎,并支持与后端布局布线工具交互工作。     
      从某种意义而言,综合就是将设计的HDL描速转化为门级网表的过程。Synopsys公司提供的综合工具DC把综合分为三个步骤进行:synthesis=translation+mapping+optimization。Translation是指把设计的HDL描述转化为 GTECH库元件组成的逻辑电路;GTECH库是Synopsys公司提供的通用的、独立于工艺的元件库。Mapping是指将GTECH库元件映射到某一特定的半导体工艺库上,此时的电路网表包含了相关的工艺参数。Optimization是根据设计者设定的时延、面积、线负载模型等综合约束条件对电路网表进一步优化的过程。从综合工具的使用流程来看,综合包括综合环境的设置,综合约束,综合优化,综合与后端流程等。
      综合约束用来设定电路综合的目标,它包括设计环境约束、时间约束和面积约束。
      设计环境约束指的是用来描述设计在工作时的温度、电压、驱动、负载等外部条件的一系列属性。基本的环境设置内容包括工作条件、负载模型、系统接口驱动或扇出能力等设置。这些属性约束在电路综合时是必须的,如果用户没有进行显示的说明,则DC在综合的时候会采用默认值。
      时间约束内容包括定义时钟、定义时钟网络的时间约束和时序路径时间约束设定,以及非同步设计的时间约束等。了解延迟的计算是定义恰如其分的时间约束的关键。 Synopsys公司支持几种延迟模型:一是CMOS通用的延迟模型,二是CMOS分段的线性延迟模型,三是非线性的查表延迟模型。深亚微米的设计,前两种模型并不常用,非线性的延迟模型以输入的迁越时间和输出电容负载为参变量计算延迟的时间值,其结果以表格的形式列出供DC查找.
      面积约束和时间约束之间是一对矛盾且需要折中的关系,DC综合默认为时间约束比面积约束拥有更高的优先级。DC优化时默认不进行面积优化,如果你关注于芯片的面积,可以使用set_max_area命令设定面积的约束,使得DC完成时序约束之后继续进行面积优化。 在设定综合约束之后,一般并不马上进行综合优化。因为对于一个较大的设计来说,综合一次时间很长。因此,综合前确认综合约束命令是否正确添加到设计中时很有必要的,可以减少由于综合约束不正确重新综合优化的风险,减少综合反复的时间。检查综合约束设置的命令有 report_design, report_port –verbose, report_clock [-skew], report_constraints, report_timimg_requirement 等。
      许多版图工具只接受Verilog或EDIF格式的综合网表作为输入。在综合后提供Verilog格式的网表送给后端的版图工具,IC工程师还必须对综合的网表做好一下处理:
1.彻底解决多次例化同一子模块的问题
2.修正设计中部分连线的命名以简化综合网表
3.删除整个设计中悬空的端口
4.确保每个实例化单元的引脚都是可见
5.避免网表中存在assign语句、传输门和三态连线的定义
6.避免网表中存在不必要的门控时钟或门控复位信号
7.避免网表中引用的实例化名不存在对应的实现逻辑
      在综合之后,我们还得对综合后的网表进行门级仿真,在门级仿真上Synopsys公司提供的VCS仿真工具在服务器上运行的速度是比较快的。门级仿真过程中还有一步就是带时序反标的时序仿真,通过DC或者PT写出SDF文件,在网表中将逻辑延迟和线延迟反标入电路中,模拟更加真实的情况。
      功能仿真及验证
      验证的目的视为了保证设计实现提供的功能特性是正确的,是与设计规范中定义的功能特性保持一致。验证的目的在于证明设计没有错误。然而事实上验证只能证明某些设计错误存在或者不存在,验证是一个穷举设计中可能存在的错误的过程。业界中存在着相当度的验证手段和验证的策略,其中主要的验证手段可以粗略地划分为功能仿真技术、静态时序分析技术、形式验证技术等。
      功能仿真与调试
      功能仿真是设计验证的主要形式。从仿真的抽象层次来看,包括基于事件(event based)的仿真,基于时钟周期(cycle based)的仿真,基于事务交易(tansaction based)的仿真。
     基于事件的仿真器把输入激励的变化认为是事件的触发,每一个仿真时间仿真器处理一个事件触发,根据事件触发的内容对整个设计重新计算直到一个仿真稳态出现为止。基于事件触发的仿真特点是同时覆盖了设计的功能和时序模型,仿真结果精确,它非常容易探测到设计中的毛刺电路,尤其适用于异步电路的仿真。
     基于时钟周期的仿真在一个时钟周期那没有时间的概念,它只在时钟的上升沿或下降沿进行触发,每一个时钟周期的时间对电路计算一次。
     基于事务交易的仿真以数据包、图形、语音等对象作为直接的仿真激励而不在是添加到设计引脚的激励波形。
     功能验证的方法主要有三种:黑盒法、白盒法和灰盒法。
     架构测试环境在软件仿真过程称作“writing testbenches”。Testbench通常是指这样的代码,它对设计进行恰当的配置、产生测试激励盒有选择性地观察地响应。Testbench一般用硬件描述语言Verilog HDL或VHDL实现,也可以包含C语言或者C++语言产生地激励数据加上PLI,现在业界还有专门地验证语言Vera和Specman E。
     静态时序分析简称STA(Static Timming Analysis),它提供了一种针对大规模门级电路进行时序验证的有效方法。它指需要更具电路网表的拓扑,就可以检查电路设计中所有路径的时序特性,测试电路的覆盖率理论上可以达到100%,从而保证时序验证的完备性;同时由于不需要测试向量,所以STA验证所需时间远小于门级仿真时间。但是,静态时序分析也有自己的弱点,它无法验证电路功能的正确性,所以这一点必须由RTL级的功能仿真来保证,门级网表功能的正确性可以用门级仿真技术,也可以用后面讲到的形式验证技术。值得注意的是,静态时序分析只能有效地验证同步时序的正确性,对于大部分设计重可能包含地异步电路的时序验证,则必须通过门级仿真来保证其时序的正确性。由此我们可以得出这样子的结论:静态时序分析和门级时序仿真是从不同的侧重点来分析电路以保证电路的时序正确,它们是相辅相成的。
     Synopsys公司的Prime time时序分析的工具,对设计电路进行以下几种分析:
1.从主要的输入端口到电路中所有触发器
2.从触发器到触发器
3.从触发器到主要输出端口
4.从主要的输出端口到主要的输出端口
      静态时序分析工具把整个设计电路打散成上述四种类型的时序路径,分析不同路径的时序信息,得到建立时间和保持时间的计算结果。当然还有另外几条路径:如 gated clock,DFF复位端的,具体可以参见PrimeTime的手册。  
      形式验证是一种静态的验证手段,它根据电路静态地判断两个设计在功能上是否等价,常用来判断一个设计在修改前和修改后其功能是否保持一致。它运行时无需测试向量,但是必须有一个参照设计和一个待验证的设计。参照设计时设计者认为功能上完备无缺的设计,理论上它可以用高级语言如C,C++实现的,也可以是用集成电路的建模语言systemC,或者验证语言vera或SpecmanE实现的;但是就实现而言,多数形式验证过程中参照设计就是我们的RTL设计,一般用verilog或VHDL实现的。
       当RTL级或FPGA功能仿真验证结束后,传统的IC设计流程需要完成一下几次门级仿真:综合后门级仿真;DFT之后的门级仿真;布局布线之后的门级仿真等,如果设计很大或者电路很复杂,往往需要庞大的测试向量来验证设计的功能及时序是否正确,这就使得我们花费在门级仿真的时间随着电路规模的增直线上升。
       形式验证在ASIC设计流程中犹如一个迭代算法,其最初的输入是RTL设计,每次比较,都将上一次比较后的设计(第n-1次)作为参照设计处理之后的结果(第n次)进行比较,之所以这么做,是基于以下考虑:
1.形式验证工具开始比较前,首先在两个设计中找到一一对应的比较点。
2.如果一个设计改动太大,改变前后的功能是完全一致的,但如果形式验证工具无法找到适合的比较点,也会认为这两个设计不等价。        形式验证在 ASIC设计流程中主要应用在以下几个方面:RTL-RTL的对比,RTL-GATE的对比,GATE-GATE的对比。采用形式验证进行RTL与RTL 的比较,可以在较短的时间内验证并保证代码修改的过程中没有引入功能性的错误;进行RTL与GATE的对比,是验证源代码与综合之后的门级网表是否等价,以保证综合过程中不会出现任何错误;进行GATE与GATE的对比,主要是发生在验证插入DFT后的电路网表在功能上是否一致;生成时钟树前后的电路网表在功能上是否一致;布局布线前后的电路网表在功能上是否一致等。 
      可测试设计与可测性分析(DFT)            
      什么是DFT,为什么要做DFT。
      可测试性技术(Design For Testability-DFT)就是试图增加电路中信号的可控制性和可观测性,以便及时经济地测试芯片是否存在物理缺陷,使用户拿到良好的芯片。其中包括Ad Hoc技术和结构化设计技术。目前,任何高集成度IC设计系统都采用结构化设计技术,其中主要扫描技术和内建自测两种技术。
      一个电路的测试性问题应两个方面:
1.由外部输入信号来控制电路中的各个节点的电平值,称为可控制性。
2.从外部输出端观测内部故障地难易程度,称为可观测性
     扫描技术是指电路中的任一状态移进或移出的能力,其特点使测试数据的串行化。比较常使用的是全扫描技术和边界扫描技术。全扫描技术是将电路中的所有触发器用特殊设计的具有扫描功能的触发器代替,使其在测试时链接成一个或几个移位寄存器,这样,电路分成了可以进行分别测试的纯组合电路和移位寄存器,电路中的所有状态可以直接从原始输入和输出端得到控制和观察。这样子的电路将时序电路的测试生成简化成组合电路的测试生成,由于组合电路的测试生成算法目前已经比较完善,并且在测试自动化生成方面比时序电路的测试生成容易得多,因此大大降低了测试生成的难度。
     对于存储器模块的测试一般由生产厂家提供专门的BIST电路,通过BIST电路可以方便地对存储单元地存取功能进行测试,所谓的BIST电路是指把测试电路做到IC里面,利用测试电路固有的能力自行执行一个测试存储器的程序。另外MBIST还可以解决RAM SHADOW的问题提高芯片的可测试性。
      为什么要做DFT呢?因为我们的设计,也就是RTL到GDSII交出去的只是一个版图,最后芯片需要生产织造是在foundry做的,也就是厂家根据你提供的数据GDSII做成芯片。这个流程过程中可能出现缺陷,这个缺陷可能是物理存在的,也可能是设计当中的遗留问题导致的,另外一方面在封装的过程也可能出现缺陷。为了保证我们的芯片能够不存在物理上的缺陷,所以就要做DFT。也就是说,你交给foundry一个加法器的GDSII,他在做的过程和封装的时候都可能引入缺陷;拿到这个加法器芯片你怎么知道,里面的一个与门,厂家给你做的就是一个正常工作的与门呢?你怎么知道厂家做好的加法器的dier在封装之后引脚就能正常输入呢?一句话,就是通过DFT!如何做DFT呢,就是上面提到的拉。

以上是关于DC综合简单总结(1)的主要内容,如果未能解决你的问题,请参考以下文章

DC综合的基本流程

DC系列靶机知识点总结

前端面试题总结——综合问题

DC系列靶机

为复杂系统提供一个“综合性对外窗口”的方案——外观模式总结

学习总结