Step 2) Develop code (or command) which will enable users to create non-default rules, something like below. Refer to default rules from tech lef, which will be a good starting point
create_my_ndr -name <non_default_rule_name>
update_my_ndr -name <non_default_rule_name> -width <double_or_triple_width> -spacing <double_or_triple_spacing> -layer <layer_name>
User can use the above commands, like below
create_my_ndr -name ndr1
update_my_ndr -name ndr1 -layer m1 -width 0.5 -spacing 0.7
update_my_ndr -name ndr1 -layer m3 -width 0.8 -spacing 1.0
create_my_ndr -name ndr2
update_my_ndr -name ndr1 -layer m1 -width 0.25 -spacing 0.35
update_my_ndr -name ndr1 -layer m3 -width 0.4 -spacing 0.5
Step 3) Develop code (or create command) to report newly created NDR’s, something like below
report_my_ndr -name <ndr_name>
User can use above command like below
report_my_ndr -name ndr1
Output:
my_ndr_name “ndr1”
layer_name:width:spacing
m1:0.5:0.7
m3:0.8:1.0
Step 4) Develop code (or command) to “route leaf cell + 1 level buffer route output + same buffer input till branch-off point with ndr2” and “route other clock nets with ndr1”
It can be a command something like below.
special_route_clock_nets -leaf_cell_clock_net ndr2 -other_clock_nets ndr1