加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

深入探讨create_generated_clock

(2013-04-17 11:26:56)
分类: 数字后端

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


 一、通过create_generated_clock 确定相位关系

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

如下图:

http://filer.blogbus.com/4218525/4218525_1291635121f.png 

如果直接声明如下,
http://filer.blogbus.com/4218525/4218525_12916351309.png 

那么根据声明,generated 和master clock的关系如下(工具会根据source clock 找到master clock,并确定source clock 和master clock的关系,当前source clock即master clock)
http://filer.blogbus.com/4218525/4218525_12916351377.png 

而实际上的,generated 和 master clock的关系如下
http://filer.blogbus.com/4218525/4218525_12916351446.png 

解决方法有2种:
1.改变generated clock的source,即让generated clock和source clock的路径唯一且单一(单一是指,声明的相位边沿关系和实际的相位边沿关系一致)。
一般做法就是将source clock设置在触发器的clock端。如下:
http://filer.blogbus.com/4218525/4218525_1291635150x.png 
这样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]

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

如下图:
http://filer.blogbus.com/4218525/4218525_12916367417.png  

根据上篇所讲,声明如下:
http://filer.blogbus.com/4218525/4218525_1291636749c.png  

根据报告:
http://filer.blogbus.com/4218525/4218525_1291636757c.png  

可以知道source latency 选择了不同路径
http://filer.blogbus.com/4218525/4218525_1291636763f.png  

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

同时考虑到选择器之前各个时钟间有crosstalk,选择器之后没有crosstalk,所以声明如下:
http://filer.blogbus.com/4218525/4218525_1291636777s.png  

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

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

三、设计中有时候需要奇数分频占空比50%的时钟
如下图为一个5分频占空比50%的时钟分频电路,
http://filer.blogbus.com/4218525/4218525_12916371999.png  
时钟波形如下
http://filer.blogbus.com/4218525/4218525_1291637207g.png  
约束的时候我们一般会设置时钟如下:
http://filer.blogbus.com/4218525/4218525_1291637212r.png  
设置之后后端工具(STA工具)会如何分析呢:
1.clock 的stop pin:由于我们在组合逻辑输出端create_genereated_clock,打断了PCLK125时钟的路径。
  后端工具在做时钟树的时候会将经过或门的2条时钟路径的延迟做的相近,即skew在允许范围内。
  这样,组合逻辑出来的时钟就不会产生毛刺。
2.组合逻辑或门之后的rise or fall 的transiton会有4条,如下图。
  http://filer.blogbus.com/4218525/4218525_1291637220u.png 
  工具在分析时序的时候会选择对应的路径(相同或者不相同,
  比如hold check,launch clock会选择最好的延迟,capture clock选择最差延迟。
  http://filer.blogbus.com/4218525/4218525_1291637227t.png 

但是根据我们的声明,master clock和generated clock的关系并不是和上图波形的一致:
声明的master clock 和generated clock 关系如下:
rise->rise fall->fall
http://filer.blogbus.com/4218525/4218525_12916372345.png  

因此后续触发器根据generated clock的声明:
上升沿的触发器,选择rise->rise的路径,下降沿的触发器选择fall->fall的路径
http://filer.blogbus.com/4218525/4218525_12916372436.png  

timing报告中也符合上面的声明:
http://filer.blogbus.com/4218525/4218525_1291638123q.png  

为了确保generated clock和master clock的相位 边沿关系一致,声明修改如下:
http://filer.blogbus.com/4218525/4218525_1291637484k.png  

查看时序报告如下图:
http://filer.blogbus.com/4218525/4218525_12916381387.png  

路径和实际波形一致:fall->rise, rise->fall
http://filer.blogbus.com/4218525/4218525_1291637505a.png


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有