SDC-时钟sdc

作者: 飞奔的大虎 | 来源:发表于2022-01-31 11:14 被阅读0次

上次介绍了sdc的基本概念,那接下来几期,我们来讲解一些比较常用的sdc命令。虽然sdc大大小小有上百条命令,但实际常用的其实就那么10几条。今天我们来介绍下与时钟相关的命令。主要有以下命令:

create_clock

create_generated_clock

set_clock_uncertainty

set_clock_groups

任何sdc首先定义的都是时钟,对于一个同步电路而言,缓存器和缓存器之间的路径延迟时间必须小于一个Clock 周期(Period),也就是说,当我们确认了Clock 规格,所有缓存器间的路径的Timing Constraint 就会自动给定了。Clock规格主要包含WaveformUncertaintyClock group的定义。我们把它们称为时钟的三要素,当然创建任何时钟都要检查一下这三者有没有正确定义。

create_clock

主要定义一个Clock的source源端、周期、占空比(时钟高电平与周期的比例)及信号上升沿及下降沿的时间点。

来看一个最简单的例子:

这个时钟描述成sdc语句就是:

create_clock -name SYSCLK -period 20 \

-waveform {0 5} [get_ports2 SCLK]

waveform后面跟上升沿和下降沿的时间

-waveform {time_rise time_falltime_rise time_fall ...}

如果没指定-period,默认的waveform为{0, period/2}

create_generated_clock

generated clocks是另外一个重要的时钟概念

generated clocks 是从master clock中取得的时钟定义。master clock就是指create_clock命令指定的时钟产生点,如图所示:

我们可以用如下命令来描述generated clocks:

#定义master clock

create_clock -name CLKP -period 10 \

-waveform {0 5} [get_pins UPLL0/CLKOUT]

#在Q点定义generated clock

create_generated_clock -name CLKPDIV2 \

 -source UPLL0/CLKOUT  \

-master_clock CLKP  -divide_by 2 [get_pins UFF0/Q]

一般我们把时钟的源头会定义成create_clock,而分频时钟则会定义为create_generated_clock. 两者的主要区别在于CTS步骤,generated clock并不会产生新的clock domain, 而且定义generated clock后,clock path的起点始终位于master clock, 这样source latency并不会重新的计算。这是定义generated clock的优点所在。

Virtual clock

这边还有一个经常用的概念就是Virtual Clock,虚拟时钟。

前面介绍的create_clockcreate_generated_clock 都是real clock。而virtual clock则不挂在任何port或者pin上,只是虚拟创建出来的时钟。如下所示:

#定义虚拟时钟

create_clock -name VCLK -period 10 -waveform {0 5}

我们通常会把input/output delay挂在virtual clock上,因为input/output delay约束本来就是指片外的时钟,所以挂在虚拟时钟上较为合理。当然如果要省事情,直接挂在real clock上也是可以的。

set_clock_uncertainty

主要定义了Clock信号到时序器件的Clock端可能早到或晚到的时间。主要是用来降低jitter对有效时钟周期的影响。值得注意的是,在setup check中,clock uncertainty是代表着降低了时钟的有效周期;而在hold check中,clock uncertainty是代表着hold check所需要满足的额外margin。

来看下面一条reg2reg path. 对照着如下时钟波形图。可以写出下面的约束。

set_clock_uncertainty-from VIRTUAL_SYS_CLK \

-to SYS_CLK -hold 0.05

set_clock_uncertainty -from VIRTUAL_SYS_CLK \

-to SYS_CLK -setup 0.3

set_clock_uncertainty -from SYS_CLK \

-to CFG_CLK -hold 0.05

set_clock_uncertainty -from SYS_CLK \

-to CFG_CLK -setup 0.1

set_clock_groups

定义完时钟后,我们也需要通过设置clock group来确认各个时钟之间的关系。这是很重要的一步,因为通常我们还需要做cross domain check,如果clock group设错了,会导致整个STA检查错误。一般有三个选项:asynchronous,physically_exclusive和logically_exclusive。

asynchronous代表两个异步的clock group

physically_exclusive代表两个clock group在物理意义上相互排斥,比如在一个source pin上定义了两个时钟。

logically_exclusive代表两个clock group在逻辑上相互排斥,比如两个clock经过MUX选择器。一个简单的例子:

set_clock_groups -physically_exclusive \

-group {CLK1 CLK2} -group {CLK3 CLK4}

clock group的定义异常谨慎,需要和前端再三确认。

原文链接:https://mp.weixin.qq.com/s?__biz=MzI1MzAyNTA1Mg==&mid=2652112823&idx=1&sn=8c21159379d408c7a2ca5b7a8c0abe33&chksm=f23a69c4c54de0d239848e310f27125d0c7ba811782334f929ed157d55aa736a5ae953da6781&scene=21#wechat_redirect

相关文章

  • SDC-时钟sdc

    上次介绍了sdc的基本概念,那接下来几期,我们来讲解一些比较常用的sdc命令。虽然sdc大大小小有上百条命令,但实...

  • SDC-系统接口sdc

    今天要介绍的基本sdc是系统接口sdc。主要包括set_drive,set_driving_cell, set_i...

  • SDC-时序特例

    今天我们要介绍的基本sdc是时序特例,也就是我们常说的Path exception。针对一些路径需要的一些特殊设定...

  • SDC-设计规则相关的sdc

    今天我们要介绍的sdc内容是设计规则相关的sdc,也就是我们经常说的drv. 主要包括set_max_capaci...

  • SDC-逻辑赋值约束

    今天我们要介绍的sdc内容是逻辑赋值相关的sdc命令。常用的命令就是set_case_analysis。 它的作用...

  • 更简单的LEDE安装ONMP

    之前看原作者的教程 zhih.me ,安装后ONMP也能跑起来,但是出了个问题,就是我的路由有三个硬盘:sdc-系...

  • SDC-sdc检查

    通过前面几期sdc的介绍,相信大家都对最基本的sdc命令有了一个简单的认识。可以说,sdc是整个设计中最重要的文件...

  • SDC 文件

    对于 REG -REG 的path 需要我们提供哪些约束for setup time? 主要是时钟相关的约束; 占...

  • SDC拆分盘启航系统实力对接

    启航系统老大资料 SDC运作机制 (1)SDC拆分盘的发行量是1...

  • linux 磁盘逻辑卷的安装

    fdisk /dev/sdc 对具体的硬盘操作(/dev/sdc1 则错误)§作用:动态调整磁盘容量,从而提高磁盘...

网友评论

    本文标题:SDC-时钟sdc

    本文链接:https://www.haomeiwen.com/subject/ipqckrtx.html