上次介绍了sdc的基本概念,那接下来几期,我们来讲解一些比较常用的sdc命令。虽然sdc大大小小有上百条命令,但实际常用的其实就那么10几条。今天我们来介绍下与时钟相关的命令。主要有以下命令:
create_clock
create_generated_clock
set_clock_uncertainty
set_clock_groups
任何sdc首先定义的都是时钟,对于一个同步电路而言,缓存器和缓存器之间的路径延迟时间必须小于一个Clock 周期(Period),也就是说,当我们确认了Clock 规格,所有缓存器间的路径的Timing Constraint 就会自动给定了。Clock规格主要包含Waveform、Uncertainty和Clock 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_clockCLKP -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_clock,create_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.05set_clock_uncertainty -from VIRTUAL_SYS_CLK \
-to SYS_CLK -setup 0.3set_clock_uncertainty -from SYS_CLK \
-to CFG_CLK -hold 0.05set_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的定义异常谨慎,需要和前端再三确认。
时钟的定义就到此为止了,只是一些基础的概念,具体命令还有很多延伸扩展的内容,大家要去翻doc,深入研究下!
-
时钟
+关注
关注
11文章
1749浏览量
131897 -
SDC
+关注
关注
0文章
49浏览量
15605
原文标题:时序分析基本概念介绍——时钟sdc
文章出处:【微信号:IC_Physical_Design,微信公众号:数字后端IC芯片设计】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
MCU时钟相关功能引脚操作
![MCU<b class='flag-5'>时钟相关</b>功能引脚操作](https://file.elecfans.com/web2/M00/6C/F5/poYBAGMz67KAR7eAAADiIzTi24E384.png)
MSP430G2231单片机,求助其时钟相关问题,在线等!!!
总结RTC(Real Time Clock)实时时钟相关的知识
HbirdV2-SoC中如何配置QSPI1和QSPI2的时钟极性CPOL和时钟相位CPHA?
与时钟相关的PCB的设计考虑主要分为两部分
FPGA中的时钟相关概念
![FPGA中的<b class='flag-5'>时钟相关</b>概念](https://file.elecfans.com/web1/M00/DA/E2/pIYBAGAA8neAZtjbAAAMZpgO1SA001.png)
STM32F030_RTC实时时钟相关的知识资料下载
![STM32F030_RTC实时<b class='flag-5'>时钟相关</b>的知识资料下载](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
MCU时钟相关功能引脚作用介绍
SPI时钟极性和时钟相位
![SPI<b class='flag-5'>时钟</b>极性和<b class='flag-5'>时钟相</b>位](https://file.elecfans.com/web2/M00/88/32/poYBAGOz9fiAGOxeAABWX9AQB5Y05.jpeg)
评论