virtual clock一般用在没有时钟的路径上或者不是与系统同时钟的约束中。
这里不讨论一般情况,嘿嘿。
可以看下,下面设计中经常会遇到的情况:
如何约束路径,从而使综合工具正确分析,这里就要用到virtual clock
观察这两个电路,不难发现。经过选择器的2个路径不会同时出现的。
基于此,我们可以利用virtual clock来分析各自的路径。
如下图:
对于每一个路径我们设计一个virtual clock,然后对输入或者输出增量约束
create_clock -name VClk_Pos -period $ppos
create_clock -name VClk_Neg -period $pneg
set_output_delay -add 4 -clock VClk_Pos Dout
set_output_delay -add 6 -clock VClk_Neg Dout -clock_fall
create_clock -name VClk_Com -period $pcom
create_clock -name VClk_Seq -period $pseq
set_input_delay 4 -add -clock VClk_Com Din
set_input_delay 5 -add -clock VClk_Seq Din
set_output_delay 6 -add -clock VClk_Com Dout
set_output_delay 5 -add -clock VClk_Seq Dout
用过dc综合工具的基本都会知道建立时间的检查是在最小的launch和capture间检查的。
所以上面的约束中会有一些false path,因此我们要filter掉这些路径。
set_false_path -from Clk_Pos -to VClk_Neg
set_false_path -from Clk_Neg -to VClk_Pos
set_false_path -from VClk_Com -to VClk_Seq
set_false_path -from VClk_Com -to Clk
set_false_path -from VClk_Seq -to VClk_Com
set_false_path -from VClk_Seq -to VClk_Seq
set_false_path -from Clk -to VClk_Com
至此,就ok了。
其实上面的情况还可以用set_max_delay来约束,但是set_max_delay通常会打断时序路径,
造成dc再分析setup time的时候比较乐观,分析hold time又比较悲观。
文章评论(0条评论)
登录后参与讨论