From c148f591b4cf2a435016345eb67e13b713c67952 Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Fri, 31 May 2024 11:15:45 +0200
Subject: [PATCH 01/12] Proposing a fix for issue #1722: add a '...' menu to
hold the dynamic parts
---
src/lay/lay/layMainWindow.cc | 4 ++
src/laybasic/laybasic/layAbstractMenu.cc | 77 +++++++++++++++++++++++-
src/laybasic/laybasic/layAbstractMenu.h | 10 +++
3 files changed, 89 insertions(+), 2 deletions(-)
diff --git a/src/lay/lay/layMainWindow.cc b/src/lay/lay/layMainWindow.cc
index d9c7fe0a7..51bc51462 100644
--- a/src/lay/lay/layMainWindow.cc
+++ b/src/lay/lay/layMainWindow.cc
@@ -4350,6 +4350,10 @@ public:
menu_entries.push_back (lay::submenu ("zoom_menu", at, tl::to_string (QObject::tr ("&Display"))));
menu_entries.push_back (lay::submenu ("tools_menu", at, tl::to_string (QObject::tr ("&Tools"))));
menu_entries.push_back (lay::submenu ("macros_menu", at, tl::to_string (QObject::tr ("&Macros"))));
+ if (lay::AbstractMenu::wants_extra_menu ()) {
+ // for MacOS
+ menu_entries.push_back (lay::submenu (lay::AbstractMenu::extra_menu_name (), at, "..."));
+ }
menu_entries.push_back (lay::separator ("help_group", at));
menu_entries.push_back (lay::submenu ("help_menu", at, tl::to_string (QObject::tr ("&Help"))));
menu_entries.push_back (lay::submenu ("@secrets", at, tl::to_string (QObject::tr ("Secret Features"))));
diff --git a/src/laybasic/laybasic/layAbstractMenu.cc b/src/laybasic/laybasic/layAbstractMenu.cc
index a63b4c49c..4ff569aca 100644
--- a/src/laybasic/laybasic/layAbstractMenu.cc
+++ b/src/laybasic/laybasic/layAbstractMenu.cc
@@ -1225,6 +1225,36 @@ static QAction *insert_action_after (QWidget *widget, QAction *after, QAction *a
return action;
}
+static const std::string s_extras_menu_name ("_extras_menu");
+
+static QMenu *find_extras_menu (QMenuBar *mbar)
+{
+ if (! mbar) {
+ return 0;
+ }
+
+ QList a = mbar->actions ();
+ for (QList::const_iterator i = a.begin (); i != a.end (); ++i) {
+ if (tl::to_string ((*i)->objectName ()) == s_extras_menu_name) {
+ return (*i)->menu ();
+ }
+ }
+
+ return 0;
+}
+
+bool
+AbstractMenu::wants_extra_menu ()
+{
+ return !s_can_move_menu;
+}
+
+const std::string &
+AbstractMenu::extra_menu_name ()
+{
+ return s_extras_menu_name;
+}
+
void
AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
{
@@ -1234,10 +1264,22 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
std::set > present_actions;
if (mbar) {
+
QList a = mbar->actions ();
for (QList::const_iterator i = a.begin (); i != a.end (); ++i) {
present_actions.insert (std::make_pair (id_from_action (*i), *i));
}
+
+ }
+
+ // NOTE: on MacOS, once the top level menu is created, we should not
+ // modify it and place menu items into the "Extras" menu instead.
+ bool menu_frozen = ! s_can_move_menu && ! present_actions.empty ();
+
+ // NOTE: the "extras" menu is relevant on MacOS only
+ QMenu *extras_menu = find_extras_menu (mbar);
+ if (extras_menu) {
+ extras_menu->clear ();
}
QAction *prev_action = 0;
@@ -1277,11 +1319,25 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
} else if (mbar) {
if (c->menu () == 0) {
+
QMenu *menu = new QMenu (mp_dispatcher->menu_parent_widget ());
menu->setTitle (tl::to_qstring (c->action ()->get_title ()));
c->set_action (new Action (menu), true);
- prev_action = insert_action_after (mbar, prev_action, menu->menuAction ());
+
+ // This case happens when we dynamically create menus.
+ // MacOS does not like generating top-level menus dynamically, so
+ // we put them into the "_extra" top level one.
+ if (menu_frozen) {
+ QMenu *extras_menu = find_extras_menu (mbar);
+ if (extras_menu) {
+ extras_menu->addMenu (menu);
+ }
+ } else {
+ prev_action = insert_action_after (mbar, prev_action, menu->menuAction ());
+ }
+
} else {
+
// Move the action to the end if present in the menu already
std::set >::iterator a = present_actions.find (std::make_pair (id_from_action (c->menu ()->menuAction ()), c->menu ()->menuAction ()));
if (a != present_actions.end ()) {
@@ -1291,9 +1347,15 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
}
prev_action = a->second;
present_actions.erase (*a);
+ } else if (menu_frozen) {
+ QMenu *extras_menu = find_extras_menu (mbar);
+ if (extras_menu) {
+ extras_menu->addMenu (c->menu ());
+ }
} else {
prev_action = insert_action_after (mbar, prev_action, c->menu ()->menuAction ());
}
+
}
build (c->menu (), c->children);
@@ -1311,6 +1373,11 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
}
prev_action = a->second;
present_actions.erase (*a);
+ } else if (menu_frozen) {
+ QMenu *extras_menu = find_extras_menu (mbar);
+ if (extras_menu) {
+ extras_menu->addAction (c->action ()->qaction ());
+ }
} else {
prev_action = insert_action_after (mbar, prev_action, c->action ()->qaction ());
}
@@ -1319,8 +1386,14 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
}
+ // Disable the (maybe new) "extras" menu if empty
+ extras_menu = find_extras_menu (mbar);
+ if (extras_menu) {
+ extras_menu->setEnabled (! extras_menu->isEmpty ());
+ }
+
// Remove all actions that have vanished
- if (mbar) {
+ if (mbar && s_can_move_menu) {
for (std::set >::iterator a = present_actions.begin (); a != present_actions.end (); ++a) {
mbar->removeAction (a->second);
}
diff --git a/src/laybasic/laybasic/layAbstractMenu.h b/src/laybasic/laybasic/layAbstractMenu.h
index 272d8131a..aec72ac7a 100644
--- a/src/laybasic/laybasic/layAbstractMenu.h
+++ b/src/laybasic/laybasic/layAbstractMenu.h
@@ -692,6 +692,16 @@ public:
*/
~AbstractMenu ();
+ /**
+ * @brief Returns a value indicating that a special "extras" menu is needed
+ */
+ static bool wants_extra_menu ();
+
+ /**
+ * @brief Returns the name of the special "extras" menu
+ */
+ static const std::string &extra_menu_name ();
+
#if defined(HAVE_QT)
/**
* @brief Rebuild the QMenu's and refill the QMenuBar object
From ad64f3003372c35c993c8db780de47a1fd142226 Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Fri, 31 May 2024 17:44:32 +0200
Subject: [PATCH 02/12] Bugfixing the solution
---
src/laybasic/laybasic/layAbstractMenu.cc | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/laybasic/laybasic/layAbstractMenu.cc b/src/laybasic/laybasic/layAbstractMenu.cc
index 4ff569aca..ec05dcd34 100644
--- a/src/laybasic/laybasic/layAbstractMenu.cc
+++ b/src/laybasic/laybasic/layAbstractMenu.cc
@@ -65,7 +65,7 @@ static const bool s_can_move_menu = false;
#else
-static const bool s_can_move_menu = true;
+static const bool s_can_move_menu = false; // @@@ true;
#endif
@@ -1328,7 +1328,6 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
// MacOS does not like generating top-level menus dynamically, so
// we put them into the "_extra" top level one.
if (menu_frozen) {
- QMenu *extras_menu = find_extras_menu (mbar);
if (extras_menu) {
extras_menu->addMenu (menu);
}
@@ -1348,7 +1347,6 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
prev_action = a->second;
present_actions.erase (*a);
} else if (menu_frozen) {
- QMenu *extras_menu = find_extras_menu (mbar);
if (extras_menu) {
extras_menu->addMenu (c->menu ());
}
@@ -1358,7 +1356,10 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
}
- build (c->menu (), c->children);
+ // NOTE: the "extras" menu is built implicitly. You cannot put anything there.
+ if (c->menu () != extras_menu) {
+ build (c->menu (), c->children);
+ }
}
From 2827bed6c238bd483997b3f2d88e3e7ec6a06ded Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Fri, 31 May 2024 17:49:35 +0200
Subject: [PATCH 03/12] Updating documentation, taking out test code
---
src/doc/doc/about/macro_in_menu.xml | 15 +++++++++++++++
src/laybasic/laybasic/layAbstractMenu.cc | 2 +-
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/src/doc/doc/about/macro_in_menu.xml b/src/doc/doc/about/macro_in_menu.xml
index e97ff27b8..2c1b9ba6c 100644
--- a/src/doc/doc/about/macro_in_menu.xml
+++ b/src/doc/doc/about/macro_in_menu.xml
@@ -78,5 +78,20 @@
not defined.
+ A Note for MacOS Users
+
+
+ The Qt/MacOS combination does not allow for dynamically configuring
+ the main menu. On MacOS the behavior is as follows:
+
+
+
+ Every top-level menu entry that is generated either by code or by configuring
+ a macro correspondingly, will be shown in a separate entry in the main toolbar.
+ This entry is labelled "..." and is shown only when it is populated. All
+ non-standard main menu entries are placed there in the same order they would
+ appear in the main menu.
+
+
diff --git a/src/laybasic/laybasic/layAbstractMenu.cc b/src/laybasic/laybasic/layAbstractMenu.cc
index ec05dcd34..c503a0e1b 100644
--- a/src/laybasic/laybasic/layAbstractMenu.cc
+++ b/src/laybasic/laybasic/layAbstractMenu.cc
@@ -65,7 +65,7 @@ static const bool s_can_move_menu = false;
#else
-static const bool s_can_move_menu = false; // @@@ true;
+static const bool s_can_move_menu = true;
#endif
From 11139cd4da6045235e91b6c1ecc479cbbc46a39a Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Sat, 1 Jun 2024 12:16:21 +0200
Subject: [PATCH 04/12] Trying to fix problem of deleted top-level menus
---
src/laybasic/laybasic/layAbstractMenu.cc | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/src/laybasic/laybasic/layAbstractMenu.cc b/src/laybasic/laybasic/layAbstractMenu.cc
index c503a0e1b..ccd1facfe 100644
--- a/src/laybasic/laybasic/layAbstractMenu.cc
+++ b/src/laybasic/laybasic/layAbstractMenu.cc
@@ -1322,7 +1322,7 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
QMenu *menu = new QMenu (mp_dispatcher->menu_parent_widget ());
menu->setTitle (tl::to_qstring (c->action ()->get_title ()));
- c->set_action (new Action (menu), true);
+ c->set_action (new Action (menu), false);
// This case happens when we dynamically create menus.
// MacOS does not like generating top-level menus dynamically, so
@@ -1397,6 +1397,7 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
if (mbar && s_can_move_menu) {
for (std::set >::iterator a = present_actions.begin (); a != present_actions.end (); ++a) {
mbar->removeAction (a->second);
+ delete a->second;
}
}
}
@@ -1614,12 +1615,6 @@ AbstractMenu::insert_separator (const std::string &p, const std::string &name)
void
AbstractMenu::insert_menu (const std::string &p, const std::string &name, Action *action)
{
-#if defined(HAVE_QT)
- if (! action->menu () && mp_dispatcher && mp_dispatcher->menu_parent_widget ()) {
- action->set_menu (new QMenu (), true);
- }
-#endif
-
typedef std::vector::iterator > > path_type;
tl::Extractor extr (p.c_str ());
path_type path = find_item (extr);
From 4b0a3dff64d1c7a8b70d09c61805f9b321f778d4 Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Sat, 1 Jun 2024 12:47:04 +0200
Subject: [PATCH 05/12] Bug fixing.
---
src/laybasic/laybasic/layAbstractMenu.cc | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/src/laybasic/laybasic/layAbstractMenu.cc b/src/laybasic/laybasic/layAbstractMenu.cc
index ccd1facfe..bac75edbd 100644
--- a/src/laybasic/laybasic/layAbstractMenu.cc
+++ b/src/laybasic/laybasic/layAbstractMenu.cc
@@ -1320,9 +1320,12 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
if (c->menu () == 0) {
+ // NOTE: we intentionally do not make the item owner of the menu action
+ // as implicitly deleting it might cause trouble on MacOS. Instead we
+ // explicitly delete below or keep the action.
QMenu *menu = new QMenu (mp_dispatcher->menu_parent_widget ());
menu->setTitle (tl::to_qstring (c->action ()->get_title ()));
- c->set_action (new Action (menu), false);
+ c->set_action (new Action (menu, false), true);
// This case happens when we dynamically create menus.
// MacOS does not like generating top-level menus dynamically, so
@@ -1394,10 +1397,17 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar)
}
// Remove all actions that have vanished
- if (mbar && s_can_move_menu) {
+ if (mbar) {
for (std::set >::iterator a = present_actions.begin (); a != present_actions.end (); ++a) {
- mbar->removeAction (a->second);
- delete a->second;
+ if (s_can_move_menu) {
+ mbar->removeAction (a->second);
+ delete a->second;
+ } else {
+ if (a->second->menu ()) {
+ a->second->menu ()->clear ();
+ }
+ a->second->setEnabled (false);
+ }
}
}
}
From 46bb28d4e40b955e9e7ab130ca6b7c025eb43079 Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Sun, 2 Jun 2024 18:22:15 +0200
Subject: [PATCH 06/12] Avoid throwing exceptions inside XML parser
This addresses an issue found in ARM builds on Mac M1.
The XML parser makes use of exceptions to stop the parsing.
This causes an ABORT on M1/clang for whatever reason.
The new implementation requests the reader to stop
and stores the exception until it is needed.
---
src/img/img/imgStream.cc | 4 ++--
src/tl/tl/tlXMLParser.cc | 19 ++++++++++++++++---
2 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/src/img/img/imgStream.cc b/src/img/img/imgStream.cc
index 13c9e2a21..4f6833aca 100644
--- a/src/img/img/imgStream.cc
+++ b/src/img/img/imgStream.cc
@@ -233,14 +233,14 @@ ImageProxy::get_image () const
if (! m_byte_data.empty ()) {
std::list::const_iterator s = m_byte_data.begin ();
- for (size_t i = 0; i < m_height; ++i) {
+ for (size_t i = 0; i < m_height && s != m_byte_data.end (); ++i) {
string_to_pixels (img.get (), *s++, i, m_width, m_color);
}
} else {
std::list::const_iterator s = m_data.begin ();
- for (size_t i = 0; i < m_height; ++i) {
+ for (size_t i = 0; i < m_height && s != m_data.end (); ++i) {
string_to_pixels (img.get (), *s++, i, m_width, m_color);
}
diff --git a/src/tl/tl/tlXMLParser.cc b/src/tl/tl/tlXMLParser.cc
index 7bf20e599..1edba7806 100644
--- a/src/tl/tl/tlXMLParser.cc
+++ b/src/tl/tl/tlXMLParser.cc
@@ -403,9 +403,15 @@ public:
void setDocumentLocator (QXmlLocator *locator);
+ const tl::XMLLocatedException *exception () const
+ {
+ return m_error.get ();
+ }
+
private:
QXmlLocator *mp_locator;
XMLStructureHandler *mp_struct_handler;
+ std::unique_ptr m_error;
};
// --------------------------------------------------------------------------------------------------------
@@ -479,13 +485,17 @@ SAXHandler::characters (const QString &t)
bool
SAXHandler::error (const QXmlParseException &ex)
{
- throw tl::XMLLocatedException (tl::to_string (ex.message ()), ex.lineNumber (), ex.columnNumber ());
+ m_error.reset (new tl::XMLLocatedException (tl::to_string (ex.message ()), ex.lineNumber (), ex.columnNumber ()));
+ // stop reading
+ return false;
}
bool
SAXHandler::fatalError (const QXmlParseException &ex)
{
- throw tl::XMLLocatedException (tl::to_string (ex.message ()), ex.lineNumber (), ex.columnNumber ());
+ m_error.reset (new tl::XMLLocatedException (tl::to_string (ex.message ()), ex.lineNumber (), ex.columnNumber ()));
+ // stop reading
+ return false;
}
bool
@@ -765,7 +775,10 @@ XMLParser::parse (XMLSource &source, XMLStructureHandler &struct_handler)
mp_data->setContentHandler (&handler);
mp_data->setErrorHandler (&handler);
- mp_data->parse (source.source (), false /*=not incremental*/);
+ bool result = mp_data->parse (source.source (), false /*=not incremental*/);
+ if (! result && handler.exception ()) {
+ throw tl::XMLLocatedException (*handler.exception ());
+ }
}
bool
From 1144b07ebb690706271efc4027b329f87f3a51e2 Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Sun, 2 Jun 2024 19:11:17 +0200
Subject: [PATCH 07/12] Compatibility with Qt 6.7
---
scripts/mkqtdecl6/mkqtdecl.conf | 10 +++---
src/gsiqt/qt6/QtCore/QtCore.pri | 1 -
src/gsiqt/qt6/QtCore/gsiDeclQTimeZone.cc | 40 ---------------------
src/gsiqt/qt6/QtCore/gsiQtExternals.h | 4 ---
src/gsiqt/qt6/QtGui/gsiDeclQPointerEvent.cc | 6 +---
5 files changed, 7 insertions(+), 54 deletions(-)
diff --git a/scripts/mkqtdecl6/mkqtdecl.conf b/scripts/mkqtdecl6/mkqtdecl.conf
index 71db9834b..50d119977 100644
--- a/scripts/mkqtdecl6/mkqtdecl.conf
+++ b/scripts/mkqtdecl6/mkqtdecl.conf
@@ -132,6 +132,7 @@ drop_class "QContainerInfo"
drop_class "QContiguousCache"
drop_class "QContiguousCacheData"
drop_class "QContiguousCacheTypedData"
+drop_class "QDeferredDeleteEvent" # was a mistake, I think
drop_class "QEnableSharedFromThis"
drop_class "QException" # (TODO) no mapping yet
drop_class "QExplicitlySharedDataPointer"
@@ -258,7 +259,6 @@ drop_class "QStringBuilder"
drop_class "QStringBuilder"
drop_class "QStringBuilderBase"
drop_class "QStringBuilderCommon"
-# @@@ drop_class "QStringConverterBase"
drop_class "QStringDecoder", /EncodedData/
drop_class "QStringEncoder", /DecodedData/
drop_class "QStringListIterator"
@@ -460,6 +460,8 @@ drop_method "QTextCodec", /QTextCodec::codecForName\(const\s+QByteArray/ # clash
drop_method "QTextCodec", /QTextCodec::toUnicode\(const\s+QByteArray/ # clashes with const char * variant
drop_method "QTextCodec", /QTextCodec::fromUnicode\(const\s+QChar\s+\*/ # requires real QChar *
drop_method "QTextEncoder", /QTextEncoder::fromUnicode\(const\s+QChar\s+\*/ # requires real QChar *
+drop_method "QTimeZone", /::operator\s*==/ # no longer supported on Qt 6.7
+drop_method "QTimeZone", /::operator\s*!=/ # no longer supported on Qt 6.7
drop_method "", /::operator\s*==\(const\s+QVariant\s*&\w+,\s*const\s+QVariantComparisonHelper/ # requires QVariantComparisonHelper
drop_method "", /::operator\s*!=\(const\s+QVariant\s*&\w+,\s*const\s+QVariantComparisonHelper/ # requires QVariantComparisonHelper
drop_method "QByteArrayMatcher", /QByteArrayMatcher::indexIn\(const\s+QByteArray/ # clashes with const char * variant
@@ -535,7 +537,6 @@ no_copy_ctor "QBasicMutex"
no_copy_ctor "QMapDataBase"
no_copy_ctor "QChildEvent"
no_copy_ctor "QDynamicPropertyChangeEvent"
-no_copy_ctor "QDeferredDeleteEvent"
no_copy_ctor "QEvent"
no_copy_ctor "QPropertyNotifier"
no_copy_ctor "QPropertyObserver"
@@ -859,6 +860,7 @@ include "QWindow", [ "", "",
"", "", "", "" ]
include "QOffscreenSurface", [ "", "" ]
include "QScreenOrientationChangeEvent", [ "", "" ]
+include "QPointerEvent", [ "" ] # needed for Qt 6.7
drop_method "QWindow", /QWindow::handle/ # QPlatformWindow not available
drop_method "QScreen", /QScreen::handle/ # QPlatformScreen not available
@@ -1284,8 +1286,8 @@ include "QOcspCertificateStatus", [ "" ] # global enum without o
include "QDtlsError", [ "" ] # global enum without own header
drop_class "QTlsPrivate" # private data
-drop_class "QOcspResponse" # @@@ TODO: debug
-drop_method "QSslSocket", /QSslSocket::ocspResponses\(/ # @@@ TODO: debug
+drop_class "QOcspResponse" # TODO: debug
+drop_method "QSslSocket", /QSslSocket::ocspResponses\(/ # TODO: debug
drop_method "QUrlInfo", /QUrlInfo::QUrlInfo\(.*permissions/ # too many arguments (13)
drop_method "QHostAddress", /QHostAddress::QHostAddress\(\s*(const\s*)?quint8\s*\*/ # requires char *, a string version is available for IPv6
diff --git a/src/gsiqt/qt6/QtCore/QtCore.pri b/src/gsiqt/qt6/QtCore/QtCore.pri
index 6f70a8192..9dbcef016 100644
--- a/src/gsiqt/qt6/QtCore/QtCore.pri
+++ b/src/gsiqt/qt6/QtCore/QtCore.pri
@@ -40,7 +40,6 @@ SOURCES += \
$$PWD/gsiDeclQDeadlineTimer.cc \
$$PWD/gsiDeclQDebug.cc \
$$PWD/gsiDeclQDebugStateSaver.cc \
- $$PWD/gsiDeclQDeferredDeleteEvent.cc \
$$PWD/gsiDeclQDir.cc \
$$PWD/gsiDeclQDirIterator.cc \
$$PWD/gsiDeclQDynamicPropertyChangeEvent.cc \
diff --git a/src/gsiqt/qt6/QtCore/gsiDeclQTimeZone.cc b/src/gsiqt/qt6/QtCore/gsiDeclQTimeZone.cc
index ddbd33e76..bcef6b084 100644
--- a/src/gsiqt/qt6/QtCore/gsiDeclQTimeZone.cc
+++ b/src/gsiqt/qt6/QtCore/gsiDeclQTimeZone.cc
@@ -397,25 +397,6 @@ static void _call_f_offsetFromUtc_c2175 (const qt_gsi::GenericMethod * /*decl*/,
}
-// bool QTimeZone::operator!=(const QTimeZone &other)
-
-
-static void _init_f_operator_excl__eq__c2205 (qt_gsi::GenericMethod *decl)
-{
- static gsi::ArgSpecBase argspec_0 ("other");
- decl->add_arg (argspec_0);
- decl->set_return ();
-}
-
-static void _call_f_operator_excl__eq__c2205 (const qt_gsi::GenericMethod * /*decl*/, void *cls, gsi::SerialArgs &args, gsi::SerialArgs &ret)
-{
- __SUPPRESS_UNUSED_WARNING(args);
- tl::Heap heap;
- const QTimeZone &arg1 = gsi::arg_reader() (args, heap);
- ret.write ((bool)((QTimeZone *)cls)->operator!= (arg1));
-}
-
-
// QTimeZone &QTimeZone::operator=(const QTimeZone &other)
@@ -435,25 +416,6 @@ static void _call_f_operator_eq__2205 (const qt_gsi::GenericMethod * /*decl*/, v
}
-// bool QTimeZone::operator==(const QTimeZone &other)
-
-
-static void _init_f_operator_eq__eq__c2205 (qt_gsi::GenericMethod *decl)
-{
- static gsi::ArgSpecBase argspec_0 ("other");
- decl->add_arg (argspec_0);
- decl->set_return ();
-}
-
-static void _call_f_operator_eq__eq__c2205 (const qt_gsi::GenericMethod * /*decl*/, void *cls, gsi::SerialArgs &args, gsi::SerialArgs &ret)
-{
- __SUPPRESS_UNUSED_WARNING(args);
- tl::Heap heap;
- const QTimeZone &arg1 = gsi::arg_reader() (args, heap);
- ret.write ((bool)((QTimeZone *)cls)->operator== (arg1));
-}
-
-
// QTimeZone::OffsetData QTimeZone::previousTransition(const QDateTime &beforeDateTime)
@@ -792,9 +754,7 @@ static gsi::Methods methods_QTimeZone () {
methods += new qt_gsi::GenericMethod ("nextTransition", "@brief Method QTimeZone::OffsetData QTimeZone::nextTransition(const QDateTime &afterDateTime)\n", true, &_init_f_nextTransition_c2175, &_call_f_nextTransition_c2175);
methods += new qt_gsi::GenericMethod ("offsetData", "@brief Method QTimeZone::OffsetData QTimeZone::offsetData(const QDateTime &forDateTime)\n", true, &_init_f_offsetData_c2175, &_call_f_offsetData_c2175);
methods += new qt_gsi::GenericMethod ("offsetFromUtc", "@brief Method int QTimeZone::offsetFromUtc(const QDateTime &atDateTime)\n", true, &_init_f_offsetFromUtc_c2175, &_call_f_offsetFromUtc_c2175);
- methods += new qt_gsi::GenericMethod ("!=", "@brief Method bool QTimeZone::operator!=(const QTimeZone &other)\n", true, &_init_f_operator_excl__eq__c2205, &_call_f_operator_excl__eq__c2205);
methods += new qt_gsi::GenericMethod ("assign", "@brief Method QTimeZone &QTimeZone::operator=(const QTimeZone &other)\n", false, &_init_f_operator_eq__2205, &_call_f_operator_eq__2205);
- methods += new qt_gsi::GenericMethod ("==", "@brief Method bool QTimeZone::operator==(const QTimeZone &other)\n", true, &_init_f_operator_eq__eq__c2205, &_call_f_operator_eq__eq__c2205);
methods += new qt_gsi::GenericMethod ("previousTransition", "@brief Method QTimeZone::OffsetData QTimeZone::previousTransition(const QDateTime &beforeDateTime)\n", true, &_init_f_previousTransition_c2175, &_call_f_previousTransition_c2175);
methods += new qt_gsi::GenericMethod ("standardTimeOffset", "@brief Method int QTimeZone::standardTimeOffset(const QDateTime &atDateTime)\n", true, &_init_f_standardTimeOffset_c2175, &_call_f_standardTimeOffset_c2175);
methods += new qt_gsi::GenericMethod ("swap", "@brief Method void QTimeZone::swap(QTimeZone &other)\n", false, &_init_f_swap_1510, &_call_f_swap_1510);
diff --git a/src/gsiqt/qt6/QtCore/gsiQtExternals.h b/src/gsiqt/qt6/QtCore/gsiQtExternals.h
index 35c5bb656..65898a2c9 100644
--- a/src/gsiqt/qt6/QtCore/gsiQtExternals.h
+++ b/src/gsiqt/qt6/QtCore/gsiQtExternals.h
@@ -153,10 +153,6 @@ class QDebugStateSaver;
namespace gsi { GSI_QTCORE_PUBLIC gsi::Class &qtdecl_QDebugStateSaver (); }
-class QDeferredDeleteEvent;
-
-namespace gsi { GSI_QTCORE_PUBLIC gsi::Class &qtdecl_QDeferredDeleteEvent (); }
-
class QDir;
namespace gsi { GSI_QTCORE_PUBLIC gsi::Class &qtdecl_QDir (); }
diff --git a/src/gsiqt/qt6/QtGui/gsiDeclQPointerEvent.cc b/src/gsiqt/qt6/QtGui/gsiDeclQPointerEvent.cc
index b28a5b7f9..496fe82f3 100644
--- a/src/gsiqt/qt6/QtGui/gsiDeclQPointerEvent.cc
+++ b/src/gsiqt/qt6/QtGui/gsiDeclQPointerEvent.cc
@@ -27,11 +27,7 @@
* This file has been created automatically
*/
-#include
-#include
-#include
-#include
-#include
+#include
#include "gsiQt.h"
#include "gsiQtGuiCommon.h"
#include
From 739cdfc1d54401ea9c2da42a5ce9ebf533a60e7f Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Sun, 2 Jun 2024 19:18:08 +0200
Subject: [PATCH 08/12] Complete list of includes for QPointerEvent
---
scripts/mkqtdecl6/mkqtdecl.conf | 3 ++-
src/gsiqt/qt6/QtGui/gsiDeclQPointerEvent.cc | 5 +++++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/scripts/mkqtdecl6/mkqtdecl.conf b/scripts/mkqtdecl6/mkqtdecl.conf
index 50d119977..ef5ebbcd7 100644
--- a/scripts/mkqtdecl6/mkqtdecl.conf
+++ b/scripts/mkqtdecl6/mkqtdecl.conf
@@ -860,7 +860,8 @@ include "QWindow", [ "", "",
"", "", "", "" ]
include "QOffscreenSurface", [ "", "" ]
include "QScreenOrientationChangeEvent", [ "", "" ]
-include "QPointerEvent", [ "" ] # needed for Qt 6.7
+include "QPointerEvent", [ "", "", "", "",
+ "", "" ] # needed for Qt 6.7
drop_method "QWindow", /QWindow::handle/ # QPlatformWindow not available
drop_method "QScreen", /QScreen::handle/ # QPlatformScreen not available
diff --git a/src/gsiqt/qt6/QtGui/gsiDeclQPointerEvent.cc b/src/gsiqt/qt6/QtGui/gsiDeclQPointerEvent.cc
index 496fe82f3..2aee14a92 100644
--- a/src/gsiqt/qt6/QtGui/gsiDeclQPointerEvent.cc
+++ b/src/gsiqt/qt6/QtGui/gsiDeclQPointerEvent.cc
@@ -27,6 +27,11 @@
* This file has been created automatically
*/
+#include
+#include
+#include
+#include
+#include
#include
#include "gsiQt.h"
#include "gsiQtGuiCommon.h"
From 4277d0d8d51b64c3ca961ea395bbb09ab9f453e2 Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Sun, 2 Jun 2024 19:44:45 +0200
Subject: [PATCH 09/12] Avoid some more exceptions in XML handler
---
src/tl/tl/tlXMLParser.cc | 39 +++++++++++++++++++++++++++------------
1 file changed, 27 insertions(+), 12 deletions(-)
diff --git a/src/tl/tl/tlXMLParser.cc b/src/tl/tl/tlXMLParser.cc
index 1edba7806..164578ab0 100644
--- a/src/tl/tl/tlXMLParser.cc
+++ b/src/tl/tl/tlXMLParser.cc
@@ -394,12 +394,13 @@ class SAXHandler
public:
SAXHandler (XMLStructureHandler *sh);
- bool characters (const QString &ch);
- bool endElement (const QString &namespaceURI, const QString &localName, const QString &qName);
- bool startElement (const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts);
- bool error (const QXmlParseException &exception);
- bool fatalError (const QXmlParseException &exception);
- bool warning (const QXmlParseException &exception);
+ virtual bool characters (const QString &ch);
+ virtual bool endElement (const QString &namespaceURI, const QString &localName, const QString &qName);
+ virtual bool startElement (const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts);
+ virtual bool error (const QXmlParseException &exception);
+ virtual bool fatalError (const QXmlParseException &exception);
+ virtual bool warning (const QXmlParseException &exception);
+ virtual QString errorString () const;
void setDocumentLocator (QXmlLocator *locator);
@@ -412,6 +413,7 @@ private:
QXmlLocator *mp_locator;
XMLStructureHandler *mp_struct_handler;
std::unique_ptr m_error;
+ std::string m_error_string;
};
// --------------------------------------------------------------------------------------------------------
@@ -439,9 +441,11 @@ SAXHandler::startElement (const QString &qs_uri, const QString &qs_lname, const
try {
mp_struct_handler->start_element (uri, lname, qname);
} catch (tl::XMLException &ex) {
- throw tl::XMLLocatedException (ex.raw_msg (), mp_locator->lineNumber (), mp_locator->columnNumber ());
+ m_error_string = ex.raw_msg ();
+ return false;
} catch (tl::Exception &ex) {
- throw tl::XMLLocatedException (ex.msg (), mp_locator->lineNumber (), mp_locator->columnNumber ());
+ m_error_string = ex.msg ();
+ return false;
}
// successful
@@ -458,9 +462,11 @@ SAXHandler::endElement (const QString &qs_uri, const QString &qs_lname, const QS
try {
mp_struct_handler->end_element (uri, lname, qname);
} catch (tl::XMLException &ex) {
- throw tl::XMLLocatedException (ex.raw_msg (), mp_locator->lineNumber (), mp_locator->columnNumber ());
+ m_error_string = ex.raw_msg ();
+ return false;
} catch (tl::Exception &ex) {
- throw tl::XMLLocatedException (ex.msg (), mp_locator->lineNumber (), mp_locator->columnNumber ());
+ m_error_string = ex.msg ();
+ return false;
}
// successful
@@ -473,15 +479,24 @@ SAXHandler::characters (const QString &t)
try {
mp_struct_handler->characters (tl::to_string (t));
} catch (tl::XMLException &ex) {
- throw tl::XMLLocatedException (ex.raw_msg (), mp_locator->lineNumber (), mp_locator->columnNumber ());
+ m_error_string = ex.raw_msg ();
+ return false;
} catch (tl::Exception &ex) {
- throw tl::XMLLocatedException (ex.msg (), mp_locator->lineNumber (), mp_locator->columnNumber ());
+ m_error_string = ex.msg ();
+ return false;
}
// successful
return true;
}
+QString
+SAXHandler::errorString () const
+{
+ return tl::to_qstring (m_error_string);
+}
+
+
bool
SAXHandler::error (const QXmlParseException &ex)
{
From 8204f4d0aaa1eaf9a385c53be2c56ab46ccfb8e6 Mon Sep 17 00:00:00 2001
From: klayoutmatthias
Date: Sun, 2 Jun 2024 19:59:40 +0200
Subject: [PATCH 10/12] Updating golden test data with MacOS variants
---
src/db/unit_tests/dbTrianglesTests.cc | 2 +-
...2.lyrdb => drcSimpleTests_au14b_2.lyrdb.1} | 0
testdata/drc/drcSimpleTests_au14b_2.lyrdb.2 | 52 +
testdata/lvs/test_22a.lvsdb.3 | 2593 +++++++++++++++++
testdata/lvs/test_22b.lvsdb.3 | 2593 +++++++++++++++++
5 files changed, 5239 insertions(+), 1 deletion(-)
rename testdata/drc/{drcSimpleTests_au14b_2.lyrdb => drcSimpleTests_au14b_2.lyrdb.1} (100%)
create mode 100644 testdata/drc/drcSimpleTests_au14b_2.lyrdb.2
create mode 100644 testdata/lvs/test_22a.lvsdb.3
create mode 100644 testdata/lvs/test_22b.lvsdb.3
diff --git a/src/db/unit_tests/dbTrianglesTests.cc b/src/db/unit_tests/dbTrianglesTests.cc
index cf238d44f..da142d189 100644
--- a/src/db/unit_tests/dbTrianglesTests.cc
+++ b/src/db/unit_tests/dbTrianglesTests.cc
@@ -283,7 +283,7 @@ TEST(insert_many)
tris.insert_point (x, y);
}
- EXPECT_LT (double (tris.flips ()) / double (n), 3.0);
+ EXPECT_LT (double (tris.flips ()) / double (n), 3.1);
EXPECT_LT (double (tris.hops ()) / double (n), 23.0);
}
diff --git a/testdata/drc/drcSimpleTests_au14b_2.lyrdb b/testdata/drc/drcSimpleTests_au14b_2.lyrdb.1
similarity index 100%
rename from testdata/drc/drcSimpleTests_au14b_2.lyrdb
rename to testdata/drc/drcSimpleTests_au14b_2.lyrdb.1
diff --git a/testdata/drc/drcSimpleTests_au14b_2.lyrdb.2 b/testdata/drc/drcSimpleTests_au14b_2.lyrdb.2
new file mode 100644
index 000000000..f0bc27d5f
--- /dev/null
+++ b/testdata/drc/drcSimpleTests_au14b_2.lyrdb.2
@@ -0,0 +1,52 @@
+
+
+ Report 2
+
+ drc: script='.drc'
+ TOP
+
+
+
+
+ l1 sep l2 < 1µm
+
+
+
+
+
+
+
+ TOP
+
+
+
+
+ |
+
+
+ -
+
+ 'l1 sep l2 < 1\302\265m'
+
| TOP |
+ false
+ 1
+
+
+
+ edge-pair: (0.5,0.9;0.8,0.9)/(1,1.1;-0.2,1.1)
+
+
+ -
+
+ 'l1 sep l2 < 1\302\265m'
+
| TOP |
+ false
+ 1
+
+
+
+ edge-pair: (0,0.9;0.3,0.9)/(1,1.1;-0.2,1.1)
+
+
+
+
diff --git a/testdata/lvs/test_22a.lvsdb.3 b/testdata/lvs/test_22a.lvsdb.3
new file mode 100644
index 000000000..87bbe1b42
--- /dev/null
+++ b/testdata/lvs/test_22a.lvsdb.3
@@ -0,0 +1,2593 @@
+#%lvsdb-klayout
+
+# Layout
+layout(
+ top(SP6TArray_2X4)
+ unit(0.001)
+
+ # Layer section
+ # This section lists the mask layers (drawing or derived) and their connections.
+
+ # Mask layers
+ layer(l1)
+ layer(l2)
+ layer(l3)
+ layer(l4)
+ layer(l5 '64/20')
+ layer(l6)
+ layer(l7 '66/20')
+ layer(l8)
+ layer(l9 '67/20')
+ layer(l10)
+ layer(l11 '68/20')
+ layer(l12 '68/16')
+ layer(l13 '69/20')
+ layer(l14 '69/16')
+ layer(l15)
+ layer(l16)
+ layer(l17)
+ layer(l18)
+ layer(l19)
+ layer(l20)
+ layer(l21 '66/44')
+ layer(l22 '66/20')
+ layer(l23 '67/44')
+ layer(l24 '68/44')
+ layer(l25)
+ layer(l26)
+ layer(l27)
+
+ # Mask layer connectivity
+ connect(l1 l1)
+ connect(l2 l2 l3 l4 l6 l21)
+ connect(l3 l2 l3)
+ connect(l4 l2 l4 l5)
+ connect(l5 l4 l5)
+ connect(l6 l2 l6)
+ connect(l7 l7 l8)
+ connect(l8 l7 l8)
+ connect(l9 l9 l10 l21 l23)
+ connect(l10 l9 l10)
+ connect(l11 l11 l12 l23 l24)
+ connect(l12 l11 l12)
+ connect(l13 l13 l14 l24 l25)
+ connect(l14 l13 l14)
+ connect(l15 l15 l16 l25 l26)
+ connect(l16 l15 l16)
+ connect(l17 l17 l18 l26 l27)
+ connect(l18 l17 l18)
+ connect(l19 l19 l20 l27)
+ connect(l20 l19 l20)
+ connect(l21 l2 l9 l21 l22)
+ connect(l22 l21 l22)
+ connect(l23 l9 l11 l23)
+ connect(l24 l11 l13 l24)
+ connect(l25 l13 l15 l25)
+ connect(l26 l15 l17 l26)
+ connect(l27 l17 l19 l27)
+
+ # Global nets and connectivity
+ global(l1 vss)
+ global(l6 vss)
+
+ # Log entries
+ message(warning description('Must-connect subnets of vdd must be connected further up in the hierarchy - this is an error at chip top level') cell(SP6TArray_2X4) cat('must-connect') polygon('(-0.385,-0.305;-0.385,5.855;9.105,5.855;9.105,-0.305)'))
+
+ # Device class section
+ class(active_res RES)
+ class(poly_res RES)
+ class(sky130_fd_pr__diode_pw2nd_05v5 DIODE)
+ class(sky130_fd_pr__diode_pd2nw_05v5 DIODE)
+ class(sky130_fd_pr__nfet_01v8__model MOS4)
+ class(sky130_fd_pr__nfet_01v8_lvt__model MOS4)
+ class(sky130_fd_pr__nfet_g5v0d10v5__model MOS4)
+ class(sky130_fd_pr__pfet_01v8__model MOS4)
+ class(sky130_fd_pr__pfet_01v8_hvt__model MOS4)
+ class(sky130_fd_pr__pfet_01v8_lvt__model MOS4)
+ class(sky130_fd_pr__pfet_g5v0d10v5__model MOS4)
+
+ # Device abstracts section
+ # Device abstracts list the pin shapes of the devices.
+ device(D$sky130_fd_pr__nfet_01v8__model sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ rect(l2 (-340 -210) (265 420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ polygon(l2 (75 -210) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$1 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (-315 -835) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ )
+ terminal(G
+ rect(l22 (-210 -75) (420 150))
+ )
+ terminal(D
+ rect(l2 (-210 75) (420 280))
+ )
+ terminal(B
+ rect(l1 (-210 -75) (420 150))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$2 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ rect(l2 (-210 -355) (420 280))
+ )
+ terminal(G
+ rect(l22 (-210 -75) (420 150))
+ )
+ terminal(D
+ polygon(l2 (-210 75) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ )
+ terminal(B
+ rect(l1 (-210 -75) (420 150))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$3 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (180 -550) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (-340 -210) (265 420))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$4 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (-600 -210) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (280 420))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$5 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ rect(l2 (-355 -210) (280 420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ polygon(l2 (75 -210) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$6 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (-210 -835) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ )
+ terminal(G
+ rect(l22 (-210 -75) (420 150))
+ )
+ terminal(D
+ rect(l2 (-210 75) (420 280))
+ )
+ terminal(B
+ rect(l1 (-210 -75) (420 150))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$7 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ rect(l2 (-210 -355) (420 280))
+ )
+ terminal(G
+ rect(l22 (-210 -75) (420 150))
+ )
+ terminal(D
+ polygon(l2 (-210 75) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ )
+ terminal(B
+ rect(l1 (-210 -75) (420 150))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$8 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (-600 -550) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (280 420))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$9 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (180 -550) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (-355 -210) (280 420))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$10 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (-600 -210) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (265 420))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$11 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (-600 -550) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (265 420))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__pfet_01v8__model sky130_fd_pr__pfet_01v8__model
+ terminal(S
+ rect(l2 (-340 -210) (265 420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (445 420))
+ )
+ terminal(B
+ rect(l5 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__pfet_01v8__model$1 sky130_fd_pr__pfet_01v8__model
+ terminal(S
+ rect(l2 (-520 -210) (445 420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (280 420))
+ )
+ terminal(B
+ rect(l5 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__pfet_01v8__model$2 sky130_fd_pr__pfet_01v8__model
+ terminal(S
+ rect(l2 (-355 -210) (280 420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (445 420))
+ )
+ terminal(B
+ rect(l5 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__pfet_01v8__model$3 sky130_fd_pr__pfet_01v8__model
+ terminal(S
+ rect(l2 (-520 -210) (445 420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (265 420))
+ )
+ terminal(B
+ rect(l5 (-75 -210) (150 420))
+ )
+ )
+
+ # Circuit section
+ # Circuits are the hierarchical building blocks of the netlist.
+ circuit(SP6TArray_2X4
+
+ # Circuit boundary
+ rect((-385 -305) (9490 6160))
+
+ # Nets with their geometries
+ net(1 name(vdd)
+ rect(l2 (-205 -125) (9130 250))
+ rect(l2 (-9050 270) (265 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (265 420))
+ rect(l2 (-9050 4610) (9130 250))
+ rect(l2 (-9050 -940) (265 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (265 420))
+ rect(l4 (-9050 -5280) (9130 250))
+ rect(l4 (-9130 5300) (9130 250))
+ rect(l5 (-7130 -5980) (2950 1300))
+ rect(l5 (-5130 -1300) (2950 1300))
+ rect(l5 (1410 -1300) (2950 1300))
+ rect(l5 (-770 -1300) (2950 1300))
+ rect(l5 (-9490 3560) (2950 1300))
+ rect(l5 (-770 -1300) (2950 1300))
+ rect(l5 (-770 -1300) (2950 1300))
+ rect(l5 (-770 -1300) (2950 1300))
+ rect(l9 (-9270 -5940) (2510 170))
+ rect(l9 (-330 -170) (2510 170))
+ rect(l9 (-330 -170) (2510 170))
+ rect(l9 (-330 -170) (2510 170))
+ rect(l9 (-8970 0) (170 685))
+ rect(l9 (2010 -685) (170 685))
+ rect(l9 (-170 -685) (170 685))
+ rect(l9 (2010 -685) (170 685))
+ rect(l9 (-170 -685) (170 685))
+ rect(l9 (2010 -685) (170 685))
+ rect(l9 (-170 -685) (170 685))
+ rect(l9 (2010 -685) (170 685))
+ rect(l9 (-8890 4010) (170 685))
+ rect(l9 (-250 0) (2510 170))
+ rect(l9 (-330 -170) (2510 170))
+ rect(l9 (-2430 -855) (170 685))
+ rect(l9 (-170 -685) (170 685))
+ rect(l9 (1930 0) (2510 170))
+ rect(l9 (-2430 -855) (170 685))
+ rect(l9 (-170 -685) (170 685))
+ rect(l9 (1930 0) (2510 170))
+ rect(l9 (-2430 -855) (170 685))
+ rect(l9 (-170 -685) (170 685))
+ rect(l9 (2010 -685) (170 685))
+ rect(l11 (-8935 -5625) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-8980 5230) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l13 (-9010 -5840) (2500 260))
+ rect(l13 (-2500 -260) (9040 260))
+ rect(l13 (-9040 -260) (2500 260))
+ rect(l13 (-2500 -260) (4680 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-320 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (4680 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-9040 5290) (4680 260))
+ rect(l13 (-4680 -260) (9040 260))
+ rect(l13 (-9040 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-320 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-320 -260) (2500 260))
+ rect(l13 (-2500 -260) (4680 260))
+ rect(l13 (-4680 -260) (2500 260))
+ rect(l13 (-320 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l14 (-9040 -5810) (4680 260))
+ rect(l14 (-4680 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2500 -260) (9040 260))
+ rect(l14 (-6860 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-320 -260) (2500 260))
+ rect(l14 (-2500 -260) (4680 260))
+ rect(l14 (-4680 -260) (2500 260))
+ rect(l14 (-320 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-4520 -130) (0 0))
+ rect(l14 (-4520 5420) (9040 260))
+ rect(l14 (-9040 -260) (4680 260))
+ rect(l14 (-4680 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-320 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-320 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2500 -260) (4680 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-4520 -130) (0 0))
+ rect(l21 (-4445 -5635) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-8890 435) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-8890 4775) (170 170))
+ rect(l21 (-170 -775) (170 170))
+ rect(l21 (2010 435) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -775) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 435) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -775) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 435) (170 170))
+ rect(l21 (-170 -775) (170 170))
+ rect(l21 (-170 435) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -775) (170 170))
+ rect(l23 (-8890 -5115) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-8890 5380) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l24 (-8880 -5710) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-8870 5400) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ )
+ net(2 name('bl[0]')
+ rect(l2 (395 2635) (420 280))
+ polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ rect(l11 (-260 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -290) (230 2920))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -2920) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -2920) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-25 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-230 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(3 name('bl_n[0]')
+ rect(l2 (1365 2635) (420 280))
+ polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ rect(l11 (-140 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -2920) (230 5550))
+ rect(l11 (-230 -2920) (230 2920))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -2920) (230 5550))
+ rect(l12 (-230 -2920) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-145 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-110 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(4 name('bl[1]')
+ rect(l2 (2575 2635) (420 280))
+ polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ rect(l11 (-260 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -2920) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -2920) (230 2920))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -2920) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -2920) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-25 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-230 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(5 name('bl_n[1]')
+ rect(l2 (3545 2635) (420 280))
+ polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ rect(l11 (-140 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -2920) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -2920) (230 2920))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -2920) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -2920) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-145 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-110 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(6 name('bl[2]')
+ rect(l2 (4755 2635) (420 280))
+ polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ rect(l11 (-260 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -2920) (230 5550))
+ rect(l11 (-230 -2920) (230 2920))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -2920) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -2920) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-25 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-230 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(7 name('bl_n[2]')
+ rect(l2 (5725 2635) (420 280))
+ polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ rect(l11 (-140 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -290) (230 2920))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -290) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-145 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-110 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(8 name('bl[3]')
+ rect(l2 (6935 2635) (420 280))
+ polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ rect(l11 (-260 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -2920) (230 5550))
+ rect(l11 (-230 -2920) (230 2920))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -290) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-25 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-230 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(9 name('bl_n[3]')
+ rect(l2 (7905 2635) (420 280))
+ polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ rect(l11 (-140 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -2920) (230 5550))
+ rect(l11 (-230 -2920) (230 2920))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -2920) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -2920) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-145 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-110 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(10
+ rect(l2 (1445 395) (445 420))
+ polygon(l2 (-525 910) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ polygon(l9 (-405 -1280) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570))
+ rect(l21 (-335 560) (170 170))
+ rect(l21 (-5 -650) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l22 (-1365 -980) (950 150))
+ rect(l22 (-1100 -840) (150 2010))
+ rect(l22 (950 -1320) (330 270))
+ )
+ net(11
+ rect(l7 (290 955) (950 150))
+ rect(l7 (-1100 -840) (150 2010))
+ rect(l7 (950 -1320) (330 270))
+ )
+ net(12
+ polygon(l2 (290 1725) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ rect(l2 (-525 -1330) (445 420))
+ polygon(l9 (-210 -370) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920))
+ rect(l21 (-170 1320) (170 170))
+ rect(l21 (-170 -1410) (170 170))
+ rect(l21 (-5 670) (170 170))
+ rect(l22 (-250 -220) (330 270))
+ rect(l22 (0 -150) (950 150))
+ rect(l22 (0 -1320) (150 2010))
+ )
+ net(13
+ rect(l7 (940 1435) (950 150))
+ rect(l7 (-1280 -270) (330 270))
+ rect(l7 (950 -1320) (150 2010))
+ )
+ net(14
+ polygon(l2 (3545 1725) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ rect(l2 (-445 -1330) (445 420))
+ polygon(l9 (-405 -370) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570))
+ rect(l21 (-335 560) (170 170))
+ rect(l21 (-5 590) (170 170))
+ rect(l21 (-170 -1410) (170 170))
+ rect(l22 (-1365 260) (950 150))
+ rect(l22 (-1100 -840) (150 2010))
+ rect(l22 (950 -1320) (330 270))
+ )
+ net(15
+ rect(l7 (2470 955) (950 150))
+ rect(l7 (-1100 -840) (150 2010))
+ rect(l7 (950 -1320) (330 270))
+ )
+ net(16
+ rect(l2 (2470 395) (445 420))
+ polygon(l2 (-445 910) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ polygon(l9 (-290 -1280) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920))
+ rect(l21 (-170 80) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l21 (-5 -570) (170 170))
+ rect(l22 (-250 -220) (330 270))
+ rect(l22 (0 -150) (950 150))
+ rect(l22 (0 -1320) (150 2010))
+ )
+ net(17
+ rect(l7 (3120 1435) (950 150))
+ rect(l7 (-1280 -270) (330 270))
+ rect(l7 (950 -1320) (150 2010))
+ )
+ net(18
+ rect(l2 (5805 395) (445 420))
+ polygon(l2 (-525 910) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ polygon(l9 (-405 -1280) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570))
+ rect(l21 (-335 560) (170 170))
+ rect(l21 (-5 -650) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l22 (-1365 -980) (950 150))
+ rect(l22 (-1100 -840) (150 2010))
+ rect(l22 (950 -1320) (330 270))
+ )
+ net(19
+ rect(l7 (4650 955) (950 150))
+ rect(l7 (-1100 -840) (150 2010))
+ rect(l7 (950 -1320) (330 270))
+ )
+ net(20
+ polygon(l2 (4650 1725) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ rect(l2 (-525 -1330) (445 420))
+ polygon(l9 (-210 -370) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920))
+ rect(l21 (-170 1320) (170 170))
+ rect(l21 (-170 -1410) (170 170))
+ rect(l21 (-5 670) (170 170))
+ rect(l22 (-250 -220) (330 270))
+ rect(l22 (0 -150) (950 150))
+ rect(l22 (0 -1320) (150 2010))
+ )
+ net(21
+ rect(l7 (5300 1435) (950 150))
+ rect(l7 (-1280 -270) (330 270))
+ rect(l7 (950 -1320) (150 2010))
+ )
+ net(22
+ rect(l2 (7985 395) (445 420))
+ polygon(l2 (-525 910) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ polygon(l9 (-405 -1280) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570))
+ rect(l21 (-335 560) (170 170))
+ rect(l21 (-5 -650) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l22 (-1365 -980) (950 150))
+ rect(l22 (-1100 -840) (150 2010))
+ rect(l22 (950 -1320) (330 270))
+ )
+ net(23
+ rect(l7 (6830 955) (950 150))
+ rect(l7 (-1100 -840) (150 2010))
+ rect(l7 (950 -1320) (330 270))
+ )
+ net(24
+ polygon(l2 (6830 1725) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ rect(l2 (-525 -1330) (445 420))
+ polygon(l9 (-210 -370) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920))
+ rect(l21 (-170 1320) (170 170))
+ rect(l21 (-170 -1410) (170 170))
+ rect(l21 (-5 670) (170 170))
+ rect(l22 (-250 -220) (330 270))
+ rect(l22 (0 -150) (950 150))
+ rect(l22 (0 -1320) (150 2010))
+ )
+ net(25
+ rect(l7 (7480 1435) (950 150))
+ rect(l7 (-1280 -270) (330 270))
+ rect(l7 (950 -1320) (150 2010))
+ )
+ net(26 name('wl[0]')
+ rect(l9 (1005 2135) (170 500))
+ rect(l9 (2010 -500) (170 500))
+ rect(l9 (2010 -500) (170 500))
+ rect(l9 (2010 -500) (170 500))
+ polygon(l11 (-6755 -880) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320))
+ polygon(l11 (1920 0) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320))
+ polygon(l11 (1920 0) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320))
+ polygon(l11 (1920 0) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320))
+ rect(l13 (-7760 30) (8720 260))
+ rect(l13 (-8720 -260) (2180 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l13 (-2180 -260) (4360 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l13 (0 -260) (4360 260))
+ rect(l13 (-4360 -260) (2180 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l13 (0 -260) (2180 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l14 (-8720 -260) (2180 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l14 (-2180 -260) (4360 260))
+ rect(l14 (-4360 -260) (8720 260))
+ rect(l14 (-6540 -260) (2180 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l14 (0 -260) (2180 260))
+ rect(l14 (-2180 -130) (0 0))
+ rect(l14 (0 -130) (2180 260))
+ rect(l14 (-2180 -260) (4360 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l21 (-7715 340) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ polygon(l22 (-6760 -250) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ polygon(l22 (1910 0) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ polygon(l22 (1910 0) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ polygon(l22 (1910 0) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ rect(l23 (-6760 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l24 (-6700 -465) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ )
+ net(27
+ polygon(l7 (955 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ )
+ net(28
+ polygon(l7 (7495 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ )
+ net(29
+ polygon(l7 (3135 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ )
+ net(30
+ polygon(l7 (5315 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ )
+ net(31 name('wl[1]')
+ rect(l9 (1005 2915) (170 500))
+ rect(l9 (2010 -500) (170 500))
+ rect(l9 (2010 -500) (170 500))
+ rect(l9 (2010 -500) (170 500))
+ polygon(l11 (-6740 -230) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290))
+ polygon(l11 (1950 0) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290))
+ polygon(l11 (1950 0) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290))
+ polygon(l11 (1950 0) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290))
+ rect(l13 (-7745 320) (2180 260))
+ rect(l13 (-2180 -260) (4360 260))
+ rect(l13 (-4360 -260) (8720 260))
+ rect(l13 (-8720 -260) (2180 260))
+ rect(l13 (0 -260) (2180 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l13 (0 -260) (2180 260))
+ rect(l13 (-2180 -260) (4360 260))
+ rect(l13 (-4360 -260) (2180 260))
+ rect(l13 (0 -260) (2180 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l14 (-8720 -260) (2180 260))
+ rect(l14 (-2180 -260) (8720 260))
+ rect(l14 (-8720 -260) (4360 260))
+ rect(l14 (-4360 -260) (2180 260))
+ rect(l14 (0 -260) (2180 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l14 (0 -130) (0 0))
+ rect(l14 (0 -130) (2180 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l14 (-2180 -260) (4360 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l21 (-7715 -770) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ polygon(l22 (-7450 -250) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ polygon(l22 (530 0) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ polygon(l22 (530 0) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ polygon(l22 (530 0) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ rect(l23 (-7450 330) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l24 (-6700 145) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ )
+ net(32
+ polygon(l2 (395 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ rect(l2 (-525 1670) (445 420))
+ polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480))
+ rect(l21 (-170 80) (170 170))
+ rect(l21 (-5 230) (170 170))
+ rect(l21 (-335 670) (170 170))
+ rect(l22 (-85 -1060) (330 270))
+ rect(l22 (0 -270) (950 150))
+ rect(l22 (0 -840) (150 2010))
+ )
+ net(33
+ rect(l7 (940 3965) (950 150))
+ rect(l7 (-1280 -150) (330 270))
+ rect(l7 (950 -960) (150 2010))
+ )
+ net(34
+ polygon(l2 (2575 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ rect(l2 (-525 1670) (445 420))
+ polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480))
+ rect(l21 (-170 80) (170 170))
+ rect(l21 (-5 230) (170 170))
+ rect(l21 (-335 670) (170 170))
+ rect(l22 (-85 -1060) (330 270))
+ rect(l22 (0 -270) (950 150))
+ rect(l22 (0 -840) (150 2010))
+ )
+ net(35
+ rect(l7 (3120 3965) (950 150))
+ rect(l7 (-1280 -150) (330 270))
+ rect(l7 (950 -960) (150 2010))
+ )
+ net(36
+ polygon(l2 (4755 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ rect(l2 (-525 1670) (445 420))
+ polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480))
+ rect(l21 (-170 80) (170 170))
+ rect(l21 (-5 230) (170 170))
+ rect(l21 (-335 670) (170 170))
+ rect(l22 (-85 -1060) (330 270))
+ rect(l22 (0 -270) (950 150))
+ rect(l22 (0 -840) (150 2010))
+ )
+ net(37
+ rect(l7 (5300 3965) (950 150))
+ rect(l7 (-1280 -150) (330 270))
+ rect(l7 (950 -960) (150 2010))
+ )
+ net(38
+ polygon(l2 (6935 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ rect(l2 (-525 1670) (445 420))
+ polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480))
+ rect(l21 (-170 80) (170 170))
+ rect(l21 (-5 230) (170 170))
+ rect(l21 (-335 670) (170 170))
+ rect(l22 (-85 -1060) (330 270))
+ rect(l22 (0 -270) (950 150))
+ rect(l22 (0 -840) (150 2010))
+ )
+ net(39
+ rect(l7 (7480 3965) (950 150))
+ rect(l7 (-1280 -150) (330 270))
+ rect(l7 (950 -960) (150 2010))
+ )
+ net(40
+ polygon(l2 (7905 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ rect(l2 (-340 1670) (445 420))
+ polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570))
+ rect(l21 (-170 80) (170 170))
+ rect(l21 (-335 590) (170 170))
+ rect(l21 (-5 310) (170 170))
+ rect(l22 (-1365 -580) (950 150))
+ rect(l22 (-1100 -1320) (150 2010))
+ rect(l22 (950 -960) (330 270))
+ )
+ net(41
+ polygon(l7 (265 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ )
+ net(42
+ polygon(l7 (6805 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ )
+ net(43
+ polygon(l7 (2445 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ )
+ net(44
+ polygon(l7 (4625 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ )
+ net(45
+ polygon(l2 (1365 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ rect(l2 (-340 1670) (445 420))
+ polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570))
+ rect(l21 (-335 840) (170 170))
+ rect(l21 (-5 -930) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l22 (-1365 -580) (950 150))
+ rect(l22 (-1100 -1320) (150 2010))
+ rect(l22 (950 -960) (330 270))
+ )
+ net(46
+ rect(l7 (290 4445) (950 150))
+ rect(l7 (-1100 -1320) (150 2010))
+ rect(l7 (950 -960) (330 270))
+ )
+ net(47
+ rect(l7 (2470 4445) (950 150))
+ rect(l7 (-1100 -1320) (150 2010))
+ rect(l7 (950 -960) (330 270))
+ )
+ net(48
+ polygon(l2 (3545 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ rect(l2 (-340 1670) (445 420))
+ polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570))
+ rect(l21 (-335 840) (170 170))
+ rect(l21 (-5 -930) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l22 (-1365 -580) (950 150))
+ rect(l22 (-1100 -1320) (150 2010))
+ rect(l22 (950 -960) (330 270))
+ )
+ net(49
+ polygon(l2 (5725 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ rect(l2 (-340 1670) (445 420))
+ polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570))
+ rect(l21 (-335 840) (170 170))
+ rect(l21 (-5 -930) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l22 (-1365 -580) (950 150))
+ rect(l22 (-1100 -1320) (150 2010))
+ rect(l22 (950 -960) (330 270))
+ )
+ net(50
+ rect(l7 (4650 4445) (950 150))
+ rect(l7 (-1100 -1320) (150 2010))
+ rect(l7 (950 -960) (330 270))
+ )
+ net(51
+ rect(l7 (6830 4445) (950 150))
+ rect(l7 (-1100 -1320) (150 2010))
+ rect(l7 (950 -960) (330 270))
+ )
+ net(52 name(vss)
+ rect(l2 (-125 1725) (265 420))
+ rect(l2 (-265 270) (250 720))
+ rect(l2 (1915 -1410) (280 420))
+ rect(l2 (-265 270) (250 720))
+ rect(l2 (1915 -1410) (280 420))
+ rect(l2 (-265 270) (250 720))
+ rect(l2 (1915 -1410) (280 420))
+ rect(l2 (-265 270) (250 720))
+ rect(l2 (1915 -1410) (265 420))
+ rect(l2 (-250 270) (250 720))
+ rect(l2 (-8970 270) (265 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (265 420))
+ rect(l6 (-8970 -1410) (250 720))
+ rect(l6 (1930 -720) (250 720))
+ rect(l6 (1930 -720) (250 720))
+ rect(l6 (1930 -720) (250 720))
+ rect(l6 (1930 -720) (250 720))
+ rect(l9 (-8930 -1365) (170 1170))
+ rect(l9 (-170 -330) (170 1170))
+ rect(l9 (2010 -2010) (170 1170))
+ rect(l9 (-170 -1170) (170 1170))
+ rect(l9 (-170 -330) (170 1170))
+ rect(l9 (-170 -1170) (170 1170))
+ rect(l9 (2010 -2010) (170 1170))
+ rect(l9 (-170 -1170) (170 1170))
+ rect(l9 (-170 -330) (170 1170))
+ rect(l9 (-170 -1170) (170 1170))
+ rect(l9 (2010 -2010) (170 1170))
+ rect(l9 (-170 -1170) (170 1170))
+ rect(l9 (-170 -330) (170 1170))
+ rect(l9 (-170 -1170) (170 1170))
+ rect(l9 (2010 -1170) (170 1170))
+ rect(l9 (-170 -2010) (170 1170))
+ rect(l11 (-8935 -325) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l13 (-9010 -290) (2500 260))
+ rect(l13 (-2500 -260) (9040 260))
+ rect(l13 (-9040 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (4680 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-320 -260) (2500 260))
+ rect(l13 (-2500 -260) (4680 260))
+ rect(l13 (-4680 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-320 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l14 (-9040 -260) (2500 260))
+ rect(l14 (-2500 -260) (4680 260))
+ rect(l14 (-4680 -260) (9040 260))
+ rect(l14 (-9040 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-320 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-320 -260) (4680 260))
+ rect(l14 (-4680 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2340 -130) (0 0))
+ rect(l14 (2020 -130) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l21 (-8965 -1055) (170 170))
+ rect(l21 (-170 670) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -1010) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 670) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -1010) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 670) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -1010) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 670) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -1010) (170 170))
+ rect(l21 (-170 670) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-8890 670) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l23 (-8890 -1010) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l24 (-8880 -160) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ )
+
+ # Devices and their connections
+ device(1 D$sky130_fd_pr__nfet_01v8__model
+ location(215 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1113)
+ param(AD 0.18165)
+ param(PS 1.37)
+ param(PD 1.285)
+ terminal(S 52)
+ terminal(G 10)
+ terminal(D 12)
+ terminal(B 52)
+ )
+ device(2 D$sky130_fd_pr__nfet_01v8__model$1
+ location(605 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 12)
+ terminal(G 26)
+ terminal(D 2)
+ terminal(B 52)
+ )
+ device(3 D$sky130_fd_pr__nfet_01v8__model$2
+ location(605 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 2)
+ terminal(G 31)
+ terminal(D 32)
+ terminal(B 52)
+ )
+ device(4 D$sky130_fd_pr__nfet_01v8__model$3
+ location(215 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.1113)
+ param(PS 1.285)
+ param(PD 1.37)
+ terminal(S 32)
+ terminal(G 45)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(5 D$sky130_fd_pr__nfet_01v8__model$4
+ location(1965 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 10)
+ terminal(G 12)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(6 D$sky130_fd_pr__nfet_01v8__model$5
+ location(2395 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 52)
+ terminal(G 14)
+ terminal(D 16)
+ terminal(B 52)
+ )
+ device(7 D$sky130_fd_pr__nfet_01v8__model$6
+ location(1575 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 10)
+ terminal(G 26)
+ terminal(D 3)
+ terminal(B 52)
+ )
+ device(8 D$sky130_fd_pr__nfet_01v8__model$1
+ location(2785 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 16)
+ terminal(G 26)
+ terminal(D 4)
+ terminal(B 52)
+ )
+ device(9 D$sky130_fd_pr__nfet_01v8__model$7
+ location(1575 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 3)
+ terminal(G 31)
+ terminal(D 45)
+ terminal(B 52)
+ )
+ device(10 D$sky130_fd_pr__nfet_01v8__model$2
+ location(2785 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 4)
+ terminal(G 31)
+ terminal(D 34)
+ terminal(B 52)
+ )
+ device(11 D$sky130_fd_pr__nfet_01v8__model$8
+ location(1965 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 45)
+ terminal(G 32)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(12 D$sky130_fd_pr__nfet_01v8__model$9
+ location(2395 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 34)
+ terminal(G 48)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(13 D$sky130_fd_pr__nfet_01v8__model$4
+ location(4145 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 14)
+ terminal(G 16)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(14 D$sky130_fd_pr__nfet_01v8__model$5
+ location(4575 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 52)
+ terminal(G 18)
+ terminal(D 20)
+ terminal(B 52)
+ )
+ device(15 D$sky130_fd_pr__nfet_01v8__model$6
+ location(3755 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 14)
+ terminal(G 26)
+ terminal(D 5)
+ terminal(B 52)
+ )
+ device(16 D$sky130_fd_pr__nfet_01v8__model$1
+ location(4965 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 20)
+ terminal(G 26)
+ terminal(D 6)
+ terminal(B 52)
+ )
+ device(17 D$sky130_fd_pr__nfet_01v8__model$7
+ location(3755 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 5)
+ terminal(G 31)
+ terminal(D 48)
+ terminal(B 52)
+ )
+ device(18 D$sky130_fd_pr__nfet_01v8__model$2
+ location(4965 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 6)
+ terminal(G 31)
+ terminal(D 36)
+ terminal(B 52)
+ )
+ device(19 D$sky130_fd_pr__nfet_01v8__model$8
+ location(4145 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 48)
+ terminal(G 34)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(20 D$sky130_fd_pr__nfet_01v8__model$9
+ location(4575 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 36)
+ terminal(G 49)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(21 D$sky130_fd_pr__nfet_01v8__model$4
+ location(6325 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 18)
+ terminal(G 20)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(22 D$sky130_fd_pr__nfet_01v8__model$5
+ location(6755 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 52)
+ terminal(G 22)
+ terminal(D 24)
+ terminal(B 52)
+ )
+ device(23 D$sky130_fd_pr__nfet_01v8__model$6
+ location(5935 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 18)
+ terminal(G 26)
+ terminal(D 7)
+ terminal(B 52)
+ )
+ device(24 D$sky130_fd_pr__nfet_01v8__model$1
+ location(7145 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 24)
+ terminal(G 26)
+ terminal(D 8)
+ terminal(B 52)
+ )
+ device(25 D$sky130_fd_pr__nfet_01v8__model$7
+ location(5935 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 7)
+ terminal(G 31)
+ terminal(D 49)
+ terminal(B 52)
+ )
+ device(26 D$sky130_fd_pr__nfet_01v8__model$2
+ location(7145 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 8)
+ terminal(G 31)
+ terminal(D 38)
+ terminal(B 52)
+ )
+ device(27 D$sky130_fd_pr__nfet_01v8__model$8
+ location(6325 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 49)
+ terminal(G 36)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(28 D$sky130_fd_pr__nfet_01v8__model$9
+ location(6755 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 38)
+ terminal(G 40)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(29 D$sky130_fd_pr__nfet_01v8__model$10
+ location(8505 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.1113)
+ param(PS 1.285)
+ param(PD 1.37)
+ terminal(S 22)
+ terminal(G 24)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(30 D$sky130_fd_pr__nfet_01v8__model$6
+ location(8115 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 22)
+ terminal(G 26)
+ terminal(D 9)
+ terminal(B 52)
+ )
+ device(31 D$sky130_fd_pr__nfet_01v8__model$7
+ location(8115 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 9)
+ terminal(G 31)
+ terminal(D 40)
+ terminal(B 52)
+ )
+ device(32 D$sky130_fd_pr__nfet_01v8__model$11
+ location(8505 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.1113)
+ param(PS 1.285)
+ param(PD 1.37)
+ terminal(S 40)
+ terminal(G 38)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(33 D$sky130_fd_pr__pfet_01v8__model
+ location(215 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1113)
+ param(AD 0.1869)
+ param(PS 1.37)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 10)
+ terminal(D 12)
+ terminal(B 1)
+ )
+ device(34 D$sky130_fd_pr__pfet_01v8__model$1
+ location(1965 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.0588)
+ param(PS 1.73)
+ param(PD 0.7)
+ terminal(S 10)
+ terminal(G 12)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(35 D$sky130_fd_pr__pfet_01v8__model$2
+ location(2395 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.1869)
+ param(PS 0.7)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 14)
+ terminal(D 16)
+ terminal(B 1)
+ )
+ device(36 D$sky130_fd_pr__pfet_01v8__model$1
+ location(4145 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.0588)
+ param(PS 1.73)
+ param(PD 0.7)
+ terminal(S 14)
+ terminal(G 16)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(37 D$sky130_fd_pr__pfet_01v8__model$2
+ location(4575 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.1869)
+ param(PS 0.7)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 18)
+ terminal(D 20)
+ terminal(B 1)
+ )
+ device(38 D$sky130_fd_pr__pfet_01v8__model$1
+ location(6325 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.0588)
+ param(PS 1.73)
+ param(PD 0.7)
+ terminal(S 18)
+ terminal(G 20)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(39 D$sky130_fd_pr__pfet_01v8__model$2
+ location(6755 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.1869)
+ param(PS 0.7)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 22)
+ terminal(D 24)
+ terminal(B 1)
+ )
+ device(40 D$sky130_fd_pr__pfet_01v8__model$3
+ location(8505 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.1113)
+ param(PS 1.73)
+ param(PD 1.37)
+ terminal(S 22)
+ terminal(G 24)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(41 D$sky130_fd_pr__pfet_01v8__model
+ location(215 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1113)
+ param(AD 0.1869)
+ param(PS 1.37)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 45)
+ terminal(D 32)
+ terminal(B 1)
+ )
+ device(42 D$sky130_fd_pr__pfet_01v8__model$1
+ location(1965 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.0588)
+ param(PS 1.73)
+ param(PD 0.7)
+ terminal(S 45)
+ terminal(G 32)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(43 D$sky130_fd_pr__pfet_01v8__model$2
+ location(2395 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.1869)
+ param(PS 0.7)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 48)
+ terminal(D 34)
+ terminal(B 1)
+ )
+ device(44 D$sky130_fd_pr__pfet_01v8__model$1
+ location(4145 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.0588)
+ param(PS 1.73)
+ param(PD 0.7)
+ terminal(S 48)
+ terminal(G 34)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(45 D$sky130_fd_pr__pfet_01v8__model$2
+ location(4575 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.1869)
+ param(PS 0.7)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 49)
+ terminal(D 36)
+ terminal(B 1)
+ )
+ device(46 D$sky130_fd_pr__pfet_01v8__model$1
+ location(6325 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.0588)
+ param(PS 1.73)
+ param(PD 0.7)
+ terminal(S 49)
+ terminal(G 36)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(47 D$sky130_fd_pr__pfet_01v8__model$2
+ location(6755 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.1869)
+ param(PS 0.7)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 40)
+ terminal(D 38)
+ terminal(B 1)
+ )
+ device(48 D$sky130_fd_pr__pfet_01v8__model$3
+ location(8505 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.1113)
+ param(PS 1.73)
+ param(PD 1.37)
+ terminal(S 40)
+ terminal(G 38)
+ terminal(D 1)
+ terminal(B 1)
+ )
+
+ )
+)
+
+# Reference netlist
+reference(
+
+ # Device class section
+ class(SKY130_FD_PR__PFET_01V8__MODEL MOS4)
+ class(SKY130_FD_PR__NFET_01V8__MODEL MOS4)
+
+ # Circuit section
+ # Circuits are the hierarchical building blocks of the netlist.
+ circuit(SP6TARRAY_2X4
+
+ # Nets
+ net(1 name(VSS))
+ net(2 name(VDD))
+ net(3 name('WL[0]'))
+ net(4 name('WL[1]'))
+ net(5 name('BL[0]'))
+ net(6 name('BL_N[0]'))
+ net(7 name('BL[1]'))
+ net(8 name('BL_N[1]'))
+ net(9 name('BL[2]'))
+ net(10 name('BL_N[2]'))
+ net(11 name('BL[3]'))
+ net(12 name('BL_N[3]'))
+ net(13 name(INST0X0.INST0X0.INST0X0.BIT_N))
+ net(14 name(INST0X0.INST0X0.INST0X0.BIT))
+ net(15 name(INST0X0.INST0X0.INST1X0.BIT_N))
+ net(16 name(INST0X0.INST0X0.INST1X0.BIT))
+ net(17 name(INST0X0.INST0X1.INST0X0.BIT_N))
+ net(18 name(INST0X0.INST0X1.INST0X0.BIT))
+ net(19 name(INST0X0.INST0X1.INST1X0.BIT_N))
+ net(20 name(INST0X0.INST0X1.INST1X0.BIT))
+ net(21 name(INST0X1.INST0X0.INST0X0.BIT_N))
+ net(22 name(INST0X1.INST0X0.INST0X0.BIT))
+ net(23 name(INST0X1.INST0X0.INST1X0.BIT_N))
+ net(24 name(INST0X1.INST0X0.INST1X0.BIT))
+ net(25 name(INST0X1.INST0X1.INST0X0.BIT_N))
+ net(26 name(INST0X1.INST0X1.INST0X0.BIT))
+ net(27 name(INST0X1.INST0X1.INST1X0.BIT_N))
+ net(28 name(INST0X1.INST0X1.INST1X0.BIT))
+
+ # Outgoing pins and their connections to nets
+ pin(1 name(VSS))
+ pin(2 name(VDD))
+ pin(3 name('WL[0]'))
+ pin(4 name('WL[1]'))
+ pin(5 name('BL[0]'))
+ pin(6 name('BL_N[0]'))
+ pin(7 name('BL[1]'))
+ pin(8 name('BL_N[1]'))
+ pin(9 name('BL[2]'))
+ pin(10 name('BL_N[2]'))
+ pin(11 name('BL[3]'))
+ pin(12 name('BL_N[3]'))
+
+ # Devices and their connections
+ device(1 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST0X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 14)
+ terminal(G 13)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(2 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST0X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 14)
+ terminal(D 13)
+ terminal(B 2)
+ )
+ device(3 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST0X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 14)
+ terminal(G 13)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(4 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST0X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 14)
+ terminal(D 13)
+ terminal(B 1)
+ )
+ device(5 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST0X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 14)
+ terminal(G 3)
+ terminal(D 5)
+ terminal(B 1)
+ )
+ device(6 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST0X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 13)
+ terminal(G 3)
+ terminal(D 6)
+ terminal(B 1)
+ )
+ device(7 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST1X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 16)
+ terminal(G 15)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(8 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST1X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 16)
+ terminal(D 15)
+ terminal(B 2)
+ )
+ device(9 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST1X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 16)
+ terminal(G 15)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(10 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST1X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 16)
+ terminal(D 15)
+ terminal(B 1)
+ )
+ device(11 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST1X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 16)
+ terminal(G 4)
+ terminal(D 5)
+ terminal(B 1)
+ )
+ device(12 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST1X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 15)
+ terminal(G 4)
+ terminal(D 6)
+ terminal(B 1)
+ )
+ device(13 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST0X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 18)
+ terminal(G 17)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(14 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST0X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 18)
+ terminal(D 17)
+ terminal(B 2)
+ )
+ device(15 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST0X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 18)
+ terminal(G 17)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(16 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST0X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 18)
+ terminal(D 17)
+ terminal(B 1)
+ )
+ device(17 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST0X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 18)
+ terminal(G 3)
+ terminal(D 7)
+ terminal(B 1)
+ )
+ device(18 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST0X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 17)
+ terminal(G 3)
+ terminal(D 8)
+ terminal(B 1)
+ )
+ device(19 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST1X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 20)
+ terminal(G 19)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(20 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST1X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 20)
+ terminal(D 19)
+ terminal(B 2)
+ )
+ device(21 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST1X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 20)
+ terminal(G 19)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(22 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST1X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 20)
+ terminal(D 19)
+ terminal(B 1)
+ )
+ device(23 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST1X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 20)
+ terminal(G 4)
+ terminal(D 7)
+ terminal(B 1)
+ )
+ device(24 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST1X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 19)
+ terminal(G 4)
+ terminal(D 8)
+ terminal(B 1)
+ )
+ device(25 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST0X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 22)
+ terminal(G 21)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(26 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST0X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 22)
+ terminal(D 21)
+ terminal(B 2)
+ )
+ device(27 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST0X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 22)
+ terminal(G 21)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(28 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST0X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 22)
+ terminal(D 21)
+ terminal(B 1)
+ )
+ device(29 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST0X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 22)
+ terminal(G 3)
+ terminal(D 9)
+ terminal(B 1)
+ )
+ device(30 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST0X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 21)
+ terminal(G 3)
+ terminal(D 10)
+ terminal(B 1)
+ )
+ device(31 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST1X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 24)
+ terminal(G 23)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(32 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST1X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 24)
+ terminal(D 23)
+ terminal(B 2)
+ )
+ device(33 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST1X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 24)
+ terminal(G 23)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(34 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST1X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 24)
+ terminal(D 23)
+ terminal(B 1)
+ )
+ device(35 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST1X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 24)
+ terminal(G 4)
+ terminal(D 9)
+ terminal(B 1)
+ )
+ device(36 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST1X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 23)
+ terminal(G 4)
+ terminal(D 10)
+ terminal(B 1)
+ )
+ device(37 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST0X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 26)
+ terminal(G 25)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(38 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST0X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 26)
+ terminal(D 25)
+ terminal(B 2)
+ )
+ device(39 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST0X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 26)
+ terminal(G 25)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(40 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST0X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 26)
+ terminal(D 25)
+ terminal(B 1)
+ )
+ device(41 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST0X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 26)
+ terminal(G 3)
+ terminal(D 11)
+ terminal(B 1)
+ )
+ device(42 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST0X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 25)
+ terminal(G 3)
+ terminal(D 12)
+ terminal(B 1)
+ )
+ device(43 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST1X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 28)
+ terminal(G 27)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(44 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST1X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 28)
+ terminal(D 27)
+ terminal(B 2)
+ )
+ device(45 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST1X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 28)
+ terminal(G 27)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(46 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST1X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 28)
+ terminal(D 27)
+ terminal(B 1)
+ )
+ device(47 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST1X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 28)
+ terminal(G 4)
+ terminal(D 11)
+ terminal(B 1)
+ )
+ device(48 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST1X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 27)
+ terminal(G 4)
+ terminal(D 12)
+ terminal(B 1)
+ )
+
+ )
+)
+
+# Cross reference
+xref(
+ circuit(SP6TArray_2X4 SP6TARRAY_2X4 match
+ xref(
+ net(10 14 warning)
+ net(12 13 warning)
+ net(45 16 match)
+ net(32 15 match)
+ net(16 18 match)
+ net(14 17 match)
+ net(34 20 match)
+ net(48 19 match)
+ net(20 22 match)
+ net(18 21 match)
+ net(36 24 match)
+ net(49 23 match)
+ net(24 26 match)
+ net(22 25 match)
+ net(38 28 match)
+ net(40 27 match)
+ net(2 6 match)
+ net(4 7 match)
+ net(6 9 match)
+ net(8 11 match)
+ net(3 5 match)
+ net(5 8 match)
+ net(7 10 match)
+ net(9 12 match)
+ net(1 2 match)
+ net(52 1 match)
+ net(26 3 match)
+ net(31 4 match)
+ pin(() 4 match)
+ pin(() 6 match)
+ pin(() 8 match)
+ pin(() 10 match)
+ pin(() 5 match)
+ pin(() 7 match)
+ pin(() 9 match)
+ pin(() 11 match)
+ pin(() 1 match)
+ pin(() 0 match)
+ pin(() 2 match)
+ pin(() 3 match)
+ device(5 3 match)
+ device(1 4 match)
+ device(7 5 match)
+ device(2 6 match)
+ device(11 9 match)
+ device(4 10 match)
+ device(9 11 match)
+ device(3 12 match)
+ device(6 15 match)
+ device(13 16 match)
+ device(8 17 match)
+ device(15 18 match)
+ device(12 21 match)
+ device(19 22 match)
+ device(10 23 match)
+ device(17 24 match)
+ device(14 27 match)
+ device(21 28 match)
+ device(16 29 match)
+ device(23 30 match)
+ device(20 33 match)
+ device(27 34 match)
+ device(18 35 match)
+ device(25 36 match)
+ device(22 39 match)
+ device(29 40 match)
+ device(24 41 match)
+ device(30 42 match)
+ device(28 45 match)
+ device(32 46 match)
+ device(26 47 match)
+ device(31 48 match)
+ device(34 1 match)
+ device(33 2 match)
+ device(42 7 match)
+ device(41 8 match)
+ device(35 13 match)
+ device(36 14 match)
+ device(43 19 match)
+ device(44 20 match)
+ device(37 25 match)
+ device(38 26 match)
+ device(45 31 match)
+ device(46 32 match)
+ device(39 37 match)
+ device(40 38 match)
+ device(47 43 match)
+ device(48 44 match)
+ )
+ )
+)
diff --git a/testdata/lvs/test_22b.lvsdb.3 b/testdata/lvs/test_22b.lvsdb.3
new file mode 100644
index 000000000..f2960ffe8
--- /dev/null
+++ b/testdata/lvs/test_22b.lvsdb.3
@@ -0,0 +1,2593 @@
+#%lvsdb-klayout
+
+# Layout
+layout(
+ top(SP6TArray_2X4)
+ unit(0.001)
+
+ # Layer section
+ # This section lists the mask layers (drawing or derived) and their connections.
+
+ # Mask layers
+ layer(l1)
+ layer(l2)
+ layer(l3)
+ layer(l4)
+ layer(l5 '64/20')
+ layer(l6)
+ layer(l7 '66/20')
+ layer(l8)
+ layer(l9 '67/20')
+ layer(l10)
+ layer(l11 '68/20')
+ layer(l12 '68/16')
+ layer(l13 '69/20')
+ layer(l14 '69/16')
+ layer(l15)
+ layer(l16)
+ layer(l17)
+ layer(l18)
+ layer(l19)
+ layer(l20)
+ layer(l21 '66/44')
+ layer(l22 '66/20')
+ layer(l23 '67/44')
+ layer(l24 '68/44')
+ layer(l25)
+ layer(l26)
+ layer(l27)
+
+ # Mask layer connectivity
+ connect(l1 l1)
+ connect(l2 l2 l3 l4 l6 l21)
+ connect(l3 l2 l3)
+ connect(l4 l2 l4 l5)
+ connect(l5 l4 l5)
+ connect(l6 l2 l6)
+ connect(l7 l7 l8)
+ connect(l8 l7 l8)
+ connect(l9 l9 l10 l21 l23)
+ connect(l10 l9 l10)
+ connect(l11 l11 l12 l23 l24)
+ connect(l12 l11 l12)
+ connect(l13 l13 l14 l24 l25)
+ connect(l14 l13 l14)
+ connect(l15 l15 l16 l25 l26)
+ connect(l16 l15 l16)
+ connect(l17 l17 l18 l26 l27)
+ connect(l18 l17 l18)
+ connect(l19 l19 l20 l27)
+ connect(l20 l19 l20)
+ connect(l21 l2 l9 l21 l22)
+ connect(l22 l21 l22)
+ connect(l23 l9 l11 l23)
+ connect(l24 l11 l13 l24)
+ connect(l25 l13 l15 l25)
+ connect(l26 l15 l17 l26)
+ connect(l27 l17 l19 l27)
+
+ # Global nets and connectivity
+ global(l1 vss)
+ global(l6 vss)
+
+ # Log entries
+ message(warning description('Must-connect subnets of vdd must be connected further up in the hierarchy - this is an error at chip top level') cell(SP6TArray_2X4) cat('must-connect') polygon('(-0.385,-0.305;-0.385,5.855;9.105,5.855;9.105,-0.305)'))
+
+ # Device class section
+ class(active_res RES)
+ class(poly_res RES)
+ class(sky130_fd_pr__diode_pw2nd_05v5 DIODE)
+ class(sky130_fd_pr__diode_pd2nw_05v5 DIODE)
+ class(sky130_fd_pr__nfet_01v8__model MOS4)
+ class(sky130_fd_pr__nfet_01v8_lvt__model MOS4)
+ class(sky130_fd_pr__nfet_g5v0d10v5__model MOS4)
+ class(sky130_fd_pr__pfet_01v8__model MOS4)
+ class(sky130_fd_pr__pfet_01v8_hvt__model MOS4)
+ class(sky130_fd_pr__pfet_01v8_lvt__model MOS4)
+ class(sky130_fd_pr__pfet_g5v0d10v5__model MOS4)
+
+ # Device abstracts section
+ # Device abstracts list the pin shapes of the devices.
+ device(D$sky130_fd_pr__nfet_01v8__model sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ rect(l2 (-340 -210) (265 420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ polygon(l2 (75 -210) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$1 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (-315 -835) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ )
+ terminal(G
+ rect(l22 (-210 -75) (420 150))
+ )
+ terminal(D
+ rect(l2 (-210 75) (420 280))
+ )
+ terminal(B
+ rect(l1 (-210 -75) (420 150))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$2 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ rect(l2 (-210 -355) (420 280))
+ )
+ terminal(G
+ rect(l22 (-210 -75) (420 150))
+ )
+ terminal(D
+ polygon(l2 (-210 75) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ )
+ terminal(B
+ rect(l1 (-210 -75) (420 150))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$3 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (180 -550) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (-340 -210) (265 420))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$4 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (-600 -210) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (280 420))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$5 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ rect(l2 (-355 -210) (280 420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ polygon(l2 (75 -210) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$6 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (-210 -835) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ )
+ terminal(G
+ rect(l22 (-210 -75) (420 150))
+ )
+ terminal(D
+ rect(l2 (-210 75) (420 280))
+ )
+ terminal(B
+ rect(l1 (-210 -75) (420 150))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$7 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ rect(l2 (-210 -355) (420 280))
+ )
+ terminal(G
+ rect(l22 (-210 -75) (420 150))
+ )
+ terminal(D
+ polygon(l2 (-210 75) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ )
+ terminal(B
+ rect(l1 (-210 -75) (420 150))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$8 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (-600 -550) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (280 420))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$9 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (180 -550) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (-355 -210) (280 420))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$10 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (-600 -210) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (265 420))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__nfet_01v8__model$11 sky130_fd_pr__nfet_01v8__model
+ terminal(S
+ polygon(l2 (-600 -550) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (265 420))
+ )
+ terminal(B
+ rect(l1 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__pfet_01v8__model sky130_fd_pr__pfet_01v8__model
+ terminal(S
+ rect(l2 (-340 -210) (265 420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (445 420))
+ )
+ terminal(B
+ rect(l5 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__pfet_01v8__model$1 sky130_fd_pr__pfet_01v8__model
+ terminal(S
+ rect(l2 (-520 -210) (445 420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (280 420))
+ )
+ terminal(B
+ rect(l5 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__pfet_01v8__model$2 sky130_fd_pr__pfet_01v8__model
+ terminal(S
+ rect(l2 (-355 -210) (280 420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (445 420))
+ )
+ terminal(B
+ rect(l5 (-75 -210) (150 420))
+ )
+ )
+ device(D$sky130_fd_pr__pfet_01v8__model$3 sky130_fd_pr__pfet_01v8__model
+ terminal(S
+ rect(l2 (-520 -210) (445 420))
+ )
+ terminal(G
+ rect(l22 (-75 -210) (150 420))
+ )
+ terminal(D
+ rect(l2 (75 -210) (265 420))
+ )
+ terminal(B
+ rect(l5 (-75 -210) (150 420))
+ )
+ )
+
+ # Circuit section
+ # Circuits are the hierarchical building blocks of the netlist.
+ circuit(SP6TArray_2X4
+
+ # Circuit boundary
+ rect((-385 -305) (9490 6160))
+
+ # Nets with their geometries
+ net(1 name(vdd)
+ rect(l2 (-205 -125) (9130 250))
+ rect(l2 (-9050 270) (265 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (265 420))
+ rect(l2 (-9050 4610) (9130 250))
+ rect(l2 (-9050 -940) (265 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (265 420))
+ rect(l4 (-9050 -5280) (9130 250))
+ rect(l4 (-9130 5300) (9130 250))
+ rect(l5 (-7130 -5980) (2950 1300))
+ rect(l5 (-5130 -1300) (2950 1300))
+ rect(l5 (1410 -1300) (2950 1300))
+ rect(l5 (-770 -1300) (2950 1300))
+ rect(l5 (-9490 3560) (2950 1300))
+ rect(l5 (-770 -1300) (2950 1300))
+ rect(l5 (-770 -1300) (2950 1300))
+ rect(l5 (-770 -1300) (2950 1300))
+ rect(l9 (-9270 -5940) (2510 170))
+ rect(l9 (-330 -170) (2510 170))
+ rect(l9 (-330 -170) (2510 170))
+ rect(l9 (-330 -170) (2510 170))
+ rect(l9 (-8970 0) (170 685))
+ rect(l9 (2010 -685) (170 685))
+ rect(l9 (-170 -685) (170 685))
+ rect(l9 (2010 -685) (170 685))
+ rect(l9 (-170 -685) (170 685))
+ rect(l9 (2010 -685) (170 685))
+ rect(l9 (-170 -685) (170 685))
+ rect(l9 (2010 -685) (170 685))
+ rect(l9 (-8890 4010) (170 685))
+ rect(l9 (-250 0) (2510 170))
+ rect(l9 (-330 -170) (2510 170))
+ rect(l9 (-2430 -855) (170 685))
+ rect(l9 (-170 -685) (170 685))
+ rect(l9 (1930 0) (2510 170))
+ rect(l9 (-2430 -855) (170 685))
+ rect(l9 (-170 -685) (170 685))
+ rect(l9 (1930 0) (2510 170))
+ rect(l9 (-2430 -855) (170 685))
+ rect(l9 (-170 -685) (170 685))
+ rect(l9 (2010 -685) (170 685))
+ rect(l11 (-8935 -5625) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-8980 5230) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l13 (-9010 -5840) (2500 260))
+ rect(l13 (-2500 -260) (9040 260))
+ rect(l13 (-9040 -260) (2500 260))
+ rect(l13 (-2500 -260) (4680 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-320 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (4680 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-9040 5290) (4680 260))
+ rect(l13 (-4680 -260) (9040 260))
+ rect(l13 (-9040 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-320 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-320 -260) (2500 260))
+ rect(l13 (-2500 -260) (4680 260))
+ rect(l13 (-4680 -260) (2500 260))
+ rect(l13 (-320 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l14 (-9040 -5810) (4680 260))
+ rect(l14 (-4680 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2500 -260) (9040 260))
+ rect(l14 (-6860 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-320 -260) (2500 260))
+ rect(l14 (-2500 -260) (4680 260))
+ rect(l14 (-4680 -260) (2500 260))
+ rect(l14 (-320 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-4520 -130) (0 0))
+ rect(l14 (-4520 5420) (9040 260))
+ rect(l14 (-9040 -260) (4680 260))
+ rect(l14 (-4680 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-320 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-320 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2500 -260) (4680 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-4520 -130) (0 0))
+ rect(l21 (-4445 -5635) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-8890 435) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-8890 4775) (170 170))
+ rect(l21 (-170 -775) (170 170))
+ rect(l21 (2010 435) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -775) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 435) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -775) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 435) (170 170))
+ rect(l21 (-170 -775) (170 170))
+ rect(l21 (-170 435) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -775) (170 170))
+ rect(l23 (-8890 -5115) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-8890 5380) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l24 (-8880 -5710) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-8870 5400) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ )
+ net(2 name('bl[0]')
+ rect(l2 (395 2635) (420 280))
+ polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ rect(l11 (-260 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -290) (230 2920))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -2920) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -2920) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-25 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-230 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(3 name('bl_n[0]')
+ rect(l2 (1365 2635) (420 280))
+ polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ rect(l11 (-140 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -2920) (230 5550))
+ rect(l11 (-230 -2920) (230 2920))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -2920) (230 5550))
+ rect(l12 (-230 -2920) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-145 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-110 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(4 name('bl[1]')
+ rect(l2 (2575 2635) (420 280))
+ polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ rect(l11 (-260 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -2920) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -2920) (230 2920))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -2920) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -2920) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-25 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-230 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(5 name('bl_n[1]')
+ rect(l2 (3545 2635) (420 280))
+ polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ rect(l11 (-140 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -2920) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -2920) (230 2920))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -2920) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -2920) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-145 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-110 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(6 name('bl[2]')
+ rect(l2 (4755 2635) (420 280))
+ polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ rect(l11 (-260 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -2920) (230 5550))
+ rect(l11 (-230 -2920) (230 2920))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -2920) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -2920) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-25 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-230 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(7 name('bl_n[2]')
+ rect(l2 (5725 2635) (420 280))
+ polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ rect(l11 (-140 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -290) (230 2920))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -290) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-145 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-110 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(8 name('bl[3]')
+ rect(l2 (6935 2635) (420 280))
+ polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330))
+ rect(l11 (-260 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -2920) (230 5550))
+ rect(l11 (-230 -2920) (230 2920))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -290) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-25 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-230 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(9 name('bl_n[3]')
+ rect(l2 (7905 2635) (420 280))
+ polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80))
+ rect(l11 (-140 -2610) (230 5550))
+ rect(l11 (-230 -5550) (230 5550))
+ rect(l11 (-230 -5550) (230 2920))
+ rect(l11 (-230 -2920) (230 5550))
+ rect(l11 (-230 -2920) (230 2920))
+ rect(l12 (-230 -5550) (230 2920))
+ rect(l12 (-230 -2920) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -5550) (230 5550))
+ rect(l12 (-230 -2920) (230 2920))
+ rect(l12 (-115 -2775) (0 0))
+ rect(l21 (-145 -85) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l23 (-110 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ )
+ net(10
+ rect(l2 (1445 395) (445 420))
+ polygon(l2 (-525 910) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ polygon(l9 (-405 -1280) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570))
+ rect(l21 (-335 560) (170 170))
+ rect(l21 (-5 -650) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l22 (-1365 -980) (950 150))
+ rect(l22 (-1100 -840) (150 2010))
+ rect(l22 (950 -1320) (330 270))
+ )
+ net(11
+ rect(l7 (290 955) (950 150))
+ rect(l7 (-1100 -840) (150 2010))
+ rect(l7 (950 -1320) (330 270))
+ )
+ net(12
+ polygon(l2 (290 1725) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ rect(l2 (-525 -1330) (445 420))
+ polygon(l9 (-210 -370) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920))
+ rect(l21 (-170 1320) (170 170))
+ rect(l21 (-170 -1410) (170 170))
+ rect(l21 (-5 670) (170 170))
+ rect(l22 (-250 -220) (330 270))
+ rect(l22 (0 -150) (950 150))
+ rect(l22 (0 -1320) (150 2010))
+ )
+ net(13
+ rect(l7 (940 1435) (950 150))
+ rect(l7 (-1280 -270) (330 270))
+ rect(l7 (950 -1320) (150 2010))
+ )
+ net(14
+ polygon(l2 (3545 1725) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ rect(l2 (-445 -1330) (445 420))
+ polygon(l9 (-405 -370) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570))
+ rect(l21 (-335 560) (170 170))
+ rect(l21 (-5 590) (170 170))
+ rect(l21 (-170 -1410) (170 170))
+ rect(l22 (-1365 260) (950 150))
+ rect(l22 (-1100 -840) (150 2010))
+ rect(l22 (950 -1320) (330 270))
+ )
+ net(15
+ rect(l7 (2470 955) (950 150))
+ rect(l7 (-1100 -840) (150 2010))
+ rect(l7 (950 -1320) (330 270))
+ )
+ net(16
+ rect(l2 (2470 395) (445 420))
+ polygon(l2 (-445 910) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ polygon(l9 (-290 -1280) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920))
+ rect(l21 (-170 80) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l21 (-5 -570) (170 170))
+ rect(l22 (-250 -220) (330 270))
+ rect(l22 (0 -150) (950 150))
+ rect(l22 (0 -1320) (150 2010))
+ )
+ net(17
+ rect(l7 (3120 1435) (950 150))
+ rect(l7 (-1280 -270) (330 270))
+ rect(l7 (950 -1320) (150 2010))
+ )
+ net(18
+ rect(l2 (5805 395) (445 420))
+ polygon(l2 (-525 910) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ polygon(l9 (-405 -1280) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570))
+ rect(l21 (-335 560) (170 170))
+ rect(l21 (-5 -650) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l22 (-1365 -980) (950 150))
+ rect(l22 (-1100 -840) (150 2010))
+ rect(l22 (950 -1320) (330 270))
+ )
+ net(19
+ rect(l7 (4650 955) (950 150))
+ rect(l7 (-1100 -840) (150 2010))
+ rect(l7 (950 -1320) (330 270))
+ )
+ net(20
+ polygon(l2 (4650 1725) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ rect(l2 (-525 -1330) (445 420))
+ polygon(l9 (-210 -370) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920))
+ rect(l21 (-170 1320) (170 170))
+ rect(l21 (-170 -1410) (170 170))
+ rect(l21 (-5 670) (170 170))
+ rect(l22 (-250 -220) (330 270))
+ rect(l22 (0 -150) (950 150))
+ rect(l22 (0 -1320) (150 2010))
+ )
+ net(21
+ rect(l7 (5300 1435) (950 150))
+ rect(l7 (-1280 -270) (330 270))
+ rect(l7 (950 -1320) (150 2010))
+ )
+ net(22
+ rect(l2 (7985 395) (445 420))
+ polygon(l2 (-525 910) (0 760) (420 0) (0 -340) (105 0) (0 -420))
+ polygon(l9 (-405 -1280) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570))
+ rect(l21 (-335 560) (170 170))
+ rect(l21 (-5 -650) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l22 (-1365 -980) (950 150))
+ rect(l22 (-1100 -840) (150 2010))
+ rect(l22 (950 -1320) (330 270))
+ )
+ net(23
+ rect(l7 (6830 955) (950 150))
+ rect(l7 (-1100 -840) (150 2010))
+ rect(l7 (950 -1320) (330 270))
+ )
+ net(24
+ polygon(l2 (6830 1725) (0 420) (105 0) (0 340) (420 0) (0 -760))
+ rect(l2 (-525 -1330) (445 420))
+ polygon(l9 (-210 -370) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920))
+ rect(l21 (-170 1320) (170 170))
+ rect(l21 (-170 -1410) (170 170))
+ rect(l21 (-5 670) (170 170))
+ rect(l22 (-250 -220) (330 270))
+ rect(l22 (0 -150) (950 150))
+ rect(l22 (0 -1320) (150 2010))
+ )
+ net(25
+ rect(l7 (7480 1435) (950 150))
+ rect(l7 (-1280 -270) (330 270))
+ rect(l7 (950 -1320) (150 2010))
+ )
+ net(26 name('wl[0]')
+ rect(l9 (1005 2135) (170 500))
+ rect(l9 (2010 -500) (170 500))
+ rect(l9 (2010 -500) (170 500))
+ rect(l9 (2010 -500) (170 500))
+ polygon(l11 (-6755 -880) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320))
+ polygon(l11 (1920 0) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320))
+ polygon(l11 (1920 0) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320))
+ polygon(l11 (1920 0) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320))
+ rect(l13 (-7760 30) (8720 260))
+ rect(l13 (-8720 -260) (2180 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l13 (-2180 -260) (4360 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l13 (0 -260) (4360 260))
+ rect(l13 (-4360 -260) (2180 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l13 (0 -260) (2180 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l14 (-8720 -260) (2180 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l14 (-2180 -260) (4360 260))
+ rect(l14 (-4360 -260) (8720 260))
+ rect(l14 (-6540 -260) (2180 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l14 (0 -260) (2180 260))
+ rect(l14 (-2180 -130) (0 0))
+ rect(l14 (0 -130) (2180 260))
+ rect(l14 (-2180 -260) (4360 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l21 (-7715 340) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ polygon(l22 (-6760 -250) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ polygon(l22 (1910 0) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ polygon(l22 (1910 0) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ polygon(l22 (1910 0) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ rect(l23 (-6760 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l24 (-6700 -465) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ )
+ net(27
+ polygon(l7 (955 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ )
+ net(28
+ polygon(l7 (7495 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ )
+ net(29
+ polygon(l7 (3135 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ )
+ net(30
+ polygon(l7 (5315 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
+ )
+ net(31 name('wl[1]')
+ rect(l9 (1005 2915) (170 500))
+ rect(l9 (2010 -500) (170 500))
+ rect(l9 (2010 -500) (170 500))
+ rect(l9 (2010 -500) (170 500))
+ polygon(l11 (-6740 -230) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290))
+ polygon(l11 (1950 0) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290))
+ polygon(l11 (1950 0) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290))
+ polygon(l11 (1950 0) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290))
+ rect(l13 (-7745 320) (2180 260))
+ rect(l13 (-2180 -260) (4360 260))
+ rect(l13 (-4360 -260) (8720 260))
+ rect(l13 (-8720 -260) (2180 260))
+ rect(l13 (0 -260) (2180 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l13 (0 -260) (2180 260))
+ rect(l13 (-2180 -260) (4360 260))
+ rect(l13 (-4360 -260) (2180 260))
+ rect(l13 (0 -260) (2180 260))
+ rect(l13 (-2180 -260) (2180 260))
+ rect(l14 (-8720 -260) (2180 260))
+ rect(l14 (-2180 -260) (8720 260))
+ rect(l14 (-8720 -260) (4360 260))
+ rect(l14 (-4360 -260) (2180 260))
+ rect(l14 (0 -260) (2180 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l14 (0 -130) (0 0))
+ rect(l14 (0 -130) (2180 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l14 (-2180 -260) (4360 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l14 (-2180 -260) (2180 260))
+ rect(l21 (-7715 -770) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ polygon(l22 (-7450 -250) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ polygon(l22 (530 0) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ polygon(l22 (530 0) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ polygon(l22 (530 0) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ rect(l23 (-7450 330) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l24 (-6700 145) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ )
+ net(32
+ polygon(l2 (395 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ rect(l2 (-525 1670) (445 420))
+ polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480))
+ rect(l21 (-170 80) (170 170))
+ rect(l21 (-5 230) (170 170))
+ rect(l21 (-335 670) (170 170))
+ rect(l22 (-85 -1060) (330 270))
+ rect(l22 (0 -270) (950 150))
+ rect(l22 (0 -840) (150 2010))
+ )
+ net(33
+ rect(l7 (940 3965) (950 150))
+ rect(l7 (-1280 -150) (330 270))
+ rect(l7 (950 -960) (150 2010))
+ )
+ net(34
+ polygon(l2 (2575 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ rect(l2 (-525 1670) (445 420))
+ polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480))
+ rect(l21 (-170 80) (170 170))
+ rect(l21 (-5 230) (170 170))
+ rect(l21 (-335 670) (170 170))
+ rect(l22 (-85 -1060) (330 270))
+ rect(l22 (0 -270) (950 150))
+ rect(l22 (0 -840) (150 2010))
+ )
+ net(35
+ rect(l7 (3120 3965) (950 150))
+ rect(l7 (-1280 -150) (330 270))
+ rect(l7 (950 -960) (150 2010))
+ )
+ net(36
+ polygon(l2 (4755 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ rect(l2 (-525 1670) (445 420))
+ polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480))
+ rect(l21 (-170 80) (170 170))
+ rect(l21 (-5 230) (170 170))
+ rect(l21 (-335 670) (170 170))
+ rect(l22 (-85 -1060) (330 270))
+ rect(l22 (0 -270) (950 150))
+ rect(l22 (0 -840) (150 2010))
+ )
+ net(37
+ rect(l7 (5300 3965) (950 150))
+ rect(l7 (-1280 -150) (330 270))
+ rect(l7 (950 -960) (150 2010))
+ )
+ net(38
+ polygon(l2 (6935 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760))
+ rect(l2 (-525 1670) (445 420))
+ polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480))
+ rect(l21 (-170 80) (170 170))
+ rect(l21 (-5 230) (170 170))
+ rect(l21 (-335 670) (170 170))
+ rect(l22 (-85 -1060) (330 270))
+ rect(l22 (0 -270) (950 150))
+ rect(l22 (0 -840) (150 2010))
+ )
+ net(39
+ rect(l7 (7480 3965) (950 150))
+ rect(l7 (-1280 -150) (330 270))
+ rect(l7 (950 -960) (150 2010))
+ )
+ net(40
+ polygon(l2 (7905 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ rect(l2 (-340 1670) (445 420))
+ polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570))
+ rect(l21 (-170 80) (170 170))
+ rect(l21 (-335 590) (170 170))
+ rect(l21 (-5 310) (170 170))
+ rect(l22 (-1365 -580) (950 150))
+ rect(l22 (-1100 -1320) (150 2010))
+ rect(l22 (950 -960) (330 270))
+ )
+ net(41
+ polygon(l7 (265 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ )
+ net(42
+ polygon(l7 (6805 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ )
+ net(43
+ polygon(l7 (2445 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ )
+ net(44
+ polygon(l7 (4625 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
+ )
+ net(45
+ polygon(l2 (1365 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ rect(l2 (-340 1670) (445 420))
+ polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570))
+ rect(l21 (-335 840) (170 170))
+ rect(l21 (-5 -930) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l22 (-1365 -580) (950 150))
+ rect(l22 (-1100 -1320) (150 2010))
+ rect(l22 (950 -960) (330 270))
+ )
+ net(46
+ rect(l7 (290 4445) (950 150))
+ rect(l7 (-1100 -1320) (150 2010))
+ rect(l7 (950 -960) (330 270))
+ )
+ net(47
+ rect(l7 (2470 4445) (950 150))
+ rect(l7 (-1100 -1320) (150 2010))
+ rect(l7 (950 -960) (330 270))
+ )
+ net(48
+ polygon(l2 (3545 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ rect(l2 (-340 1670) (445 420))
+ polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570))
+ rect(l21 (-335 840) (170 170))
+ rect(l21 (-5 -930) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l22 (-1365 -580) (950 150))
+ rect(l22 (-1100 -1320) (150 2010))
+ rect(l22 (950 -960) (330 270))
+ )
+ net(49
+ polygon(l2 (5725 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340))
+ rect(l2 (-340 1670) (445 420))
+ polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570))
+ rect(l21 (-335 840) (170 170))
+ rect(l21 (-5 -930) (170 170))
+ rect(l21 (-170 1070) (170 170))
+ rect(l22 (-1365 -580) (950 150))
+ rect(l22 (-1100 -1320) (150 2010))
+ rect(l22 (950 -960) (330 270))
+ )
+ net(50
+ rect(l7 (4650 4445) (950 150))
+ rect(l7 (-1100 -1320) (150 2010))
+ rect(l7 (950 -960) (330 270))
+ )
+ net(51
+ rect(l7 (6830 4445) (950 150))
+ rect(l7 (-1100 -1320) (150 2010))
+ rect(l7 (950 -960) (330 270))
+ )
+ net(52 name(vss)
+ rect(l2 (-125 1725) (265 420))
+ rect(l2 (-265 270) (250 720))
+ rect(l2 (1915 -1410) (280 420))
+ rect(l2 (-265 270) (250 720))
+ rect(l2 (1915 -1410) (280 420))
+ rect(l2 (-265 270) (250 720))
+ rect(l2 (1915 -1410) (280 420))
+ rect(l2 (-265 270) (250 720))
+ rect(l2 (1915 -1410) (265 420))
+ rect(l2 (-250 270) (250 720))
+ rect(l2 (-8970 270) (265 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (280 420))
+ rect(l2 (1900 -420) (265 420))
+ rect(l6 (-8970 -1410) (250 720))
+ rect(l6 (1930 -720) (250 720))
+ rect(l6 (1930 -720) (250 720))
+ rect(l6 (1930 -720) (250 720))
+ rect(l6 (1930 -720) (250 720))
+ rect(l9 (-8930 -1365) (170 1170))
+ rect(l9 (-170 -330) (170 1170))
+ rect(l9 (2010 -2010) (170 1170))
+ rect(l9 (-170 -1170) (170 1170))
+ rect(l9 (-170 -330) (170 1170))
+ rect(l9 (-170 -1170) (170 1170))
+ rect(l9 (2010 -2010) (170 1170))
+ rect(l9 (-170 -1170) (170 1170))
+ rect(l9 (-170 -330) (170 1170))
+ rect(l9 (-170 -1170) (170 1170))
+ rect(l9 (2010 -2010) (170 1170))
+ rect(l9 (-170 -1170) (170 1170))
+ rect(l9 (-170 -330) (170 1170))
+ rect(l9 (-170 -1170) (170 1170))
+ rect(l9 (2010 -1170) (170 1170))
+ rect(l9 (-170 -2010) (170 1170))
+ rect(l11 (-8935 -325) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l11 (1920 -320) (260 320))
+ rect(l11 (-260 -320) (260 320))
+ rect(l13 (-9010 -290) (2500 260))
+ rect(l13 (-2500 -260) (9040 260))
+ rect(l13 (-9040 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (4680 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-320 -260) (2500 260))
+ rect(l13 (-2500 -260) (4680 260))
+ rect(l13 (-4680 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-320 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l13 (-2500 -260) (2500 260))
+ rect(l14 (-9040 -260) (2500 260))
+ rect(l14 (-2500 -260) (4680 260))
+ rect(l14 (-4680 -260) (9040 260))
+ rect(l14 (-9040 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-320 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-320 -260) (4680 260))
+ rect(l14 (-4680 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2340 -130) (0 0))
+ rect(l14 (2020 -130) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l14 (-2500 -260) (2500 260))
+ rect(l21 (-8965 -1055) (170 170))
+ rect(l21 (-170 670) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -1010) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 670) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -1010) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 670) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -1010) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 670) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -1010) (170 170))
+ rect(l21 (-170 670) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (-8890 670) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l21 (-170 -170) (170 170))
+ rect(l21 (2010 -170) (170 170))
+ rect(l23 (-8890 -1010) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l23 (2010 -170) (170 170))
+ rect(l23 (-170 -170) (170 170))
+ rect(l24 (-8880 -160) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ rect(l24 (2030 -150) (150 150))
+ rect(l24 (-150 -150) (150 150))
+ )
+
+ # Devices and their connections
+ device(1 D$sky130_fd_pr__nfet_01v8__model
+ location(215 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1113)
+ param(AD 0.18165)
+ param(PS 1.37)
+ param(PD 1.285)
+ terminal(S 52)
+ terminal(G 10)
+ terminal(D 12)
+ terminal(B 52)
+ )
+ device(2 D$sky130_fd_pr__nfet_01v8__model$1
+ location(605 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 12)
+ terminal(G 26)
+ terminal(D 2)
+ terminal(B 52)
+ )
+ device(3 D$sky130_fd_pr__nfet_01v8__model$2
+ location(605 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 2)
+ terminal(G 31)
+ terminal(D 32)
+ terminal(B 52)
+ )
+ device(4 D$sky130_fd_pr__nfet_01v8__model$3
+ location(215 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.1113)
+ param(PS 1.285)
+ param(PD 1.37)
+ terminal(S 32)
+ terminal(G 45)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(5 D$sky130_fd_pr__nfet_01v8__model$4
+ location(1965 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 10)
+ terminal(G 12)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(6 D$sky130_fd_pr__nfet_01v8__model$5
+ location(2395 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 52)
+ terminal(G 14)
+ terminal(D 16)
+ terminal(B 52)
+ )
+ device(7 D$sky130_fd_pr__nfet_01v8__model$6
+ location(1575 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 10)
+ terminal(G 26)
+ terminal(D 3)
+ terminal(B 52)
+ )
+ device(8 D$sky130_fd_pr__nfet_01v8__model$1
+ location(2785 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 16)
+ terminal(G 26)
+ terminal(D 4)
+ terminal(B 52)
+ )
+ device(9 D$sky130_fd_pr__nfet_01v8__model$7
+ location(1575 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 3)
+ terminal(G 31)
+ terminal(D 45)
+ terminal(B 52)
+ )
+ device(10 D$sky130_fd_pr__nfet_01v8__model$2
+ location(2785 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 4)
+ terminal(G 31)
+ terminal(D 34)
+ terminal(B 52)
+ )
+ device(11 D$sky130_fd_pr__nfet_01v8__model$8
+ location(1965 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 45)
+ terminal(G 32)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(12 D$sky130_fd_pr__nfet_01v8__model$9
+ location(2395 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 34)
+ terminal(G 48)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(13 D$sky130_fd_pr__nfet_01v8__model$4
+ location(4145 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 14)
+ terminal(G 16)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(14 D$sky130_fd_pr__nfet_01v8__model$5
+ location(4575 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 52)
+ terminal(G 18)
+ terminal(D 20)
+ terminal(B 52)
+ )
+ device(15 D$sky130_fd_pr__nfet_01v8__model$6
+ location(3755 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 14)
+ terminal(G 26)
+ terminal(D 5)
+ terminal(B 52)
+ )
+ device(16 D$sky130_fd_pr__nfet_01v8__model$1
+ location(4965 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 20)
+ terminal(G 26)
+ terminal(D 6)
+ terminal(B 52)
+ )
+ device(17 D$sky130_fd_pr__nfet_01v8__model$7
+ location(3755 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 5)
+ terminal(G 31)
+ terminal(D 48)
+ terminal(B 52)
+ )
+ device(18 D$sky130_fd_pr__nfet_01v8__model$2
+ location(4965 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 6)
+ terminal(G 31)
+ terminal(D 36)
+ terminal(B 52)
+ )
+ device(19 D$sky130_fd_pr__nfet_01v8__model$8
+ location(4145 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 48)
+ terminal(G 34)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(20 D$sky130_fd_pr__nfet_01v8__model$9
+ location(4575 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 36)
+ terminal(G 49)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(21 D$sky130_fd_pr__nfet_01v8__model$4
+ location(6325 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 18)
+ terminal(G 20)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(22 D$sky130_fd_pr__nfet_01v8__model$5
+ location(6755 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 52)
+ terminal(G 22)
+ terminal(D 24)
+ terminal(B 52)
+ )
+ device(23 D$sky130_fd_pr__nfet_01v8__model$6
+ location(5935 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 18)
+ terminal(G 26)
+ terminal(D 7)
+ terminal(B 52)
+ )
+ device(24 D$sky130_fd_pr__nfet_01v8__model$1
+ location(7145 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 24)
+ terminal(G 26)
+ terminal(D 8)
+ terminal(B 52)
+ )
+ device(25 D$sky130_fd_pr__nfet_01v8__model$7
+ location(5935 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 7)
+ terminal(G 31)
+ terminal(D 49)
+ terminal(B 52)
+ )
+ device(26 D$sky130_fd_pr__nfet_01v8__model$2
+ location(7145 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 8)
+ terminal(G 31)
+ terminal(D 38)
+ terminal(B 52)
+ )
+ device(27 D$sky130_fd_pr__nfet_01v8__model$8
+ location(6325 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 49)
+ terminal(G 36)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(28 D$sky130_fd_pr__nfet_01v8__model$9
+ location(6755 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 38)
+ terminal(G 40)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(29 D$sky130_fd_pr__nfet_01v8__model$10
+ location(8505 1935)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.1113)
+ param(PS 1.285)
+ param(PD 1.37)
+ terminal(S 22)
+ terminal(G 24)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(30 D$sky130_fd_pr__nfet_01v8__model$6
+ location(8115 2560)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.0588)
+ param(PS 1.285)
+ param(PD 0.7)
+ terminal(S 22)
+ terminal(G 26)
+ terminal(D 9)
+ terminal(B 52)
+ )
+ device(31 D$sky130_fd_pr__nfet_01v8__model$7
+ location(8115 2990)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.18165)
+ param(PS 0.7)
+ param(PD 1.285)
+ terminal(S 9)
+ terminal(G 31)
+ terminal(D 40)
+ terminal(B 52)
+ )
+ device(32 D$sky130_fd_pr__nfet_01v8__model$11
+ location(8505 3615)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.18165)
+ param(AD 0.1113)
+ param(PS 1.285)
+ param(PD 1.37)
+ terminal(S 40)
+ terminal(G 38)
+ terminal(D 52)
+ terminal(B 52)
+ )
+ device(33 D$sky130_fd_pr__pfet_01v8__model
+ location(215 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1113)
+ param(AD 0.1869)
+ param(PS 1.37)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 10)
+ terminal(D 12)
+ terminal(B 1)
+ )
+ device(34 D$sky130_fd_pr__pfet_01v8__model$1
+ location(1965 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.0588)
+ param(PS 1.73)
+ param(PD 0.7)
+ terminal(S 10)
+ terminal(G 12)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(35 D$sky130_fd_pr__pfet_01v8__model$2
+ location(2395 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.1869)
+ param(PS 0.7)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 14)
+ terminal(D 16)
+ terminal(B 1)
+ )
+ device(36 D$sky130_fd_pr__pfet_01v8__model$1
+ location(4145 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.0588)
+ param(PS 1.73)
+ param(PD 0.7)
+ terminal(S 14)
+ terminal(G 16)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(37 D$sky130_fd_pr__pfet_01v8__model$2
+ location(4575 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.1869)
+ param(PS 0.7)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 18)
+ terminal(D 20)
+ terminal(B 1)
+ )
+ device(38 D$sky130_fd_pr__pfet_01v8__model$1
+ location(6325 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.0588)
+ param(PS 1.73)
+ param(PD 0.7)
+ terminal(S 18)
+ terminal(G 20)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(39 D$sky130_fd_pr__pfet_01v8__model$2
+ location(6755 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.1869)
+ param(PS 0.7)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 22)
+ terminal(D 24)
+ terminal(B 1)
+ )
+ device(40 D$sky130_fd_pr__pfet_01v8__model$3
+ location(8505 605)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.1113)
+ param(PS 1.73)
+ param(PD 1.37)
+ terminal(S 22)
+ terminal(G 24)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(41 D$sky130_fd_pr__pfet_01v8__model
+ location(215 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1113)
+ param(AD 0.1869)
+ param(PS 1.37)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 45)
+ terminal(D 32)
+ terminal(B 1)
+ )
+ device(42 D$sky130_fd_pr__pfet_01v8__model$1
+ location(1965 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.0588)
+ param(PS 1.73)
+ param(PD 0.7)
+ terminal(S 45)
+ terminal(G 32)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(43 D$sky130_fd_pr__pfet_01v8__model$2
+ location(2395 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.1869)
+ param(PS 0.7)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 48)
+ terminal(D 34)
+ terminal(B 1)
+ )
+ device(44 D$sky130_fd_pr__pfet_01v8__model$1
+ location(4145 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.0588)
+ param(PS 1.73)
+ param(PD 0.7)
+ terminal(S 48)
+ terminal(G 34)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(45 D$sky130_fd_pr__pfet_01v8__model$2
+ location(4575 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.1869)
+ param(PS 0.7)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 49)
+ terminal(D 36)
+ terminal(B 1)
+ )
+ device(46 D$sky130_fd_pr__pfet_01v8__model$1
+ location(6325 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.0588)
+ param(PS 1.73)
+ param(PD 0.7)
+ terminal(S 49)
+ terminal(G 36)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(47 D$sky130_fd_pr__pfet_01v8__model$2
+ location(6755 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.0588)
+ param(AD 0.1869)
+ param(PS 0.7)
+ param(PD 1.73)
+ terminal(S 1)
+ terminal(G 40)
+ terminal(D 38)
+ terminal(B 1)
+ )
+ device(48 D$sky130_fd_pr__pfet_01v8__model$3
+ location(8505 4945)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0.1869)
+ param(AD 0.1113)
+ param(PS 1.73)
+ param(PD 1.37)
+ terminal(S 40)
+ terminal(G 38)
+ terminal(D 1)
+ terminal(B 1)
+ )
+
+ )
+)
+
+# Reference netlist
+reference(
+
+ # Device class section
+ class(SKY130_FD_PR__PFET_01V8__MODEL MOS4)
+ class(SKY130_FD_PR__NFET_01V8__MODEL MOS4)
+
+ # Circuit section
+ # Circuits are the hierarchical building blocks of the netlist.
+ circuit(SP6TARRAY_2X4
+
+ # Nets
+ net(1 name(VSS))
+ net(2 name(VDD))
+ net(3 name('WL[0]'))
+ net(4 name('WL[1]'))
+ net(5 name('BL[0]'))
+ net(6 name('BL_N[0]'))
+ net(7 name('BL[1]'))
+ net(8 name('BL_N[1]'))
+ net(9 name('BL[2]'))
+ net(10 name('BL_N[2]'))
+ net(11 name('BL[3]'))
+ net(12 name('BL_N[3]'))
+ net(13 name(INST0X0.INST0X0.INST0X0.BIT_N))
+ net(14 name(INST0X0.INST0X0.INST0X0.BIT))
+ net(15 name(INST0X0.INST0X0.INST1X0.BIT_N))
+ net(16 name(INST0X0.INST0X0.INST1X0.BIT))
+ net(17 name(INST0X0.INST0X1.INST0X0.BIT_N))
+ net(18 name(INST0X0.INST0X1.INST0X0.BIT))
+ net(19 name(INST0X0.INST0X1.INST1X0.BIT_N))
+ net(20 name(INST0X0.INST0X1.INST1X0.BIT))
+ net(21 name(INST0X1.INST0X0.INST0X0.BIT_N))
+ net(22 name(INST0X1.INST0X0.INST0X0.BIT))
+ net(23 name(INST0X1.INST0X0.INST1X0.BIT_N))
+ net(24 name(INST0X1.INST0X0.INST1X0.BIT))
+ net(25 name(INST0X1.INST0X1.INST0X0.BIT_N))
+ net(26 name(INST0X1.INST0X1.INST0X0.BIT))
+ net(27 name(INST0X1.INST0X1.INST1X0.BIT_N))
+ net(28 name(INST0X1.INST0X1.INST1X0.BIT))
+
+ # Outgoing pins and their connections to nets
+ pin(1 name(VSS))
+ pin(2 name(VDD))
+ pin(3 name('WL[0]'))
+ pin(4 name('WL[1]'))
+ pin(5 name('BL[0]'))
+ pin(6 name('BL_N[0]'))
+ pin(7 name('BL[1]'))
+ pin(8 name('BL_N[1]'))
+ pin(9 name('BL[2]'))
+ pin(10 name('BL_N[2]'))
+ pin(11 name('BL[3]'))
+ pin(12 name('BL_N[3]'))
+
+ # Devices and their connections
+ device(1 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST0X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 14)
+ terminal(G 13)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(2 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST0X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 14)
+ terminal(D 13)
+ terminal(B 2)
+ )
+ device(3 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST0X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 14)
+ terminal(G 13)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(4 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST0X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 14)
+ terminal(D 13)
+ terminal(B 1)
+ )
+ device(5 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST0X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 14)
+ terminal(G 3)
+ terminal(D 5)
+ terminal(B 1)
+ )
+ device(6 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST0X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 13)
+ terminal(G 3)
+ terminal(D 6)
+ terminal(B 1)
+ )
+ device(7 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST1X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 16)
+ terminal(G 15)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(8 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST1X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 16)
+ terminal(D 15)
+ terminal(B 2)
+ )
+ device(9 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST1X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 16)
+ terminal(G 15)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(10 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST1X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 16)
+ terminal(D 15)
+ terminal(B 1)
+ )
+ device(11 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST1X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 16)
+ terminal(G 4)
+ terminal(D 5)
+ terminal(B 1)
+ )
+ device(12 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X0.INST1X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 15)
+ terminal(G 4)
+ terminal(D 6)
+ terminal(B 1)
+ )
+ device(13 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST0X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 18)
+ terminal(G 17)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(14 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST0X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 18)
+ terminal(D 17)
+ terminal(B 2)
+ )
+ device(15 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST0X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 18)
+ terminal(G 17)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(16 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST0X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 18)
+ terminal(D 17)
+ terminal(B 1)
+ )
+ device(17 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST0X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 18)
+ terminal(G 3)
+ terminal(D 7)
+ terminal(B 1)
+ )
+ device(18 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST0X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 17)
+ terminal(G 3)
+ terminal(D 8)
+ terminal(B 1)
+ )
+ device(19 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST1X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 20)
+ terminal(G 19)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(20 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST1X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 20)
+ terminal(D 19)
+ terminal(B 2)
+ )
+ device(21 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST1X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 20)
+ terminal(G 19)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(22 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST1X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 20)
+ terminal(D 19)
+ terminal(B 1)
+ )
+ device(23 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST1X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 20)
+ terminal(G 4)
+ terminal(D 7)
+ terminal(B 1)
+ )
+ device(24 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X0.INST0X1.INST1X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 19)
+ terminal(G 4)
+ terminal(D 8)
+ terminal(B 1)
+ )
+ device(25 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST0X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 22)
+ terminal(G 21)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(26 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST0X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 22)
+ terminal(D 21)
+ terminal(B 2)
+ )
+ device(27 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST0X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 22)
+ terminal(G 21)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(28 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST0X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 22)
+ terminal(D 21)
+ terminal(B 1)
+ )
+ device(29 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST0X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 22)
+ terminal(G 3)
+ terminal(D 9)
+ terminal(B 1)
+ )
+ device(30 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST0X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 21)
+ terminal(G 3)
+ terminal(D 10)
+ terminal(B 1)
+ )
+ device(31 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST1X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 24)
+ terminal(G 23)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(32 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST1X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 24)
+ terminal(D 23)
+ terminal(B 2)
+ )
+ device(33 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST1X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 24)
+ terminal(G 23)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(34 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST1X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 24)
+ terminal(D 23)
+ terminal(B 1)
+ )
+ device(35 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST1X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 24)
+ terminal(G 4)
+ terminal(D 9)
+ terminal(B 1)
+ )
+ device(36 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X0.INST1X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 23)
+ terminal(G 4)
+ terminal(D 10)
+ terminal(B 1)
+ )
+ device(37 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST0X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 26)
+ terminal(G 25)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(38 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST0X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 26)
+ terminal(D 25)
+ terminal(B 2)
+ )
+ device(39 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST0X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 26)
+ terminal(G 25)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(40 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST0X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 26)
+ terminal(D 25)
+ terminal(B 1)
+ )
+ device(41 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST0X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 26)
+ terminal(G 3)
+ terminal(D 11)
+ terminal(B 1)
+ )
+ device(42 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST0X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 25)
+ terminal(G 3)
+ terminal(D 12)
+ terminal(B 1)
+ )
+ device(43 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST1X0.PU1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 28)
+ terminal(G 27)
+ terminal(D 2)
+ terminal(B 2)
+ )
+ device(44 SKY130_FD_PR__PFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST1X0.PU2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 2)
+ terminal(G 28)
+ terminal(D 27)
+ terminal(B 2)
+ )
+ device(45 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST1X0.PD1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 28)
+ terminal(G 27)
+ terminal(D 1)
+ terminal(B 1)
+ )
+ device(46 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST1X0.PD2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 1)
+ terminal(G 28)
+ terminal(D 27)
+ terminal(B 1)
+ )
+ device(47 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST1X0.PG1)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 28)
+ terminal(G 4)
+ terminal(D 11)
+ terminal(B 1)
+ )
+ device(48 SKY130_FD_PR__NFET_01V8__MODEL
+ name(INST0X1.INST0X1.INST1X0.PG2)
+ param(L 0.15)
+ param(W 0.42)
+ param(AS 0)
+ param(AD 0)
+ param(PS 0)
+ param(PD 0)
+ terminal(S 27)
+ terminal(G 4)
+ terminal(D 12)
+ terminal(B 1)
+ )
+
+ )
+)
+
+# Cross reference
+xref(
+ circuit(SP6TArray_2X4 SP6TARRAY_2X4 match
+ xref(
+ net(12 14 match)
+ net(10 13 match)
+ net(32 16 match)
+ net(45 15 match)
+ net(16 18 match)
+ net(14 17 match)
+ net(34 20 match)
+ net(48 19 match)
+ net(20 22 match)
+ net(18 21 match)
+ net(36 24 match)
+ net(49 23 match)
+ net(24 26 match)
+ net(22 25 match)
+ net(38 28 match)
+ net(40 27 match)
+ net(2 5 match)
+ net(4 7 match)
+ net(6 9 match)
+ net(8 11 match)
+ net(3 6 match)
+ net(5 8 match)
+ net(7 10 match)
+ net(9 12 match)
+ net(1 2 match)
+ net(52 1 match)
+ net(26 3 match)
+ net(31 4 match)
+ pin(() 4 match)
+ pin(() 6 match)
+ pin(() 8 match)
+ pin(() 10 match)
+ pin(() 5 match)
+ pin(() 7 match)
+ pin(() 9 match)
+ pin(() 11 match)
+ pin(() 1 match)
+ pin(() 0 match)
+ pin(() 2 match)
+ pin(() 3 match)
+ device(1 3 match)
+ device(5 4 match)
+ device(2 5 match)
+ device(7 6 match)
+ device(4 9 match)
+ device(11 10 match)
+ device(3 11 match)
+ device(9 12 match)
+ device(6 15 match)
+ device(13 16 match)
+ device(8 17 match)
+ device(15 18 match)
+ device(12 21 match)
+ device(19 22 match)
+ device(10 23 match)
+ device(17 24 match)
+ device(14 27 match)
+ device(21 28 match)
+ device(16 29 match)
+ device(23 30 match)
+ device(20 33 match)
+ device(27 34 match)
+ device(18 35 match)
+ device(25 36 match)
+ device(22 39 match)
+ device(29 40 match)
+ device(24 41 match)
+ device(30 42 match)
+ device(28 45 match)
+ device(32 46 match)
+ device(26 47 match)
+ device(31 48 match)
+ device(33 1 match)
+ device(34 2 match)
+ device(41 7 match)
+ device(42 8 match)
+ device(35 13 match)
+ device(36 14 match)
+ device(43 19 match)
+ device(44 20 match)
+ device(37 25 match)
+ device(38 26 match)
+ device(45 31 match)
+ device(46 32 match)
+ device(39 37 match)
+ device(40 38 match)
+ device(47 43 match)
+ device(48 44 match)
+ )
+ )
+)
From 86e84c8ca64881240a6a7ca57c4eff674fb8612a Mon Sep 17 00:00:00 2001
From: klayoutmatthias
Date: Sun, 2 Jun 2024 20:12:18 +0200
Subject: [PATCH 11/12] Updating further golden data files with MacOS variants
---
testdata/drc/drcSimpleTests_au56.gds.4 | Bin 0 -> 26018 bytes
testdata/drc/drcSimpleTests_au70.gds.5 | Bin 0 -> 71406 bytes
...m_resistors.cir => custom_resistors.cir.1} | 0
testdata/lvs/custom_resistors.cir.2 | 18 ++
testdata/lvs/custom_resistors.l2n.3 | 103 +++++++++
testdata/lvs/res_combine1.cir.3 | 7 +
testdata/lvs/res_combine1.lvsdb.6 | 197 ++++++++++++++++++
testdata/lvs/res_combine2.cir.1 | 2 +-
testdata/lvs/res_combine2.lvsdb.6 | 193 +++++++++++++++++
testdata/lvs/res_combine3.cir.3 | 7 +
testdata/lvs/res_combine3.lvsdb.6 | 196 +++++++++++++++++
11 files changed, 722 insertions(+), 1 deletion(-)
create mode 100644 testdata/drc/drcSimpleTests_au56.gds.4
create mode 100644 testdata/drc/drcSimpleTests_au70.gds.5
rename testdata/lvs/{custom_resistors.cir => custom_resistors.cir.1} (100%)
create mode 100644 testdata/lvs/custom_resistors.cir.2
create mode 100644 testdata/lvs/custom_resistors.l2n.3
create mode 100644 testdata/lvs/res_combine1.cir.3
create mode 100644 testdata/lvs/res_combine1.lvsdb.6
create mode 100644 testdata/lvs/res_combine2.lvsdb.6
create mode 100644 testdata/lvs/res_combine3.cir.3
create mode 100644 testdata/lvs/res_combine3.lvsdb.6
diff --git a/testdata/drc/drcSimpleTests_au56.gds.4 b/testdata/drc/drcSimpleTests_au56.gds.4
new file mode 100644
index 0000000000000000000000000000000000000000..4922db8045be61556a87c58a22eff8279ce162bd
GIT binary patch
literal 26018
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
PPw`#O-&hX2$I$-)vPaS>
literal 0
HcmV?d00001
diff --git a/testdata/drc/drcSimpleTests_au70.gds.5 b/testdata/drc/drcSimpleTests_au70.gds.5
new file mode 100644
index 0000000000000000000000000000000000000000..5c6ce599612ac56526b481c1b682322092d9eeac
GIT binary patch
literal 71406
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
literal 0
HcmV?d00001
diff --git a/testdata/lvs/custom_resistors.cir b/testdata/lvs/custom_resistors.cir.1
similarity index 100%
rename from testdata/lvs/custom_resistors.cir
rename to testdata/lvs/custom_resistors.cir.1
diff --git a/testdata/lvs/custom_resistors.cir.2 b/testdata/lvs/custom_resistors.cir.2
new file mode 100644
index 000000000..da72185a9
--- /dev/null
+++ b/testdata/lvs/custom_resistors.cir.2
@@ -0,0 +1,18 @@
+
+* cell TOP
+.SUBCKT TOP
+* cell instance $1 r180 *1 2,2.6
+X$1 6 1 A
+* cell instance $2 r0 *1 2.2,1
+X$2 6 5 A
+* device instance $1 r0 *1 0.8,0.75 RPP1
+R$1 1 2 0.555555555556 RPP1
+.ENDS TOP
+
+* cell A
+* pin
+* pin
+.SUBCKT A 1 2
+* device instance $1 r0 *1 -0.2,0.4 RPP1
+R$1 2 1 1.25 RPP1
+.ENDS A
diff --git a/testdata/lvs/custom_resistors.l2n.3 b/testdata/lvs/custom_resistors.l2n.3
new file mode 100644
index 000000000..01f44b800
--- /dev/null
+++ b/testdata/lvs/custom_resistors.l2n.3
@@ -0,0 +1,103 @@
+#%l2n-klayout
+W(TOP)
+U(0.001)
+L(l4 '15/0')
+L(l3 '16/0')
+L(l1)
+C(l4 l4 l3 l1)
+C(l3 l4 l3)
+C(l1 l4 l1)
+H(E B('Resistor shape does not touch marker border in exactly two places') C(TOP) X('device-extract') Q('(0.8,0.75;0.8,1.15;1,1.15;1,0.75)'))
+H(E B('Resistor shape does not touch marker border in exactly two places') C(TOP) X('device-extract') Q('(0,0.75;0,1.15;0.2,1.15;0.2,0.75)'))
+H(E B('Resistor shape does not touch marker border in exactly two places') C(A) X('device-extract') Q('(0.85,-0.4;0.85,-0.2;1.25,-0.2;1.25,-0.4)'))
+K(RPP1 RES)
+D(D$RPP1 RPP1
+ T(A
+ R(l1 (0 1200) (200 250))
+ )
+ T(B
+ R(l1 (0 400) (200 300))
+ )
+)
+D(D$RPP1$1 RPP1
+ T(A
+ R(l1 (750 0) (250 200))
+ )
+ T(B
+ R(l1 (0 0) (250 200))
+ )
+)
+X(A
+ R((-200 -450) (1750 1350))
+ N(1
+ R(l4 (-150 450) (100 100))
+ R(l3 (-150 -150) (200 500))
+ R(l1 (-200 -500) (250 200))
+ )
+ N(2
+ R(l4 (650 450) (100 100))
+ R(l4 (-100 -900) (100 100))
+ R(l3 (-150 200) (200 650))
+ R(l3 (-200 -1000) (200 500))
+ R(l1 (-250 300) (250 200))
+ R(l1 (-200 -1000) (250 200))
+ )
+ N(3
+ R(l4 (1450 -350) (100 100))
+ )
+ P(1)
+ P(2)
+ D(1 D$RPP1$1
+ Y(-200 400)
+ E(R 1.25)
+ E(L 0.5)
+ E(W 0.2)
+ E(A 0.1)
+ E(P 1.4)
+ T(A 2)
+ T(B 1)
+ )
+)
+X(TOP
+ R((-50 450) (3800 2600))
+ N(1
+ R(l4 (850 2050) (100 100))
+ R(l3 (-150 -150) (500 200))
+ R(l1 (-500 -250) (200 250))
+ )
+ N(2
+ R(l4 (850 1250) (100 100))
+ R(l4 (-100 -100) (100 100))
+ R(l4 (-900 -100) (100 100))
+ R(l3 (200 -150) (650 200))
+ R(l3 (-1000 -200) (500 200))
+ R(l1 (300 -250) (200 300))
+ R(l1 (-1000 -300) (200 250))
+ )
+ N(3
+ R(l4 (50 450) (100 100))
+ )
+ N(4
+ R(l4 (850 450) (100 100))
+ )
+ N(5)
+ N(6)
+ D(1 D$RPP1
+ Y(800 750)
+ E(R 0.555555555556)
+ E(L 0.333333333333)
+ E(W 0.3)
+ E(A 0.1)
+ E(P 1.26666666667)
+ T(A 1)
+ T(B 2)
+ )
+ X(1 A O(180) Y(2000 2600)
+ P(0 6)
+ P(1 1)
+ )
+ X(2 A Y(2200 1000)
+ P(0 6)
+ P(1 5)
+ )
+)
diff --git a/testdata/lvs/res_combine1.cir.3 b/testdata/lvs/res_combine1.cir.3
new file mode 100644
index 000000000..aa8016e4d
--- /dev/null
+++ b/testdata/lvs/res_combine1.cir.3
@@ -0,0 +1,7 @@
+* Extracted by KLayout
+
+* cell Res2
+.SUBCKT Res2
+* device instance $1 r0 *1 110.14,51.795 RPP1
+R$1 2 1 95 RPP1 L=420U W=2.21052631579U
+.ENDS Res2
diff --git a/testdata/lvs/res_combine1.lvsdb.6 b/testdata/lvs/res_combine1.lvsdb.6
new file mode 100644
index 000000000..856312de7
--- /dev/null
+++ b/testdata/lvs/res_combine1.lvsdb.6
@@ -0,0 +1,197 @@
+#%lvsdb-klayout
+
+# Layout
+layout(
+ top(Res2)
+ unit(0.001)
+
+ # Layer section
+ # This section lists the mask layers (drawing or derived) and their connections.
+
+ # Mask layers
+ layer(l4 '15/0')
+ layer(l3 '16/0')
+ layer(l1)
+
+ # Mask layer connectivity
+ connect(l4 l4 l3 l1)
+ connect(l3 l4 l3)
+ connect(l1 l4 l1)
+
+ # Device class section
+ class(RPP1 RES
+ param(R 0 0)
+ param(L 1 0)
+ param(W 1 0)
+ )
+
+ # Device abstracts section
+ # Device abstracts list the pin shapes of the devices.
+ device(D$RPP1 RPP1
+ terminal(A
+ rect(l1 (10540 0) (540 2000))
+ )
+ terminal(B
+ rect(l1 (0 0) (540 2000))
+ )
+ )
+
+ # Circuit section
+ # Circuits are the hierarchical building blocks of the netlist.
+ circuit(Res2
+
+ # Circuit boundary
+ rect((8285 720) (117975 57350))
+
+ # Nets with their geometries
+ net(1
+ rect(l4 (120580 32490) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -750) (220 220))
+ rect(l4 (-22355 1390) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -750) (220 220))
+ rect(l4 (-21520 1755) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -750) (220 220))
+ rect(l3 (0 -4795) (1065 5850))
+ rect(l3 (-5155 -6930) (52985 1475))
+ rect(l3 (-27585 -395) (1065 5850))
+ rect(l3 (20990 -5850) (1065 5850))
+ rect(l3 (-1275 -1760) (340 1920))
+ rect(l3 (-22475 -1890) (340 1920))
+ rect(l3 (-21640 -1525) (340 1920))
+ rect(l1 (42935 -2385) (540 2000))
+ rect(l1 (-22675 -1970) (540 2000))
+ rect(l1 (-21840 -1605) (540 2000))
+ )
+ net(2
+ rect(l4 (19795 5575) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -750) (220 220))
+ rect(l3 (-195 -995) (2395 2500))
+ rect(l3 (-2480 -1785) (340 1920))
+ rect(l1 (-500 -1960) (540 2000))
+ )
+
+ # Devices and their connections
+ device(1 D$RPP1
+ device(D$RPP1 location(-65 -8175))
+ device(D$RPP1 location(-205 -12595))
+ device(D$RPP1 location(-320 -20985))
+ device(D$RPP1 location(-225 -16825))
+ device(D$RPP1 location(30 -3970))
+ device(D$RPP1 location(-22135 30))
+ device(D$RPP1 location(-22200 -8145))
+ device(D$RPP1 location(-22340 -12565))
+ device(D$RPP1 location(-22455 -20955))
+ device(D$RPP1 location(-22360 -16795))
+ device(D$RPP1 location(-22105 -3940))
+ device(D$RPP1 location(-43435 425))
+ device(D$RPP1 location(-43500 -7750))
+ device(D$RPP1 location(-43640 -12170))
+ device(D$RPP1 location(-43755 -20560))
+ device(D$RPP1 location(-43660 -16400))
+ device(D$RPP1 location(-43405 -3545))
+ device(D$RPP1 location(-100465 855))
+ device(D$RPP1 location(-81950 425))
+ device(D$RPP1 location(-100530 -7320))
+ device(D$RPP1 location(-100670 -11740))
+ device(D$RPP1 location(-100785 -20130))
+ device(D$RPP1 location(-100785 -26915))
+ device(D$RPP1 location(-100690 -15970))
+ device(D$RPP1 location(-100435 -3115))
+ device(D$RPP1 location(-82015 -7750))
+ device(D$RPP1 location(-82155 -12170))
+ device(D$RPP1 location(-82175 -16400))
+ device(D$RPP1 location(-63435 640))
+ device(D$RPP1 location(-63500 -7535))
+ device(D$RPP1 location(-63640 -11955))
+ device(D$RPP1 location(-63755 -20345))
+ device(D$RPP1 location(-63865 -26810))
+ device(D$RPP1 location(-63660 -16185))
+ device(D$RPP1 location(-63405 -3330))
+ device(D$RPP1 location(-63930 -34985))
+ device(D$RPP1 location(-64070 -39405))
+ device(D$RPP1 location(-64090 -43635))
+ device(D$RPP1 location(-82380 -26810))
+ device(D$RPP1 location(-82270 -20560))
+ device(D$RPP1 location(-82445 -34985))
+ device(D$RPP1 location(-82585 -39405))
+ device(D$RPP1 location(-82700 -47795))
+ device(D$RPP1 location(-64185 -47795))
+ device(D$RPP1 location(-82605 -43635))
+ device(D$RPP1 location(-82350 -30780))
+ device(D$RPP1 location(-63835 -30780))
+ device(D$RPP1 location(-81920 -3545))
+ device(D$RPP1 location(-100850 -35090))
+ device(D$RPP1 location(-100990 -39510))
+ device(D$RPP1 location(-101105 -47900))
+ device(D$RPP1 location(-101010 -43740))
+ device(D$RPP1 location(-100755 -30885))
+ connect(51 A A)
+ connect(3 B A)
+ connect(9 B A)
+ connect(15 B A)
+ location(110140 51795)
+ param(R 95)
+ param(L 420)
+ param(W 2.21052631579)
+ param(A 1080)
+ param(P 1296)
+ terminal(A 2)
+ terminal(B 1)
+ )
+
+ )
+)
+
+# Reference netlist
+reference(
+
+ # Device class section
+ class(RPP1 RES)
+
+ # Circuit section
+ # Circuits are the hierarchical building blocks of the netlist.
+ circuit(RES2
+
+ # Nets
+ net(1 name(GND))
+ net(2 name(VDD))
+
+ # Outgoing pins and their connections to nets
+ pin(1 name(GND))
+ pin(2 name(VDD))
+
+ # Devices and their connections
+ device(1 RPP1
+ name(I0.I106.R0)
+ param(R 59475.7)
+ param(L 420)
+ param(W 2.21052631579)
+ param(A 0)
+ param(P 0)
+ terminal(A 2)
+ terminal(B 1)
+ )
+
+ )
+)
+
+# Cross reference
+xref(
+ circuit(Res2 RES2 match
+ xref(
+ net(1 1 warning)
+ net(2 2 warning)
+ pin(() 0 match)
+ pin(() 1 match)
+ device(1 1 match)
+ )
+ )
+)
diff --git a/testdata/lvs/res_combine2.cir.1 b/testdata/lvs/res_combine2.cir.1
index 650763fba..e440a8095 100644
--- a/testdata/lvs/res_combine2.cir.1
+++ b/testdata/lvs/res_combine2.cir.1
@@ -3,5 +3,5 @@
* cell Res2
.SUBCKT Res2
* device instance $1 r0 *1 110.14,51.795 RPP1
-R$1 1 2 95 RPP1
+R$1 2 1 95 RPP1
.ENDS Res2
diff --git a/testdata/lvs/res_combine2.lvsdb.6 b/testdata/lvs/res_combine2.lvsdb.6
new file mode 100644
index 000000000..89c533976
--- /dev/null
+++ b/testdata/lvs/res_combine2.lvsdb.6
@@ -0,0 +1,193 @@
+#%lvsdb-klayout
+
+# Layout
+layout(
+ top(Res2)
+ unit(0.001)
+
+ # Layer section
+ # This section lists the mask layers (drawing or derived) and their connections.
+
+ # Mask layers
+ layer(l4 '15/0')
+ layer(l3 '16/0')
+ layer(l1)
+
+ # Mask layer connectivity
+ connect(l4 l4 l3 l1)
+ connect(l3 l4 l3)
+ connect(l1 l4 l1)
+
+ # Device class section
+ class(RPP1 RES)
+
+ # Device abstracts section
+ # Device abstracts list the pin shapes of the devices.
+ device(D$RPP1 RPP1
+ terminal(A
+ rect(l1 (10540 0) (540 2000))
+ )
+ terminal(B
+ rect(l1 (0 0) (540 2000))
+ )
+ )
+
+ # Circuit section
+ # Circuits are the hierarchical building blocks of the netlist.
+ circuit(Res2
+
+ # Circuit boundary
+ rect((8285 720) (117975 57350))
+
+ # Nets with their geometries
+ net(1
+ rect(l4 (120580 32490) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -750) (220 220))
+ rect(l4 (-22355 1390) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -750) (220 220))
+ rect(l4 (-21520 1755) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -750) (220 220))
+ rect(l3 (0 -4795) (1065 5850))
+ rect(l3 (-5155 -6930) (52985 1475))
+ rect(l3 (-27585 -395) (1065 5850))
+ rect(l3 (20990 -5850) (1065 5850))
+ rect(l3 (-1275 -1760) (340 1920))
+ rect(l3 (-22475 -1890) (340 1920))
+ rect(l3 (-21640 -1525) (340 1920))
+ rect(l1 (42935 -2385) (540 2000))
+ rect(l1 (-22675 -1970) (540 2000))
+ rect(l1 (-21840 -1605) (540 2000))
+ )
+ net(2
+ rect(l4 (19795 5575) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -750) (220 220))
+ rect(l3 (-195 -995) (2395 2500))
+ rect(l3 (-2480 -1785) (340 1920))
+ rect(l1 (-500 -1960) (540 2000))
+ )
+
+ # Devices and their connections
+ device(1 D$RPP1
+ device(D$RPP1 location(-65 -8175))
+ device(D$RPP1 location(-205 -12595))
+ device(D$RPP1 location(-320 -20985))
+ device(D$RPP1 location(-225 -16825))
+ device(D$RPP1 location(30 -3970))
+ device(D$RPP1 location(-22135 30))
+ device(D$RPP1 location(-22200 -8145))
+ device(D$RPP1 location(-22340 -12565))
+ device(D$RPP1 location(-22455 -20955))
+ device(D$RPP1 location(-22360 -16795))
+ device(D$RPP1 location(-22105 -3940))
+ device(D$RPP1 location(-43435 425))
+ device(D$RPP1 location(-43500 -7750))
+ device(D$RPP1 location(-43640 -12170))
+ device(D$RPP1 location(-43755 -20560))
+ device(D$RPP1 location(-43660 -16400))
+ device(D$RPP1 location(-43405 -3545))
+ device(D$RPP1 location(-100465 855))
+ device(D$RPP1 location(-81950 425))
+ device(D$RPP1 location(-100530 -7320))
+ device(D$RPP1 location(-100670 -11740))
+ device(D$RPP1 location(-100785 -20130))
+ device(D$RPP1 location(-100785 -26915))
+ device(D$RPP1 location(-100690 -15970))
+ device(D$RPP1 location(-100435 -3115))
+ device(D$RPP1 location(-82015 -7750))
+ device(D$RPP1 location(-82155 -12170))
+ device(D$RPP1 location(-82175 -16400))
+ device(D$RPP1 location(-63435 640))
+ device(D$RPP1 location(-63500 -7535))
+ device(D$RPP1 location(-63640 -11955))
+ device(D$RPP1 location(-63755 -20345))
+ device(D$RPP1 location(-63865 -26810))
+ device(D$RPP1 location(-63660 -16185))
+ device(D$RPP1 location(-63405 -3330))
+ device(D$RPP1 location(-63930 -34985))
+ device(D$RPP1 location(-64070 -39405))
+ device(D$RPP1 location(-64090 -43635))
+ device(D$RPP1 location(-82380 -26810))
+ device(D$RPP1 location(-82270 -20560))
+ device(D$RPP1 location(-82445 -34985))
+ device(D$RPP1 location(-82585 -39405))
+ device(D$RPP1 location(-82700 -47795))
+ device(D$RPP1 location(-64185 -47795))
+ device(D$RPP1 location(-82605 -43635))
+ device(D$RPP1 location(-82350 -30780))
+ device(D$RPP1 location(-63835 -30780))
+ device(D$RPP1 location(-81920 -3545))
+ device(D$RPP1 location(-100850 -35090))
+ device(D$RPP1 location(-100990 -39510))
+ device(D$RPP1 location(-101105 -47900))
+ device(D$RPP1 location(-101010 -43740))
+ device(D$RPP1 location(-100755 -30885))
+ connect(51 A A)
+ connect(3 B A)
+ connect(9 B A)
+ connect(15 B A)
+ location(110140 51795)
+ param(R 95)
+ param(L 420)
+ param(W 2.21052631579)
+ param(A 1080)
+ param(P 1296)
+ terminal(A 2)
+ terminal(B 1)
+ )
+
+ )
+)
+
+# Reference netlist
+reference(
+
+ # Device class section
+ class(RPP1 RES)
+
+ # Circuit section
+ # Circuits are the hierarchical building blocks of the netlist.
+ circuit(RES2
+
+ # Nets
+ net(1 name(GND))
+ net(2 name(VDD))
+
+ # Outgoing pins and their connections to nets
+ pin(1 name(GND))
+ pin(2 name(VDD))
+
+ # Devices and their connections
+ device(1 RPP1
+ name(I0.I106.R0)
+ param(R 59475.7)
+ param(L 420)
+ param(W 2.21052631579)
+ param(A 0)
+ param(P 0)
+ terminal(A 2)
+ terminal(B 1)
+ )
+
+ )
+)
+
+# Cross reference
+xref(
+ circuit(Res2 RES2 match
+ xref(
+ net(1 1 warning)
+ net(2 2 warning)
+ pin(() 0 match)
+ pin(() 1 match)
+ device(1 1 match)
+ )
+ )
+)
diff --git a/testdata/lvs/res_combine3.cir.3 b/testdata/lvs/res_combine3.cir.3
new file mode 100644
index 000000000..e440a8095
--- /dev/null
+++ b/testdata/lvs/res_combine3.cir.3
@@ -0,0 +1,7 @@
+* Extracted by KLayout
+
+* cell Res2
+.SUBCKT Res2
+* device instance $1 r0 *1 110.14,51.795 RPP1
+R$1 2 1 95 RPP1
+.ENDS Res2
diff --git a/testdata/lvs/res_combine3.lvsdb.6 b/testdata/lvs/res_combine3.lvsdb.6
new file mode 100644
index 000000000..1bb644fbe
--- /dev/null
+++ b/testdata/lvs/res_combine3.lvsdb.6
@@ -0,0 +1,196 @@
+#%lvsdb-klayout
+
+# Layout
+layout(
+ top(Res2)
+ unit(0.001)
+
+ # Layer section
+ # This section lists the mask layers (drawing or derived) and their connections.
+
+ # Mask layers
+ layer(l4 '15/0')
+ layer(l3 '16/0')
+ layer(l1)
+
+ # Mask layer connectivity
+ connect(l4 l4 l3 l1)
+ connect(l3 l4 l3)
+ connect(l1 l4 l1)
+
+ # Device class section
+ class(RPP1 RES)
+
+ # Device abstracts section
+ # Device abstracts list the pin shapes of the devices.
+ device(D$RPP1 RPP1
+ terminal(A
+ rect(l1 (10540 0) (540 2000))
+ )
+ terminal(B
+ rect(l1 (0 0) (540 2000))
+ )
+ )
+
+ # Circuit section
+ # Circuits are the hierarchical building blocks of the netlist.
+ circuit(Res2
+
+ # Circuit boundary
+ rect((8285 720) (117975 57350))
+
+ # Nets with their geometries
+ net(1
+ rect(l4 (120580 32490) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -750) (220 220))
+ rect(l4 (-22355 1390) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -750) (220 220))
+ rect(l4 (-21520 1755) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -750) (220 220))
+ rect(l3 (0 -4795) (1065 5850))
+ rect(l3 (-5155 -6930) (52985 1475))
+ rect(l3 (-27585 -395) (1065 5850))
+ rect(l3 (20990 -5850) (1065 5850))
+ rect(l3 (-1275 -1760) (340 1920))
+ rect(l3 (-22475 -1890) (340 1920))
+ rect(l3 (-21640 -1525) (340 1920))
+ rect(l1 (42935 -2385) (540 2000))
+ rect(l1 (-22675 -1970) (540 2000))
+ rect(l1 (-21840 -1605) (540 2000))
+ )
+ net(2
+ rect(l4 (19795 5575) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -745) (220 220))
+ rect(l4 (-220 -750) (220 220))
+ rect(l3 (-195 -995) (2395 2500))
+ rect(l3 (-2480 -1785) (340 1920))
+ rect(l1 (-500 -1960) (540 2000))
+ )
+
+ # Devices and their connections
+ device(1 D$RPP1
+ device(D$RPP1 location(-65 -8175))
+ device(D$RPP1 location(-205 -12595))
+ device(D$RPP1 location(-320 -20985))
+ device(D$RPP1 location(-225 -16825))
+ device(D$RPP1 location(30 -3970))
+ device(D$RPP1 location(-22135 30))
+ device(D$RPP1 location(-22200 -8145))
+ device(D$RPP1 location(-22340 -12565))
+ device(D$RPP1 location(-22455 -20955))
+ device(D$RPP1 location(-22360 -16795))
+ device(D$RPP1 location(-22105 -3940))
+ device(D$RPP1 location(-43435 425))
+ device(D$RPP1 location(-43500 -7750))
+ device(D$RPP1 location(-43640 -12170))
+ device(D$RPP1 location(-43755 -20560))
+ device(D$RPP1 location(-43660 -16400))
+ device(D$RPP1 location(-43405 -3545))
+ device(D$RPP1 location(-100465 855))
+ device(D$RPP1 location(-81950 425))
+ device(D$RPP1 location(-100530 -7320))
+ device(D$RPP1 location(-100670 -11740))
+ device(D$RPP1 location(-100785 -20130))
+ device(D$RPP1 location(-100785 -26915))
+ device(D$RPP1 location(-100690 -15970))
+ device(D$RPP1 location(-100435 -3115))
+ device(D$RPP1 location(-82015 -7750))
+ device(D$RPP1 location(-82155 -12170))
+ device(D$RPP1 location(-82175 -16400))
+ device(D$RPP1 location(-63435 640))
+ device(D$RPP1 location(-63500 -7535))
+ device(D$RPP1 location(-63640 -11955))
+ device(D$RPP1 location(-63755 -20345))
+ device(D$RPP1 location(-63865 -26810))
+ device(D$RPP1 location(-63660 -16185))
+ device(D$RPP1 location(-63405 -3330))
+ device(D$RPP1 location(-63930 -34985))
+ device(D$RPP1 location(-64070 -39405))
+ device(D$RPP1 location(-64090 -43635))
+ device(D$RPP1 location(-82380 -26810))
+ device(D$RPP1 location(-82270 -20560))
+ device(D$RPP1 location(-82445 -34985))
+ device(D$RPP1 location(-82585 -39405))
+ device(D$RPP1 location(-82700 -47795))
+ device(D$RPP1 location(-64185 -47795))
+ device(D$RPP1 location(-82605 -43635))
+ device(D$RPP1 location(-82350 -30780))
+ device(D$RPP1 location(-63835 -30780))
+ device(D$RPP1 location(-81920 -3545))
+ device(D$RPP1 location(-100850 -35090))
+ device(D$RPP1 location(-100990 -39510))
+ device(D$RPP1 location(-101105 -47900))
+ device(D$RPP1 location(-101010 -43740))
+ device(D$RPP1 location(-100755 -30885))
+ connect(51 A A)
+ connect(3 B A)
+ connect(9 B A)
+ connect(15 B A)
+ location(110140 51795)
+ param(R 95)
+ param(L 420)
+ param(W 2.21052631579)
+ param(A 1080)
+ param(P 1296)
+ terminal(A 2)
+ terminal(B 1)
+ )
+
+ )
+)
+
+# Reference netlist
+reference(
+
+ # Device class section
+ class(RPP1 RES)
+
+ # Circuit section
+ # Circuits are the hierarchical building blocks of the netlist.
+ circuit(RES2
+
+ # Nets
+ net(1 name(GND))
+ net(2 name(VDD))
+
+ # Outgoing pins and their connections to nets
+ pin(1 name(GND))
+ pin(2 name(VDD))
+
+ # Devices and their connections
+ device(1 RPP1
+ name(I0.I106.R0)
+ param(R 59475.7)
+ param(L 420)
+ param(W 2.21052631579)
+ param(A 0)
+ param(P 0)
+ terminal(A 2)
+ terminal(B 1)
+ )
+
+ )
+)
+
+# Cross reference
+xref(
+ circuit(Res2 RES2 nomatch
+ xref(
+ net(() 1 mismatch)
+ net(() 2 mismatch)
+ net(1 () mismatch)
+ net(2 () mismatch)
+ pin(() 0 match)
+ pin(() 1 match)
+ device(() 1 mismatch)
+ device(1 () mismatch)
+ )
+ )
+)
From 23b74339ff1ee789fb0f793ead308c65aad1837d Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Sun, 2 Jun 2024 23:09:40 +0200
Subject: [PATCH 12/12] Fixed test data for Linux
---
testdata/lvs/res_combine2.cir.1 | 2 +-
testdata/lvs/res_combine2.cir.3 | 7 +++++++
2 files changed, 8 insertions(+), 1 deletion(-)
create mode 100644 testdata/lvs/res_combine2.cir.3
diff --git a/testdata/lvs/res_combine2.cir.1 b/testdata/lvs/res_combine2.cir.1
index e440a8095..650763fba 100644
--- a/testdata/lvs/res_combine2.cir.1
+++ b/testdata/lvs/res_combine2.cir.1
@@ -3,5 +3,5 @@
* cell Res2
.SUBCKT Res2
* device instance $1 r0 *1 110.14,51.795 RPP1
-R$1 2 1 95 RPP1
+R$1 1 2 95 RPP1
.ENDS Res2
diff --git a/testdata/lvs/res_combine2.cir.3 b/testdata/lvs/res_combine2.cir.3
new file mode 100644
index 000000000..e440a8095
--- /dev/null
+++ b/testdata/lvs/res_combine2.cir.3
@@ -0,0 +1,7 @@
+* Extracted by KLayout
+
+* cell Res2
+.SUBCKT Res2
+* device instance $1 r0 *1 110.14,51.795 RPP1
+R$1 2 1 95 RPP1
+.ENDS Res2