0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何做一条合格的path?同一条path在物理设计不同阶段的变化

冬至子 来源:RTL2GDS 作者:老本 | Benjamin 2023-06-27 14:12 次阅读

Delay值是多少才算合格呢?这一篇开始讲解路径(Path)的概念,以及衡量Path Delay是否合格的标准----建立时间(setup time)和保持时间(hold time)。最后会用实际的例子来介绍同一条path在物理设计的不同阶段的变化,在什么阶段会修setup,什么时候会开始修hold等实践知识?

四种路径

STA是基于路径(Path Based)进行检查的,一般路径的起点(Startpoint)和终点(Endpoint)都是存储单元,即使是输入输出相关的路径,我们也是假设存在一个虚拟的外部寄存器作为时序路径的起点或者终点。然而,按照一般的分法,路径分为四种类型,如图所示:

图片

上图中,四类Path的起点和终点如下表所示:

1.jpg

当然,设计中也可能有一些到clock gate的path,或者跟memory相关的path,暂时都把这些当成寄存器来分类就可以。在编写时序约束文件(SDC)时,要照顾到每一种类型的path,避免遗漏。现在的后端流程一般会把这四类path进行分组(Path Group),分别为IN2REG (Path 1),REG2REG (Path 2),REG2OUT (Path 3), IN2OUT (Path 4),方便工具按照不同的权重对它们分别优化,避免相互影响。标准的SDC命令是“group_path”,各家工具都支持。

Setup/Hold Time

为什么会有setup time,hold time的要求呢?这与时序单元的工作方式有关,数据从发送寄存器(Launch flop)传输到接收寄存器(Capture flop),它是在时钟沿采样的(上升或者下降沿),数据是以流水线的方式一个周期往后打一拍,所以保证采样时刻数据的正确性至关重要,setup就是要求在采样时刻数据已经正确且稳定,hold就是要求下一个数据传来之前在上一个数据已经完成采样,不会把上一个数据覆盖。下图非常清楚地解释了setup和hold的概念,真的是“一盗图值千言”。

图片

Path示例

图片

图片

Setup概念图示

图片

图片

Hold概念图示

这里经常有个奇怪的面试问题: 是setup重要还是hold重要? 大概是考验大家的实际项目经验吧,setup不满足还可以通过降低频率来测试,hold不满足就没什么办法了。但是项目中,由于hold修复方法比较简单直接,一般是在setup可控的前提下再修复,所以一般在布局阶段只考虑setup,而在建立时钟树后再去考虑hold。把hold放在后面去修复,并不代表不重要,只是体现了修复的难易程度罢了。

实例分析

上面说过,数据采样可以是上升沿,也可以是下降沿,下面以一条半周期的path为例,展示它在整个物理设计过程中可能的变化过程,也借此提供一个分析时序问题的纵向比较的方法学:

布局(place)之前:

这条path的详细介绍如下,其中clock周期是2ns:

  • Startpoint ”是LvdsClkCnt_reg_0_,它是“ADC_CLK”的上升(r)沿采样的
  • Endpoint ”是SortData_neg_reg_5_,它是“ADC_CLK”的下降(f)沿采样的
  • Scenario ”代表了这条path上所用的cell的工作的PVT
  • Path Group ”表示path的类型分组,在上一节介绍过
  • Path Type ”表示path类型,可能是max(表示setup),min(表示hold),或其它。
  • clock network delay是ideal的,因为没有建立时钟树
  • 从“ADC_CLK” clock的源头到LvdsClkCnt_reg_0_/CP(正沿),再到SortData_neg_reg_5_/D的整个path每一级的delay加总起来是0.6227ns(叫做arrival time),这一段叫 launch path
  • 从“ADC_CLK” clock的源头到SortData_neg_reg_5_/CPN(负沿),加上clock reconvergence pessimism ( CRPR ),clock uncertainty,以及capture寄存器库自带的setup time等,形成了required time(0.7304ns),这一段叫 capture path
  • **slack ** = required time - arrival time 不小于0表示setup合格

可以看出此时的path,setup time还是满足的。

图片

刚刚布局(place)之后,但还没有建立时钟树(cts):

可以看出在path中,有些stdcell被优化了,也多了一些inverter,这是工具的行为,但是最终slack为负数,说明setup time不达标了。

图片

建立时钟树(cts)之后,布线(route)之前:

此时的path中已经有了真实的clock tree,所以clock network delay从ideal变成了propagated,delay值也从0变为1.8731ns,而且到两个寄存器的clock pin的delay也不一样,差值就叫clock skew,这条path的skew对setup time是有害的,不过此时的CRPR也不是0了,而是0.1609ns,抵消掉部分clock skew的影响。这个阶段工具其实又做了一些优化,比如icc_place134这个cell,从原先的INVD3BWP12T变大到INVD4BWP12T(sizeup)等等。

