Integration API into LVS+DRC

This commit is contained in:
Matthias Koefferlein 2024-03-12 23:24:54 +01:00
parent d87e3de436
commit 89c281f87a
4 changed files with 141 additions and 1 deletions

Binary file not shown.

View File

@ -433,6 +433,32 @@ Class<db::LayoutToNetlist> decl_dbLayoutToNetlist ("db", "LayoutToNetlist",
"\n"
"This variant has been introduced in version 0.27.\n"
) +
gsi::method ("soft_connect", (void (db::LayoutToNetlist::*) (const db::Region &, const db::Region &)) &db::LayoutToNetlist::soft_connect, gsi::arg ("a"), gsi::arg ("b"),
"@brief Defines an inter-layer connection for the given layers in soft mode.\n"
"Connects two layers through a soft connection.\n"
"Soft connections cannot make connections between two different nets.\n"
"These are directional connections where 'b' is the 'lower' layer (typically high-ohmic substrate or diffusion).\n"
"\n"
"Soft connections have been introduced in version 0.29.\n"
) +
gsi::method ("soft_connect", (void (db::LayoutToNetlist::*) (const db::Region &, const db::Texts &)) &db::LayoutToNetlist::soft_connect, gsi::arg ("a"), gsi::arg ("b"),
"@brief Defines an inter-layer connection for the given layers in soft mode.\n"
"Connects two layers through a soft connection.\n"
"Soft connections cannot make connections between two different nets.\n"
"These are directional connections where 'b' is the 'lower' layer (typically high-ohmic substrate or diffusion).\n"
"As one argument is a (hierarchical) text collection, this method is used to attach net labels to polygons.\n"
"\n"
"Soft connections have been introduced in version 0.29.\n"
) +
gsi::method ("soft_connect", (void (db::LayoutToNetlist::*) (const db::Texts &, const db::Region &)) &db::LayoutToNetlist::soft_connect, gsi::arg ("a"), gsi::arg ("b"),
"@brief Defines an inter-layer connection for the given layers in soft mode.\n"
"Connects two layers through a soft connection.\n"
"Soft connections cannot make connections between two different nets.\n"
"These are directional connections where 'b' is the 'lower' layer (typically high-ohmic substrate or diffusion).\n"
"As one argument is a (hierarchical) text collection, this method is used to attach net labels to polygons.\n"
"\n"
"Soft connections have been introduced in version 0.29.\n"
) +
gsi::method ("connect_global", (size_t (db::LayoutToNetlist::*) (const db::Region &, const std::string &)) &db::LayoutToNetlist::connect_global, gsi::arg ("l"), gsi::arg ("global_net_name"),
"@brief Defines a connection of the given layer with a global net.\n"
"This method returns the ID of the global net. Use \\global_net_name to get "
@ -441,10 +467,26 @@ Class<db::LayoutToNetlist> decl_dbLayoutToNetlist ("db", "LayoutToNetlist",
gsi::method ("connect_global", (size_t (db::LayoutToNetlist::*) (const db::Texts &, const std::string &)) &db::LayoutToNetlist::connect_global, gsi::arg ("l"), gsi::arg ("global_net_name"),
"@brief Defines a connection of the given text layer with a global net.\n"
"This method returns the ID of the global net. Use \\global_net_name to get "
"the name back from the ID."
"the name back from the ID.\n"
"\n"
"This variant has been introduced in version 0.27.\n"
) +
gsi::method ("soft_connect_global", (size_t (db::LayoutToNetlist::*) (const db::Region &, const std::string &)) &db::LayoutToNetlist::soft_connect_global, gsi::arg ("l"), gsi::arg ("global_net_name"),
"@brief Defines a connection of the given layer with a global net in soft mode.\n"
"This method returns the ID of the global net. Use \\global_net_name to get "
"the name back from the ID.\n"
"Soft connections are directional, where the global net is the 'lower' layer (typically high-ohmic substrate or diffusion).\n"
"\n"
"Soft connections have been introduced in version 0.29.\n"
) +
gsi::method ("soft_connect_global", (size_t (db::LayoutToNetlist::*) (const db::Texts &, const std::string &)) &db::LayoutToNetlist::soft_connect_global, gsi::arg ("l"), gsi::arg ("global_net_name"),
"@brief Defines a connection of the given text layer with a global net in soft mode.\n"
"This method returns the ID of the global net. Use \\global_net_name to get "
"the name back from the ID.\n"
"Soft connections are directional, where the global net is the 'lower' layer (typically high-ohmic substrate or diffusion).\n"
"\n"
"Soft connections have been introduced in version 0.29.\n"
) +
gsi::method ("global_net_name", &db::LayoutToNetlist::global_net_name, gsi::arg ("global_net_id"),
"@brief Gets the global net name for the given global net ID."
) +

View File

@ -2244,12 +2244,36 @@ CODE
# @synopsis connect(a, b)
# See \Netter#connect for a description of that function.
# %DRC%
# @name soft_connect
# @brief Specifies a soft connection between two layers
# @synopsis 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.
# %DRC%
# @name connect_global
# @brief Specifies a connection to a global net
# @synopsis connect_global(l, name)
# See \Netter#connect_global for a description of that function.
# %DRC%
# @name soft_connect_global
# @brief Specifies a soft connection to a global net
# @synopsis 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.
# %DRC%
# @name clear_connections
# @brief Clears all connections stored so far
@ -2320,6 +2344,8 @@ CODE
clear_connections
connect
connect_global
soft_connect
soft_connect_global
connect_implicit
connect_explicit
device_scaling

View File

@ -116,6 +116,51 @@ module DRC
end
# %DRC%
# @name soft_connect
# @brief Specifies a soft connection between two layers
# @synopsis 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).
def soft_connect(a, b)
@engine._context("soft_connect") do
a.is_a?(DRC::DRCLayer) || raise("First argument must be a layer")
b.is_a?(DRC::DRCLayer) || raise("Second argument must be a layer")
a.requires_texts_or_region
b.requires_texts_or_region
register_layer(a.data)
register_layer(b.data)
# soft connections imply hard intra-layer connections
a.data.is_a?(RBA::Region) && @l2n.connect(a.data)
b.data.is_a?(RBA::Region) && @l2n.connect(b.data)
@l2n.soft_connect(a.data, b.data)
end
end
# %DRC%
# @name connect_global
# @brief Connects a layer with a global net
@ -140,6 +185,33 @@ module DRC
end
# %DRC%
# @name soft_connect_global
# @brief Soft-connects a layer with a global net
# @synopsis 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.
def soft_connect_global(l, name)
@engine._context("soft_connect_global") do
l.is_a?(DRC::DRCLayer) || raise("Layer argument must be a layer")
l.requires_texts_or_region
register_layer(l.data)
l.data.is_a?(RBA::Region) && @l2n.connect(l.data)
@l2n.soft_connect_global(l.data, name)
end
end
# %DRC%
# @name extract_devices
# @brief Extracts devices based on the given extractor class, name and device layer selection