前序

上次跟大家介绍了SDC的主要构成(如果想要查看可以点击下方蓝色链接),从中可以看出,所有SDC构成中最基本的就是clock的定义,它作为所有SDC的基础,贯穿到几乎所有SDC指令当中。因此,今天首先就跟大家一起探讨下clock的基本定义。

深入浅出SDC - 前序

Clock定义指令

Clock分为两大类,一类是root clock,其定义指令是create_clock;另外一类是generated clock,其定义指令是create_generated_clock。在做设计约束时,如何选择合适的约束指令和指令option是非常关键的,这将直接影响到工具的行为,如果选择有误,将会让工具的行为不符合自己的预期。

create_clockoption浅析

图1 create_clock介绍

如图1中所示,列出了create_clock的所有option以及其详细的解释。在这些当中加“[]”的为可选项,其它的为必选项。其中比较关键的-add,推荐大家最好是都要加上,防止PAD/port共用,造成clock被覆盖;-name,推荐大家一定要加上,杜绝系统自动分配命名。

create_generated_clock option浅析

图2 create_generated_clock options

如图2所示,列出了create_generated_clock的所有option以及详细解释,供大家参考。在这些当中,用“}”包起来的可以看做是一组参数,有类似的功能。接下来,重点跟大家探讨下create_generated_clock中的一些option的使用区别。

multiply_by/duty_cycle详解

首先说下multiply_by选项,其意思是倍频多少,主要应用在PLL的倍频clock的输出点的clock的定义,如果其master clock的duty cycle不是50%,然而,经过PLL之后,duty cycle往往都是设计成50%输出,所以可以配合-duty_cycle选项改变定义的clock的duty cycle。

divide_by/edges详解

divider_by表示除频的意思,例如最常见的2分频电路可以用-divide_by 2定义,如图3右中波形所示。但是有时,design设计的divider可能是采用ICG抹掉时钟边沿的方式实现的,如图3左所示。这时经过divider之后出来的波形并不是标准的2分频波形,这时候就不能直接采用-divider_by 2的方式定义分频之后的clock,因为如果采用了divide_by的方式定义了,那么其工具认知的行为波形,跟design实际输出的波形是不符的,如果分频后的时钟,应用在falling edge触发的DFF当中,可能就会造成工具timing check错误。(此处不详细解释了,大家可自己画波形思考)

图3 divide_by/edges options

invert/preinvt/edge_shift详解

-invert/preinvert分别表示:先定义clock后clock取反还是先clock取反后定义clock。我通过两个例子跟大家解释一下。如图4所示,将刚才图3右中clock的定义点修改到register的Q-pin上,如果继续使用-divide_by 2的方式定义此clock,那么工具认为的DFF/Q的波形应该是图4右所示的。但是实际上,分析可以知道,design输出的clock波形应该是图4左所示的波形。通过上篇SDC基础文章介绍中提到的(深入浅出SDC - 前序),工具在做setup timing分析时,是从launch DFF的触发沿到capture DFF的下一个触发沿之间的时间,所以基于错误的clock定义之后,工具的timing check行为将变成图4右蓝色箭头所示的行为。但是实际design预期的行为应该是图4左蓝色箭头的行为。从图中对比可以看出,工具timing check与designer预期不符。如果要正确的在DFF/Q pin上定义clock,应该加上-invert选项(即-divide_by 2 -invert)。

图4 invert option示例

虽然在图4示例中,工具的行为跟designer预期不符,但是分析可知,此时是加紧了工具的行为,即变得悲观了,可能结果是浪费一些PPA,但是不至于design最终行为出错。但是如果出现如图5所示的情况就不一样了。如果是按照图5所示的分频设计,我们同样在DFF/Q pin上定义2分频的clock,同样仅使用-divide_by 2的方式,那么定义完之后,工具认为的clock波形是如图5右所示的情况,而design实际的波形应该是图5左所示的情况。这时工具如果继续按照图5右蓝色箭头去做setup timing check,很明显是放松了对整个design的行为约束,这样导致的后果将是,最终timing收敛完成之后,行为跟实际design的行为不符,完全没有达到预期的timing约束程度,导致整个design失败。如果design如图5中所示,我们想在DFF/Q pin上正确的定义clock,需要加上-preinvert选项(-divide_by 2 -preinvert)。

图5 preinvert option示例

在图4,图5中的clock定义,上面讲到的都是如果采用-divide_by的方式如何正确的定义,那么能不能采用-edge的方式来定义呢?以图5为例,可以替换成-edge并且配合-edge_shift的方式来定义,其定义方式如图6所示。但是,此处需要注意,-edge_shift,其后面list列表中的数目要跟-edge中list数目完全一致,并且,-edge_shift后面list中的number可以为正,可以为负,如果为正,则表示右移,为负则表示左移,其是float类型的,表示右移/左移多少个时间单位。

图6 edge_shift option示例

图6中的定义,那么能不能直接用-edges {2 4 6}的方式呢?以及图4中的示例,能不能替换为-edges的方式定义呢?可以自己思考一下。

敲黑板,划重点

在此可以跟大家分享两条基本原则,有助于分析clock定义是否合理。采用create_generated_clock定义的clock,其一:继承的mater clock的edge一定要正确;其二:跟master clock之间的实际通路一定要物理上存在,并且要通。总结起来就是,clock定义要按照实际design来定义,不能想当然,如果在不清楚如何使用option时,可以先手画波形图,然后按照图再去选择option的使用。

