Merge pull request #2049 from KLayout/devel

Devel
This commit is contained in:
Matthias Köfferlein 2025-05-29 09:43:23 +02:00 committed by GitHub
commit 45fdaf0a6d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
109 changed files with 914 additions and 324 deletions

View File

@ -712,6 +712,28 @@ VariantsCollectorBase::create_var_instances_tl_invariant (db::Cell &in_cell, std
// ------------------------------------------------------------------------------------------
TransformationReducer *
make_reducer (ReducerType type)
{
switch (type) {
case Orientation:
return new OrientationReducer ();
case Orthogonal:
return new OrthogonalTransformationReducer ();
case Magnification:
return new MagnificationReducer ();
case XYAnisotropyAndMagnification:
return new XYAnisotropyAndMagnificationReducer ();
case MagnificationAndOrientation:
return new MagnificationAndOrientationReducer ();
default:
return 0;
}
}
// ------------------------------------------------------------------------------------------
VariantStatistics::VariantStatistics ()
: mp_red ()
{

View File

@ -166,6 +166,51 @@ private:
int64_t m_grid;
};
/**
* @brief An enum describing a reducer type
*
* This enum is used to create a generic reducer (parameterless) from the code.
*/
enum ReducerType
{
/**
* @brief No specific reducer
*/
NoReducer = 0,
/**
* @brief Rotation/mirror variants
*/
Orientation = 1,
/**
* @brief Orthogonal transformations (rotations of multiple of 90 degree) variants
*/
Orthogonal = 2,
/**
* @brief Scaling variants
*/
Magnification = 3,
/**
* @brief Scaling and x/y assymmetry variants (i.e. anisotropic size)
*/
XYAnisotropyAndMagnification = 4,
/**
* @brief Scaling and orientation variants
*/
MagnificationAndOrientation = 5
};
/**
* @brief Creates a TransformationReducer from the type enum
*
* This function returns 0 if the type is NoReducer or invalid.
*/
DB_PUBLIC TransformationReducer *make_reducer (ReducerType type);
/**
* @brief A class computing variants for cells according to a given criterion
*

View File

@ -302,7 +302,7 @@ CompoundTransformationReducer::is_translation_invariant () const
// ---------------------------------------------------------------------------------------------
CompoundRegionMultiInputOperationNode::CompoundRegionMultiInputOperationNode (const std::vector<CompoundRegionOperationNode *> &children)
CompoundRegionMultiInputOperationNode::CompoundRegionMultiInputOperationNode (const std::vector<CompoundRegionOperationNode *> &children, bool no_init)
{
for (std::vector<CompoundRegionOperationNode *>::const_iterator c = children.begin (); c != children.end (); ++c) {
(*c)->keep ();
@ -362,6 +362,11 @@ CompoundRegionMultiInputOperationNode::init ()
for (tl::shared_collection<CompoundRegionOperationNode>::iterator i = m_children.begin (); i != m_children.end (); ++i) {
m_vars.add (i->vars ());
}
// add the local variant reducer
if (local_vars ()) {
m_vars.add (local_vars ());
}
}
CompoundRegionMultiInputOperationNode::~CompoundRegionMultiInputOperationNode ()

View File

@ -453,7 +453,7 @@ class DB_PUBLIC CompoundRegionMultiInputOperationNode
: public CompoundRegionOperationNode
{
public:
CompoundRegionMultiInputOperationNode (const std::vector<CompoundRegionOperationNode *> &children);
CompoundRegionMultiInputOperationNode (const std::vector<CompoundRegionOperationNode *> &children, bool no_init = false);
CompoundRegionMultiInputOperationNode ();
CompoundRegionMultiInputOperationNode (CompoundRegionOperationNode *child);
CompoundRegionMultiInputOperationNode (CompoundRegionOperationNode *a, CompoundRegionOperationNode *b);
@ -521,14 +521,16 @@ protected:
CompoundRegionOperationNode *child (unsigned int index);
const CompoundRegionOperationNode *child (unsigned int index) const;
virtual const TransformationReducer *local_vars () const { return 0; }
void init ();
private:
tl::shared_collection<CompoundRegionOperationNode> m_children;
// maps child#,layer# to layer# of child:
std::map<std::pair<unsigned int, unsigned int>, unsigned int> m_map_layer_to_child;
std::vector<db::Region *> m_inputs;
CompoundTransformationReducer m_vars;
void init ();
};

View File

@ -692,6 +692,8 @@ void std_writer_impl<Keys>::write (TokenizedOutput &stream, const db::Net &net,
*outp << tl::to_string (id);
if (! net.name ().empty ()) {
TokenizedOutput (*outp, Keys::name_key, true) << tl::to_word_or_quoted_string (net.name ());
} else if (net.id () != id) {
TokenizedOutput (*outp, Keys::name_key, true) << tl::to_word_or_quoted_string (net.expanded_name ());
}
*outp << endl;

View File

@ -111,6 +111,24 @@ NetlistCrossReference::other_net_for (const db::Net *net) const
}
}
const NetlistCrossReference::PerNetData *
NetlistCrossReference::per_net_data_for_net (const db::Net *net) const
{
const db::Net *other_net = other_net_for (net);
std::map<std::pair<const db::Net *, const db::Net *>, PerNetData>::iterator i = m_per_net_data.find (std::make_pair (net, other_net));
if (i == m_per_net_data.end ()) {
i = m_per_net_data.find (std::make_pair (other_net, net));
}
if (i == m_per_net_data.end ()) {
static const NetlistCrossReference::PerNetData empty_net_data;
return &empty_net_data;
} else {
return &i->second;
}
}
const NetlistCrossReference::PerNetData *
NetlistCrossReference::per_net_data_for (const std::pair<const db::Net *, const db::Net *> &nets) const
{

View File

@ -280,6 +280,7 @@ public:
const db::SubCircuit *other_subcircuit_for (const db::SubCircuit *subcircuit) const;
const db::Circuit *other_circuit_for (const db::Circuit *circuit) const;
const db::Net *other_net_for (const db::Net *net) const;
const PerNetData *per_net_data_for_net (const db::Net *net) const;
const PerNetData *per_net_data_for (const std::pair<const db::Net *, const db::Net *> &nets) const;
const db::Netlist *netlist_a () const

View File

@ -28,38 +28,42 @@ namespace db
{
PolygonNeighborhoodVisitor::PolygonNeighborhoodVisitor ()
: m_result_type (db::CompoundRegionOperationNode::ResultType::Edges)
: m_result_type (db::CompoundRegionOperationNode::ResultType::Edges), m_variant_type (db::NoReducer)
{
disconnect_outputs ();
}
void
PolygonNeighborhoodVisitor::connect_output (Layout * /*layout*/, std::unordered_set<db::PolygonWithProperties> *polygons) const
PolygonNeighborhoodVisitor::connect_output (Layout * /*layout*/, std::unordered_set<db::PolygonWithProperties> *polygons, const db::ICplxTrans &trans) const
{
disconnect_outputs ();
mp_polygons = polygons;
m_trans = trans;
}
void
PolygonNeighborhoodVisitor::connect_output (db::Layout *layout, std::unordered_set<db::PolygonRefWithProperties> *polygons) const
PolygonNeighborhoodVisitor::connect_output (db::Layout *layout, std::unordered_set<db::PolygonRefWithProperties> *polygons, const db::ICplxTrans &trans) const
{
disconnect_outputs ();
mp_layout = layout;
mp_polygon_refs = polygons;
m_trans = trans;
}
void
PolygonNeighborhoodVisitor::connect_output (db::Layout * /*layout*/, std::unordered_set<db::EdgeWithProperties> *edges) const
PolygonNeighborhoodVisitor::connect_output (db::Layout * /*layout*/, std::unordered_set<db::EdgeWithProperties> *edges, const db::ICplxTrans &trans) const
{
disconnect_outputs ();
mp_edges = edges;
m_trans = trans;
}
void
PolygonNeighborhoodVisitor::connect_output (Layout * /*layout*/, std::unordered_set<db::EdgePairWithProperties> *edge_pairs) const
PolygonNeighborhoodVisitor::connect_output (Layout * /*layout*/, std::unordered_set<db::EdgePairWithProperties> *edge_pairs, const db::ICplxTrans &trans) const
{
disconnect_outputs ();
mp_edge_pairs = edge_pairs;
m_trans = trans;
}
void
@ -76,10 +80,10 @@ void
PolygonNeighborhoodVisitor::output_polygon (const db::PolygonWithProperties &poly)
{
if (mp_polygons) {
mp_polygons->insert (poly);
mp_polygons->insert (poly.transformed (m_trans));
} else if (mp_polygon_refs) {
tl_assert (mp_layout != 0);
mp_polygon_refs->insert (db::PolygonRefWithProperties (db::PolygonRef (poly, mp_layout->shape_repository ()), poly.properties_id ()));
mp_polygon_refs->insert (db::PolygonRefWithProperties (db::PolygonRef (poly.transformed (m_trans), mp_layout->shape_repository ()), poly.properties_id ()));
} else {
throw tl::Exception (tl::to_string (tr ("PolygonNeighborhoodVisitor is not configured for edge output (use 'result_type=Edges')")));
}
@ -91,7 +95,7 @@ PolygonNeighborhoodVisitor::output_edge (const db::EdgeWithProperties &edge)
if (mp_edges == 0) {
throw tl::Exception (tl::to_string (tr ("PolygonNeighborhoodVisitor is not configured for edge output (use 'result_type=Edges')")));
}
mp_edges->insert (edge);
mp_edges->insert (edge.transformed (m_trans));
}
void
@ -100,16 +104,22 @@ PolygonNeighborhoodVisitor::output_edge_pair (const db::EdgePairWithProperties &
if (mp_edge_pairs == 0) {
throw tl::Exception (tl::to_string (tr ("PolygonNeighborhoodVisitor is not configured for edge pair output (use 'result_type=EdgePairs')")));
}
mp_edge_pairs->insert (edge_pair);
mp_edge_pairs->insert (edge_pair.transformed (m_trans));
}
// --------------------------------------------------------------------------------------------------
PolygonNeighborhoodCompoundOperationNode::PolygonNeighborhoodCompoundOperationNode (const std::vector<CompoundRegionOperationNode *> &children, PolygonNeighborhoodVisitor *visitor, db::Coord dist)
: CompoundRegionMultiInputOperationNode (children), m_dist (dist), mp_visitor (visitor)
: CompoundRegionMultiInputOperationNode (children, true /*no implicit init()*/),
m_dist (dist), mp_visitor (visitor)
{
tl_assert (visitor != 0);
visitor->keep ();
m_vars.reset (db::make_reducer (visitor->variant_type ()));
// must be called after local_vars() is available
init ();
}
db::Coord
@ -170,12 +180,19 @@ PolygonNeighborhoodCompoundOperationNode::compute_local_impl (CompoundRegionOper
tl_assert (interactions.num_subjects () == 1);
tl_assert (! results.empty ());
db::ICplxTrans var_trans, var_trans_inv;
if (proc->vars ()) {
var_trans_inv = proc->vars ()->single_variant_transformation (cell->cell_index ());
var_trans = var_trans_inv.inverted ();
}
try {
mp_visitor->connect_output (layout, &results.front ());
mp_visitor->connect_output (layout, &results.front (), var_trans_inv);
const T &pr = interactions.begin_subjects ()->second;
db::PolygonWithProperties subject (pr.instantiate (), pr.properties_id ());
subject.transform (var_trans);
PolygonNeighborhoodVisitor::neighbors_type neighbors;
@ -191,6 +208,7 @@ PolygonNeighborhoodCompoundOperationNode::compute_local_impl (CompoundRegionOper
for (auto p = others.front ().begin (); p != others.front ().end (); ++p) {
n.push_back (db::PolygonWithProperties (p->instantiate (), p->properties_id ()));
n.back ().transform (var_trans);
}
}

View File

@ -58,22 +58,22 @@ public:
/**
* @brief Configure the polygon output
*/
void connect_output (db::Layout * /*layout*/, std::unordered_set<db::PolygonWithProperties> *polygons) const;
void connect_output (db::Layout * /*layout*/, std::unordered_set<db::PolygonWithProperties> *polygons, const db::ICplxTrans &trans) const;
/**
* @brief Configure the polygon ref output
*/
void connect_output (db::Layout *layout, std::unordered_set<db::PolygonRefWithProperties> *polygons) const;
void connect_output (db::Layout *layout, std::unordered_set<db::PolygonRefWithProperties> *polygons, const db::ICplxTrans &trans) const;
/**
* @brief Configure the edge output
*/
void connect_output (db::Layout * /*layout*/, std::unordered_set<db::EdgeWithProperties> *edges) const;
void connect_output (db::Layout * /*layout*/, std::unordered_set<db::EdgeWithProperties> *edges, const db::ICplxTrans &trans) const;
/**
* @brief Configure the edge pair output
*/
void connect_output (db::Layout * /*layout*/, std::unordered_set<db::EdgePairWithProperties> *edge_pairs) const;
void connect_output (db::Layout * /*layout*/, std::unordered_set<db::EdgePairWithProperties> *edge_pairs, const db::ICplxTrans &trans) const;
/**
* @brief Disconnects output
@ -102,6 +102,22 @@ public:
return m_result_type;
}
/**
* @brief Sets the variant type
*/
void set_variant_type (db::ReducerType variant_type)
{
m_variant_type = variant_type;
}
/**
* @brief Gets the variant type
*/
db::ReducerType variant_type () const
{
return m_variant_type;
}
/**
* @brief Delivers a polygon
* This function is only permitted if the result type is Region.
@ -122,11 +138,13 @@ public:
private:
db::CompoundRegionOperationNode::ResultType m_result_type;
db::ReducerType m_variant_type;
mutable std::unordered_set<db::PolygonWithProperties> *mp_polygons;
mutable std::unordered_set<db::PolygonRefWithProperties> *mp_polygon_refs;
mutable std::unordered_set<db::EdgeWithProperties> *mp_edges;
mutable std::unordered_set<db::EdgePairWithProperties> *mp_edge_pairs;
mutable db::Layout *mp_layout;
mutable db::ICplxTrans m_trans;
};
/**
@ -148,6 +166,11 @@ public:
return false;
}
virtual const TransformationReducer *local_vars () const
{
return m_vars.get ();
}
protected:
virtual db::Coord computed_dist () const;
virtual std::string generated_description () const;
@ -162,6 +185,7 @@ protected:
private:
db::Coord m_dist;
tl::weak_ptr<PolygonNeighborhoodVisitor> mp_visitor;
std::unique_ptr<db::TransformationReducer> m_vars;
template <class T, class TR>
void compute_local_impl (CompoundRegionOperationCache * /*cache*/, db::Layout * /*layout*/, db::Cell * /*cell*/, const shape_interactions<T, T> & /*interactions*/, std::vector<std::unordered_set<TR> > & /*results*/, const db::LocalProcessorBase * /*proc*/) const;

View File

@ -22,6 +22,7 @@
#include "gsiDecl.h"
#include "gsiDeclDbMetaInfo.h"
#include "gsiEnums.h"
#include "gsiDeclDbHelpers.h"
#include "dbLayout.h"
@ -4655,5 +4656,39 @@ Class<db::DCellInstArray> decl_DCellInstArray ("db", "DCellInstArray",
"This class has been introduced in version 0.25."
);
gsi::Enum<db::ReducerType> decl_VariantType ("db", "VariantType",
gsi::enum_const ("NoVariants", db::NoReducer,
"@brief No variants needed."
) +
gsi::enum_const ("Orientation", db::Orientation,
"@brief Orientation variants needed.\n"
"For example, the edge orientation selection operation needs this variant type."
) +
gsi::enum_const ("Orthogonal", db::Orthogonal,
"@brief Orthogonal transformations (rotations by multiples of 90 degree) need variants.\n"
"For example, the diagonal edge selection operation needs this variant type."
) +
gsi::enum_const ("Magnification", db::Magnification,
"@brief Scaling variants needed.\n"
"For example, distance measurements or the isotropic sizing operations needs this variant type."
) +
gsi::enum_const ("XYAnisotropyAndMagnification", db::XYAnisotropyAndMagnification,
"@brief Scaling and anisotropy variants needed.\n"
"For example, the anisotropic sizing operation needs this variant type."
) +
gsi::enum_const ("MagnificationAndOrientation", db::MagnificationAndOrientation,
"@brief Scaling and orientation variants needed.\n"
"For example, the 'move' operation needs this variant type."
),
"@brief This class represents the cell variant type for various methods.\n"
"\n"
"Cell variants are needed in hierarchical applications, when operations are to be "
"performed on cell level, but the operations are not transformation invariant.\n"
"In that case, a variant type needs to be specified in order to make the algorithm "
"separate the cells by their absolute orientation or by their accumulated magnification.\n"
"\n"
"This enum has been introduced in version 0.30.2."
);
}

