From 417309acf1b4d3eb02fe3ad3e8454a926f931f95 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 15 Mar 2024 23:15:21 +0100 Subject: [PATCH] Added a basic test --- .../unit_tests/dbHierNetworkProcessorTests.cc | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/src/db/unit_tests/dbHierNetworkProcessorTests.cc b/src/db/unit_tests/dbHierNetworkProcessorTests.cc index 6c771ec19..60017754d 100644 --- a/src/db/unit_tests/dbHierNetworkProcessorTests.cc +++ b/src/db/unit_tests/dbHierNetworkProcessorTests.cc @@ -393,6 +393,15 @@ static std::string local_clusters_to_string (const db::local_clusters &cluste } s += "#" + tl::to_string (c->id ()) + ":" + local_cluster_to_string (*c, conn); } + for (typename db::local_clusters::const_iterator c = clusters.begin (); c != clusters.end (); ++c) { + auto sc = clusters.upward_soft_connections (c->id ()); + for (auto i = sc.begin (); i != sc.end (); ++i) { + if (! s.empty ()) { + s += "\n"; + } + s += "(#" + tl::to_string (*i) + "->#" + tl::to_string (c->id ()) + ")"; + } + } return s; } @@ -670,6 +679,90 @@ TEST(23_LocalClustersWithEdges) } } +TEST(24_LocalClustersWithSoftConnections) +{ + db::Layout layout; + db::Cell &cell = layout.cell (layout.add_cell ("TOP")); + db::GenericRepository &repo = layout.shape_repository (); + + auto dbu = db::CplxTrans (layout.dbu ()).inverted (); + + unsigned int nwell = 0; + unsigned int ntie = 1; + unsigned int ptie = 2; + unsigned int contact = 3; + unsigned int metal1 = 4; + + cell.shapes (nwell).insert (db::PolygonRef (dbu * db::DPolygon (db::DBox (0.0, 4.0, 2.0, 8.0)), repo)); + cell.shapes (ntie).insert (db::PolygonRef (dbu * db::DPolygon (db::DBox (0.5, 5.0, 1.5, 7.0)), repo)); + cell.shapes (contact).insert (db::PolygonRef (dbu * db::DPolygon (db::DBox (0.8, 6.0, 1.2, 6.5)), repo)); + cell.shapes (metal1).insert (db::PolygonRef (dbu * db::DPolygon (db::DBox (0.0, 5.0, 2.0, 7.0)), repo)); + + cell.shapes (ptie).insert (db::PolygonRef (dbu * db::DPolygon (db::DBox (0.5, 1.0, 1.5, 3.0)), repo)); + cell.shapes (contact).insert (db::PolygonRef (dbu * db::DPolygon (db::DBox (0.8, 2.0, 1.2, 2.5)), repo)); + cell.shapes (metal1).insert (db::PolygonRef (dbu * db::DPolygon (db::DBox (0.0, 1.0, 2.0, 3.0)), repo)); + + db::Connectivity conn; + conn.connect (nwell); + conn.connect (ntie); + conn.connect (ptie); + conn.connect (contact); + conn.connect (metal1); + conn.soft_connect (ntie, nwell); + conn.soft_connect (contact, ntie); + conn.connect (metal1, contact); + + { + db::local_clusters clusters; + clusters.build_clusters (cell, conn); + EXPECT_EQ (local_clusters_to_string (clusters, conn), + "#1:[0](0,4000;0,8000;2000,8000;2000,4000)\n" + "#2:[1](500,5000;500,7000;1500,7000;1500,5000)\n" + "#3:[3](800,6000;800,6500;1200,6500;1200,6000);[4](0,5000;0,7000;2000,7000;2000,5000)\n" + "#4:[3](800,2000;800,2500;1200,2500;1200,2000);[4](0,1000;0,3000;2000,3000;2000,1000)\n" + "#5:[2](500,1000;500,3000;1500,3000;1500,1000)\n" + "(#2->#1)\n" + "(#3->#2)" + ); + } + + conn.soft_connect (contact, ptie); + + { + db::local_clusters clusters; + clusters.build_clusters (cell, conn); + EXPECT_EQ (local_clusters_to_string (clusters, conn), + "#1:[0](0,4000;0,8000;2000,8000;2000,4000)\n" + "#2:[1](500,5000;500,7000;1500,7000;1500,5000)\n" + "#3:[3](800,6000;800,6500;1200,6500;1200,6000);[4](0,5000;0,7000;2000,7000;2000,5000)\n" + "#4:[2](500,1000;500,3000;1500,3000;1500,1000)\n" + "#5:[3](800,2000;800,2500;1200,2500;1200,2000);[4](0,1000;0,3000;2000,3000;2000,1000)\n" + "(#2->#1)\n" + "(#3->#2)\n" + "(#5->#4)" + ); + } + + conn.soft_connect_global (ptie, "BULK"); + + { + db::local_clusters clusters; + clusters.build_clusters (cell, conn); + EXPECT_EQ (local_clusters_to_string (clusters, conn), + "#1:[0](0,4000;0,8000;2000,8000;2000,4000)\n" + "#2:[1](500,5000;500,7000;1500,7000;1500,5000)\n" + "#3:[3](800,6000;800,6500;1200,6500;1200,6000);[4](0,5000;0,7000;2000,7000;2000,5000)\n" + "#4:[2](500,1000;500,3000;1500,3000;1500,1000)\n" + "#5:[3](800,2000;800,2500;1200,2500;1200,2000);[4](0,1000;0,3000;2000,3000;2000,1000)\n" + "#6:+BULK\n" + "(#2->#1)\n" + "(#3->#2)\n" + "(#5->#4)\n" + "(#4->#6)" + ); + } +} + TEST(30_LocalConnectedClusters) { db::Layout layout;