-
Notifications
You must be signed in to change notification settings - Fork 210
2019 03 01
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.
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