| <?xml version="1.0" encoding="utf-8"?> |
| <klayout-macro> |
| <description/> |
| <version/> |
| <category>drc</category> |
| <prolog/> |
| <epilog/> |
| <doc/> |
| <autorun>false</autorun> |
| <autorun-early>false</autorun-early> |
| <shortcut/> |
| <show-in-menu>true</show-in-menu> |
| <group-name>drc_scripts</group-name> |
| <menu-path>tools_menu.drc.end</menu-path> |
| <interpreter>dsl</interpreter> |
| <dsl-interpreter-name>drc-dsl-xml</dsl-interpreter-name> |
| <text> |
| |
| source($input, $top_cell) |
| report("Density Checks", $report) |
| |
| verbose(true) |
| |
| deep |
| |
| li1_wildcard = "67/0-4,6-43,45-*" |
| mcon_wildcard = "67/44" |
| li1fill_wildcard = "56/28" |
| |
| m1_wildcard = "68/0-4,6-43,45-*" |
| via_wildcard = "68/44" |
| m1fill_wildcard = "36/28" |
| |
| m2_wildcard = "69/0-4,6-43,45-*" |
| via2_wildcard = "69/44" |
| m2fill_wildcard = "41/28" |
| |
| m3_wildcard = "70/0-4,6-43,45-*" |
| via3_wildcard = "70/44" |
| m3fill_wildcard = "34/28" |
| |
| m4_wildcard = "71/0-4,6-43,45-*" |
| via4_wildcard = "71/44" |
| m4fill_wildcard = "51/28" |
| |
| m5_wildcard = "72/0-4,6-43,45-*" |
| m5fill_wildcard = "59/28" |
| |
| # --------------- |
| |
| li1 = polygons(li1_wildcard) |
| mcon = polygons(mcon_wildcard) |
| |
| m1 = polygons(m1_wildcard) |
| via = polygons(via_wildcard) |
| |
| m2 = polygons(m2_wildcard) |
| via2 = polygons(via2_wildcard) |
| |
| m3 = polygons(m3_wildcard) |
| via3 = polygons(via3_wildcard) |
| |
| m4 = polygons(m4_wildcard) |
| m4fill = polygons(m4fill_wildcard) |
| via4 = polygons(via4_wildcard) |
| |
| m5 = polygons(m5_wildcard) |
| |
| chip_boundary = input(235,4) |
| #area = (m4+m4fill).area |
| full_area = chip_boundary.area |
| |
| #li1_wildcard = "67/20" |
| #li1fill_wildcard = "56/28" |
| li1_density = polygons(li1_wildcard, li1fill_wildcard).area / full_area |
| li1_ca_density = 1 - li1_density |
| log("li1_ca_density is #{li1_ca_density}") |
| if li1_ca_density < 0.4 |
| #chip_boundary.output("li1.pd.1d", "0.4 min li1 ca pattern density, li1 ca density is #{li1_ca_density}") |
| chip_boundary.output("li1.pd.1d", "0.4 min li1 ca pattern density") |
| end |
| |
| #m1_wildcard = "68/20" |
| #m1fill_wildcard = "36/28" |
| m1_density = polygons(m1_wildcard, m1fill_wildcard).area / full_area |
| m1_ca_density = 1 - m1_density |
| log("m1_ca_density is #{m1_ca_density}") |
| if m1_ca_density < 0.4 |
| #chip_boundary.output("m1.pd.1d", "0.4 min m1 ca pattern density, m1 ca density is #{m1_ca_density}") |
| chip_boundary.output("m1.pd.1d", "0.4 min m1 ca pattern density") |
| end |
| |
| #m2_wildcard = "69/20" |
| #m2_fill_wildcard = "41/28" |
| m2_density = polygons(m2_wildcard, m2fill_wildcard).area / full_area |
| m2_ca_density = 1 - m2_density |
| log("m2_ca_density is #{m2_ca_density}") |
| if m2_ca_density < 0.4 |
| #chip_boundary.output("m2.pd.1d", "0.4 min m2 ca pattern density, m2 ca density is #{m2_ca_density}") |
| chip_boundary.output("m2.pd.1d", "0.4 min m2 ca pattern density") |
| end |
| |
| #m3_wildcard = "70/20" |
| #m3_fill_wildcard = "34/28" |
| m3_density = polygons(m3_wildcard, m3fill_wildcard).area / full_area |
| m3_ca_density = 1 - m3_density |
| log("m3_ca_density is #{m3_ca_density}") |
| if m3_ca_density < 0.4 |
| #chip_boundary.output("m3.pd.1d", "0.4 min m3 ca pattern density, m3 ca density is #{m3_ca_density}") |
| chip_boundary.output("m3.pd.1d", "0.4 min m3 ca pattern density") |
| end |
| |
| #m4_wildcard = "71/20" |
| #m4fill_wildcard = "51/28" |
| m4_density = polygons(m4_wildcard, m4fill_wildcard).area / full_area |
| m4_ca_density = 1 - m4_density |
| log("m4_ca_density is #{m4_ca_density}") |
| if m4_ca_density < 0.4 |
| #chip_boundary.output("m4.pd.1d", "0.4 min m4 ca pattern density, m4 ca density is #{m4_ca_density}") |
| chip_boundary.output("m4.pd.1d", "0.4 min m4 ca pattern density, m4 ca density is #{m4_ca_density}") |
| end |
| |
| #m5_wildcard = "72/20" |
| #m5fill_wildcard = "59/28" |
| m5_density = polygons(m5_wildcard, m5fill_wildcard).area / full_area |
| m5_ca_density = 1 - m5_density |
| log("m5_ca_density is #{m5_ca_density}") |
| if m5_ca_density < 0.24 |
| #chip_boundary.output("m5.pd.1d", "0.24 min m5 ca pattern density, m5 ca density is #{m5_ca_density}") |
| chip_boundary.output("m5.pd.1d", "0.24 min m5 ca pattern density") |
| end |
| |
| </text> |
| </klayout-macro> |