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

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

3天内不再提示

探讨下clock的基本定义(下)

冬至子 来源:码农的假期 作者:Clark Zhao 2023-07-06 15:34 次阅读

Clock Latency简介

要探讨今天的主题,首先需要跟大家一起学习下clock latency这个基本概念。Clock latency通俗意义上是指clock定义点到clock sink point(时序器件的clock Pin)之间的这段延迟时间。其分为两类,其中一类为,source latency,另外一类是network latency。

**source latency ** :也称作insertion delay,通常是指clock source端到clock定义点之间的这段时间延迟;通常有两种情况,其一:clock 直接来自于芯片外部,如crystal clock,此时,source latency指的是芯片外部crystal出口到芯片PAD(假如clock定义在此处)之间的时间延迟;其二:clock 来自于芯片内部的PLL,此时,source latency指的是芯片内部PLL输出点到芯片内部某个第一个clock定义点之间的这段时间。

network latency :其指的是clock定义点到clock sink point之间的这段时间。

这两种latency是每一个clock的固有属性,当CTS完成之后,每一个clock如果是在propagation状态下,其source latency和network latency都是确定的。当然,在前期(PR之前或者CTS之前),通常情况下clock都处于ideal状态,为了能够模拟真实的情况,我们可以通过指令set_clock_latency去指定每个clock的source latency或者network latency,具体此指令的用法,我们这里不详细解释了,有兴趣,有需要的可以自己去查阅相关资料

图片 图1 clock latency 示例

create_clock和create_generated_clock的不同点简介

通常定义clock的方式有两种,create_clock和create_generated_clock。再上次有具体介绍过,这两个指令的使用。那么他们之间有哪些使用上的区别以及各自都有什么特点呢?大体总结如下:

  • create_generated_clock能够继承其master clock phase,换句话说:generate clock的边沿(rise or fall)是通过继承master clock得到的。
  • create_generated_clock能够继承其master clock的source latency。
  • 通常情况下,create_clock的source latency为0.(在不特殊指定的情况下)
  • 每当设置一个create_clock,通常CTS时会构建一个新的clock domain。

Generate clock定义出错引入的clock edge识别出错

在上次,我们通过多个例子,分类说明了,如果generate clock定义不合理,会误导工具做出错误的timing分析的各种情形。但是具体工具timing分析会是什么样的呢?

图片

图2 错误的定义generate clock示例

如图2所示,如果直接在u_ckdiv2/Q点上,使用-divide_by 2 –master_clock clk的方式定义generate clock,那么工具认为的Q点的波形会是图2中右图所示的情况。这其实是与实际design的情况不符合的(假如DFF复位状态为0)。这时工具会认为的timing path check情况会如图3所示。从u_ff1/CK到u_ff2/D,整个timing path周期只有半个clk cycle。

图片

图3 错误的generate clock定义

如果我们能够正确的在Q-pin上定义generate clock,那么工具认为的Q-pin的波形会是图4中所示的情形。这时同样的timing path,从u_ff1/CK到u_ff2/D,工具做出的timing 分析会是图4中的情形。

图片

图4 正确的generate clock定义

当然,通过上面这个例子,虽然clock定义不合理,但是错误的clock的定义,单从edge的传播来看,其实是加紧了对design的约束,可能会浪费一些PPA,但是不会让design最终因为timing出错。

Generate clock定义出错引入的latency计算出错

其实,除了上面分析提到的会影响工具正确的判断定义的generate clock的edge之外,还会可能影响到工具错误的计算clock的latency。

如图5中的情形,如果采用图5中(左,中,右)所示的定义方式,由于在mux的Z-pin上已经定义了generate clock gclk1,而在定义generate clock clk_div时,如果其master clock还指向了gclk1前面的一个clock-clk1,那么此时clock其实定义是不合理的。因为从clk_div往前追,看到的第一个clock是gclk1,而clk1被其打断了,其clock属性不能再正确的往后传播。

图片

图5 错误的clock定义

也即上面提到的generate clock可以继承其master clock的source latency这个特性就不能正确的保持了,从而导致工具认为此处定义的generate clock的source latency将从0开始计算。如果此处的generate clock替换为create clock会是怎样的呢?大家可以思考一下。而如果想正确的继承master clock的source latency,那么此处,可以按照图5中右所示的方式定义clock。

Clock Group定义简介

上面提到create clock定义时,会伴随新的clock domain的创建,此时所提到的clock domain即指clock group。当然,clock group并不仅存在于create clock定义时,在generate clock定义时,也可以指定clock group。其主要目的是,人为的告诉工具,我们所定义的所有的clock之间的关系,从而减少工具自动化分析的情形,降低runtime,得到更好的PPA的结果。但是具体clock group怎么划分,是需要按照design架构决定的。我们在此处,先不会深究为什么要区分不同的clock group以及clock group划分的依据(后面其它系列文章中再做分析),而是跟大家详细的解释下定义clock group的方法以及注意点。

如图6所示,定义clock group我们SDC中右一条指令其为set_clock_group,详细的解释在图6中都已经给出,但是个人觉得还是有必要针对-logically_exclusive/-physically_exclusive/-asynchronous这三个option具体的分情况说明一下。

图片

图6 clock group定义

-logically_exclusive/-physically_exclusive/-asynchronous简介

Logically_exclusive : 其含义是指两组clock逻辑上不会同时存在。如图7中第2框图所示,虽然,clk1a/clk1b/clk2/clk3/clk4同时存在于整个design中,但是由于clock mux的select信号是相同的,所以从图中可以看出,S=1,此时前后两个mux分别选通clk2和clk4;如果S=0,则此时两个MUX分别选通clk1a/clk1b和clk3,也就是clk1a/clk1b/clk3和clk2/clk4是逻辑上不会同时存在的。所以他们之间就是logically_exclusive。

