diff --git a/src/doc/doc/about/drc_ref.xml b/src/doc/doc/about/drc_ref.xml
index 889c3fedc..203941a1d 100644
--- a/src/doc/doc/about/drc_ref.xml
+++ b/src/doc/doc/about/drc_ref.xml
@@ -1,7 +1,7 @@
-
+
-Some functions are available on global level and can be used without any object.
-Most of them are convenience functions that basically act on some default object
-or provide function-like alternatives for the methods.
-"angle" - In universal DRC context: selects edges based on their orientation
Usage:
++A "soft connection" is made between two layers and +is a directional connection (like an ideal diode). +Soft connections allow detecting if nets are connected +via a high-ohmic substrate or diffusion layer (the +"lower" layer). +"b" is the "lower" and "a" the upper layer. +
+See Netter#connect for a more detailed description of that function. +
+Usage:
++Like soft_connect, a soft connection is made between +a layer and a global net (e.g. substrate). The global net +is always the "lower" net of the soft connection. +
+See Netter#soft_connect_global for a more detailed +description of that function. +
Usage:
diff --git a/src/doc/doc/about/drc_ref_layer.xml b/src/doc/doc/about/drc_ref_layer.xml index ce8c3aa4a..c8f124c5c 100644 --- a/src/doc/doc/about/drc_ref_layer.xml +++ b/src/doc/doc/about/drc_ref_layer.xml @@ -1,15 +1,12 @@ - +-The layer object represents a collection of polygons, edges or edge pairs. -
Usage:
++a and b must be polygon or text layers. After calling this function, the +Netter considers shapes from layer a and b connected in "soft mode". +Typically, b is a high-ohmic layer such as diffusion, implant for substate +material, also called the "lower" layer. +
+A soft connection between shapes from layer a and b forms a directional +connection like an ideal diode: current can flow down, but now up +(not meant in the physical sense, this is a concept). +
+Hence, two nets are disconnected, if they both connect to the same lower layer, +but do not have a connection between them. +
+The netlist extractor will use this scheme to identify nets that are +connected only via such a high-ohmic region. Such a case is typically +bad for the functionality of a device and reported as an error. +Once, the check has been made and no error is found, soft-connected +nets are joined the same way than hard connections are made. +
+Beside this, soft connections follow the same rules than hard connections +(see connect). +
+Usage:
++Connects the shapes from the given layer l to a global net with the given name +in "soft mode". +
+See connect_global for details about the concepts of global nets. +See soft_connect for details about the concept of soft connections. +In global net soft connections, the global net (typically a substrate) +is always the "lower" layer. +
Usage:
diff --git a/src/doc/doc/about/drc_ref_source.xml b/src/doc/doc/about/drc_ref_source.xml index a9ab3eaab..74d119bcb 100644 --- a/src/doc/doc/about/drc_ref_source.xml +++ b/src/doc/doc/about/drc_ref_source.xml @@ -1,7 +1,7 @@ - +The connectivity setup of a LVS script determines how the connections are made. @@ -77,6 +78,7 @@ connect(metal2, metal2_labels)
KLayout supports implicit connections made across all polygons on @@ -98,6 +100,7 @@ connect(metal2, metal2_labels)
Implicit connections can be useful to supply preliminary connections @@ -193,6 +196,7 @@ connect(metal2, metal2_labels)
Explicit connections can be useful to enforce a connection in the layout @@ -280,4 +284,201 @@ connect_explicit("INV", [ "BULK", "VSS" ]) statements.
++ Soft connections are a way to find wiring issues where signals + or even power is routed over high-ohmic paths. + High-ohmic paths can be established through connections via + poly silicon, implant, well or substrate areas. Such areas + can easily show resistance values which are a hundred times + higher than that of metal connections. We have to make sure + that for routing power or critical signals, connections are + not made through such areas, but primarily through metal + connections. +
+ ++ Here is an example: +
+ +
+
+
+ In this case, we have a standard textbook planar CMOS technology with two PMOS devices + sitting in a n-well. These could be the two PMOS of two inverter pairs for example. + Both PMOS need to be connected to VDD at their sources. In addition, the n-well + area also needs to be tied to VDD in order to provide reverse bias for the p+ drain + areas and the body potential for the transistors, forming the opposite + electrode of the gate capacity. +
+ +Such a technology stack can be described by the following connectivity:
+ +# Input layers + +nwell = ... +active = ... +pplus = ... +nplus = ... +poly = ... +contact = ... +metal1 = ... +via1 = ... +metal2 = ... + +# computed layers + +(nactive, pactive) = active.and_not(nwell) + +# PMOS and NMOS source/drain regions +psd = (nactive & pplus) - poly +nsd = (pactive & nplus) - poly + +# n tie and p tie (nwell and substrate contact) +ntie = nactive & nplus +ptie = pactive & pplus + +# connections + +# nwell connections +connect(ntie, nwell) +connect(contact, ntie) + +# substrate connections +connect_global(ptie, "BULK") +connect(contact, ptie) + +# device connections +connect(contact, psd) +connect(contact, nsd) +connect(contact, poly) + +# metal connections +connect(metal1, contact) +connect(via1, metal1) +connect(metal2, via1) ++ +
+ However, there is an issue: + As shown in the picture, the left PMOS source is properly connected to VDD. + The right one however lacks the metal connection to VDD. From the perspective + of pure connectivity, this transistor's source is connected to VDD, but only + through a weak n-well connection. Such a device will not work - or at least, badly. +
+ ++ The solution is to introduce soft connections. Soft connections are made + by replacing "connect" with "soft_connect" and "connect_global" with "soft_connect_global" + (see soft_connect and + soft_connect_global). + The first layer is the "upper" layer while the second layer is the "lower" layer. + The lower layer is the high-ohmic one. In global connections, the global net is + always the high-ohmic one. +
+ ++ Soft connections can be visualized as directional connections: current can only flow from the + upper to the lower layer, but not the other way. So, a real connection is only made, + if both upper terminals of the soft connections are connected to the same physical net. +
+ ++ To solve the n-well issue we have to substitute the n-tie to n-well connection statement + by a "soft_connect" statement: +
+ +soft_connect(ntie, nwell)+ +
+ The above picture now looks like this: +
+ +
+
+
+ With this definition, the netlist extractor is able to detect the fault + and raise a warning or an error (in top level mode). + The warning is shown on the log tab and indicates incomplete wiring plus + details about the disconnected subnets, formed by the soft connection. +
+ ++ The complete the setup we also need to include other soft connections, + such as connections via substrate (a global soft connect to the BULK net), + via source/drain implants, via the tie implants and via poly: +
+ +# Input layers + +nwell = ... +active = ... +pplus = ... +nplus = ... +poly = ... +contact = ... +metal1 = ... +via1 = ... +metal2 = ... + +# computed layers + +(nactive, pactive) = active.and_not(nwell) + +# PMOS and NMOS source/drain regions +psd = (nactive & pplus) - poly +nsd = (pactive & nplus) - poly + +# n tie and p tie (nwell and substrate contact) +ntie = nactive & nplus +ptie = pactive & pplus + +# connections + +# nwell connections +soft_connect(ntie, nwell) +soft_connect(contact, ntie) + +# substrate connections +soft_connect_global(ptie, "BULK") +soft_connect(contact, ptie) + +# device connections +soft_connect(contact, psd) +soft_connect(contact, nsd) +soft_connect(contact, poly) + +# metal connections +connect(metal1, contact) +connect(via1, metal1) +connect(metal2, via1) ++ +
+ As this code demonstrates, multiple soft connections can be specified. + From the perspective of the check, all soft connections are of the same kind. +
+ ++ Note, that two opposite soft connections cancel, so this would eventually + make a hard connection: +
+ +soft_connect(a, b) +soft_connect(b, a) ++ +
+ NOTE: It is therefore important to observe the direction of soft connections: + upper and high-conductive / low-ohmic layer first, and lower and low-conductive / high-ohmic + layer second. +
+