图片

布局(place)+ 建立时钟树(cts)+ 布线(route)之后:

此时的path相比之前,有了真实的绕线,Net Delay会更差,而且也会引入串扰噪声,工具会进一步进行优化,比如icc_place147和U270等,都变大了。不过最终的slack还是负数,并没有达标。

图片

对于实践方面,大概率(80%以上)还有一个面试问题:“项目中有没有碰到timing/routing比较难的设计,你是怎么解决的?”,必须要结合项目经历准备,可以思考上面的path最后setup还是没满足,有怎么解决办法?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117722
  • CPN
    CPN
    +关注

    关注

    0

    文章

    6

    浏览量

    10232
  • 时钟树
    +关注

    关注

    0

    文章

    51

    浏览量

    10661
  • SDC
    SDC
    +关注

    关注

    0

    文章

    47

    浏览量

    15302
  • ADC采样
    +关注

    关注

    0

    文章

    125

    浏览量

    12708
收藏 人收藏

    评论

    相关推荐

    UCB_SWAP配置信息共16,写入一条有效配置后,上一条需写1使配置无效是为什么?

    UCB_SWAP配置信息共16,写入一条有效配置后,上一条需写1使配置无效。 经过实测发现配置是从下至上检索,取最后一条有效配置,而不是从上至下检索,取第
    发表于 01-24 08:31

    如何在同一条线上传输音频和数字信号

    现在做个项目,需要同一条线上传输音频和数字信号;最大的问题是传输数字信号时接收音频的那方会受到数字信号的噪声.如果用调制的方法,该如何设置载波频率呢?其他同仁有没有比较好的方法,请赐教![此贴子已经被作者于2009-2-13
    发表于 02-13 15:13

    求助康佳***一条垂直亮线

    求助康佳***一条垂直亮线
    发表于 02-19 23:22

    请问:一条Modelsim TCL指令

    Xilinx的DO文件里,建库时,有一条语句是-voptargs = "+acc",去掉的话,Modelsim编译不过。请问这条-voptargs = "
    发表于 07-19 12:16

    AD9敷铜时如何一条一条网络的敷铜

    AD9敷铜时如何一条一条网络的敷铜,整块PCB敷铜有时有点浪费。新手,求指教!
    发表于 10-28 11:43

    怎么LABVIEW中实现让程序按照数据库中的数据一条一条的按步进顺序程序走?

    的数据,一条一条的按步进顺序程序来走呢。每走一条数据都会有个条件,满足后才能执行下一条数据,怎么实现较好,以下是我现在做的程序图片,并不能
    发表于 09-15 11:46

    DSP执行一条语句的时间

    CPU配置成150M。高频时钟75M。 那么执行一条语句的时间是多少呢
    发表于 10-15 11:28

    LABVIEW 如何画一条直线,闪烁。

    如何在前面板画一条直线,让它闪烁,求大神帮帮忙。。。。。。。。。。。。。。。。。。。。
    发表于 12-08 11:43

    的萌新,运行之后为什么总是一条直线,请问为什么会这样?如何调试?

    今天刚的萌新,运行之后为什么总是一条直线,是我的电路有问题吗,还是这个示波器怎么调试
    发表于 06-20 14:26

    请问gps接收数据是每接收一条解析一条吗?

    请教下,gps 数据是每接收一条解析一条还是次全部接收完成后再起解析 ???
    发表于 11-02 08:49

    请问手机通过蓝牙次性发送多条数据STM32怎么一条一条的顺序接收?

    本人为新手,目前已实现手机发送一条数据STM32接收以后执行相应的操作,但是无法实现手机次性批量发送,STM32接收以后再一条一条的顺序执行?恳请各位大佬赐教
    发表于 04-29 02:38

    学习一条PCB布线规则

    规则-----条件许可的情况下,高电平有效线要尽量缩短,低电平有效的线则尽量延长----这一条规则的存在基础就是基于低电平时环路阻抗比较低,抗干扰能力比较强才起来的。 
    发表于 05-28 06:51

    一条指令的执行需要多少个时钟周期

    keil中编程时,写了行代码,然后就想知道,执行这句C代码需要多长时间。时钟周期在这就不解释了,频率的倒数。指令周期,个人理解就是cpu执行一条汇编指令所需要的时间。我们知道cm3使用的三级
    发表于 08-04 06:42

    从AD中导入GERBER,转换成PCB后,里面的线路是一条一条的,怎么把这些铜线整合在起?

    从AD中导入GERBER,转换成PCB后,里面的线路是一条一条的,怎么把这些铜线整合在起?
    发表于 11-20 08:19

    怎样同一条CAN总线上连接两个不同的微控制器呢

    我想在同一条 CAN 总线上连接两个不同的微控制器,个使用 FDCAN,另个使用 CAN 2.0。
    发表于 12-23 09:41