时序约束之 set_clock_groups

 

一、简述

对于异步时钟,通常会使用set_clock_groups、set_false_path做时序约束,使得不对跨异步时钟做时序分析。这样做可以缩短综合编译时间,且将宝贵的片内资源用在其他必要的时序约束上。

set_clock_groups 将不会对不同group的时钟做时序分析,对同一group的时钟不受影响。

不同于set_false_path约束,set_false_path是有方向的(-from -to 只能做单方向的时序约束),set_clock_groups 将会对-group的不同group的时钟双向约束。

 

二、同步时钟和异步时钟的区别

 

所以这里需要讲清楚的是,什么情况下可以做异步处理。

1.什么是同步时钟?

两个时钟之间的相位关系是固定的。一般这种情况下,这两个时钟具有相同的源时钟。比如一个主时钟和一个被2分频的生成时钟。生成时钟一般是通过PLL、CMT等生成。

 

2.什么是异步时钟?

两个时钟无法明确其相位关系。比如两个时钟通过两个晶振产生,这种情况下,这两个时钟的相位关系是不确定的。

 

3.不重叠时钟(Unexpandable Clocks)

这种情况指的是,两个时钟虽然具有固定的相位关系,但是在1000个时钟周期内相位不重叠。比如同一个主时钟,通过mmcm,产生clk0和clk1.

clk0的时钟周期为5.125ns。

clk1的时钟周期为6.666ns。

 

这种情况下,这两个时钟可以作为异步处理。

 

三、创建异步时钟groups

如何使用set_clock_groups创建异步时钟约束。

假设,有源时钟clk0,通过mmcm生成时钟usrclk0,usrclk1。另一个源时钟clk1,通过gtx,生成时钟gtclk,则时序约束如下:

set_clock_groups -name async_clk0_clk1 -asynchronous -group {clk0 usrclk0 usrclk1} \
-group {clk1 gtclk}

如果不清楚源时钟的生成时钟名,可以使用-include_generated_clocks选项,举例如下:

set_clock_groups -name async_clk0_clk1 -asynchronous \
-group [get_clocks -include_generated_clocks clk0] \
-group [get_clocks -include_generated_clocks clk1]
 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值