Some refactoring (renaming)

This commit is contained in:
Matthias Koefferlein 2024-03-19 20:41:42 +01:00
parent 92a9b49139
commit a04bcbc9a3
2 changed files with 65 additions and 61 deletions

View File

@ -31,15 +31,15 @@ namespace db
{ {
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
// SoftConnectionClusterInfo implementation // SoftConnectionNetGraph implementation
SoftConnectionClusterInfo::SoftConnectionClusterInfo () SoftConnectionNetGraph::SoftConnectionNetGraph ()
: m_partial_net_count (0) : m_partial_net_count (0)
{ {
// .. nothing yet .. // .. nothing yet ..
} }
void SoftConnectionClusterInfo::add (const db::Net *net, SoftConnectionPinDir dir, const db::Pin *pin, size_t partial_net_count) void SoftConnectionNetGraph::add (const db::Net *net, SoftConnectionPinDir dir, const db::Pin *pin, size_t partial_net_count)
{ {
// limiting the partial net count to 1 means we report errors only once in the // limiting the partial net count to 1 means we report errors only once in the
// hierarchy, not on every level // hierarchy, not on every level
@ -66,16 +66,16 @@ SoftConnectionCircuitInfo::SoftConnectionCircuitInfo (const db::Circuit *circuit
// .. nothing yet .. // .. nothing yet ..
} }
SoftConnectionClusterInfo &SoftConnectionCircuitInfo::make_cluster () SoftConnectionNetGraph &SoftConnectionCircuitInfo::make_net_graph ()
{ {
m_cluster_info.push_back (SoftConnectionClusterInfo ()); m_net_graphs.push_back (SoftConnectionNetGraph ());
return m_cluster_info.back (); return m_net_graphs.back ();
} }
void SoftConnectionCircuitInfo::add_pin_info (const db::Pin *pin, SoftConnectionPinDir dir, SoftConnectionClusterInfo *sc_cluster_info) void SoftConnectionCircuitInfo::add_pin_info (const db::Pin *pin, SoftConnectionPinDir dir, SoftConnectionNetGraph *graph_info)
{ {
if (pin) { if (pin) {
m_pin_info.insert (std::make_pair (pin->id (), std::make_pair (dir, sc_cluster_info))); m_pin_info.insert (std::make_pair (pin->id (), std::make_pair (dir, graph_info)));
} }
} }
@ -89,7 +89,7 @@ SoftConnectionPinDir SoftConnectionCircuitInfo::direction_per_pin (const db::Pin
return p != m_pin_info.end () ? p->second.first : SoftConnectionPinDir (); return p != m_pin_info.end () ? p->second.first : SoftConnectionPinDir ();
} }
const SoftConnectionClusterInfo *SoftConnectionCircuitInfo::get_cluster_info_per_pin (const db::Pin *pin) const const SoftConnectionNetGraph *SoftConnectionCircuitInfo::get_net_graph_per_pin (const db::Pin *pin) const
{ {
if (! pin) { if (! pin) {
return 0; return 0;
@ -107,25 +107,25 @@ SoftConnectionInfo::SoftConnectionInfo ()
// .. nothing yet .. // .. nothing yet ..
} }
void SoftConnectionInfo::build (const db::Netlist &netlist, const db::hier_clusters<db::NetShape> &net_clusters) void SoftConnectionInfo::build (const db::Netlist &netlist, const db::hier_clusters<db::NetShape> &shape_clusters)
{ {
for (auto c = netlist.begin_bottom_up (); c != netlist.end_bottom_up (); ++c) { for (auto c = netlist.begin_bottom_up (); c != netlist.end_bottom_up (); ++c) {
build_clusters_for_circuit (c.operator-> (), net_clusters.clusters_per_cell (c->cell_index ())); build_graphs_for_circuit (c.operator-> (), shape_clusters.clusters_per_cell (c->cell_index ()));
} }
} }
void SoftConnectionInfo::join_soft_connections (db::Netlist &netlist) void SoftConnectionInfo::join_soft_connections (db::Netlist &netlist)
{ {
if (tl::verbosity () >= 20) { if (tl::verbosity () >= 20) {
tl::info << "Joining soft-connected net clusters .."; tl::info << "Joining soft-connected net graphs ..";
} }
size_t nclusters_tot = 0; size_t nnet_graphs_tot = 0;
size_t npartial_tot = 0; size_t npartial_tot = 0;
for (auto c = netlist.begin_top_down (); c != netlist.end_top_down (); ++c) { for (auto c = netlist.begin_top_down (); c != netlist.end_top_down (); ++c) {
size_t nclusters = 0; size_t nnet_graphs = 0;
size_t npartial = 0; size_t npartial = 0;
auto scc = m_scc_per_circuit.find (c.operator-> ()); auto scc = m_scc_per_circuit.find (c.operator-> ());
@ -141,7 +141,7 @@ void SoftConnectionInfo::join_soft_connections (db::Netlist &netlist)
if (cc != sc->end_clusters ()) { if (cc != sc->end_clusters ()) {
db::Net *net0 = c->net_by_cluster_id (cc->first); db::Net *net0 = c->net_by_cluster_id (cc->first);
tl_assert (net0 != 0); tl_assert (net0 != 0);
++nclusters; ++nnet_graphs;
while (++cc != sc->end_clusters ()) { while (++cc != sc->end_clusters ()) {
// TODO: logging? // TODO: logging?
c->join_nets (net0, c->net_by_cluster_id (cc->first)); c->join_nets (net0, c->net_by_cluster_id (cc->first));
@ -151,17 +151,17 @@ void SoftConnectionInfo::join_soft_connections (db::Netlist &netlist)
} }
nclusters_tot += nclusters; nnet_graphs_tot += nnet_graphs;
npartial_tot += npartial; npartial_tot += npartial;
if (nclusters > 0 && tl::verbosity () >= 30) { if (nnet_graphs > 0 && tl::verbosity () >= 30) {
tl::info << "Circuit " << c->name () << ": joined " << nclusters << " soft-connected net clusters with " << npartial << " partial nets."; tl::info << "Circuit " << c->name () << ": joined " << nnet_graphs << " soft-connected net clusters with " << npartial << " partial nets.";
} }
} }
if (tl::verbosity () >= 20) { if (tl::verbosity () >= 20) {
tl::info << "Joined " << nclusters_tot << " soft-connected net clusters with " << npartial_tot << " partial nets in total."; tl::info << "Joined " << nnet_graphs_tot << " soft-connected net clusters with " << npartial_tot << " partial nets in total.";
} }
m_scc_per_circuit.clear (); m_scc_per_circuit.clear ();
@ -188,9 +188,9 @@ SoftConnectionInfo::representative_polygon (const db::Net *net, const db::Layout
return db::DPolygon (bbox); return db::DPolygon (bbox);
} }
void SoftConnectionInfo::report_partial_nets (const db::Circuit *circuit, const SoftConnectionClusterInfo &cluster_info, db::LayoutToNetlist &l2n, const std::string &path, const db::DCplxTrans &trans, const std::string &top_cell, int &index, std::set<const db::Net *> &seen) void SoftConnectionInfo::report_partial_nets (const db::Circuit *circuit, const SoftConnectionNetGraph &net_graph, db::LayoutToNetlist &l2n, const std::string &path, const db::DCplxTrans &trans, const std::string &top_cell, int &index, std::set<const db::Net *> &seen)
{ {
for (auto cc = cluster_info.begin_clusters (); cc != cluster_info.end_clusters (); ++cc) { for (auto cc = net_graph.begin_clusters (); cc != net_graph.end_clusters (); ++cc) {
const db::Net *net = circuit->net_by_cluster_id (cc->first); const db::Net *net = circuit->net_by_cluster_id (cc->first);
@ -221,7 +221,7 @@ void SoftConnectionInfo::report_partial_nets (const db::Circuit *circuit, const
const SoftConnectionCircuitInfo &sci = scc->second; const SoftConnectionCircuitInfo &sci = scc->second;
const SoftConnectionClusterInfo *scci = sci.get_cluster_info_per_pin (sc->pin ()); const SoftConnectionNetGraph *scci = sci.get_net_graph_per_pin (sc->pin ());
if (! scci || scci->partial_net_count () == 0) { if (! scci || scci->partial_net_count () == 0) {
continue; continue;
} }
@ -271,7 +271,7 @@ void SoftConnectionInfo::report (db::LayoutToNetlist &l2n)
} }
} }
void SoftConnectionInfo::build_clusters_for_circuit (const db::Circuit *circuit, const db::connected_clusters<db::NetShape> &shape_clusters) void SoftConnectionInfo::build_graphs_for_circuit (const db::Circuit *circuit, const db::connected_clusters<db::NetShape> &shape_clusters)
{ {
SoftConnectionCircuitInfo &sc_circuit_info = m_scc_per_circuit.insert (std::make_pair (circuit, SoftConnectionCircuitInfo (circuit))).first->second; SoftConnectionCircuitInfo &sc_circuit_info = m_scc_per_circuit.insert (std::make_pair (circuit, SoftConnectionCircuitInfo (circuit))).first->second;
@ -288,7 +288,7 @@ void SoftConnectionInfo::build_clusters_for_circuit (const db::Circuit *circuit,
connected.insert (c->id ()); connected.insert (c->id ());
seen.insert (c->id ()); seen.insert (c->id ());
SoftConnectionClusterInfo *sc_cluster_info = 0; SoftConnectionNetGraph *sc_net_graph = 0;
while (! connected.empty ()) { while (! connected.empty ()) {
@ -340,16 +340,16 @@ void SoftConnectionInfo::build_clusters_for_circuit (const db::Circuit *circuit,
pin = net->begin_pins ()->pin (); pin = net->begin_pins ()->pin ();
} }
if (! sc_cluster_info) { if (! sc_net_graph) {
sc_cluster_info = &sc_circuit_info.make_cluster (); sc_net_graph = &sc_circuit_info.make_net_graph ();
} }
// we do not count floating nets as they cannot make a functional connection // we do not count floating nets as they cannot make a functional connection
if (! net->is_floating ()) { if (! net->is_floating ()) {
sc_cluster_info->add (net, dir, pin, sc_partial_net_count); sc_net_graph->add (net, dir, pin, sc_partial_net_count);
} }
sc_circuit_info.add_pin_info (pin, dir, sc_cluster_info); sc_circuit_info.add_pin_info (pin, dir, sc_net_graph);
} }
@ -387,7 +387,7 @@ void SoftConnectionInfo::get_net_connections_through_subcircuit (const db::SubCi
const SoftConnectionCircuitInfo &sci = scc->second; const SoftConnectionCircuitInfo &sci = scc->second;
const SoftConnectionClusterInfo *scci = sci.get_cluster_info_per_pin (pin); const SoftConnectionNetGraph *scci = sci.get_net_graph_per_pin (pin);
if (scci) { if (scci) {
partial_net_count += scci->partial_net_count (); partial_net_count += scci->partial_net_count ();

View File

@ -121,13 +121,17 @@ private:
}; };
/** /**
* @brief Describes a soft-connected cluster * @brief Describes a soft-connected net graph
* *
* Such a cluster is a collection of nets/shape clusters that are connected via * Such a graph is a collection of nets/shape clusters that are connected via
* soft connections. * soft connections.
* There is also some information about the count of "down-only" nets. * There is also some information about the count of "down-only" nets. With
* this, this object can serve as a representative model for a circuit's
* content as embedded into a larger graph through subcircuits.
*
* A circuit in general can be made from a number of such net graphs.
*/ */
class DB_PUBLIC SoftConnectionClusterInfo class DB_PUBLIC SoftConnectionNetGraph
{ {
public: public:
typedef std::set<size_t> pin_set; typedef std::set<size_t> pin_set;
@ -135,7 +139,7 @@ public:
typedef std::map<size_t, SoftConnectionPinDir> dir_map; typedef std::map<size_t, SoftConnectionPinDir> dir_map;
typedef dir_map::const_iterator dir_map_iterator; typedef dir_map::const_iterator dir_map_iterator;
SoftConnectionClusterInfo (); SoftConnectionNetGraph ();
/** /**
* @brief Enters information about a specific net * @brief Enters information about a specific net
@ -164,9 +168,9 @@ public:
} }
/** /**
* @brief Gets the pins on the cluster (begin iterator) * @brief Gets the outside pins on the net graph (begin iterator)
* *
* The iterator delivers Pin IDs of pins leading outside the circuit this cluster lives in. * The iterator delivers Pin IDs of pins leading outside the circuit this graph lives in.
*/ */
pin_iterator begin_pins () const pin_iterator begin_pins () const
{ {
@ -174,7 +178,7 @@ public:
} }
/** /**
* @brief Gets the pins on the cluster (end iterator) * @brief Gets the pins on the net graph (end iterator)
*/ */
pin_iterator end_pins () const pin_iterator end_pins () const
{ {
@ -206,14 +210,14 @@ private:
/** /**
* @brief Provides temporary soft connection information for a circuit * @brief Provides temporary soft connection information for a circuit
* *
* Soft connection information is the soft-connected-clusters that are formed inside * Soft connection information is the soft-connected net graphs that are formed inside
* the circuit and how these clusters connect to pins. * the circuit and how these graphs connect to pins from the circuit leading outside.
*/ */
class DB_PUBLIC SoftConnectionCircuitInfo class DB_PUBLIC SoftConnectionCircuitInfo
{ {
public: public:
typedef std::list<SoftConnectionClusterInfo> cluster_list; typedef std::list<SoftConnectionNetGraph> net_graph_list;
typedef cluster_list::const_iterator cluster_list_iterator; typedef net_graph_list::const_iterator net_graph_list_iterator;
/** /**
* @brief Constructor * @brief Constructor
@ -229,18 +233,18 @@ public:
} }
/** /**
* @brief Creates a new cluster info object * @brief Creates a new graph info object
*/ */
SoftConnectionClusterInfo &make_cluster (); SoftConnectionNetGraph &make_net_graph ();
/** /**
* @brief Adds information about a pin * @brief Adds information about a pin
* *
* @param pin The pin * @param pin The pin
* @param dir The direction of connections from the pin * @param dir The direction of connections from the pin
* @param sc_cluster_info The soft-connected net cluster info object * @param graph_info The soft-connected net graph info object
*/ */
void add_pin_info (const db::Pin *pin, SoftConnectionPinDir dir, SoftConnectionClusterInfo *sc_cluster_info); void add_pin_info (const db::Pin *pin, SoftConnectionPinDir dir, SoftConnectionNetGraph *graph_info);
/** /**
* @brief Gets the direction attribute of the pin * @brief Gets the direction attribute of the pin
@ -248,30 +252,30 @@ public:
SoftConnectionPinDir direction_per_pin (const db::Pin *pin) const; SoftConnectionPinDir direction_per_pin (const db::Pin *pin) const;
/** /**
* @brief Gets the soft-connected net cluster info object the pin connects to * @brief Gets the soft-connected net graph object the pin connects to
*/ */
const SoftConnectionClusterInfo *get_cluster_info_per_pin (const db::Pin *pin) const; const SoftConnectionNetGraph *get_net_graph_per_pin (const db::Pin *pin) const;
/** /**
* @brief List of per-circui info objects, begin iterator * @brief List of per-circuit net graph objects, begin iterator
*/ */
cluster_list_iterator begin () const net_graph_list_iterator begin () const
{ {
return m_cluster_info.begin (); return m_net_graphs.begin ();
} }
/** /**
* @brief List of per-circui info objects, end iterator * @brief List of per-circuit net graph objects, end iterator
*/ */
cluster_list_iterator end () const net_graph_list_iterator end () const
{ {
return m_cluster_info.end (); return m_net_graphs.end ();
} }
private: private:
const db::Circuit *mp_circuit; const db::Circuit *mp_circuit;
cluster_list m_cluster_info; net_graph_list m_net_graphs;
std::map<size_t, std::pair<SoftConnectionPinDir, const SoftConnectionClusterInfo *> > m_pin_info; std::map<size_t, std::pair<SoftConnectionPinDir, const SoftConnectionNetGraph *> > m_pin_info;
}; };
/** /**
@ -283,9 +287,9 @@ public:
SoftConnectionInfo (); SoftConnectionInfo ();
/** /**
* @brief Builds the soft connection information for the given netlist and net clusters * @brief Builds the soft connection information for the given netlist and shape clusters
*/ */
void build (const db::Netlist &netlist, const db::hier_clusters<db::NetShape> &net_clusters); void build (const db::Netlist &netlist, const db::hier_clusters<db::NetShape> &shape_clusters);
/** /**
* @brief Joins nets connected by soft connections * @brief Joins nets connected by soft connections
@ -304,16 +308,16 @@ private:
std::map<const db::Circuit *, SoftConnectionCircuitInfo> m_scc_per_circuit; std::map<const db::Circuit *, SoftConnectionCircuitInfo> m_scc_per_circuit;
/** /**
* @brief Builds the per-circuit cluster information * @brief Builds the per-circuit net graphs
* *
* First of all, this method creates a SoftConnectionCircuitInfo object for the circuit. * First of all, this method creates a SoftConnectionCircuitInfo object for the circuit.
* *
* Inside this per-circuit object, it will create a number of SoftConnectionClusterInfo objects - each one * Inside this per-circuit object, it will create a number of SoftConnectionNetGraph objects - each one
* for a cluster of soft-connected nets. * for a cluster of soft-connected nets.
* *
* Call this method bottom-up as it needs SoftConnectionCircuitInfo objects for called circuits. * Call this method bottom-up as it needs SoftConnectionCircuitInfo objects for called circuits.
*/ */
void build_clusters_for_circuit (const db::Circuit *circuit, const db::connected_clusters<db::NetShape> &shape_clusters); void build_graphs_for_circuit (const db::Circuit *circuit, const db::connected_clusters<db::NetShape> &shape_clusters);
/** /**
* @brief Gets a value indicating whether the given net connects to subcircuits with up or down connections inside * @brief Gets a value indicating whether the given net connects to subcircuits with up or down connections inside
@ -340,7 +344,7 @@ private:
*/ */
std::set<size_t> net_connections_through_subcircuits (const db::Net *net, size_t &partial_net_count); std::set<size_t> net_connections_through_subcircuits (const db::Net *net, size_t &partial_net_count);
void report_partial_nets (const db::Circuit *circuit, const SoftConnectionClusterInfo &cluster_info, LayoutToNetlist &l2n, const std::string &path, const db::DCplxTrans &trans, const std::string &top_cell, int &index, std::set<const Net *> &seen); void report_partial_nets (const db::Circuit *circuit, const SoftConnectionNetGraph &cluster_info, LayoutToNetlist &l2n, const std::string &path, const db::DCplxTrans &trans, const std::string &top_cell, int &index, std::set<const Net *> &seen);
db::DPolygon representative_polygon (const db::Net *net, const db::LayoutToNetlist &l2n, const db::CplxTrans &trans); db::DPolygon representative_polygon (const db::Net *net, const db::LayoutToNetlist &l2n, const db::CplxTrans &trans);
}; };