View File

@ -1118,6 +1118,14 @@ Class<db::LayoutToNetlist> decl_dbLayoutToNetlist ("db", "LayoutToNetlist",
"@brief Reads the extracted netlist from the file.\n"
"This method employs the native format of KLayout.\n"
) +
gsi::method ("clear_log_entries", &db::LayoutToNetlist::clear_log_entries,
"@brief Clears the log entries.\n"
"This method has been introduced in version 0.30.2"
) +
gsi::method ("add_log_entry", &db::LayoutToNetlist::log_entry, gsi::arg ("entry"),
"@brief Adds a log entry.\n"
"This method has been introduced in version 0.30.2"
) +
gsi::iterator ("each_log_entry|#each_error", &db::LayoutToNetlist::begin_log_entries, &db::LayoutToNetlist::end_log_entries,
"@brief Iterates over all log entries collected during device and netlist extraction.\n"
"This method has been introduced in version 0.28.13."

View File

@ -1488,7 +1488,7 @@ nets_non_const (const std::vector<const db::Net *> &nc)
}
static std::vector<const db::Net *>
nets_by_name_const (const db::Circuit *circuit, const std::string &name_pattern)
nets_by_name_const (const db::Circuit *circuit, const std::string &name_pattern, const tl::Variant &cs)
{
std::vector<const db::Net *> res;
if (! circuit) {
@ -1496,7 +1496,9 @@ nets_by_name_const (const db::Circuit *circuit, const std::string &name_pattern)
}
tl::GlobPattern glob (name_pattern);
if (circuit->netlist ()) {
if (! cs.is_nil ()) {
glob.set_case_sensitive (cs.to_bool ());
} else if (circuit->netlist ()) {
glob.set_case_sensitive (circuit->netlist ()->is_case_sensitive ());
}
for (db::Circuit::const_net_iterator n = circuit->begin_nets (); n != circuit->end_nets (); ++n) {
@ -1510,13 +1512,13 @@ nets_by_name_const (const db::Circuit *circuit, const std::string &name_pattern)
}
static std::vector<db::Net *>
nets_by_name (db::Circuit *circuit, const std::string &name_pattern)
nets_by_name (db::Circuit *circuit, const std::string &name_pattern, const tl::Variant &cs)
{
return nets_non_const (nets_by_name_const (circuit, name_pattern));
return nets_non_const (nets_by_name_const (circuit, name_pattern, cs));
}
static std::vector<const db::Net *>
nets_by_name_const_from_netlist (const db::Netlist *netlist, const std::string &name_pattern)
nets_by_name_const_from_netlist (const db::Netlist *netlist, const std::string &name_pattern, const tl::Variant &cs)
{
std::vector<const db::Net *> res;
if (! netlist) {
@ -1524,7 +1526,7 @@ nets_by_name_const_from_netlist (const db::Netlist *netlist, const std::string &
}
tl::GlobPattern glob (name_pattern);
glob.set_case_sensitive (netlist->is_case_sensitive ());
glob.set_case_sensitive (cs.is_nil () ? netlist->is_case_sensitive () : cs.to_bool ());
for (auto c = netlist->begin_circuits (); c != netlist->end_circuits (); ++c) {
bool is_top = (c->begin_parents () == c->end_parents ());
for (auto n = c->begin_nets (); n != c->end_nets (); ++n) {
@ -1540,9 +1542,9 @@ nets_by_name_const_from_netlist (const db::Netlist *netlist, const std::string &
}
static std::vector<db::Net *>
nets_by_name_from_netlist (db::Netlist *netlist, const std::string &name_pattern)
nets_by_name_from_netlist (db::Netlist *netlist, const std::string &name_pattern, const tl::Variant &cs)
{
return nets_non_const (nets_by_name_const_from_netlist (netlist, name_pattern));
return nets_non_const (nets_by_name_const_from_netlist (netlist, name_pattern, cs));
}
Class<db::Circuit> decl_dbCircuit (decl_dbNetlistObject, "db", "Circuit",
@ -1658,17 +1660,25 @@ Class<db::Circuit> decl_dbCircuit (decl_dbNetlistObject, "db", "Circuit",
"\n\n"
"This constness variant has been introduced in version 0.26.8"
) +
gsi::method_ext ("nets_by_name", &nets_by_name, gsi::arg ("name_pattern"),
gsi::method_ext ("nets_by_name", &nets_by_name, gsi::arg ("name_pattern"), gsi::arg ("case_sensitive", tl::Variant (), "default"),
"@brief Gets the net objects for a given name filter.\n"
"The name filter is a glob pattern. This method will return all \\Net objects matching the glob pattern.\n"
"The 'case_sensitive' argument will control whether the name is looked up in a case sensitive way or not. Note that "
"with case insensitive search on a netlist that is case sensitive, the same name may render more than one hit. By "
"default, case sensitivity is taken from the netlist.\n"
"\n"
"This method has been introduced in version 0.27.3.\n"
"The 'case_sensitive' argument has been added in version 0.30.2."
) +
gsi::method_ext ("nets_by_name", &nets_by_name_const, gsi::arg ("name_pattern"),
gsi::method_ext ("nets_by_name", &nets_by_name_const, gsi::arg ("name_pattern"), gsi::arg ("case_sensitive", tl::Variant (), "default"),
"@brief Gets the net objects for a given name filter (const version).\n"
"The name filter is a glob pattern. This method will return all \\Net objects matching the glob pattern.\n"
"\n\n"
"This constness variant has been introduced in version 0.27.3"
"The 'case_sensitive' argument will control whether the name is looked up in a case sensitive way or not. Note that "
"with case insensitive search on a netlist that is case sensitive, the same name may render more than one hit. By "
"default, case sensitivity is taken from the netlist.\n"
"\n"
"This constness variant has been introduced in version 0.27.3.\n"
"The 'case_sensitive' argument has been added in version 0.30.2."
) +
gsi::method ("pin_by_id", (db::Pin *(db::Circuit::*) (size_t)) &db::Circuit::pin_by_id, gsi::arg ("id"),
"@brief Gets the \\Pin object corresponding to a specific ID\n"
@ -1964,7 +1974,7 @@ static void blank_circuit_by_name (db::Netlist *nl, const std::string &name_patt
}
static std::vector<db::Circuit *>
circuits_by_name (db::Netlist *netlist, const std::string &name_pattern)
circuits_by_name (db::Netlist *netlist, const std::string &name_pattern, const tl::Variant &cs)
{
std::vector<db::Circuit *> res;
if (! netlist) {
@ -1972,7 +1982,7 @@ circuits_by_name (db::Netlist *netlist, const std::string &name_pattern)
}
tl::GlobPattern glob (name_pattern);
glob.set_case_sensitive (netlist->is_case_sensitive ());
glob.set_case_sensitive (cs.is_nil () ? netlist->is_case_sensitive () : cs.to_bool ());
for (db::Netlist::circuit_iterator c = netlist->begin_circuits (); c != netlist->end_circuits (); ++c) {
db::Circuit *circuit = c.operator-> ();
@ -1985,7 +1995,7 @@ circuits_by_name (db::Netlist *netlist, const std::string &name_pattern)
}
static std::vector<const db::Circuit *>
circuits_by_name_const (const db::Netlist *netlist, const std::string &name_pattern)
circuits_by_name_const (const db::Netlist *netlist, const std::string &name_pattern, const tl::Variant &cs)
{
std::vector<const db::Circuit *> res;
if (! netlist) {
@ -1993,7 +2003,7 @@ circuits_by_name_const (const db::Netlist *netlist, const std::string &name_patt
}
tl::GlobPattern glob (name_pattern);
glob.set_case_sensitive (netlist->is_case_sensitive ());
glob.set_case_sensitive (cs.is_nil () ? netlist->is_case_sensitive () : cs.to_bool ());
for (db::Netlist::const_circuit_iterator c = netlist->begin_circuits (); c != netlist->end_circuits (); ++c) {
const db::Circuit *circuit = c.operator-> ();
@ -2082,23 +2092,45 @@ Class<db::Netlist> decl_dbNetlist ("db", "Netlist",
"\n\n"
"This constness variant has been introduced in version 0.26.8."
) +
gsi::method_ext ("circuits_by_name", &circuits_by_name, gsi::arg ("name_pattern"),
gsi::method_ext ("circuits_by_name", &circuits_by_name, gsi::arg ("name_pattern"), gsi::arg ("case_sensitive", tl::Variant (), "default"),
"@brief Gets the circuit objects for a given name filter.\n"
"The name filter is a glob pattern. This method will return all \\Circuit objects matching the glob pattern.\n"
"The 'case_sensitive' argument will control whether the name is looked up in a case sensitive way or not. Note that "
"with case insensitive search on a netlist that is case sensitive, the same name may render more than one hit. By "
"default, case sensitivity is taken from the netlist.\n"
"\n"
"This method has been introduced in version 0.26.4.\n"
"The 'case_sensitive' argument has been added in version 0.30.2."
) +
gsi::method_ext ("circuits_by_name", &circuits_by_name_const, gsi::arg ("name_pattern"),
gsi::method_ext ("circuits_by_name", &circuits_by_name_const, gsi::arg ("name_pattern"), gsi::arg ("case_sensitive", tl::Variant (), "default"),
"@brief Gets the circuit objects for a given name filter (const version).\n"
"The name filter is a glob pattern. This method will return all \\Circuit objects matching the glob pattern.\n"
"\n\n"
"The 'case_sensitive' argument will control whether the name is looked up in a case sensitive way or not. Note that "
"with case insensitive search on a netlist that is case sensitive, the same name may render more than one hit. By "
"default, case sensitivity is taken from the netlist.\n"
"\n"
"This constness variant has been introduced in version 0.26.8."
"The 'case_sensitive' argument has been added in version 0.30.2."
) +
gsi::method_ext ("nets_by_name", &nets_by_name_from_netlist, gsi::arg ("name_pattern"),
gsi::method_ext ("nets_by_name", &nets_by_name_from_netlist, gsi::arg ("name_pattern"), gsi::arg ("case_sensitive", tl::Variant (), "default"),
"@brief Gets the net objects for a given name filter.\n"
"The name filter is a glob pattern. This method will return all \\Net objects matching the glob pattern.\n"
"The 'case_sensitive' argument will control whether the name is looked up in a case sensitive way or not. Note that "
"with case insensitive search on a netlist that is case sensitive, the same name may render more than one hit. By "
"default, case sensitivity is taken from the netlist.\n"
"\n"
"This method has been introduced in version 0.28.4.\n"
"The 'case_sensitive' argument has been added in version 0.30.2."
) +
gsi::method_ext ("nets_by_name", &nets_by_name_const_from_netlist, gsi::arg ("name_pattern"), gsi::arg ("case_sensitive", tl::Variant (), "default"),
"@brief Gets the net objects for a given name filter (const version).\n"
"The name filter is a glob pattern. This method will return all \\Net objects matching the glob pattern.\n"
"The 'case_sensitive' argument will control whether the name is looked up in a case sensitive way or not. Note that "
"with case insensitive search on a netlist that is case sensitive, the same name may render more than one hit. By "
"default, case sensitivity is taken from the netlist.\n"
"\n"
"This constness variant has been introduced in version 0.28.4."
"The 'case_sensitive' argument has been added in version 0.30.2."
) +
gsi::method ("top_circuit", static_cast<db::Circuit *(db::Netlist::*) ()> (&db::Netlist::top_circuit),
"@brief Gets the top circuit.\n"
@ -2126,12 +2158,6 @@ Class<db::Netlist> decl_dbNetlist ("db", "Netlist",
"\n"
"This convenience method has been added in version 0.29.5."
) +
gsi::method_ext ("nets_by_name", &nets_by_name_const_from_netlist, gsi::arg ("name_pattern"),
"@brief Gets the net objects for a given name filter (const version).\n"
"The name filter is a glob pattern. This method will return all \\Net objects matching the glob pattern.\n"
"\n\n"
"This constness variant has been introduced in version 0.28.4."
) +
gsi::iterator ("each_circuit_top_down", (db::Netlist::top_down_circuit_iterator (db::Netlist::*) ()) &db::Netlist::begin_top_down, (db::Netlist::top_down_circuit_iterator (db::Netlist::*) ()) &db::Netlist::end_top_down,
"@brief Iterates over the circuits top-down\n"
"Iterating top-down means the parent circuits come before the child circuits. "

View File

@ -287,6 +287,19 @@ static pair_data_iterator<db::NetlistCrossReference::NetPairData, db::NetlistCro
}
}
static pair_data_iterator<db::NetlistCrossReference::NetPairData, db::NetlistCrossReference::PerCircuitData::net_pairs_const_iterator> each_net_pair1 (db::NetlistCrossReference *xref, const db::Circuit *circuit)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
typedef pair_data_iterator<db::NetlistCrossReference::NetPairData, db::NetlistCrossReference::PerCircuitData::net_pairs_const_iterator> iter_type;
const db::NetlistCrossReference::PerCircuitData *data = xref->per_circuit_data_for (std::make_pair (circuit, circuit));
if (! data) {
return iter_type ();
} else {
return iter_type (xref, data->nets.begin (), data->nets.end ());
}
}
static pair_data_iterator<db::NetlistCrossReference::DevicePairData, db::NetlistCrossReference::PerCircuitData::device_pairs_const_iterator> each_device_pair (db::NetlistCrossReference *xref, const CircuitPairData &circuit_pair)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
@ -300,6 +313,19 @@ static pair_data_iterator<db::NetlistCrossReference::DevicePairData, db::Netlist
}
}
static pair_data_iterator<db::NetlistCrossReference::DevicePairData, db::NetlistCrossReference::PerCircuitData::device_pairs_const_iterator> each_device_pair1 (db::NetlistCrossReference *xref, const db::Circuit *circuit)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
typedef pair_data_iterator<db::NetlistCrossReference::DevicePairData, db::NetlistCrossReference::PerCircuitData::device_pairs_const_iterator> iter_type;
const db::NetlistCrossReference::PerCircuitData *data = xref->per_circuit_data_for (std::make_pair (circuit, circuit));
if (! data) {
return iter_type ();
} else {
return iter_type (xref, data->devices.begin (), data->devices.end ());
}
}
static pair_data_iterator<db::NetlistCrossReference::PinPairData, db::NetlistCrossReference::PerCircuitData::pin_pairs_const_iterator> each_pin_pair (db::NetlistCrossReference *xref, const CircuitPairData &circuit_pair)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
@ -313,6 +339,19 @@ static pair_data_iterator<db::NetlistCrossReference::PinPairData, db::NetlistCro
}
}
static pair_data_iterator<db::NetlistCrossReference::PinPairData, db::NetlistCrossReference::PerCircuitData::pin_pairs_const_iterator> each_pin_pair1 (db::NetlistCrossReference *xref, const db::Circuit *circuit)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
typedef pair_data_iterator<db::NetlistCrossReference::PinPairData, db::NetlistCrossReference::PerCircuitData::pin_pairs_const_iterator> iter_type;
const db::NetlistCrossReference::PerCircuitData *data = xref->per_circuit_data_for (std::make_pair (circuit, circuit));
if (! data) {
return iter_type ();
} else {
return iter_type (xref, data->pins.begin (), data->pins.end ());
}
}
static pair_data_iterator<db::NetlistCrossReference::SubCircuitPairData, db::NetlistCrossReference::PerCircuitData::subcircuit_pairs_const_iterator> each_subcircuit_pair (db::NetlistCrossReference *xref, const CircuitPairData &circuit_pair)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
@ -326,6 +365,19 @@ static pair_data_iterator<db::NetlistCrossReference::SubCircuitPairData, db::Net
}
}
static pair_data_iterator<db::NetlistCrossReference::SubCircuitPairData, db::NetlistCrossReference::PerCircuitData::subcircuit_pairs_const_iterator> each_subcircuit_pair1 (db::NetlistCrossReference *xref, const db::Circuit *circuit)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
typedef pair_data_iterator<db::NetlistCrossReference::SubCircuitPairData, db::NetlistCrossReference::PerCircuitData::subcircuit_pairs_const_iterator> iter_type;
const db::NetlistCrossReference::PerCircuitData *data = xref->per_circuit_data_for (std::make_pair (circuit, circuit));
if (! data) {
return iter_type ();
} else {
return iter_type (xref, data->subcircuits.begin (), data->subcircuits.end ());
}
}
static pair_data_iterator<std::pair<const db::NetTerminalRef *, const db::NetTerminalRef *>, db::NetlistCrossReference::PerNetData::terminal_pairs_const_iterator> each_net_terminal_pair (db::NetlistCrossReference *xref, const db::NetlistCrossReference::NetPairData &net_pair)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
@ -339,6 +391,19 @@ static pair_data_iterator<std::pair<const db::NetTerminalRef *, const db::NetTer
}
}
static pair_data_iterator<std::pair<const db::NetTerminalRef *, const db::NetTerminalRef *>, db::NetlistCrossReference::PerNetData::terminal_pairs_const_iterator> each_net_terminal_pair1 (db::NetlistCrossReference *xref, const db::Net *net)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
typedef pair_data_iterator<std::pair<const db::NetTerminalRef *, const db::NetTerminalRef *>, db::NetlistCrossReference::PerNetData::terminal_pairs_const_iterator> iter_type;
const db::NetlistCrossReference::PerNetData *data = xref->per_net_data_for_net (net);
if (! data) {
return iter_type ();
} else {
return iter_type (xref, data->terminals.begin (), data->terminals.end ());
}
}
static pair_data_iterator<std::pair<const db::NetPinRef *, const db::NetPinRef *>, db::NetlistCrossReference::PerNetData::pin_pairs_const_iterator> each_net_pin_pair (db::NetlistCrossReference *xref, const db::NetlistCrossReference::NetPairData &net_pair)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
@ -352,6 +417,19 @@ static pair_data_iterator<std::pair<const db::NetPinRef *, const db::NetPinRef *
}
}
static pair_data_iterator<std::pair<const db::NetPinRef *, const db::NetPinRef *>, db::NetlistCrossReference::PerNetData::pin_pairs_const_iterator> each_net_pin_pair1 (db::NetlistCrossReference *xref, const db::Net *net)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
typedef pair_data_iterator<std::pair<const db::NetPinRef *, const db::NetPinRef *>, db::NetlistCrossReference::PerNetData::pin_pairs_const_iterator> iter_type;
const db::NetlistCrossReference::PerNetData *data = xref->per_net_data_for_net (net);
if (! data) {
return iter_type ();
} else {
return iter_type (xref, data->pins.begin (), data->pins.end ());
}
}
static pair_data_iterator<std::pair<const db::NetSubcircuitPinRef *, const db::NetSubcircuitPinRef *>, db::NetlistCrossReference::PerNetData::subcircuit_pin_pairs_const_iterator> each_net_subcircuit_pin_pair (db::NetlistCrossReference *xref, const db::NetlistCrossReference::NetPairData &net_pair)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
@ -365,6 +443,19 @@ static pair_data_iterator<std::pair<const db::NetSubcircuitPinRef *, const db::N
}
}
static pair_data_iterator<std::pair<const db::NetSubcircuitPinRef *, const db::NetSubcircuitPinRef *>, db::NetlistCrossReference::PerNetData::subcircuit_pin_pairs_const_iterator> each_net_subcircuit_pin_pair1 (db::NetlistCrossReference *xref, const db::Net *net)
{
tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0);
typedef pair_data_iterator<std::pair<const db::NetSubcircuitPinRef *, const db::NetSubcircuitPinRef *>, db::NetlistCrossReference::PerNetData::subcircuit_pin_pairs_const_iterator> iter_type;
const db::NetlistCrossReference::PerNetData *data = xref->per_net_data_for_net (net);
if (! data) {
return iter_type ();
} else {
return iter_type (xref, data->subcircuit_pins.begin (), data->subcircuit_pins.end ());
}
}
Class<db::NetlistCrossReference> decl_dbNetlistCrossReference (decl_dbNetlistCompareLogger, "db", "NetlistCrossReference",
gsi::iterator_ext ("each_circuit_pair", &each_circuit_pair,
"@brief Delivers the circuit pairs and their status.\n"
@ -374,30 +465,72 @@ Class<db::NetlistCrossReference> decl_dbNetlistCrossReference (decl_dbNetlistCom
"@brief Delivers the net pairs and their status for the given circuit pair.\n"
"See the class description for details."
) +
gsi::iterator_ext ("each_net_pair", &each_net_pair1, gsi::arg ("circuit"),
"@brief Delivers the net pairs and their status for the given circuit.\n"
"This convenience method looks up the circuit pair from the given circuit. This circuit can be "
"a schematic or layout circuit.\n"
"This method has been added in version 0.30.2.\n"
) +
gsi::iterator_ext ("each_device_pair", &each_device_pair, gsi::arg ("circuit_pair"),
"@brief Delivers the device pairs and their status for the given circuit pair.\n"
"See the class description for details."
) +
gsi::iterator_ext ("each_device_pair", &each_device_pair1, gsi::arg ("circuit"),
"@brief Delivers the device pairs and their status for the given circuit pair.\n"
"This convenience method looks up the circuit pair from the given circuit. This circuit can be "
"a schematic or layout circuit.\n"
"This method has been added in version 0.30.2.\n"
) +
gsi::iterator_ext ("each_pin_pair", &each_pin_pair, gsi::arg ("circuit_pair"),
"@brief Delivers the pin pairs and their status for the given circuit pair.\n"
"See the class description for details."
) +
gsi::iterator_ext ("each_pin_pair", &each_pin_pair1, gsi::arg ("circuit"),
"@brief Delivers the pin pairs and their status for the given circuit pair.\n"
"This convenience method looks up the circuit pair from the given circuit. This circuit can be "
"a schematic or layout circuit.\n"
"This method has been added in version 0.30.2.\n"
) +
gsi::iterator_ext ("each_subcircuit_pair", &each_subcircuit_pair, gsi::arg ("circuit_pair"),
"@brief Delivers the subcircuit pairs and their status for the given circuit pair.\n"
"See the class description for details."
) +
gsi::iterator_ext ("each_subcircuit_pair", &each_subcircuit_pair1, gsi::arg ("circuit"),
"@brief Delivers the subcircuit pairs and their status for the given circuit pair.\n"
"This convenience method looks up the circuit pair from the given circuit. This circuit can be "
"a schematic or layout circuit.\n"
"This method has been added in version 0.30.2.\n"
) +
gsi::iterator_ext ("each_net_terminal_pair", &each_net_terminal_pair, gsi::arg ("net_pair"),
"@brief Delivers the device terminal pairs for the given net pair.\n"
"For the net pair, lists the device terminal pairs identified on this net."
) +
gsi::iterator_ext ("each_net_terminal_pair", &each_net_terminal_pair1, gsi::arg ("net"),
"@brief Delivers the device terminal pairs for the given net pair.\n"
"This convenience method looks up the net pair from the given net. This net can be "
"a schematic or layout net.\n"
"This method has been added in version 0.30.2.\n"
) +
gsi::iterator_ext ("each_net_pin_pair", &each_net_pin_pair, gsi::arg ("net_pair"),
"@brief Delivers the pin pairs for the given net pair.\n"
"For the net pair, lists the pin pairs identified on this net."
) +
gsi::iterator_ext ("each_net_pin_pair", &each_net_pin_pair1, gsi::arg ("net"),
"@brief Delivers the pin pairs for the given net pair.\n"
"This convenience method looks up the net pair from the given net. This net can be "
"a schematic or layout net.\n"
"This method has been added in version 0.30.2.\n"
) +
gsi::iterator_ext ("each_net_subcircuit_pin_pair", &each_net_subcircuit_pin_pair, gsi::arg ("net_pair"),
"@brief Delivers the subcircuit pin pairs for the given net pair.\n"
"For the net pair, lists the subcircuit pin pairs identified on this net."
) +
gsi::iterator_ext ("each_net_subcircuit_pin_pair", &each_net_subcircuit_pin_pair1, gsi::arg ("net"),
"@brief Delivers the subcircuit pin pairs for the given net pair.\n"
"This convenience method looks up the net pair from the given net. This net can be "
"a schematic or layout net.\n"
"This method has been added in version 0.30.2.\n"
) +
gsi::method ("other_net_for", &db::NetlistCrossReference::other_net_for, gsi::arg ("net"),
"@brief Gets the matching other net for a given primary net.\n"
"The return value will be nil if no match is found. "

View File

@ -109,6 +109,20 @@ Class<gsi::PolygonNeighborhoodVisitorImpl> decl_PolygonNeighborhoodVisitorImpl (
) +
gsi::method ("result_type", &PolygonNeighborhoodVisitorImpl::result_type,
"@brief Gets the result type\n"
) +
gsi::method ("variant_type=", &PolygonNeighborhoodVisitorImpl::set_variant_type, gsi::arg ("variant_type"),
"@brief Configures the variant type\n"
"The variant type configures transformation variant formation. The polygons presented to the visitor are "
"normalized to the given variant type. For example, specify \\VariantType#Orientation to force orientation variants "
"in the cell tree. Polygons presented to the visitor are normalized to 'as if top' orientation with this variant type.\n"
"\n"
"This property was introduced in version 0.30.2."
) +
gsi::method ("variant_type", &PolygonNeighborhoodVisitorImpl::variant_type,
"@brief Gets the variant type\n"
"See \\variant_type= for a description of this property.\n"
"\n"
"This property was introduced in version 0.30.2."
),
"@brief A visitor for the neighborhood of polygons in the input\n"
"\n"

View File

@ -679,8 +679,8 @@ CODE
if ca.is_a?(String) && (!cb || cb == "*")
n2c = {}
nl_a.circuits_by_name(ca).each { |c| name = cs ? c.name.upcase : c.name; n2c[name] ||= [ nil, nil ]; n2c[name][0] = c }
nl_b.circuits_by_name(ca).each { |c| name = cs ? c.name.upcase : c.name; n2c[name] ||= [ nil, nil ]; n2c[name][1] = c }
nl_a.circuits_by_name(ca, cs).each { |c| name = cs ? c.name.upcase : c.name; n2c[name] ||= [ nil, nil ]; n2c[name][0] = c }
nl_b.circuits_by_name(ca, cs).each { |c| name = cs ? c.name.upcase : c.name; n2c[name] ||= [ nil, nil ]; n2c[name][1] = c }
circuits = []
n2c.keys.sort.each do |n|
@ -706,8 +706,8 @@ CODE
if a.is_a?(String) && (!b || b == "*")
n2n = {}
circuit_a.nets_by_name(a).each { |n| name = cs ? n.name.upcase : n.name; n2n[name] ||= [ nil, nil ]; n2n[name][0] = n }
circuit_b.nets_by_name(a).each { |n| name = cs ? n.name.upcase : n.name; n2n[name] ||= [ nil, nil ]; n2n[name][1] = n }
circuit_a.nets_by_name(a, cs).each { |n| name = cs ? n.name.upcase : n.name; n2n[name] ||= [ nil, nil ]; n2n[name][0] = n }
circuit_b.nets_by_name(a, cs).each { |n| name = cs ? n.name.upcase : n.name; n2n[name] ||= [ nil, nil ]; n2n[name][1] = n }
nets = []
n2n.keys.sort.each do |n|

View File

@ -154,7 +154,7 @@ TEST(16_private)
TEST(17_private)
{
test_is_long_runner ();
run_test (_this, "test_17.lylvs", "test_17b.cir.gz", "test_17.gds.gz", true, "test_17b_4.lvsdb");
run_test (_this, "test_17.lylvs", "test_17b.cir.gz", "test_17.gds.gz", true, "test_17b_5.lvsdb");
}
TEST(18_private)
@ -177,7 +177,7 @@ TEST(20_private)
TEST(21_private)
{
run_test (_this, "test_21.lylvs", "test_21.cir.gz", "test_21.gds.gz", true, "test_21_5.lvsdb");
run_test (_this, "test_21.lylvs", "test_21.cir.gz", "test_21.gds.gz", true, "test_21_6.lvsdb");
}
// issue #1021

View File

@ -450,6 +450,10 @@ VALUE rba_funcall2_checked (VALUE obj, ID id, int argc, VALUE *args)
// HINT: the ugly (VALUE) cast is required since there is only one form of rb_protect
rb_protect_init (); // see above
if (! ruby_native_thread_p ()) {
throw tl::Exception (tl::to_string (tr ("Can't execute Ruby callbacks from non-Ruby threads")));
}
RUBY_BEGIN_EXEC
ret = rb_protect (&rb_funcall2_wrap, (VALUE) &p, &error);
RUBY_END_EXEC

View File

@ -1975,17 +1975,17 @@ sprintf (const char *f, const std::vector <tl::Variant> &vv, unsigned int a0)
os.setf (std::ios::uppercase);
}
if (a < vv.size ()) {
os << vv [a].to_ulong ();
os << vv [a].to_ulonglong ();
}
} else if (*cp == 'u' || *cp == 'U') {
os.setf (std::ios_base::fmtflags (0), std::ios::basefield);
if (a < vv.size ()) {
os << vv [a].to_ulong ();
os << vv [a].to_ulonglong ();
}
} else if (*cp == 'd' || *cp == 'D') {
os.setf (std::ios_base::fmtflags (0), std::ios::basefield);
if (a < vv.size ()) {
os << vv [a].to_long ();
os << vv [a].to_longlong ();
}
} else if (*cp == 's' || *cp == 'S') {
os.setf (std::ios_base::fmtflags (0), std::ios::basefield);

View File

@ -57,6 +57,20 @@ TEST(1)
EXPECT_EQ (tl::sprintf("%lu %llu %02x", 1, 2, 167), "1 2 a7");
EXPECT_EQ (tl::sprintf("%lu %llu %02X", 1, 2, 761), "1 2 2F9");
EXPECT_EQ (tl::sprintf("%c%c", 'a', 'X'), "aX");
// 64bit numbers
EXPECT_EQ (tl::sprintf("%x", 0x1000000000ll), "1000000000");
EXPECT_EQ (tl::sprintf("%lx", 0x1000000000ll), "1000000000");
EXPECT_EQ (tl::sprintf("%llx", 0x1000000000ll), "1000000000");
EXPECT_EQ (tl::sprintf("%d", 100000000000ll), "100000000000");
EXPECT_EQ (tl::sprintf("%ld", 100000000000ll), "100000000000");
EXPECT_EQ (tl::sprintf("%lld", 100000000000ll), "100000000000");
EXPECT_EQ (tl::sprintf("%d", -100000000000ll), "-100000000000");
EXPECT_EQ (tl::sprintf("%ld", -100000000000ll), "-100000000000");
EXPECT_EQ (tl::sprintf("%lld", -100000000000ll), "-100000000000");
EXPECT_EQ (tl::sprintf("%u", 100000000000ull), "100000000000");
EXPECT_EQ (tl::sprintf("%lu", 100000000000ull), "100000000000");
EXPECT_EQ (tl::sprintf("%llu", 100000000000ull), "100000000000");
}
TEST(1a)

View File

@ -210,7 +210,7 @@ layout(
net(2
rect(l2 (-148000 463000) (300000 25000))
)
net(3
net(3 name($5)
rect(l9 (348500 26500) (25000 179000))
rect(l9 (-57500 -58000) (90000 90000))
rect(l9 (-86000 -288500) (90000 90000))
@ -224,7 +224,7 @@ layout(
rect(l14 (-270500 7500) (25000 193000))
rect(l14 (-87500 -87500) (150000 150000))
)
net(4
net(4 name($8)
rect(l14 (-126000 -195000) (292000 25000))
)

View File

@ -140,7 +140,7 @@ layout(
net(2
rect(l2 (-148000 463000) (300000 25000))
)
net(3
net(3 name($5)
rect(l9 (348500 26500) (25000 179000))
rect(l9 (-57500 -58000) (90000 90000))
rect(l9 (-86000 -288500) (90000 90000))
@ -154,7 +154,7 @@ layout(
rect(l14 (-270500 7500) (25000 193000))
rect(l14 (-87500 -87500) (150000 150000))
)
net(4
net(4 name($8)
rect(l14 (-126000 -195000) (292000 25000))
)

View File

@ -220,7 +220,7 @@ layout(
net(4
rect(l2 (822690 427000) (63970 82000))
)
net(5
net(5 name($7)
rect(l9 (348500 26500) (25000 179000))
rect(l9 (-57500 -58000) (90000 90000))
rect(l9 (-86000 -288500) (90000 90000))
@ -234,13 +234,13 @@ layout(
rect(l14 (-270500 7500) (25000 193000))
rect(l14 (-87500 -87500) (150000 150000))
)
net(6
net(6 name($10)
rect(l14 (-126000 -195000) (292000 25000))
)
net(7
net(7 name($12)
rect(l14 (-410240 -216150) (83240 87150))
)
net(8
net(8 name($13)
rect(l14 (846960 -242000) (77190 75500))
)

View File

@ -150,7 +150,7 @@ layout(
net(4
rect(l2 (822690 427000) (63970 82000))
)
net(5
net(5 name($7)
rect(l9 (348500 26500) (25000 179000))
rect(l9 (-57500 -58000) (90000 90000))
rect(l9 (-86000 -288500) (90000 90000))
@ -164,13 +164,13 @@ layout(
rect(l14 (-270500 7500) (25000 193000))
rect(l14 (-87500 -87500) (150000 150000))
)
net(6
net(6 name($10)
rect(l14 (-126000 -195000) (292000 25000))
)
net(7
net(7 name($12)
rect(l14 (-410240 -216150) (83240 87150))
)
net(8
net(8 name($13)
rect(l14 (846960 -242000) (77190 75500))
)

View File

@ -210,7 +210,7 @@ layout(
net(2
rect(l2 (-148000 463000) (300000 25000))
)
net(3
net(3 name($5)
rect(l9 (348500 26500) (25000 179000))
rect(l9 (-57500 -58000) (90000 90000))
rect(l9 (-86000 -288500) (90000 90000))
@ -224,7 +224,7 @@ layout(
rect(l14 (-270500 7500) (25000 193000))
rect(l14 (-87500 -87500) (150000 150000))
)
net(4
net(4 name($8)
rect(l14 (-126000 -195000) (292000 25000))
)

View File

@ -140,7 +140,7 @@ layout(
net(2
rect(l2 (-148000 463000) (300000 25000))
)
net(3
net(3 name($5)
rect(l9 (348500 26500) (25000 179000))
rect(l9 (-57500 -58000) (90000 90000))
rect(l9 (-86000 -288500) (90000 90000))
@ -154,7 +154,7 @@ layout(
rect(l14 (-270500 7500) (25000 193000))
rect(l14 (-87500 -87500) (150000 150000))
)
net(4
net(4 name($8)
rect(l14 (-126000 -195000) (292000 25000))
)

View File

@ -207,7 +207,7 @@ layout(
net(2
rect(l2 (-148000 463000) (300000 25000))
)
net(3
net(3 name($5)
rect(l9 (348500 26500) (25000 179000))
rect(l9 (-57500 -58000) (90000 90000))
rect(l9 (-86000 -288500) (90000 90000))
@ -220,7 +220,7 @@ layout(
rect(l14 (-25000 -193000) (25000 193000))
rect(l14 (-87500 -87500) (150000 150000))
)
net(4
net(4 name($7)
rect(l14 (-126000 -195000) (292000 25000))
)

View File

@ -137,7 +137,7 @@ layout(
net(2
rect(l2 (-148000 463000) (300000 25000))
)
net(3
net(3 name($5)
rect(l9 (348500 26500) (25000 179000))
rect(l9 (-57500 -58000) (90000 90000))
rect(l9 (-86000 -288500) (90000 90000))
@ -150,7 +150,7 @@ layout(
rect(l14 (-25000 -193000) (25000 193000))
rect(l14 (-87500 -87500) (150000 150000))
)
net(4
net(4 name($7)
rect(l14 (-126000 -195000) (292000 25000))
)

View File

@ -210,7 +210,7 @@ layout(
net(2
rect(l2 (-148000 463000) (300000 25000))
)
net(3
net(3 name($5)
rect(l9 (348500 26500) (25000 179000))
rect(l9 (-57500 -58000) (90000 90000))
rect(l9 (-86000 -288500) (90000 90000))
@ -224,10 +224,10 @@ layout(
rect(l14 (-24000 -225500) (118960 25000))
rect(l14 (-182460 113000) (150000 150000))
)
net(4
net(4 name($7)
rect(l14 (-126000 -195000) (292000 25000))
)
net(5
net(5 name($10)
rect(l14 (509690 -219000) (113310 25000))
)

View File

@ -140,7 +140,7 @@ layout(
net(2
rect(l2 (-148000 463000) (300000 25000))
)
net(3
net(3 name($5)
rect(l9 (348500 26500) (25000 179000))
rect(l9 (-57500 -58000) (90000 90000))
rect(l9 (-86000 -288500) (90000 90000))
@ -154,10 +154,10 @@ layout(
rect(l14 (-24000 -225500) (118960 25000))
rect(l14 (-182460 113000) (150000 150000))
)
net(4
net(4 name($7)
rect(l14 (-126000 -195000) (292000 25000))
)
net(5
net(5 name($10)
rect(l14 (509690 -219000) (113310 25000))
)

View File

@ -38,12 +38,12 @@ layout(
rect((0 0) (10255 5900))
# Nets with their geometries
net(1
net(1 name($13)
rect(l3 (4850 4600) (180 180))
rect(l1 (-245 -250) (310 320))
rect(l1 (0 -250) (200 250))
)
net(2
net(2 name($14)
rect(l3 (10010 3500) (180 180))
rect(l1 (-245 -250) (310 320))
rect(l1 (-510 -250) (200 250))

View File

@ -258,7 +258,7 @@ J(
N(6 I(Q)
R(l12 (13260 2010) (0 0))
)
N(7
N(7 I($8)
R(l10 (3450 4840) (3055 250))
R(l10 (2885 -250) (1975 250))
)

View File

@ -258,7 +258,7 @@ J(
N(6 I(Q)
R(l12 (13260 2010) (0 0))
)
N(7
N(7 I($8)
R(l10 (3450 4840) (3055 250))
R(l10 (2885 -250) (1975 250))
)

View File

@ -240,21 +240,21 @@ J(
R(l10 (-1975 -8190) (1975 575))
R(l10 (-1005 -255) (0 0))
)
N(3
N(3 I($I1)
R(l3 (12950 2130) (2160 250))
R(l3 (-250 0) (250 4990))
R(l3 (-1605 0) (1605 250))
R(l7 (-1545 -250) (240 250))
R(l8 (-560 -375) (690 510))
)
N(4
N(4 I($I2)
R(l3 (12100 7300) (640 530))
R(l7 (-540 -415) (270 250))
R(l8 (-1695 -250) (1695 250))
R(l8 (-4075 -5650) (2630 250))
R(l8 (-250 0) (250 5150))
)
N(5
N(5 I($I3)
R(l7 (6465 7325) (220 240))
R(l8 (-4100 -5365) (3125 250))
R(l8 (-250 0) (250 4860))

View File

@ -68,7 +68,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -68,7 +68,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -68,7 +68,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -68,7 +68,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -68,7 +68,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -68,7 +68,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -64,7 +64,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -64,7 +64,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -64,7 +64,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -64,7 +64,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -64,7 +64,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -64,7 +64,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -64,7 +64,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -64,7 +64,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -64,7 +64,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -64,7 +64,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -64,7 +64,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -64,7 +64,7 @@ layout(
rect(l1 (-22675 -1970) (540 2000))
rect(l1 (-21840 -1605) (540 2000))
)
net(2
net(2 name($5)
rect(l4 (19795 5575) (220 220))
rect(l4 (-220 -745) (220 220))
rect(l4 (-220 -745) (220 220))

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -308,31 +308,31 @@ layout(
rect(l2 (950 -1500) (425 1500))
rect(l6 (-425 -4890) (425 950))
)
net(5
net(5 name($7)
rect(l11 (5550 2950) (900 300))
)
net(6
net(6 name($8)
rect(l11 (7350 2950) (900 300))
)
net(7
net(7 name($9)
rect(l11 (9150 2950) (900 300))
)
net(8
net(8 name($10)
rect(l11 (10950 2950) (900 300))
)
net(9
net(9 name($11)
rect(l11 (12750 2950) (900 300))
)
net(10
net(10 name($12)
rect(l11 (14550 2950) (900 300))
)
net(11
net(11 name($13)
rect(l11 (16350 2950) (900 300))
)
net(12
net(12 name($14)
rect(l11 (18150 2950) (900 300))
)
net(13
net(13 name($15)
rect(l11 (19950 2950) (900 300))
)
net(14 name(OUT)
@ -341,7 +341,7 @@ layout(
rect(l13 (-100 -100) (0 0))
rect(l13 (-200 -200) (400 400))
)
net(15
net(15 name($21)
rect(l6 (2775 1660) (450 950))
)
net(16 name(VSS)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -169,22 +169,22 @@ layout(
rect(l10 (-24850 -800) (500 1500))
rect(l10 (22900 -1500) (500 1500))
)
net(10
net(10 name($I22)
rect(l11 (7350 2950) (900 300))
)
net(11
net(11 name($I18)
rect(l11 (16350 2950) (900 300))
)
net(12
net(12 name($I36)
rect(l11 (9150 2950) (900 300))
)
net(13
net(13 name($I37)
rect(l11 (10950 2950) (900 300))
)
net(14
net(14 name($I38)
rect(l11 (12750 2950) (900 300))
)
net(15
net(15 name($I39)
rect(l11 (14550 2950) (900 300))
)

View File

@ -169,22 +169,22 @@ layout(
rect(l10 (-24850 -800) (500 1500))
rect(l10 (22900 -1500) (500 1500))
)
net(10
net(10 name($I22)
rect(l11 (7350 2950) (900 300))
)
net(11
net(11 name($I18)
rect(l11 (16350 2950) (900 300))
)
net(12
net(12 name($I36)
rect(l11 (9150 2950) (900 300))
)
net(13
net(13 name($I37)
rect(l11 (10950 2950) (900 300))
)
net(14
net(14 name($I38)
rect(l11 (12750 2950) (900 300))
)
net(15
net(15 name($I39)
rect(l11 (14550 2950) (900 300))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)
@ -361,41 +361,41 @@ layout(
rect((0 350) (27600 7650))
# Nets with their geometries
net(1
net(1 name($3)
rect(l4 (26050 2800) (525 550))
rect(l4 (-525 -300) (300 300))
rect(l4 (-25 -2000) (250 1450))
rect(l8 (-465 310) (180 180))
rect(l11 (-240 -240) (300 300))
)
net(2
net(2 name($4)
rect(l11 (4040 2950) (610 300))
)
net(3
net(3 name($5)
rect(l11 (5550 2950) (900 300))
)
net(4
net(4 name($6)
rect(l11 (7350 2950) (900 300))
)
net(5
net(5 name($7)
rect(l11 (9150 2950) (900 300))
)
net(6
net(6 name($8)
rect(l11 (10950 2950) (900 300))
)
net(7
net(7 name($9)
rect(l11 (12750 2950) (900 300))
)
net(8
net(8 name($10)
rect(l11 (14550 2950) (900 300))
)
net(9
net(9 name($11)
rect(l11 (16350 2950) (900 300))
)
net(10
net(10 name($12)
rect(l11 (18150 2950) (900 300))
)
net(11
net(11 name($13)
rect(l11 (19950 2950) (900 300))
)
net(12 name(FB)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)
@ -361,41 +361,41 @@ layout(
rect((0 350) (27600 7650))
# Nets with their geometries
net(1
net(1 name($3)
rect(l4 (26050 2800) (525 550))
rect(l4 (-525 -300) (300 300))
rect(l4 (-25 -2000) (250 1450))
rect(l8 (-465 310) (180 180))
rect(l11 (-240 -240) (300 300))
)
net(2
net(2 name($4)
rect(l11 (4040 2950) (610 300))
)
net(3
net(3 name($5)
rect(l11 (5550 2950) (900 300))
)
net(4
net(4 name($6)
rect(l11 (7350 2950) (900 300))
)
net(5
net(5 name($7)
rect(l11 (9150 2950) (900 300))
)
net(6
net(6 name($8)
rect(l11 (10950 2950) (900 300))
)
net(7
net(7 name($9)
rect(l11 (12750 2950) (900 300))
)
net(8
net(8 name($10)
rect(l11 (14550 2950) (900 300))
)
net(9
net(9 name($11)
rect(l11 (16350 2950) (900 300))
)
net(10
net(10 name($12)
rect(l11 (18150 2950) (900 300))
)
net(11
net(11 name($13)
rect(l11 (19950 2950) (900 300))
)
net(12 name(FB)

View File

@ -202,7 +202,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -202,7 +202,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -176,7 +176,7 @@ J(
R(l11 (-150 -150) (300 300))
)
N(7 I(SUBSTRATE))
N(8
N(8 I($I3)
R(l6 (975 1660) (425 950))
R(l6 (-400 -950) (425 950))
)

View File

@ -176,7 +176,7 @@ J(
R(l11 (-150 -150) (300 300))
)
N(7 I(SUBSTRATE))
N(8
N(8 I($I5)
R(l6 (975 1660) (425 950))
R(l6 (-400 -950) (425 950))
)

View File

@ -175,7 +175,7 @@ X(ND2X1
R(l11 (-150 -150) (300 300))
)
N(7 I(SUBSTRATE))
N(8
N(8 I($I3)
R(l6 (975 1660) (425 950))
R(l6 (-400 -950) (425 950))
)

View File

@ -175,7 +175,7 @@ X(ND2X1
R(l11 (-150 -150) (300 300))
)
N(7 I(SUBSTRATE))
N(8
N(8 I($I5)
R(l6 (975 1660) (425 950))
R(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -201,7 +201,7 @@ layout(
rect(l17 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l9 (975 1660) (425 950))
rect(l9 (-400 -950) (425 950))
)

View File

@ -201,7 +201,7 @@ layout(
rect(l17 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l9 (975 1660) (425 950))
rect(l9 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)
@ -560,22 +560,22 @@ layout(
rect(l10 (-24850 -800) (500 1500))
rect(l10 (22900 -1500) (500 1500))
)
net(10
net(10 name($I22)
rect(l11 (7350 2950) (900 300))
)
net(11
net(11 name($I18)
rect(l11 (16350 2950) (900 300))
)
net(12
net(12 name($I36)
rect(l11 (9150 2950) (900 300))
)
net(13
net(13 name($I37)
rect(l11 (10950 2950) (900 300))
)
net(14
net(14 name($I38)
rect(l11 (12750 2950) (900 300))
)
net(15
net(15 name($I39)
rect(l11 (14550 2950) (900 300))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)
@ -560,22 +560,22 @@ layout(
rect(l10 (-24850 -800) (500 1500))
rect(l10 (22900 -1500) (500 1500))
)
net(10
net(10 name($I22)
rect(l11 (7350 2950) (900 300))
)
net(11
net(11 name($I18)
rect(l11 (16350 2950) (900 300))
)
net(12
net(12 name($I36)
rect(l11 (9150 2950) (900 300))
)
net(13
net(13 name($I37)
rect(l11 (10950 2950) (900 300))
)
net(14
net(14 name($I38)
rect(l11 (12750 2950) (900 300))
)
net(15
net(15 name($I39)
rect(l11 (14550 2950) (900 300))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)
@ -560,22 +560,22 @@ layout(
rect(l10 (-24850 -800) (500 1500))
rect(l10 (22900 -1500) (500 1500))
)
net(10
net(10 name($I22)
rect(l11 (7350 2950) (900 300))
)
net(11
net(11 name($I18)
rect(l11 (16350 2950) (900 300))
)
net(12
net(12 name($I36)
rect(l11 (9150 2950) (900 300))
)
net(13
net(13 name($I37)
rect(l11 (10950 2950) (900 300))
)
net(14
net(14 name($I38)
rect(l11 (12750 2950) (900 300))
)
net(15
net(15 name($I39)
rect(l11 (14550 2950) (900 300))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)
@ -560,22 +560,22 @@ layout(
rect(l10 (-24850 -800) (500 1500))
rect(l10 (22900 -1500) (500 1500))
)
net(10
net(10 name($I22)
rect(l11 (7350 2950) (900 300))
)
net(11
net(11 name($I18)
rect(l11 (16350 2950) (900 300))
)
net(12
net(12 name($I36)
rect(l11 (9150 2950) (900 300))
)
net(13
net(13 name($I37)
rect(l11 (10950 2950) (900 300))
)
net(14
net(14 name($I38)
rect(l11 (12750 2950) (900 300))
)
net(15
net(15 name($I39)
rect(l11 (14550 2950) (900 300))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I3)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -199,7 +199,7 @@ layout(
rect(l11 (-150 -150) (300 300))
)
net(7 name(SUBSTRATE))
net(8
net(8 name($I5)
rect(l6 (975 1660) (425 950))
rect(l6 (-400 -950) (425 950))
)

View File

@ -81,13 +81,13 @@ X(NTRANS
R(l12 (-290 -690) (360 760))
R(l6 (-680 -855) (775 950))
)
N(2
N(2 I($3)
R(l8 (290 -310) (220 220))
R(l8 (-220 180) (220 220))
R(l12 (-290 -690) (360 760))
R(l6 (-455 -855) (775 950))
)
N(3
N(3 I($5)
R(l4 (-125 -800) (250 1600))
)
N(4 I(SUBSTRATE))
@ -117,13 +117,13 @@ X(PTRANS
R(l12 (-290 -690) (360 760))
R(l2 (-680 -855) (775 950))
)
N(2
N(2 I($3)
R(l8 (290 -310) (220 220))
R(l8 (-220 180) (220 220))
R(l12 (-290 -690) (360 760))
R(l2 (-455 -855) (775 950))
)
N(3
N(3 I($5)
R(l4 (-125 -800) (250 1600))
)
N(4)

View File

@ -108,12 +108,12 @@ X(INV
R(l10 (-700 -950) (400 1000))
R(l2 (-1875 -975) (775 950))
)
N(3
N(3 I($4)
R(l4 (-125 -250) (250 2500))
R(l4 (-250 -3050) (250 1600))
R(l4 (-250 1200) (250 1600))
)
N(4
N(4 I($5)
R(l8 (-510 -310) (220 220))
R(l8 (-220 180) (220 220))
R(l8 (-220 2180) (220 220))
@ -170,7 +170,7 @@ X(TOP
R(l12 (1810 2600) (690 400))
R(l16 (-400 -200) (0 0))
)
N(4
N(4 I($5)
R(l3 (4000 3400) (2700 2000))
)
N(5 I(SUBSTRATE))

View File

@ -108,12 +108,12 @@ X(INV
R(l10 (-700 -950) (400 1000))
R(l2 (-1875 -975) (775 950))
)
N(3
N(3 I($4)
R(l4 (-125 -250) (250 2500))
R(l4 (-250 -3050) (250 1600))
R(l4 (-250 1200) (250 1600))
)
N(4
N(4 I($5)
R(l8 (-510 -310) (220 220))
R(l8 (-220 180) (220 220))
R(l8 (-220 2180) (220 220))

View File

@ -104,7 +104,7 @@ X(INV
R(l14 (-200 -900) (1000 900))
R(l6 (-2175 -925) (775 950))
)
N(3
N(3 I($4)
R(l3 (-1500 1800) (3000 2000))
R(l3 (-200 -2000) (1000 2000))
R(l8 (-2010 -1310) (220 220))
@ -122,7 +122,7 @@ X(INV
R(l10 (-700 -950) (400 1000))
R(l2 (-1875 -975) (775 950))
)
N(4
N(4 I($6)
R(l4 (-125 -250) (250 2500))
R(l4 (-250 -3050) (250 1600))
R(l4 (-250 1200) (250 1600))

View File

@ -27,10 +27,10 @@ X(CHILD
J(l1 D (1820 510))
R(l2 (-70 -90) (160 160))
)
N(5
N(5 I($8)
R(l2 (2370 410) (170 200))
)
N(6
N(6 I($9)
R(l2 (2910 430) (190 200))
)
P(1 I(A))

View File

@ -25,10 +25,10 @@ X(CHILD
R(l1 (1750 420) (160 160))
R(l1 (-90 -70) (0 0))
)
N(5
N(5 I($6)
R(l1 (2370 410) (170 200))
)
N(6
N(6 I($7)
R(l1 (2910 430) (190 200))
)
P(1 I(A))

View File

@ -832,16 +832,16 @@ layout(
rect(l24 (2030 -150) (150 150))
rect(l24 (2030 -150) (150 150))
)
net(27
net(27 name($28)
polygon(l7 (955 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(28
net(28 name($29)
polygon(l7 (7495 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(29
net(29 name($30)
polygon(l7 (3135 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(30
net(30 name($31)
polygon(l7 (5315 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(31 name('wl[1]')
@ -893,7 +893,7 @@ layout(
rect(l24 (2030 -150) (150 150))
rect(l24 (2030 -150) (150 150))
)
net(32
net(32 name($33)
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))
@ -904,12 +904,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(33
net(33 name($34)
rect(l7 (940 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(34
net(34 name($35)
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))
@ -920,7 +920,7 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(35
net(35 name($36)
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))
@ -931,12 +931,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(36
net(36 name($37)
rect(l7 (3120 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(37
net(37 name($38)
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))
@ -947,12 +947,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(38
net(38 name($39)
rect(l7 (5300 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(39
net(39 name($40)
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))
@ -963,34 +963,34 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(40
net(40 name($41)
rect(l7 (7480 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(41
net(41 name($42)
polygon(l7 (265 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(42
net(42 name($43)
polygon(l7 (6805 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(43
net(43 name($44)
polygon(l7 (2445 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(44
net(44 name($45)
polygon(l7 (4625 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(45
net(45 name($47)
rect(l7 (290 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))
)
net(46
net(46 name($48)
rect(l7 (2470 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))
)
net(47
net(47 name($49)
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))
@ -1001,12 +1001,12 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(48
net(48 name($50)
rect(l7 (4650 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))
)
net(49
net(49 name($51)
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))
@ -1017,7 +1017,7 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(50
net(50 name($52)
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))
@ -1028,7 +1028,7 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(51
net(51 name($53)
rect(l7 (6830 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))

View File

@ -832,16 +832,16 @@ layout(
rect(l24 (2030 -150) (150 150))
rect(l24 (2030 -150) (150 150))
)
net(27
net(27 name($28)
polygon(l7 (955 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(28
net(28 name($29)
polygon(l7 (7495 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(29
net(29 name($30)
polygon(l7 (3135 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(30
net(30 name($31)
polygon(l7 (5315 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(31 name('wl[1]')
@ -893,7 +893,7 @@ layout(
rect(l24 (2030 -150) (150 150))
rect(l24 (2030 -150) (150 150))
)
net(32
net(32 name($33)
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))
@ -904,12 +904,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(33
net(33 name($34)
rect(l7 (940 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(34
net(34 name($35)
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))
@ -920,7 +920,7 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(35
net(35 name($36)
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))
@ -931,12 +931,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(36
net(36 name($37)
rect(l7 (3120 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(37
net(37 name($38)
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))
@ -947,12 +947,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(38
net(38 name($39)
rect(l7 (5300 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(39
net(39 name($40)
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))
@ -963,7 +963,7 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(40
net(40 name($41)
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))
@ -974,12 +974,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(41
net(41 name($42)
rect(l7 (7480 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(42
net(42 name($43)
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))
@ -990,29 +990,29 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(43
net(43 name($44)
polygon(l7 (265 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(44
net(44 name($45)
polygon(l7 (6805 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(45
net(45 name($46)
polygon(l7 (2445 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(46
net(46 name($47)
polygon(l7 (4625 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(47
net(47 name($49)
rect(l7 (290 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))
)
net(48
net(48 name($50)
rect(l7 (2470 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))
)
net(49
net(49 name($51)
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))
@ -1023,12 +1023,12 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(50
net(50 name($52)
rect(l7 (4650 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))
)
net(51
net(51 name($53)
rect(l7 (6830 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))

View File

@ -832,16 +832,16 @@ layout(
rect(l24 (2030 -150) (150 150))
rect(l24 (2030 -150) (150 150))
)
net(27
net(27 name($28)
polygon(l7 (955 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(28
net(28 name($29)
polygon(l7 (7495 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(29
net(29 name($30)
polygon(l7 (3135 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(30
net(30 name($31)
polygon(l7 (5315 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(31 name('wl[1]')
@ -893,7 +893,7 @@ layout(
rect(l24 (2030 -150) (150 150))
rect(l24 (2030 -150) (150 150))
)
net(32
net(32 name($33)
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))
@ -904,12 +904,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(33
net(33 name($34)
rect(l7 (940 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(34
net(34 name($35)
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))
@ -920,7 +920,7 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(35
net(35 name($36)
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))
@ -931,12 +931,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(36
net(36 name($37)
rect(l7 (3120 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(37
net(37 name($38)
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))
@ -947,12 +947,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(38
net(38 name($39)
rect(l7 (5300 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(39
net(39 name($40)
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))
@ -963,34 +963,34 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(40
net(40 name($41)
rect(l7 (7480 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(41
net(41 name($42)
polygon(l7 (265 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(42
net(42 name($43)
polygon(l7 (6805 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(43
net(43 name($44)
polygon(l7 (2445 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(44
net(44 name($45)
polygon(l7 (4625 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(45
net(45 name($47)
rect(l7 (290 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))
)
net(46
net(46 name($48)
rect(l7 (2470 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))
)
net(47
net(47 name($49)
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))
@ -1001,12 +1001,12 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(48
net(48 name($50)
rect(l7 (4650 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))
)
net(49
net(49 name($51)
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))
@ -1017,7 +1017,7 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(50
net(50 name($52)
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))
@ -1028,7 +1028,7 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(51
net(51 name($53)
rect(l7 (6830 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))

View File

@ -832,16 +832,16 @@ layout(
rect(l24 (2030 -150) (150 150))
rect(l24 (2030 -150) (150 150))
)
net(27
net(27 name($28)
polygon(l7 (955 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(28
net(28 name($29)
polygon(l7 (7495 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(29
net(29 name($30)
polygon(l7 (3135 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(30
net(30 name($31)
polygon(l7 (5315 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180))
)
net(31 name('wl[1]')
@ -893,7 +893,7 @@ layout(
rect(l24 (2030 -150) (150 150))
rect(l24 (2030 -150) (150 150))
)
net(32
net(32 name($33)
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))
@ -904,12 +904,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(33
net(33 name($34)
rect(l7 (940 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(34
net(34 name($35)
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))
@ -920,7 +920,7 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(35
net(35 name($36)
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))
@ -931,12 +931,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(36
net(36 name($37)
rect(l7 (3120 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(37
net(37 name($38)
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))
@ -947,12 +947,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(38
net(38 name($39)
rect(l7 (5300 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(39
net(39 name($40)
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))
@ -963,7 +963,7 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(40
net(40 name($41)
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))
@ -974,12 +974,12 @@ layout(
rect(l22 (0 -270) (950 150))
rect(l22 (0 -840) (150 2010))
)
net(41
net(41 name($42)
rect(l7 (7480 3965) (950 150))
rect(l7 (-1280 -150) (330 270))
rect(l7 (950 -960) (150 2010))
)
net(42
net(42 name($43)
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))
@ -990,29 +990,29 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(43
net(43 name($44)
polygon(l7 (265 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(44
net(44 name($45)
polygon(l7 (6805 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(45
net(45 name($46)
polygon(l7 (2445 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(46
net(46 name($47)
polygon(l7 (4625 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(47
net(47 name($49)
rect(l7 (290 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))
)
net(48
net(48 name($50)
rect(l7 (2470 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))
)
net(49
net(49 name($51)
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))
@ -1023,12 +1023,12 @@ layout(
rect(l22 (-1100 -1320) (150 2010))
rect(l22 (950 -960) (330 270))
)
net(50
net(50 name($52)
rect(l7 (4650 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))
)
net(51
net(51 name($53)
rect(l7 (6830 4445) (950 150))
rect(l7 (-1100 -1320) (150 2010))
rect(l7 (950 -960) (330 270))

View File

@ -265,7 +265,7 @@ layout(
rect(l23 (-110 -170) (170 170))
rect(l2 (-355 -210) (420 265))
)
net(9
net(9 name($10)
polygon(l7 (265 140) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(10 name(vss)

View File

@ -265,7 +265,7 @@ layout(
rect(l23 (-110 -170) (170 170))
rect(l2 (-355 -210) (420 265))
)
net(9
net(9 name($10)
polygon(l7 (265 140) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150))
)
net(10 name(vss)

Some files were not shown because too many files have changed in this diff Show More