diff --git a/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc index 149bb8b05..0a9863f07 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc @@ -982,7 +982,7 @@ DEFImporter::read_vias (db::Layout & /*layout*/, db::Cell & /*design*/, double s std::string ln = get (); - if (m_lef_importer.is_routing_layer (ln) && seen_layers.find (ln) != seen_layers.end ()) { + if (m_lef_importer.is_routing_layer (ln) && seen_layers.find (ln) == seen_layers.end ()) { seen_layers.insert (ln); routing_layers.push_back (ln); } @@ -1004,7 +1004,7 @@ DEFImporter::read_vias (db::Layout & /*layout*/, db::Cell & /*design*/, double s std::string ln = get (); - if (m_lef_importer.is_routing_layer (ln) && seen_layers.find (ln) != seen_layers.end ()) { + if (m_lef_importer.is_routing_layer (ln) && seen_layers.find (ln) == seen_layers.end ()) { seen_layers.insert (ln); routing_layers.push_back (ln); } @@ -1015,7 +1015,7 @@ DEFImporter::read_vias (db::Layout & /*layout*/, db::Cell & /*design*/, double s } db::Polygon poly; - read_polygon (poly, scale); + read_rect (poly, scale); geo_based_vg->add_polygon (ln, poly, mask); } diff --git a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc index 431a002ce..5076365e2 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc @@ -245,7 +245,7 @@ GeometryBasedViaGenerator::GeometryBasedViaGenerator () void GeometryBasedViaGenerator::create_cell (LEFDEFReaderState &reader, Layout &layout, db::Cell &cell, unsigned int /*mask_bottom*/, unsigned int /*mask_cut*/, unsigned int /*mask_top*/, const LEFDEFNumberOfMasks * /*nm*/) { - for (std::map > >::const_iterator g = m_geometries.begin (); g != m_geometries.end (); ++g) { + for (std::map > >::const_iterator g = m_polygons.begin (); g != m_polygons.end (); ++g) { for (std::list >::const_iterator i = g->second.begin (); i != g->second.end (); ++i) { @@ -259,12 +259,33 @@ GeometryBasedViaGenerator::create_cell (LEFDEFReaderState &reader, Layout &layou } } + + for (std::map > >::const_iterator g = m_boxes.begin (); g != m_boxes.end (); ++g) { + + for (std::list >::const_iterator i = g->second.begin (); i != g->second.end (); ++i) { + + std::pair dl (false, 0); + + dl = reader.open_layer (layout, g->first, ViaGeometry, i->first); + if (dl.first) { + cell.shapes (dl.second).insert (i->second); + } + + } + + } } void GeometryBasedViaGenerator::add_polygon (const std::string &ln, const db::Polygon &poly, unsigned int mask) { - m_geometries [ln].push_back (std::make_pair (mask, poly)); + m_polygons [ln].push_back (std::make_pair (mask, poly)); +} + +void +GeometryBasedViaGenerator::add_box (const std::string &ln, const db::Box &box, unsigned int mask) +{ + m_boxes [ln].push_back (std::make_pair (mask, box)); } // ----------------------------------------------------------------------------------- diff --git a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.h b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.h index d0c298328..c98b72f1c 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.h +++ b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.h @@ -925,9 +925,11 @@ public: virtual void create_cell (LEFDEFReaderState &reader, Layout &layout, db::Cell &cell, unsigned int mask_bottom, unsigned int mask_cut, unsigned int mask_top, const LEFDEFNumberOfMasks *num_cut_masks); void add_polygon (const std::string &ln, const db::Polygon &poly, unsigned int mask); + void add_box (const std::string &ln, const db::Box &box, unsigned int mask); private: - std::map > > m_geometries; + std::map > > m_polygons; + std::map > > m_boxes; }; /** diff --git a/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc index 003826ccb..c5297c4ca 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc @@ -607,7 +607,7 @@ LEFImporter::read_viadef_by_geometry (GeometryBasedViaGenerator *vg, ViaDesc &vi } db::Box b (points [0], points [1]); - vg->add_polygon (layer_name, db::Polygon (b), mask); + vg->add_box (layer_name, b, mask); expect (";");