From 32fdb4664953d9f29af92b103e95b35c54c7c099 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 5 Aug 2023 00:58:16 +0200 Subject: [PATCH] Allowing PINNAME and LEFPINNAME purposes in LEF/DEF .map files for a more consistent format (avoids the NAME notation) --- .../lefdef/db_plugin/dbLEFDEFImporter.cc | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc index 5c4a4a4a8..0c74b0633 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc @@ -893,16 +893,18 @@ LEFDEFReaderOptions::special_routing_datatype_str () const LEFDEFReaderState::LEFDEFReaderState (const LEFDEFReaderOptions *tc, db::Layout &layout, const std::string &base_path) : mp_importer (0), m_create_layers (true), m_has_explicit_layer_mapping (false), m_laynum (1), mp_tech_comp (tc) { - if (! tc->map_file ().empty ()) { + if (! tc) { + + // use default options + + } else if (! tc->map_file ().empty ()) { read_map_file (tc->map_file (), layout, base_path); } else { - if (tc) { - m_layer_map = tc->layer_map (); - m_create_layers = tc->read_all_layers (); - } + m_layer_map = tc->layer_map (); + m_create_layers = tc->read_all_layers (); } } @@ -1007,7 +1009,6 @@ LEFDEFReaderState::read_map_file (const std::string &filename, db::Layout &layou // build an explicit layer mapping now. - tl_assert (m_has_explicit_layer_mapping); m_layers.clear (); m_layer_map.clear (); @@ -1030,9 +1031,12 @@ LEFDEFReaderState::read_single_map_file (const std::string &path, std::map purpose_translation; purpose_translation ["LEFPIN"] = LEFPins; purpose_translation ["PIN"] = Pins; + purpose_translation ["LEFPINNAME"] = LEFLabel; + purpose_translation ["PINNAME"] = Label; purpose_translation ["FILL"] = Fills; purpose_translation ["FILLOPC"] = FillsOPC; purpose_translation ["LEFOBS"] = Obstructions; @@ -1042,6 +1046,11 @@ LEFDEFReaderState::read_single_map_file (const std::string &path, std::mapsecond == All) { - for (std::map::const_iterator p = purpose_translation.begin (); p != purpose_translation.end (); ++p) { - if (p->second != All && p->second != Blockage) { - translated_purposes.insert (LayerDetailsKey (p->second, mask, via_size)); - } + for (LayerPurpose *p = all_purposes; p != all_purposes + sizeof (all_purposes) / sizeof (all_purposes[0]); ++p) { + translated_purposes.insert (LayerDetailsKey (*p, mask, via_size)); } } else {