From a6a0d9946c7a1bcdb5bab3fe3fc5dcbe948f771f Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 5 Jul 2019 21:45:50 +0200 Subject: [PATCH] Updated documentation --- src/lay/lay/doc/manual/lvs.xml | 6 -- src/lay/lay/doc/manual/lvs_compare.xml | 61 ++++++++++++ src/lay/lay/doc/manual/lvs_tweaks.xml | 131 ++++++++++++++++++++++++- src/lay/lay/doc/manual/net_graph.png | Bin 0 -> 27017 bytes src/lay/lay/layHelpResources.qrc | 1 + 5 files changed, 191 insertions(+), 8 deletions(-) create mode 100644 src/lay/lay/doc/manual/net_graph.png diff --git a/src/lay/lay/doc/manual/lvs.xml b/src/lay/lay/doc/manual/lvs.xml index 104fc10a8..74fb8a24a 100644 --- a/src/lay/lay/doc/manual/lvs.xml +++ b/src/lay/lay/doc/manual/lvs.xml @@ -19,13 +19,7 @@ - -

A reference for the functions and objects available for LVS scripts can be found here: .

diff --git a/src/lay/lay/doc/manual/lvs_compare.xml b/src/lay/lay/doc/manual/lvs_compare.xml index 185449fa7..221bee1f6 100644 --- a/src/lay/lay/doc/manual/lvs_compare.xml +++ b/src/lay/lay/doc/manual/lvs_compare.xml @@ -65,6 +65,11 @@
same_circuits("CIRCUIT_IN_LAYOUT", "CIRCUIT_IN_SCHEMATIC")
+

+ Declaring circuits as 'same' means they will still be compared. The function is just + a hint where to look for the compare target. +

+

Device class equivalence hint

@@ -120,4 +125,60 @@ same_device_classes("NMOS_IN_LAYOUT", "NMOS_IN_SCHEMATIC")

max_caps(1e-16)
+

How the compare algorithm works

+ +

+ The coarse flow of the netlist compare algorithm is this: +

+ +
foreach circuit bottom up:
+  if matching circuit found in reference netlist:
+    if all subcircuits have been matched and pin matching has been established for them:
+      compare net graph locally from this circuit
+    else:
+      skip circuit with warning
+  else:
+    issue a circuit mismatch error
+ +

+ A consequence of this flow is that the compare will stop treating parent circuits when + one circuit's pins can't be matched to pins from the corresponding reference circuit + or the corresponding circuit can't be found in the reference netlist. This behaviour + fosters a bottom-up debugging approach: first fix the issues in subcircuits, then + proceed to the parent circuits. +

+ +

+ The local net graph compare algorithm is a backtracking algorithm with + hinting through topological net classification. Topological net classification + is based on nearest-net neighborhood. The following image illustrates this: +

+ +

+ +

+ +

+ Here the IN net's neighborhood is VDD via a traversal of gate to source/drain + over M1, to OUT via a twofold traversal of gate to source/drain over M1 and M2 + and to VSS via another single traversal of gate to source/drain over M2. + This uniquely identifies IN in this simple circuit. In effect, OUT, VDD and VSS + can be identified uniquely because their transitions from the IN net are + unambigously identifying them. The topological neighborhood is a simple metrics + which allows identifying matching nets from two netlists and deducing further relations. +

+ +

+ In big netlists, the algorithm will first try to match nets unambigously according + to their neighborhood metrics and register them as paired nets. + Such pairs often allow deducing further matching pairs. This deduction is + continued until all non-ambiguous pairing options are exhausted. + For resolving ambiguities, backtracking is employed: + the algorithm proposes a match and tentatively proceeds with this assumption. + If this execution path leads to a mismatch or logical contradiction, + the algorith will go back to the beginning and restart with a + new proposal. Backtracking is usually required mainly to match networks + with a high symmetry such as clock trees. +

+ diff --git a/src/lay/lay/doc/manual/lvs_tweaks.xml b/src/lay/lay/doc/manual/lvs_tweaks.xml index 783cd6b9e..d892afb3e 100644 --- a/src/lay/lay/doc/manual/lvs_tweaks.xml +++ b/src/lay/lay/doc/manual/lvs_tweaks.xml @@ -3,13 +3,140 @@ - LVS Tweaks + LVS Netlist Tweaks - +

