概述
一、简述
对于异步时钟,通常会使用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]
最后
以上就是高兴柜子为你收集整理的时序约束之 set_clock_groups的全部内容,希望文章能够帮你解决时序约束之 set_clock_groups所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复