EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 604|回复: 0

[转帖] uncertainty设置特例解析

[复制链接]

47

主题

3

回帖

430

E币

技术员

Rank: 2

积分
97
发表于 2020-4-13 15:15:46 | 显示全部楼层 |阅读模式
01 引言
最近遇到了一些关于uncertainty设置的问题,感觉还是挺容易混淆的,所以今天在此总结一下,不仅为了记录一下,再就是希望能够给大家提供一些参考。

02 目的
在进入正片之前,我还是想再多说一下,关于uncertainty的设置的目的,这个我在之前的文章中曾经详细的叙述过,今天再多说一下,详细可参考下面链接的文章(深入浅出SDC | why uncertainty?)。关于uncertainty的设置,我们要在不同的实现阶段会有不同的设置目的。主要分为了综合阶段、PR阶段和STA三个阶段。
首先我们看综合(synthesis)阶段:
在综合阶段,我们通常会将所有的clock认为是ideal的,所以所有的同源clock之间就没有了skew的存在,这很明显是跟实际情况不一致的,为了弥补这一点对综合造成的乐观影响,所以,综合阶段设置uncertainty的目的一部分就是为了cover这一部分。
Design中的clock一般都是来自于芯片内部的PLL,而PLL输出的clock都会存在jitter,并且PLL的jitter在经过divider之后会被进一步放大,所以uncertainty的另外一部分是为了cover这些影响。
综合阶段是没有考虑OCV的影响的,为了便于BE更快的完成timing收敛,在综合阶段一般情况下还会做一些over constraints,所以等等这些我们通称作margin,这也是uncertainty需要cover掉的一部分。
其次看PR阶段和STA阶段:
在PR之后,尤其是在CTS之后,所有的clock都将不再是ideal的了,每条clock path都有了实际的delay值,所以自然而然的,在CTS之后的clock uncertainty将不再需要cover clock skew的影响,另外两部分(2和3)的影响还是存在的,所以还是需要通过uncertainty来cover。在STA阶段,uncertainty的设置,我们主要分成了两部分:其中一部分是clock jitter的影响,这部分需要PLL的参数外加实际的clock结构计算得到;另一部分的值来自于foundry厂,是在不同工艺下,foundry厂会提供signoff的uncertainty的参考值,这一部分,如果为了省事和保险,可以直接参考设置。

03 特例
上面已经简述了在不同的实现阶段,uncertainty设置的不同目的,但是这不是我们今天要说的重点,今天我们主要是为了讲下uncertainty设置的指令…
如果我们仔细研究uncertainty的设置指令的描述,我们会发现,关于uncertainty的设置其实是分为了两类的:一类是simple-uncertainty;另外一类是inter-clock-uncertainty。这两类具体什么意思呢?
Simple-uncertainty:这一类uncertainty意思是指直接设置在clock上的uncertainty,设置完成之后uncertainty的数值将作为clock本身的一种属性,我们可以通过clock的相关attribute得到。它的设置方式是set_clock_uncertainty –setup/-hold uncertainty clocks
Inter-clock-uncertainty:这一类是uncertainty的意思是指设置在具体path上的uncertainty,设置完成之后是不会作为具体某一个clock的属性的,也不能通过clock的相关attribute直接得到。它的设置方式:set_clock_uncertainty –setup/-hold uncertainty  -from clk1 –to clk2

当然,以上只是指令的某一种example。虽然inter-clock uncertainty不能通过clock的attribute得到,但是这两种uncertainty的数值,我们都是可以使用report_clock clock –skew来查看的(S家工具指令)。

说了这么多,可能还是有的人会迷惑,那为什么会有这两种uncertainty的设置呢?其实关于simple-uncertainty很容易理解,其实设置目的就是为了弥补上面我们提到的在不同阶段存在的那些误差。而inter-clock-uncertainty初衷是为了在不同clock之间设置的,而不同的clock之间,如果物理上存在实际的交互path,这时候,这两个clock本身的uncertainty是与两个clock之间数据交互时所需要设置的uncertainty值是不一样的(如分频前后两个clock交互或者经过PLL前后两个clock之间交互)。所以才需要-from/-to来指定特定的path。

现实当中,我们通常会给所有的clock都设置上uncertainty(采用set_clock_uncertainty –setup/-hold uncertainty clocks),但是为了一些特殊考虑,又要在部分clock之间设置inter-clock-uncertainty。那就可能会存在冲突的情况产生,即可能会在某一个clock上即设置了simple-uncertainty,又设置了inter-clock-uncertainty。如果存在这种情况,那么一定要知道,在同一个endpoint上,inter-clock-uncertainty的优先级是更高的,即在做timing check和timing report的时候,只会使用inter-clock的值进行timing的计算。这时候如果看timing report,你会在capture path上看到inter-clock uncertainty的数值体现。当然,如果只是设置了simple uncertainty,那么在timing report中你会看到 clock uncertainty的数值体现。

04 总结
通常情况下,在design实现的时候,会由于各种各样的原因,可能需要设置不同类型的uncertainty,需要使用到以上提到的指令在不同的阶段做相应的约束,最终提醒一点:先要熟悉design,然后再理解指令,最后才能合理的使用指令达到想要的结果。
积分规则
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-20 03:23 , Processed in 0.052647 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表