原创 [转]深入create_generated_clock

2011-3-17 14:36 10738 5 5 分类: 工程师职场

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://bb2hh.blogbus.com/logs/87231705.html

注明:如需转载,请注明作者出处,谢谢~,Author:pythonlong

以下根据资料和个人体会整理,如果错误,疑问欢迎请指正,讨论!!

 

create_generated_clock 是用来说明generated clock与source clock的相位(边沿)关系,
同时根据source clock找到master clock以及source clock 和master clock的关系,
最终会确定generated clock和master clock的相位(边沿)关系。

所以在genereated clock的时候一定要明确generated clock与master clock的相位关系(rise->rise or rise->fall or fall->rise or fall->fall),
这些关系由桥梁source clock嫁接,所以需要名曲generated clock和source clock,以及source clock和master clock的关系,如果根据声明找到的generated clock
和master clock的关系和实际的关系不一致,否则会造成一些分析错误。

如:sta的时候找不到generated clock和source clock相位关系,会将generated clock的source latency 设置为0

如下图:



如果直接声明如下,


那么根据声明,generated 和master clock的关系如下(工具会根据source clock 找到master clock,并确定source clock 和master clock的关系,当前source clock即master clock)


而实际上的,generated 和 master clock的关系如下


解决方法有2种:
1.改变generated clock的source,即让generated clock和source clock的路径唯一且单一(单一是指,声明的相位边沿关系和实际的相位边沿关系一致)。
一般做法就是将source clock设置在触发器的clock端。如下:

这样generated clock和source clock的关系和声明的一直。
工具会根据声明的source clock 找到它的master clock,同时确定source clock和master clock相位相反的关系,
由此就确定了generated clock和master clock的关系。

2.直接声明generated clock和master clock的相位边沿关系。如下:
create_generated_clock \
 -name CLKdiv2 \
 -edges {2 4 6}
 -source CLK \
 [get_pins Udiv/Q]


版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://bb2hh.blogbus.com/logs/87233249.html

注明:如需转载,请注明作者出处,谢谢~,Author:pythonlong

以下根据资料和个人体会整理,如果错误,疑问欢迎请指正,讨论!!


上次讲到了create_generated_clock的作用,提到工具会根据声明找到generated clock和source clock的相位(边沿)关系,同时根据source clock找到master clock顺便确定source clock和master clock的关系。最终确定generated clock的关系。

但是如果有时候虽然确定了master clock和generated的相位(边沿)关系,但是master clock到generated clock的路径有很多的时候,会导致STA分析问题。

如下图:


根据上篇所讲,声明如下:


根据报告:


可以知道source latency 选择了不同路径


所以在声明generated clock的时候不仅要保证generated clock 和master clock 相位边沿关系和实际的一致,还要保证generated clock和master clock的路径唯一。
如下图,列出了可以声明唯一generated clock点。
 

同时考虑到选择器之前各个时钟间有crosstalk,选择器之后没有crosstalk,所以声明如下:


总而言之,create generated clock的时候要保证2点
1.一致性:声明的generated clock和master clock相位边沿的关系要和实际的一致。
2.唯一性:确保generated clock和master clock的路径的唯一。

满足上面2点,在STA分析的时候就不会造成不必要的误解。


版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://bb2hh.blogbus.com/logs/87235404.html

注明:如需转载,请注明作者出处,谢谢~,Author:pythonlong

以下根据资料和个人体会整理,如果错误,疑问欢迎请指正,讨论!!

设计中有时候需要奇数分频占空比50%的时钟,如下图为一个5分频占空比50%的时钟分频电路,

时钟波形如下

约束的时候我们一般会设置时钟如下:

设置之后后端工具(STA工具)会如何分析呢:
1.clock 的stop pin:由于我们在组合逻辑输出端create_genereated_clock,打断了PCLK125时钟的路径。
  后端工具在做时钟树的时候会将经过或门的2条时钟路径的延迟做的相近,即skew在允许范围内。
  这样,组合逻辑出来的时钟就不会产生毛刺。
2.组合逻辑或门之后的rise or fall 的transiton会有4条,如下图。
 
  工具在分析时序的时候会选择对应的路径(相同或者不相同,
  比如hold check,launch clock会选择最好的延迟,capture clock选择最差延迟。
 

但是根据我们的声明,master clock和generated clock的关系并不是和上图波形的一致:
声明的master clock 和generated clock 关系如下:
rise->rise fall->fall


因此后续触发器根据generated clock的声明:
上升沿的触发器,选择rise->rise的路径,下降沿的触发器选择fall->fall的路径


timing报告中也符合上面的声明:


为了确保generated clock和master clock的相位 边沿关系一致,声明修改如下:


查看时序报告如下图:


路径和实际波形一致:fall->rise, rise->fall


版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://bb2hh.blogbus.com/logs/87235868.html

注明:如需转载,请注明作者出处,谢谢~,Author:pythonlong

以下根据资料和个人体会整理,如果错误,疑问欢迎请指正,讨论!!

上篇中奇数分频占空比50%的时钟,如下图为一个5分频占空比50%的时钟分频电路,

时钟波形如下


但是使用某些design service的工具的时候,会禁止在组合逻辑后面create_genereated_clock,所以有了如下约束:

然后根据波形,以及设计中是否用到了上升沿到下降沿或者下降沿到上升沿的路径,约束不同边沿的fall path,一样可以达到效果。
同时后端中要约束这2个cock的inter skew。即可达到目的

但是中的但是某些design service的工具还禁止multiple clock per register 。可以使用多个sdc检查,或者使用如下方式:

将主要的脉冲声明成时钟,另外一个次脉冲做clock gating 检查。如下:

但是,我们希望的检查如下:

目前没什么好的约束可以设置,因为design service的tool还不支持set_data_check

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条