第十三课:设计对象与时序约束

设计对象

design:只要设计下面包含子模块或者逻辑门,就可以称为design;

Reference:参考名;

instance:针对reference的类化名;

此处为什么INV不是design呢?因为INV已经是一个最小单位了-反相器,它下面没有子模块/逻辑门了;

在DC中,不同的object对象(pin/port/cell/net ...)可以有相同的名字,那么工具要怎么区分它们呢?

前面说过,虽然名称是一样的,但collection会对每种类型的对象打上不同的标签,通过标签来区分;get_命令可以获取具有相同标签的对象;

”*/?”为通配符,其中"*"表示可以匹配0个或者多个字符;”?”可以匹配1个字符;

如果get命令没有找到相匹配的对象,那么就返回空列表;

练习:

get_ports C*:返回port C和port CLK;

get_instance U1:返回U1;

如图;

列出一些常用与object相关的命令;

如果不知道某个object具有哪些属性,可以用list命令来查看对象有哪些属性;

关于一些更加具体的相关描述,可以去查看DC用户手册;

当然,一些object是可以互换的,比如:一个design有两个模块A & B,A的输出用做B的输入,那么就可以认为A的pins就是B的ports ;

时序约束前提与路径分类

时序约束路径分类及时序分析的前提如上图;

默认分析时序约束的环境:输入信号随上升沿到来;输出信号随上升沿被捕获;

四种timing path约束路径

DC工具会把design分为多个timing path时序路径,每条路径都只包含一个起点和一个终点;

起点可以是:①时序器件的CLK pin;②除了CLk port的其他input port;

终点可以是:①时序器件的除了CLK pin的任何input pin;②除了CLk port的其他output port(如D);

上图列出的四条timing path刚好可以对应四种标准的路径;

FF1--FF2约束的建立

根据前面第六课的知识,对于FF1-FF2之间的建立时序约束,必须要满足:Tcmb<T-Tck-Tsetup-Tskew(此处考虑的是理想情况,没有包含Tskew);所以,此处必须要先确定周期T=2 ns;Tsetup=0.2 ns;那么Tcmb=Tx<1.8-Tck;

DC中确定时钟周期后,默认是50%占空比,在0ns时为上升沿;

DC默认是不会在时钟网络上加入buffer的,无论时钟连了多少个负载;

DC默认时钟网络是理想型的,拥有无穷的驱动能力,没有跳变转换时间,没有偏差,没有延时(insertion or latency:指从时钟input到FF之间的延时);

在综合阶段,我们需要对偏差、延时及转变时间等建模评估,从而增加时钟行为的精确度,更好的meeting PR阶段做完CTS时钟树后的时钟行为;

时钟树行为建模

CTS时钟树是在PR完成后基于cell的真实物理位置进行布置的,而在综合阶段,我们如何建模呢?

对某个时钟setup(maximun delay)进行建模,其中包括几个方面:

①uncertainty建模:包含skew、jitter(两个时钟周期之间的差,称抖动)、margin(留给uncertainly的余量)三部分;uncertainty一般根据经验值来评估;

②Latency or Insert delay建模:包含Source latency & Network latency;

③Transaction Time建模;

uncertainty建模(margin部分)

如上案例,这里的uncertainly取得是0.14;那么Tcmb<T-Tck-Tsetup-0.14;

Latency/Insert delay建模

这里把Latency又分为两个部分:Source latency+Network latency;其中,Source latency是从时钟原点(发出点)到时钟接入点的延时;Network latency是从时钟接入点到触发器时钟接入点的延时,由于从时钟接入点到每个触发器的距离不一样,此处的latency取得是平均值;

Source latency+Network latency的值就是我们查看时序报告内的clock network delay值;

Transaction Time建模

针对的是时钟信号的转变时间模型;

Pre/Post CTS对比

简单对比了一下综合阶段和CTS完成后的时钟行为建模区别,

①在CTS完成后,工具已经可以精确计算出Network latency延时了,所以Post CTS不用对该项建模了;

②uncertainty在综合阶段包含skew/jitter/margin,在CTS后只含有jitter/margin两项了,skew工具可以根据具体path自己算出来;

③CTS后Transaction Time也可以由工具根据具体路径上的buffer及连线情况自己算出来;

④CTS后还需要设置一个set_propagated_clock,让时钟约束传播下去;

Input/Output delay约束的建立

input delay约束的建立

input delay:指从前一级触发器的时钟到后级触发器input ports的延时,包含了前级触发器的Tck和信号从前级触发器Q端到后级input ports的internal delay;(输入信号在前级触发器信号到达后需要多长时间到达后级的input ports上)