今天就跟大家先讨论到此,另外create_clock/create_generated_clock的不同点有哪些?clock的同异步关系该怎么确定以及该如何正确的定义?我将会在下期继续跟大家分享…

Agenda:Clock 定义create_clock

create_generated_clock

set_clock_groups

set_clock_latency

I/O delay约束set_input_delay

set_output_delay

set_max_delay

Exceptions 定义set_multicycle_path

set_false_path

set_case_analysis

set_sense

DRC中的clock constraintsset_clock_uncertainty

set_propagated_clock

DRC中的基本约束set_max_transition

set_max_capacitance

set_max_fanout

DRC中IO相关约束set_input_transition

set_load

走过路过不要错过

分享转发或点击在看是对笔者最大的鼓励

CLOCK电子计算机上表示什么,深入浅出SDC - clock定义(上)相关推荐

  1. 时钟抖动(Clock Jitter)和时钟偏斜(Clock Skew)

    时钟抖动(Clock Jitter)和时钟偏斜(Clock Skew) 直通☛ 200页+ FPGA/IC秋招面试笔试题 文章目录 1.时钟抖动(Clock Jitter) 2.时钟偏斜(Clock ...

  2. 深入浅出话多态(上)——具体而微

    深入浅出话多态(上)--具体而微 小序 前几天写了一篇<深入浅出话委托>,很多兄弟姐妹发Mail说还算凑合,又有兄弟说能不能写一篇类似的文章,讲解一下什么是"多态".一 ...

  3. 我在上计算机课用英语怎么说,上英语课用英语怎么说

    当我们读三年级的时候,就已经开始上英语课了.那你知道上英语课用英语怎么说吗?下面小编告诉你上英语课用英语怎么说,大家一起来看看吧! 上英语课用英语怎么说: have an English lesson ...

  4. 世界上第一台子计算机名为,世界上第一台子计算机诞生于(.doc

    世界上第一台子计算机诞生于( 世界上第一台电子计算机诞生于( )年.A)1939B)1946C)19520100冯·诺依曼研制成功的存储程序计算机名叫( ).A)EDVACB)ENIACC)EDSAC ...

  5. 将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录

    将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器 需要配置修改的点: 1. 服务器ip端口(服务器ip 端口22/21). 2. 服务器账号密码(服务器登录用户名密码). 3. 上 ...

  6. php dw文件上传下载,使用PHP实现文件上传

    这里使用PHP实现文件的上传,由在浏览器这边选择文件,上传到服务器.其中,在上传文件中,考虑到对上传文件大小的限制.类型限制等问题.(当然可以根据我们需要修改对上传的文件的限制,而一般而言php自身也 ...

  7. linux的上传工具,Linux下精简版上传工具lrzsz

    lrzsz是一款在linux里可代替ftp上传和下载的程序. 1.配置好yum仓库. [root@tiejiang ~]# yum -y install lrzsz Loaded plugins: f ...

  8. ssm上传文件获取路径_SSM文件上传

    **自己对于SSM文件上传的一些心得** 刚开始的时候也是在网上寻找一些简单的案例,可能我的这篇文章不是最好的,但是这些都是我自己慢慢的摸索以及自己的尝试的一些心得,希望对各位有所帮助. 其实文件的上 ...

  9. qt ui界面无法移动控件_使用qt 键盘上的方向键只能控制ui界面上的按钮选择,不能实现我设定的功能...

    已结贴√ 问题点数:20 回复次数:2 使用qt 键盘上的方向键只能控制ui界面上的按钮选择,不能实现我设定的功能 我做的是一个贪吃蛇游戏,现在我想实现的功能是:按下键盘上的上下左右箭头的方向按键时, ...

最新文章

  1. 从0开始学习自动化测试框架cypress(一)
  2. string 类的常用方法 substring indexof length
  3. Java虚拟机学习 - 体系结构 内存模型
  4. GO语言学习之路25
  5. 怎样呵护友谊_呵护友谊需要学会尊重对方.PPT
  6. MFC编程——Where is WinMain?
  7. hd看图怎么打印图片_二年级看图写话图片及范文10篇(可下载打印)
  8. Hibernate 入门简单教程
  9. NUCLEO开发板:STM32 st-link驱动程序错误
  10. 本科课程【数字图像处理】实验1 - 腐蚀与膨胀
  11. 知识竞赛中如何按抢答器才能最先抢到
  12. java docx转pdf_在java中将docx转换为pdf
  13. html 打开 app,h5页面打开app
  14. Algorithm Analysis: common functions, asymptotic notation
  15. 多线程并发测试工具类
  16. Telos 小白指南
  17. C#MySql.Data报错Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
  18. Tmux常用命令小结(超全够用)
  19. mysql比较两张表中两个字段值_如何通过SQL找出2个表里值不同的列的方法
  20. php怎么让浏览器崩溃,让IE6浏览器崩溃

热门文章

  1. Android系统APK操作GPIO读写及添加权限
  2. 如何将csdn博客转移至halo博客之中
  3. Fortran开发环境在Win7 64位下配置:Compaq Visual Fortran6.5 or 6.6
  4. c# panel里面嵌入窗体
  5. 基于语音合成的韵律表示
  6. LeetCode笔记:Biweekly Contest 84
  7. 你知道现在各行各业对学历的要求有多高吗?如果学历不够,怎么办?
  8. 循环冗余校验CRC算法
  9. iOS8系统H264视频硬件编解码说明
  10. 2021年最火的报表工具