blob: 994e70f12b2d81650e6696c0ff98f79c1591d147 [file] [log] [blame]
<?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-9,11-43,45-*"
mcon_wildcard = "67/44"
li1fill_wildcard = "56/28"
m1_wildcard = "68/0-4,6-9,11-43,45-*"
via_wildcard = "68/44"
m1fill_wildcard = "36/28"
m2_wildcard = "69/0-4,6-9,11-43,45-*"
via2_wildcard = "69/44"
m2fill_wildcard = "41/28"
m3_wildcard = "70/0-4,6-9,11-43,45-*"
via3_wildcard = "70/44"
m3fill_wildcard = "34/28"
m4_wildcard = "71/0-4,6-9,11-43,45-*"
via4_wildcard = "71/44"
m4fill_wildcard = "51/28"
m5_wildcard = "72/0-4,6-9,11-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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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>