深入探讨create_generated_clock

分类: 数字后端 |
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
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
如下图:
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 \
如下图:
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点。
同时考虑到选择器之前各个时钟间有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分析的时候就不会造成不必要的误解。
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.组合逻辑或门之后的rise or fall 的transiton会有4条,如下图。
但是根据我们的声明,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