From f4df6ec4ffd9cdbe473ab43bcc40bec1d9f8715c Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 22 Mar 2024 19:04:13 +0100 Subject: [PATCH] Doc updates --- src/doc/doc/about/drc_ref.xml | 2 +- src/doc/doc/about/drc_ref_drc.xml | 2 +- src/doc/doc/about/drc_ref_global.xml | 37 ++++- src/doc/doc/about/drc_ref_layer.xml | 5 +- src/doc/doc/about/drc_ref_netter.xml | 45 +++++- src/doc/doc/about/drc_ref_source.xml | 2 +- src/doc/doc/about/lvs_ref.xml | 2 +- src/doc/doc/about/lvs_ref_global.xml | 2 +- src/doc/doc/about/lvs_ref_netter.xml | 2 +- src/doc/doc/manual/lvs_connect.xml | 201 +++++++++++++++++++++++++++ src/doc/docResources.qrc | 2 + 11 files changed, 285 insertions(+), 17 deletions(-) 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 @@ - + diff --git a/src/doc/doc/about/drc_ref_drc.xml b/src/doc/doc/about/drc_ref_drc.xml index 7ee678eca..3fab7774b 100644 --- a/src/doc/doc/about/drc_ref_drc.xml +++ b/src/doc/doc/about/drc_ref_drc.xml @@ -1,7 +1,7 @@ - + diff --git a/src/doc/doc/about/drc_ref_global.xml b/src/doc/doc/about/drc_ref_global.xml index 7e8b6ba82..45b725686 100644 --- a/src/doc/doc/about/drc_ref_global.xml +++ b/src/doc/doc/about/drc_ref_global.xml @@ -1,17 +1,12 @@ - + DRC Reference: Global Functions -

-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

@@ -1843,6 +1838,36 @@ is equivalent to "layer.smoothed" (see
DRC expressions (see Layer#drc and smoothed for more details).

+

"soft_connect" - Specifies a soft connection between two layers

+ +

Usage:

+
    +
  • soft_connect(a, b)
  • +
+

+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. +

+

"soft_connect_global" - Specifies a soft connection to a global net

+ +

Usage:

+
    +
  • soft_connect_global(l, name)
  • +
+

+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. +

"source" - Specifies a source layout

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 @@ - + DRC Reference: Layer Object -

-The layer object represents a collection of polygons, edges or edge pairs. -

"&" - Boolean AND operation

diff --git a/src/doc/doc/about/drc_ref_netter.xml b/src/doc/doc/about/drc_ref_netter.xml index f03149944..bd82b4fbd 100644 --- a/src/doc/doc/about/drc_ref_netter.xml +++ b/src/doc/doc/about/drc_ref_netter.xml @@ -1,7 +1,7 @@ - + @@ -434,6 +434,49 @@ layout analysis. Hence, all
connect, connect statements will clear the netlist and re-extract it again.

+

"soft_connect" - Specifies a soft connection between two layers

+ +

Usage:

+
    +
  • soft_connect(a, b)
  • +
+

+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). +

+

"soft_connect_global" - Soft-connects a layer with a global net

+ +

Usage:

+
    +
  • soft-connect_global(l, name)
  • +
+

+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. +

"top_level" - Specifies top level mode

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 @@ - + diff --git a/src/doc/doc/about/lvs_ref.xml b/src/doc/doc/about/lvs_ref.xml index 4a38dd6db..58168f012 100644 --- a/src/doc/doc/about/lvs_ref.xml +++ b/src/doc/doc/about/lvs_ref.xml @@ -1,7 +1,7 @@ - + diff --git a/src/doc/doc/about/lvs_ref_global.xml b/src/doc/doc/about/lvs_ref_global.xml index c262d6815..c1d2ad914 100644 --- a/src/doc/doc/about/lvs_ref_global.xml +++ b/src/doc/doc/about/lvs_ref_global.xml @@ -1,7 +1,7 @@ - + diff --git a/src/doc/doc/about/lvs_ref_netter.xml b/src/doc/doc/about/lvs_ref_netter.xml index f5f851203..9feef786f 100644 --- a/src/doc/doc/about/lvs_ref_netter.xml +++ b/src/doc/doc/about/lvs_ref_netter.xml @@ -1,7 +1,7 @@ - + diff --git a/src/doc/doc/manual/lvs_connect.xml b/src/doc/doc/manual/lvs_connect.xml index 501695d35..6e99e3080 100644 --- a/src/doc/doc/manual/lvs_connect.xml +++ b/src/doc/doc/manual/lvs_connect.xml @@ -10,6 +10,7 @@

Intra- and inter-layer connections

+

The connectivity setup of a LVS script determines how the connections are made. @@ -77,6 +78,7 @@ connect(metal2, metal2_labels)

Global connections

+

KLayout supports implicit connections made across all polygons on @@ -98,6 +100,7 @@ connect(metal2, metal2_labels)

Implicit connections

+

Implicit connections can be useful to supply preliminary connections @@ -193,6 +196,7 @@ connect(metal2, metal2_labels)

Explicit connections

+

Explicit connections can be useful to enforce a connection in the layout @@ -280,4 +284,201 @@ connect_explicit("INV", [ "BULK", "VSS" ]) statements.

+

Soft connections

+ + + +

+ 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. +

+
diff --git a/src/doc/docResources.qrc b/src/doc/docResources.qrc index a853c8b3d..c0e4c856a 100644 --- a/src/doc/docResources.qrc +++ b/src/doc/docResources.qrc @@ -244,6 +244,8 @@ doc/images/drc_raw1.png doc/images/drc_raw2.png doc/images/drc_raw3.png + doc/manual/soft_connections.png + doc/manual/soft_connections2.png doc/programming/introduction.xml