From d41ad570d0606bd9ad0c9f7e6c2f51ebf372d655 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20K=C3=B6fferlein?= Date: Sat, 2 Mar 2019 11:43:56 +0100 Subject: [PATCH] Created 2019 03 01 (markdown) --- 2019-03-01.md | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 2019-03-01.md diff --git a/2019-03-01.md b/2019-03-01.md new file mode 100644 index 0000000..019e424 --- /dev/null +++ b/2019-03-01.md @@ -0,0 +1,81 @@ +# 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: + +```ruby +# 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") +``` + +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: + +```ruby +# 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") +```