DC经典入门问题

2018-12-29 23:06

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 在综合中,ungroup命令可以去除系统的层次,有利于减小面积。我对比了在使用ungroup -all -flatten 命令前后的Total cell area。在使用该命令之前Total cell area是102396,使用之后49663,减小了一半左右。时序部分也没有变差。那是不是综合脚本一般都要使用ungroup呢? 请指教,谢谢。

ungroup -all当然是能达到最大的优化力度啊, 整体timing最好,

但是有时候会导致功能的变化, 仿真没法过,比如某个hier boundary没了,

因此只是有限度的ungroup, 比如-level 3,

全部ungroup打散后,没有boundary,一般功能是不会影响的,LEC来保证。但是function层次就没有了,比如对网表做一些verification,如STA时一些重要的点可能找不到了,如果还要debug的话几乎做不下去。

后端fix后某些点发现需要做function ECO,那么很可能也没法做了。

另外ungroup也分具体情况也不是所有情况下就一定明显减小面积,我们一般是有选择地对个别一些联系紧密的module会ungroup,不过目的是为了打掉boundary得到更好的timing不是面积。 纯属个人理解

LEC是logical equivalent check, 主要比较RTL和NETLIST, NETLIST和NETLIST的逻辑功能一致性。通常来说, synthesis以后,会把RTL和综合得到的netlist比较,以保证综合没有造成逻辑的错误。PR以后, 也会做同样的check。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

如果你仿真都能通过,当然flat的网表也行啊, 就是后面的debug 和升级没法做,LEC和formality一样的, 是cadence的形式验证工具,

最近在做Lowpower的flow,使用UPF文件描述多电压域设计。在做综合的时候,把隔离单元的LEVEL SHIFTER单元的库还有0.9v和1.08v的标准单元库都设置在target_library中,这个时候的operating_condition应该怎么设置呢?不同电压域是不是要设置不同的operating_condition?但是默认UPF模式的DC_SHELL又不支持set_poerating_condition 中 -object_list选项的设置,有哪位大侠跑通过用UPF的flow能不能帮忙指导一下?我觉得可能是环境没有搭好,但是又不知道从哪下手~非常感谢!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

请问DC综合后做STA时,需不需要把DC 产生的SDF读入到PT中,读入和不读入对于PT,有什么区别,哪一种比较准确呢?

谢谢

主要看你的SDF有没有延时信息,延时信息来自于哪里的,严格的说反标SDF是有用的,主要是看你的SDF的来源是否靠谱了。如果仅仅是dc出来的,那么是没有延时的,反标进去也就没有意义了.

你所说的延时应该是PR之后的真正的版图延迟吗,DC后的延迟是有的,不过是基于线载模型预估的而已。是不是说没有真正的版图延迟就不用反标SDF到PT中,让PT基于线载模型进行计算分析,同样是基于线载模型分析,PT要比DC中的Design Time分析时序更为精确?

工程上我们一般不会用DC出来的sdf,PT分析所采用的也都是PR工具所提供的延迟信息 ,当然如果0.5u以上pr的结果和前端差异也就不会太大,所以设计迭代一般一遍也就OK。但0.18u不会这样理想,物理设计上的信息显得至关重要,所以PR的SOC ENC也会基于连续收敛的时序引擎。还会有一种硅虚拟原型的设计方法,sdf的反标,PT分析,一般工程中也不会只signoff时才会做,在重要节点都会做。前提是你承认PT的结果是signoff的而用PT进行工程signoff个人理解,不知道全面不全面

在做STA时,一般可是直接使用STARRC抽出的SPEF进行时序分析,使用PT report timing。有时候,为了得到更准确点的timing信息,需要用SDF反标到PT中,再report timing。当然反标是需要时间的

解决了。DC后的PT不需要反标DC产生的SDF,DC后没有真实的布线,是基于线载模型。此时PT单独分析的时序和DC中的Design Time分析的结果是一致的。

有哪位大侠能详细讲一下set_max_transition的作用吗?

在STA中有个很重要, 要FIX SLEW方面的VIOLATION。 这个set_max_transition就是设定SLEW上的constrain。

设置波形从10%到90%所需要的时间 对延迟和功耗都有影响

厂家提供的库中,cell延迟的值一般是通过二维非线性查找表来得到,

表的两个index分为input transition ,load capacitance,如果index得值在表内, 延迟值不需要计算,如果不在表内,则需要通过内插或外插来计算,这相应的带来了误 差,内插的误差和外插相比小得多,如果外插计算时的index超出查找表的范围过大, 计算出的数值也就没有意义,所以库中一般都有default max_transitin,

保证再此范围内计算的精度。

至于transition 的计算用10%_90%还是20%-80%,看库中的定义好了,

设置最大的渡越时间,就是信号逻辑的转换时间。 max_transition属性通常用于输入引脚。