Physically_exclusive : 其含义是指两组clock之间物理上不会同时存在。如图7中第1框图所示。第一个clock mux中的clk1a和clk1b,这两个clock是来自于相同的path,同一时间,这两个clock物理上只有一个存在,所以他们便是physically_exlusive。

Asynchronous : 其含义是指两组clock之间功能上异步的。如图7中第3框图所示,clk1和clk2,在功能设计时便是采用的异步方式设计的,即clk2跟clk1之间完全不需要关心相位或者frequency之间的关系,功能上也是正确的,这时候这两个clock便是aysnchronous。当然aysnchronous的前提条件是design功能上要保证正确性。

图片

图7 clock group定义示例

图7中,如果换成第4框图中的定义方式,跟第3框图中的定义方式会有什么异同点?这个大家可以自己思考一下…

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

    关注

    1

    文章

    95

    浏览量

    30496
  • PIN管
    +关注

    关注

    0

    文章

    35

    浏览量

    6222
  • PLL电路
    +关注

    关注

    0

    文章

    91

    浏览量

    6281
  • CTS
    CTS
    +关注

    关注

    0

    文章

    34

    浏览量

    13888
收藏 人收藏

    评论

    相关推荐

    探讨,CRC校验的优势

    本帖最后由 ntmusic 于 2014-6-11 11:31 编辑 探讨,使用计算的2字节的CRC校验码和使用固定的2字节数据作为校验在保证数据传输正确方面有什么不同?
    发表于 06-11 11:21

    一起探讨这个可行?

    电子元器件、打板PCB、一起探讨等等,既可以省钱也可以交到有想法有创意的朋友,供电子DIY爱好者方便DIY。欢迎各位坛友一起讨论一,尽可能的提出各种问题,待时机成熟时一起DIY几个创意电子~
    发表于 05-30 21:26

    Stm32_Clock_Init函数如何定义

    Stm32_Clock_Init,这个函数我看的一些资料上似乎都是突兀的就提出来了,没有给出是如何定义的,而且我看了看,每本资料添加的函数库都不一样,我的是和资料上的就对不上,所以似乎有的函数我用不了,我想知道刚刚说的那个函数到底是如何给出的。。。。
    发表于 03-16 00:37

    探讨OLED显示器的DC生产测试

    本文将和大家探讨OLED显示器的DC生产测试,对几个低成本无源OLED显示器DC测量系统进行详细介绍。
    发表于 05-12 06:14

    探讨16通道恒流输出精度及计算   

    探讨16通道恒流输出精度及计算  
    发表于 06-03 07:17

    介绍一STM32L151的clock tree

    首先来看一STM32L151的clock tree, 可以看到TIM2-7是在APB1上的, APB1的最大时钟配置是32MHz, 接下来我的及进行一我的项目中的始终配置说明,后续也会附
    发表于 07-16 10:03

    基于Stm32_Clock_Init()函数的流水灯设计

    原子的第一个例程流水灯中用了 Stm32_Clock_Init()函数,现在来解析一:引用时Stm32_Clock_Init(9);定义(此处省略了跑OS时的代码)看程序前,请确保理
    发表于 08-09 08:29

    探讨关于STM32中的中断系统

    大大增加,而且中断的设置也更加复杂。今天就将来探讨关于STM32中的中断系统。1 基本概念ARM Coetex-M3内核共支持256个中断,其中16个内部中断,2
    发表于 08-17 08:29

    探讨关于电机轴承的数据集

    这篇和大家探讨关于电机轴承的数据集电机轴承的数据集目前较多采用的是CWRU(凯斯西储大学轴承数据中心)这是一个针对于全球学者的公开数据集,下面给大家分享一该数据集的获取
    发表于 09-08 06:52

    Linux环境的头文件定义

    Linux 环境的头文件定义编译文件以及转换bin文件等操作系统:Ubuntu16.04单片机:STC89C52RC所需工具:1.编辑器 - vim2.编译器 - sdcc3.转换程序
    发表于 01-21 12:44

    探讨鸿蒙系统的shell

    小型系统编译内核的入口在B_LTS/kernel/liteos_a/BUILD.gn,打开看一:所以,kernel子系统的编译,依赖于make这个组件,而make组件则是通过执行同目录
    发表于 03-29 14:02

    深入探讨AHBzongxia仲裁器的仲裁

    1、AHB仲裁器的仲裁随着AMBA总线-AHB系列的逐步推进,现在在AHB总线中,基本能用来让主从机传输数据的要素都已经补齐了,所以最后一个功能部分,我们将深入的探讨,如果多个主机同时需要获得
    发表于 06-09 17:30

    请教一各位标准单元库中clock buffer的设计很复杂吗

    最近看了几篇关于时钟buffer的英文文章,看到很多做的clock buffer都很复杂,结构里面有charge pump、控制级等、还有PWCL等控制环。在这儿请教一各位,标准单元库中clock
    发表于 06-14 11:44

    探讨空气断路器和空气开关的区别

      空气断路器和空气开关是电气保护设备中的两种常见类型,它们都可以用于电路的过载保护和短路保护,但它们之间还有一些重要的区别。在本文中,我们将来探讨空气断路器和空气开关的区别。  1、在定义
    发表于 03-10 14:22

    探讨clock的基本定义(上)

    Clock分为两大类,一类是root clock,其定义指令是create_clock;另外一类是generated clock,其
    的头像 发表于 07-06 15:31 1105次阅读
    <b class='flag-5'>探讨</b>下<b class='flag-5'>clock</b>的基本<b class='flag-5'>定义</b>(上)