由上图可见,input delay=Tck(Tco)+Tm;

http://www.360doc.com/content/21/0527/14/9523589_979230051.shtml

这里的Tco=Tck,Trace delay即为前面说的Internal delay;

https://blog.csdn.net/qq_39507748/article/details/114746186

此处已知input delay,求output delay中的internal delay(即Tmax)是多少;

如上面的解释,此处我们知道了output delay,所以input delay:Tinput_delay+Tmax<T-Tsetup-Tuncert=2.5-0.1-0.3=2.1,故Tinput_delay<2.1-Tmax=2.1-1.5=0.6ns;

output delay约束的建立

(补充资料网站见input delay处)

output delay:指从前一级触发器的output ports到后级触发器Clk入口的延时,包含了internal delay和后级触发器的Tsu转变时间延时;(输出信号在后级触发器的时钟沿到来之前需要提前多久准备好)

可见,output delay=Tinternal+Tsu;

T(output_delay)=Tinternal+Tsetup;故Toutput=T-Tinput-Tuncert=2-0.7-0.3=1ns;

绝对时间timing分析

时钟绝对时间Timing分析,说的是考虑了时钟信号的latency delay,所以时钟的起始时间不是0;上图的source latency+network latency=0.3+0.12=0.42ns;故前级触发器的绝对时钟捕获时间是0.42;后级触发器的绝对时钟捕获时间是:Tlatency delay+T-Tuncert=0.42+2-0.2=2.22;

这种带latency delay的timing分析称时钟绝对时间timing分析;像上述的例子前级和后级触发器的latency delay是一样的,那么对于简单timing分析时,可省略latency delay;

多个input/output ports timing 分析

对于多个input/output ports的情况,和单个的情况是一样的,在设置约束时,注意把除时钟ports外的所有的input/output ports都包含在内即可

不同input/output delay 约束分析

对于存在不同的input delay约束,我们可以先对所有的设置一个统一的输入约束,然后再对不同约束的ports进行一个补充约束;当然,也可以按相同约束的分类一起写;

Comb Path delay with CLK timing分析

(路径中含有时钟)如上图,对于从input ports直接到output ports的路径,TF.max=T-Tinput delay-Toutput delay-Tuncert;

Comb Path delay without CLK timing分析

(路径中没有时钟)对于Comb中不含时序逻辑电路,也就没有时钟经过的纯组合电路,我们需要设置一个虚拟时钟;

如上图,虚拟时钟的设置;

时钟预算

当我们不清楚某些部分的delay时,如input delay/output delay,那么我们可以设置一个时钟预算time budget;

一般来说,我们会将时钟周期的60%设置为外部路径的延时,40%设置为内部路径的余量;这样做至少比没有任何时序约束要好;

设想一下,如果所有的内部路径都设置为40%余量,那么当所有模块都遵守这个规定时,两个不同模块相连时,就是40%+40%=80%周期的总约束,那么肯定是可以满足需求的;

当我们在设置寄存器输出时,后面最好是寄存器直接输出,不接组合电路;这样input delay就变成了Tck,output delay就变成了T-Tck;我们假设最worse的情况,设置最大的Tck=input delay;假设output时,把Tck设置的最小,这样得到的output delay 就最大了;

时序约束总结

总之,input/output delay通过人为的设定来约束,FF1-FF2的约束Tcmb根据时钟来约束;

效率提升方法

约束命令的不同执行

单条单条的敲命令可以帮助我们debug,但不适合效率的提升;

高效的方式:把所有的约束写进一个约束文件内,然后直接导入约束文件;

更高效的方法:直接用批处理命令来运行约束文件,但前提是已经确认该约束文件是完整并正确的;

对约束的建议

建议①:再加载新的约束前,需要利用”reset_design“命令将以往的所有约束释放;

建议②:要对你写的约束加入注释,同时注意注释的用法;

建议③:建议使用一些通用的简写字符,不要用一些自定义的缩写命令;

约束脚本语法检查

检查约束文件的语法:①直接在DC内部运行一次,没报错就是ok的;

②在linux环境中,可以用”dcprocheck”命令来检查脚本的语法问题,该命令是DC的内嵌命令,只要环境能运行DC软件,就可以运行该命令,无需任何用户配置;

check_timing约束检查

加载约束后,对约束进行check_timing检查,前面第11课提过,这的约束检查是检查约束自身的完整性,是否每条路径都设置了约束等;

保存每一步的文件报告

建议把每一步的运行报告都保存下来,用redirect命令,后面想再往同一个文件里添加时,就再跟一个append参数;

man 及help命令的常用方法含义

常用时序约束命令

如上图;

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值