+ Netlist tweaking is important to standardize netlists. Without tweaking, + the extracted netlist may contain elements that are redundant or + don't match anything found in the schematic.

+

+ Netlist tweaks are applied on the extracted object. + This can be obtained with the netlist function. + This function will extract the netlist if not done already. +

+ +

+ Netlist tweaks can also be applied to the schematic netlist. For example to flatten away + a model subcircuit called "NMOS", use this expression: +

+ +
schematic.flatten_circuit("NMOS")
+ +

Top level pin generation

+ +

+ Circuits extracted don't have pins on the top hierarchy level as the + extractor cannot figure out where to connect to this circuit. + The compare function does not try to match pins in this case. + But to gain a useful extracted netlists, pins are required. + Without pins, a circuit can't be embedded in a testbench for + example. +

+ +

+ KLayout offers a function to create top-level pins using + a simple heuristics: for every named (i.e. labelled) net in the top level + circuit a pin will be created (): +

+ +
netlist.make_top_level_pins
+ +

Device combination

+ +

+ Combining devices is important for devices which are not + represented as coherent entities in the layout. Examples are: +

+ +
    +
  • Fingered MOS transistors: MOS transistors with a large width + are often split into multiple pieces to reduce the parasitic gate and + diffusion resistances and capacitances. In the layout this is equivalent + to multiple parallel transistors. +
  • +
  • Serial resistors: Large resistors are often separated into + stripes which are then connected in a meander structure. From the device + perspective such resistors consist of several resistors connected in + series. +
  • +
  • Array capacitors: Large capacitors are often split into + smaller ones which are arranged in an array and connected in parallel. + This helps controlling the parasitic series resistances and inductances + and avoids manufacturing issues. +
  • +
+ +

+ In all these cases, the schematic usually summarizes these devices + into a single one with lumped parameter values (total resistance, capacitance, + transistor width). This creates a discrepancy which "device combination" + avoids. "Device combination" is a step in which devices are identified which + can be combined into single devices (such as serial or parallel resistors and + capacitors). To run device combination, use : +

+ +
netlist.combine_devices
+ +

+ The combination of serial devices might leave floating nets (the net connecting the + devices originally. These nets can be removed with . + See also , which is wrapper for several + methods related to netlist normalization. +

+ +

+ It's recommended to run "make_toplevel_pins" and "purge" before this step (see below). +

+ +

Circuit flattening (elimination)

+ +

+ It's often required to flatten circuits that do not represent a specific level of organisation but + act as a wrapper to something else. In layouts, devices are often implemented as PCells and + appear as specific cells for no other reason than being implemented in a subcell. The same + might happen for schematic subcircuits which wrap a device. "Flattening" means that a circuit + is removed and it's contents are integrated into the calling circuits. +

+ +

+ To flatten a circuit from the extracted netlist use +

+ +
netlist.flatten_circuit("CIRCUIT_NAME")
+ +

Purging (elimination of redundancy)

+ +

+ Extracted netlists often contain elements without a functional + aspect: via cells for example generate subcircuits with a single pin and + no device. Isolated metal islands (letters, logos, fill/planarisation + patches) will create floating nets etc. Two methods are available to + purge those elements. +

+ +

+ will remove all floating nets, + all circuits without devices or subcircuits. + will only purge floating nets. + Floating nets are nets which don't connect to any device or subcircuit. +

+ +
netlist.purge
+netlist.purge_nets
+ +

Normalization wrapper (simplification)

+ +

+ is a wrapper for "make_top_level_pins", + "combine_devices" and "purge" in the recommended order: +

+ +
netlist.simplify
+
diff --git a/src/lay/lay/doc/manual/net_graph.png b/src/lay/lay/doc/manual/net_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fc581b9220000c1eea9a261206114fc49a03de3c GIT binary patch literal 27017 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 literal 0 HcmV?d00001 diff --git a/src/lay/lay/layHelpResources.qrc b/src/lay/lay/layHelpResources.qrc index 0d977fed5..22848c6aa 100644 --- a/src/lay/lay/layHelpResources.qrc +++ b/src/lay/lay/layHelpResources.qrc @@ -186,6 +186,7 @@ doc/manual/inv_with_diodes.png doc/manual/inv_schematic.png doc/manual/inv_schematic2.png + doc/manual/net_graph.png doc/manual/bjt3_schematic.png doc/manual/bjt4_schematic.png doc/manual/mos3_schematic.png