Skip to content

2019 03 01

Matthias Köfferlein edited this page Mar 3, 2019 · 3 revisions

More Hierarchical Operations and Antenna Check

More hierarchical operations

Most DRC functions are now hierarchy-enabled. By simply specifying "deep" at the beginning of a DRC script, DRC performs hierarchically.

There are some limitations:

  • Hierarchical XOR performance isn't quite good as it is implementation as two NOT's. Specifically when doing XOR between two layouts, the performance additionally suffers from the hierarchy mapping required between the two layouts.
  • Transformations not implemented hierarchically yet.
  • Same for "strange polygon check".
  • Some operations will build hierarchy variants if required and modify the layout therefore. Among these operations are the anisotropic variants (like "size(10, 20)") and snap. Most measurement or selection functions will need to create magnification variants if cells are instantiated in different magnifications.

Antenna check

With the network formation abilities, it was possible to implement an antenna check for preventing plasma induced damage. The implementation is based on a LayoutToNetlist object. The DRC script language now wraps this objects in a lightweight API. This will become the basis of LVS integration finally.

The antenna check is a first application of this feature.

Here is a sample script for the antenna check:

# use on testdata/drc/antenna_l1.gds for example

report("Antenna check sample")

deep

diff = input(2, 0)
poly = input(3, 0)
contact = input(4, 0)
poly_cont = input(5, 0)
metal1 = input(6, 0)
via1 = input(7, 0)
metal2 = input(8, 0)

gate = diff & poly

connect(gate, poly)
connect(poly, poly_cont)
connect(poly_cont, metal1)
connect(metal1, via1)
connect(via1, metal2)

antenna_check(gate, metal2, 10.0).output("Antenna ratio metal2/gate > 10")

Note that both poly and gate are included in the connectivity. Even if gate is subset of poly it needs to be connected to poly. The poly layer will supply to connections to the gate and the gate layer will supply the gate shapes for gate are measurement.

Diodes can be included to rectify the antenna effect. A diode is characterized by a layer which describes the diode area. Here is a sample for an antenna check with diodes:

# use on testdata/drc/antenna_l1.gds for example

report("Antenna check sample")

deep 

diff = input(2, 0)
poly = input(3, 0)
diff_cont = input(4, 0)
poly_cont = input(5, 0)
metal1 = input(6, 0)
via1 = input(7, 0)
metal2 = input(8, 0)
diode = input(2, 10)  # drawn marker layer - could also be derived

gate = diff & poly

connect(gate, poly)
connect(poly, poly_cont)
connect(diode, diff_cont)
connect(diff_cont, metal1)
connect(poly_cont, metal1)
connect(metal1, via1)
connect(via1, metal2)

# Any connection to a diode makes the net excluded from the test
antenna_check(gate, metal2, 10.0, diode).output("Antenna ratio metal2/gate > 10")

# Any diode connected to a net will increase the ratio by 5.0 per square micrometer
# of diode area
antenna_check(gate, metal2, 10.0, [ diode, 5.0 ]).output("Antenna ratio metal2/gate > 10, each diode increases ratio by 5.0 per square um of diode area")

For more details see the DRC reference: www.klayout.org/downloads/dvb/doc-qt5/about/drc_ref_global.html