深度解析create_clock与create_generated_clock的区别
吾爱IC社区将用本文为各位揭秘create_clock与create_generated_clock之间的联系和区别,为何要单独create一个generated_clock,以及这两种方式create的clock,它们clock之间的联系以及timing check。
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
如下图:
如果直接声明如下,
create_clock -period 10 clk
create_generated_clock -name CLKdiv2
-divide_by 2
-source clk
[get_pins Udiv/Q]
那么根据声明,generated 和master clock的关系如下(工具会根据source clock 找到master clock,并确定source clock 和master clock的关系,当前source clock即master clock)
上面的STA 分析其实是错误,可以看到timing report:
而实际上的,generated 和 master clock的关系如下
对应的timing report:
解决方法有2种:
- 改变generated clock的source,即让generated clock和source clock的路径唯一且单一(单一是指,声明的相位边沿关系和实际的相位边沿关系一致)。一般做法就是将source clock设置在触发器的clock端。如下:
create_generated_clock -name CLKdiv2
-divide_by 2
-source [get_pins Udiv/CP]
[get_pins Udiv/Q]
这样generated clock和source clock的关系和声明的一直。工具会根据声明的source clock 找到它的master clock,同时确定source clock和master clock相位相反的关系,由此就确定了generated clock和master clock的关系。 - 直接声明generated clock和master clock的相位边沿关系。如下:
create_generated_clock \
-name CLKdiv2 \
-edges {2 4 6}
-source CLK \
[get_pins Udiv/Q]
http://www.52-ic.com/100.html