mirror of https://github.com/KLayout/klayout.git
Doc updates
This commit is contained in:
parent
c1602abce1
commit
f4df6ec4ff
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE language SYSTEM "klayout_doc.dtd">
|
||||
|
||||
<!-- generated by /home/matthias/klayout/0.28/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- generated by /home/matthias/klayout/master/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- DO NOT EDIT! -->
|
||||
|
||||
<doc>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE language SYSTEM "klayout_doc.dtd">
|
||||
|
||||
<!-- generated by /home/matthias/klayout/0.28/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- generated by /home/matthias/klayout/master/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- DO NOT EDIT! -->
|
||||
|
||||
<doc>
|
||||
|
|
|
|||
|
|
@ -1,17 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE language SYSTEM "klayout_doc.dtd">
|
||||
|
||||
<!-- generated by /home/matthias/klayout/0.28/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- generated by /home/matthias/klayout/master/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- DO NOT EDIT! -->
|
||||
|
||||
<doc>
|
||||
<title>DRC Reference: Global Functions</title>
|
||||
<keyword name="global"/>
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
<h2-index/>
|
||||
<a name="angle"/><h2>"angle" - In universal DRC context: selects edges based on their orientation</h2>
|
||||
<keyword name="angle"/>
|
||||
|
|
@ -1843,6 +1838,36 @@ is equivalent to "layer.smoothed" (see <a href="/about/drc_ref_layer.xml#smoothe
|
|||
argument, "smoothed" represents the polygon smoother on primary shapes within
|
||||
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_global.xml#smoothed">smoothed</a> for more details).
|
||||
</p>
|
||||
<a name="soft_connect"/><h2>"soft_connect" - Specifies a soft connection between two layers</h2>
|
||||
<keyword name="soft_connect"/>
|
||||
<p>Usage:</p>
|
||||
<ul>
|
||||
<li><tt>soft_connect(a, b)</tt></li>
|
||||
</ul>
|
||||
<p>
|
||||
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.
|
||||
</p><p>
|
||||
See <a href="/about/drc_ref_netter.xml#connect">Netter#connect</a> for a more detailed description of that function.
|
||||
</p>
|
||||
<a name="soft_connect_global"/><h2>"soft_connect_global" - Specifies a soft connection to a global net</h2>
|
||||
<keyword name="soft_connect_global"/>
|
||||
<p>Usage:</p>
|
||||
<ul>
|
||||
<li><tt>soft_connect_global(l, name)</tt></li>
|
||||
</ul>
|
||||
<p>
|
||||
Like <a href="#soft_connect">soft_connect</a>, 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.
|
||||
</p><p>
|
||||
See <a href="/about/drc_ref_netter.xml#soft_connect_global">Netter#soft_connect_global</a> for a more detailed
|
||||
description of that function.
|
||||
</p>
|
||||
<a name="source"/><h2>"source" - Specifies a source layout</h2>
|
||||
<keyword name="source"/>
|
||||
<p>Usage:</p>
|
||||
|
|
|
|||
|
|
@ -1,15 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE language SYSTEM "klayout_doc.dtd">
|
||||
|
||||
<!-- generated by /home/matthias/klayout/0.28/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- generated by /home/matthias/klayout/master/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- DO NOT EDIT! -->
|
||||
|
||||
<doc>
|
||||
<title>DRC Reference: Layer Object</title>
|
||||
<keyword name="Layer"/>
|
||||
<p>
|
||||
The layer object represents a collection of polygons, edges or edge pairs.
|
||||
</p>
|
||||
<h2-index/>
|
||||
<a name="&"/><h2>"&" - Boolean AND operation</h2>
|
||||
<keyword name="&"/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE language SYSTEM "klayout_doc.dtd">
|
||||
|
||||
<!-- generated by /home/matthias/klayout/0.28/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- generated by /home/matthias/klayout/master/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- DO NOT EDIT! -->
|
||||
|
||||
<doc>
|
||||
|
|
@ -434,6 +434,49 @@ layout analysis. Hence, all <a href="#connect">connect</a>, <a href="#connect_gl
|
|||
calls must have been made before this method is used. Further <a href="#connect">connect</a>
|
||||
statements will clear the netlist and re-extract it again.
|
||||
</p>
|
||||
<a name="soft_connect"/><h2>"soft_connect" - Specifies a soft connection between two layers</h2>
|
||||
<keyword name="soft_connect"/>
|
||||
<p>Usage:</p>
|
||||
<ul>
|
||||
<li><tt>soft_connect(a, b)</tt></li>
|
||||
</ul>
|
||||
<p>
|
||||
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.
|
||||
</p><p>
|
||||
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).
|
||||
</p><p>
|
||||
Hence, two nets are disconnected, if they both connect to the same lower layer,
|
||||
but do not have a connection between them.
|
||||
</p><p>
|
||||
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.
|
||||
</p><p>
|
||||
Beside this, soft connections follow the same rules than hard connections
|
||||
(see <a href="#connect">connect</a>).
|
||||
</p>
|
||||
<a name="soft_connect_global"/><h2>"soft_connect_global" - Soft-connects a layer with a global net</h2>
|
||||
<keyword name="soft_connect_global"/>
|
||||
<p>Usage:</p>
|
||||
<ul>
|
||||
<li><tt>soft-connect_global(l, name)</tt></li>
|
||||
</ul>
|
||||
<p>
|
||||
Connects the shapes from the given layer l to a global net with the given name
|
||||
in "soft mode".
|
||||
</p><p>
|
||||
See <a href="#connect_global">connect_global</a> for details about the concepts of global nets.
|
||||
See <a href="#soft_connect">soft_connect</a> for details about the concept of soft connections.
|
||||
In global net soft connections, the global net (typically a substrate)
|
||||
is always the "lower" layer.
|
||||
</p>
|
||||
<a name="top_level"/><h2>"top_level" - Specifies top level mode</h2>
|
||||
<keyword name="top_level"/>
|
||||
<p>Usage:</p>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE language SYSTEM "klayout_doc.dtd">
|
||||
|
||||
<!-- generated by /home/matthias/klayout/0.28/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- generated by /home/matthias/klayout/master/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- DO NOT EDIT! -->
|
||||
|
||||
<doc>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE language SYSTEM "klayout_doc.dtd">
|
||||
|
||||
<!-- generated by /home/matthias/klayout/0.28/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- generated by /home/matthias/klayout/master/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- DO NOT EDIT! -->
|
||||
|
||||
<doc>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE language SYSTEM "klayout_doc.dtd">
|
||||
|
||||
<!-- generated by /home/matthias/klayout/0.28/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- generated by /home/matthias/klayout/master/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- DO NOT EDIT! -->
|
||||
|
||||
<doc>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE language SYSTEM "klayout_doc.dtd">
|
||||
|
||||
<!-- generated by /home/matthias/klayout/0.28/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- generated by /home/matthias/klayout/master/scripts/drc_lvs_doc/extract_doc.rb -->
|
||||
<!-- DO NOT EDIT! -->
|
||||
|
||||
<doc>
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
<h2-index/>
|
||||
|
||||
<h2>Intra- and inter-layer connections</h2>
|
||||
<keyword name="connect"/>
|
||||
|
||||
<p>
|
||||
The connectivity setup of a LVS script determines how the connections are made.
|
||||
|
|
@ -77,6 +78,7 @@ connect(metal2, metal2_labels)</pre>
|
|||
</p>
|
||||
|
||||
<h2>Global connections</h2>
|
||||
<keyword name="connect_global"/>
|
||||
|
||||
<p>
|
||||
KLayout supports implicit connections made across all polygons on
|
||||
|
|
@ -98,6 +100,7 @@ connect(metal2, metal2_labels)</pre>
|
|||
</p>
|
||||
|
||||
<h2>Implicit connections</h2>
|
||||
<keyword name="connect_implicit"/>
|
||||
|
||||
<p>
|
||||
Implicit connections can be useful to supply preliminary connections
|
||||
|
|
@ -193,6 +196,7 @@ connect(metal2, metal2_labels)</pre>
|
|||
</p>
|
||||
|
||||
<h2>Explicit connections</h2>
|
||||
<keyword name="connect_explicit"/>
|
||||
|
||||
<p>
|
||||
Explicit connections can be useful to enforce a connection in the layout
|
||||
|
|
@ -280,4 +284,201 @@ connect_explicit("INV", [ "BULK", "VSS" ])
|
|||
statements.
|
||||
</p>
|
||||
|
||||
<h2>Soft connections</h2>
|
||||
<keyword name="soft_connect"/>
|
||||
<keyword name="soft_connect_global"/>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Here is an example:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<img src="/manual/soft_connections.png"/>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>Such a technology stack can be described by the following connectivity:</p>
|
||||
|
||||
<pre># 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)
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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 <a href="/about/drc_ref_global.xml#soft_connect">soft_connect</a> and
|
||||
<a href="/about/drc_ref_global.xml#soft_connect_global">soft_connect_global</a>).
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
To solve the n-well issue we have to substitute the n-tie to n-well connection statement
|
||||
by a "soft_connect" statement:
|
||||
</p>
|
||||
|
||||
<pre>soft_connect(ntie, nwell)</pre>
|
||||
|
||||
<p>
|
||||
The above picture now looks like this:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<img src="/manual/soft_connections2.png"/>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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:
|
||||
</p>
|
||||
|
||||
<pre># 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)
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
As this code demonstrates, multiple soft connections can be specified.
|
||||
From the perspective of the check, all soft connections are of the same kind.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Note, that two opposite soft connections cancel, so this would eventually
|
||||
make a hard connection:
|
||||
</p>
|
||||
|
||||
<pre>soft_connect(a, b)
|
||||
soft_connect(b, a)
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
<b>NOTE:</b> 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.
|
||||
</p>
|
||||
|
||||
</doc>
|
||||
|
|
|
|||
|
|
@ -244,6 +244,8 @@
|
|||
<file alias="drc_raw1.png">doc/images/drc_raw1.png</file>
|
||||
<file alias="drc_raw2.png">doc/images/drc_raw2.png</file>
|
||||
<file alias="drc_raw3.png">doc/images/drc_raw3.png</file>
|
||||
<file alias="soft_connections.png">doc/manual/soft_connections.png</file>
|
||||
<file alias="soft_connections2.png">doc/manual/soft_connections2.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="/help/programming">
|
||||
<file alias="introduction.xml">doc/programming/introduction.xml</file>
|
||||
|
|
|
|||
Loading…
Reference in New Issue