原创 [转]后端PLL约束

2011-3-20 16:16 3843 4 4 分类: 消费电子

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

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

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

一个PLL的应用电路图如下:

首先要明白PLL的作用:保持REF_CLK,FB_CLK相位一致。上图电路的时序如下:

如上图CLK_IN到REF_CLK有延迟,CLK到FB_CLK也有延迟,但是这2个延迟会让REF_CLK,FB_CLK的相位一致。

由于clk会在macro的输入端停止传输,所以需要一些适当约束,才能进行综合和时序分析。

有两种方法设置PLL的输出时钟(从综合到时序分析)

方法1:

dc综合的时候在PLL的输出端:

create_generated_clock -name PLL_CLK -source CLK_IN -multiply 1  [get_pins PLL/CLK]

如果PLL库中没有时序信息,可以根据spec通过create_qtm_model创建QTM模型。

pt做sta的时候同样可以使用创建的QTM模型,或者使用annotated_delay标记上图中的蓝色路径:

set_disable_timing PLL

set _max_rise [get_attribute [get_timing_path -delay max_rise -through PLL/CLK -through PLL/FB_CLK] arrival]
set _max_fall [get_attribute [get_timing_path -delay max_fall -through PLL/CLK -through PLL/FB_CLK] arrival]
set _min_fall [get_attribute [get_timing_path -delay min_fall -through PLL/CLK -through PLL/FB_CLK] arrival]
set _min_rise [get_attribute [get_timing_path -delay min_rise -through PLL/CLK -through PLL/FB_CLK] arrival]

remove_disable_timing PLL

set_annotated_delay -cell -max -rise -to PLL/CLK [expr 0.0 - $_max_rise]
set_annotated_delay -cell -min -rise -to PLL/CLK [expr 0.0 - $_min_rise]
set_annotated_delay -cell -max -fall -to PLL/CLK [expr 0.0 - $_max_fall]
set_annotated_delay -cell -min -fall -to PLL/CLK [expr 0.0 - $_min_fall]

2.在PLL输出端:create_clock -name PLL_CLK   [get_pins PLL/CLK]

然后设置source latency:

set_clock_latency -source -late  5 [get_clocks PLL_CLK]

set_clock_latency -source -early 2 [get_clocks PLL_CLK]

pt做sta的时候同样在PLL输出端:create_clock -name PLL_CLK   [get_pins PLL/CLK]

而clock的source latency需要计算得出:

set ref_max_rise [get_attribute [get_timing_path -delay max_rise -from CLK_IN -to PLL/REF_CLK] arrival]
set ref_max_fall [get_attribute [get_timing_path -delay max_fall -from CLK_IN -to PLL/REF_CLK] arrival]
set ref_min_fall [get_attribute [get_timing_path -delay min_fall -from CLK_IN -to PLL/REF_CLK] arrival]
set ref_min_rise [get_attribute [get_timing_path -delay min_rise -from CLK_IN -to PLL/REF_CLK] arrival]

set_disable_timing PLL

set fb_max_rise [get_attribute [get_timing_path -delay max_rise -through PLL/CLK -through PLL/FB_CLK] arrival]
set fb_max_fall [get_attribute [get_timing_path -delay max_fall -through PLL/CLK -through PLL/FB_CLK] arrival]
set fb_min_fall [get_attribute [get_timing_path -delay min_fall -through PLL/CLK -through PLL/FB_CLK] arrival]
set fb_min_rise [get_attribute [get_timing_path -delay min_rise -through PLL/CLK -through PLL/FB_CLK] arrival]

remove_disable_timing PLL

set_clock_latency -source -late  -rise [expr $ref_max_rise -$fb_max_rise]
set_clock_latency -source -early -rise [expr $ref_min_rise -$fb_min_rise]
set_clock_latency -source -late  -fall [expr $ref_max_fall -$fb_max_fall]
set_clock_latency -source -early -fall [expr $ref_min_fall -$fb_min_fall]

clock_latency为时序图中粉红色路径

由上面可以知道2中约束方法是一致的。方法一中REF_CLK的延迟加上annotated delay就是方法二中的source latency。

上面有个技巧就是先disable PLL的时序,而get_timing_path使用through,而不是使用from,to。

另外当考虑OCV的时候需要自习分析FB的路径和clock tree的关系,确定那些net是launch,哪写是capture。

因为OCV的时候使用延迟的计算不一样。会导致悲观或者乐观分析。

PARTNER CONTENT

文章评论0条评论)

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