max_transition属性定义任何转换时间大于负载引脚max_transition指定值的连线不能连到该引脚。

针对初学者的提问,在eetop论坛里整理发表了一个FAQ,在这里做一个备份

如果您已经有2年以上的实战经验,下面这些雕虫小技就不太值得您去浪费时间了。

先说说作为一个有经验的后端(暫不包括DFT工程师和layout工程师)工程师,需要掌握哪些知识 4个级别:

1)知道一些基本概念, 2)简单地掌握这门技术, 3)熟练 4)精通

半导体工艺--2

RTL coding -- 2 综合 -- 2 时序约束 -- 3 APR -- 3 DFT -- 2 DRC/LVS -- 3 仿真 -- 2 形式验证 -- 2

以下是FAQ分类: 2楼:时序约束,STA 3楼:综合DC/RC

4楼:APR (floorplan, place, CTS,route) 5楼:验证(LEC,DRC,LVS等) 6楼:DFT 7楼:低功耗 8楼:面试 9楼:名词解释

希望我有时间完成所有的总结。下面进入正题

《时序约束,STA》

(1) clock

Q1.1 什么是同步时钟? 时钟频率是整倍数,并且相互之间的相位是固定而且相差可预知的,才可以称得上是同步时钟。其他的都算异步时钟。 比如,

5M,10M是同步 2M,3M一般算异步

一个时钟,输出到另一个芯片中,转一圈后,以同样的频率返回到自己的芯片,因为无法确定时钟在另一个芯片里面的latency,所以输出的时钟与输入的时钟算异步

一个时钟进到2个PLL,就算那2个PLL的输出频率相同,一般也算是异步时钟,除非你de-skew

Q1.2 如何处理同步时钟?

设计要求严格的公司,就算是同步时钟,数据在同步时钟间传送时,依然要用meta-stability FF,可以set_false_path 如果放松要求,不用meta-stability FF,则同步时钟之间是real path,做CTS时,同步时钟要clock tree balance。

注意不同频率的同步时钟的最小时间间隔被用来检查setup

如果上升下降沿混用的话,setup的时间间隔就只有半个时钟周期了

Q1.3 如何处理异步时钟? 很简单,set_false_path

注意要from A to B,同时要from B to A

Q1.4 如何定义时钟?

create_clock 如果指定某个pin/port,就是实时钟,如果没有指定pin和port,就是虚拟时钟

巧妙利用waveform选项可以做出不同波形的时钟

被定义成时钟的net,在综合时,自动带有ideal network和dont_touch的属性。但是当它被用作data计算延迟时,ideal net的属性会自动消失

时钟会自动穿过逻辑单元,停在时序单元的时钟端,所以用FF产生的分频时钟要再用create_generated_clock定义一次

Q1.5 如何处理多选一时钟?

在实际应用当中,如果这几个时钟不会同时出现的话,则在定义时钟时,只选择最快频率的就可以了

如果是多个时钟同时出现,可以用set_case_analysis选一个,

也可以放它们全都过去,但是在MUX后面把它们之间set_false_path

Q1.6 巧妙定义时钟

直接在分频FF的Q端定义generated clock时,有时会把分频FF的时序打掉,解决办法是在分频FF的Q端加一个时钟buf,从那个buf的输出端定义generated clock,从而保证分频FF自身的时序完整 如果从source clock到generated clock之间有多条路径,你希望PT用指定的一条路径来计算时序的话,可以用set_case_analysis, set_disbale_timing 或者一级一级地定义generated clock来引导PT达到你的要求

分频器时序约束问题

时序分析中同一时钟的不同路径问题

请教如下要求的clock在pt中应该怎么create

怎样设set_case或者别的,才能让pt选择同一条clock path

Q1.7 什么时候需要设置latency?

latency分为source latency 和 network latency 两种。 source latency是源时钟自带的,network latency就是CTS后的clock tree insertion delay。 在综合时,一般不需要latency, 除非,

已知不同clock带有不同的source latency,并且它们之间有时序要求

预知不同clock会有不同的clock tree insertion delay,不想平衡它们,但是要满足他们之间的时序要求

做完CTS后,要把network latency去掉

请问set_clock_latency 设太大会有什么不好

Q1.8 如何设置uncertainty

clock uncertainty分为setup和hold,preCTS和postCTS几种不同的情况 一般的处理原则是:

preCTS,setup: uncertainty = PLL jitter + 预估的clock skew preCTS,hold: uncertainty = 预估的clock skew

postCTS,set_propagate_clock [all_clocks] postCTS,setup: uncertainty = PLL jitter postCTS,hold: uncertainty = 0 有时fundry要求hold uncertainty保留一定的量,这时就把那个保留量加到上面的公式中

sdc文件中对clk的uncertainty、transition、latency的设置

(2) IO端口的约束


DC经典入门问题.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:产业经济学定位涉及的几个基本概念

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: