我们都知道时钟树综合在数字IC后端实现中的重要性。做clock tree主要有传统clock tree做法,H tree,Flexible H-tree,fishbone等做法。接下去小编将拿cadence官方的这份Innovus Flexible H-tree and Multi-Tap Clock Flow和对应的lab data来做这方面内容的分享。
需要完整版lab手册和lab数据的,可以前往社区星球免费获取。
该设计的时钟结构图如下。该设计时钟结构还是非常简单的。它包括一个主时钟my_clk,主时钟二分频时钟div_clk和测试时钟test_clk。
像这么简单的设计,我们数字后端工程师也都要会写该设计的timing signoff sdc和长clock tree sdc。
Flexible H-Tree golden flow如下:
create_ccopt_clock_tree_spec
set_ccopt_property target_max_trans 150ps -net_type top
add_ndr -name 2W2S -spacing_multiplier {Metal2:Metal7 2} -width_multiplier {Metal2:Metal7 2}
create_route_type -name htree_route -top_preferred_layer Metal7 -bottom_preferred_layer Metal6 -non_default_rule 2W2S -shield_net VSS
set_ccopt_property route_type htree_route -net_type top
setDesignMode -topRoutingLayer 7
Set Route type
create_route_type -name cts_leaf -top_preferred_layer Metal5 -bottom_preferred_layer Metal4
create_route_type -name cts_trunk -top_preferred_layer Metal5 -bottom_preferred_layer Metal4 -non_default_rule 2W2S
set_ccopt_property route_type -net_type leaf cts_leaf
set_ccopt_property route_type -net_type trunk cts_trunk
Configure cts cell list
set_ccopt_property buffer_cells {CLKBUFX2 CLKBUFX4 CLKBUFX8 CLKBUFX12 CLKBUFX16 }
set_ccopt_property inverter_cells {CLKINVX2 CLKINVX4 CLKINVX8 CLKINVX12 CLKINVX16 }
set_ccopt_property clock_gating_cells {TLATNTSCAX2 TLATNTSCAX4 TLATNTSCAX8 TLATNTSCAX12 TLATNTSCAX16}
Skew target
set_ccopt_property target_skew 120ps
Maximum transition target
set_ccopt_property target_max_trans 200ps
Create Flexible H-tree
create_ccopt_flexible_htree \
-name test \
-sink_instance_prefix HTAP \
-sink_grid {4 4} \
-sink_grid_exclusion_zones {{100 0 500 330} {500 0 1000 330}} \
-trunk_cell CLKBUFX20 \
-final_cell CLKBUFX20 \
-pin clk \
-image_directory IMAGE/1
Synthesize the htree
synthesize_ccopt_flexible_htrees
H-tree效果如下图所示。
Clock Tree Debugger效果图如下。使用Flexible H-tree后clock tree的平均长度是1.25ns。
【思考题】测试时钟test_clk的clock tree长度是多少?它和主时钟长度的关系是什么?