From b02a4a3bfa35653fb6d5604c4ebd841467a9fa1f Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 8 Jun 2021 22:16:10 +0200 Subject: [PATCH] Propsed solution for #824: introduce a new internal purpose: LEFLabel which maps label for LEF pins --- src/buddies/src/bd/bdReaderOptions.cc | 28 +- src/buddies/src/bd/bdReaderOptions.h | 3 + src/drc/unit_tests/drcSimpleTests.cc | 6 + .../lefdef/db_plugin/dbLEFDEFImporter.cc | 42 +- .../lefdef/db_plugin/dbLEFDEFImporter.h | 38 +- .../lefdef/db_plugin/dbLEFDEFPlugin.cc | 3 + .../lefdef/db_plugin/dbLEFImporter.cc | 2 +- .../lefdef/db_plugin/gsiDeclDbLEFDEF.cc | 36 ++ .../LEFDEFTechnologyComponentEditor.ui | 584 +++++++++--------- .../lay_plugin/layLEFDEFImportDialogs.cc | 6 + 10 files changed, 453 insertions(+), 295 deletions(-) diff --git a/src/buddies/src/bd/bdReaderOptions.cc b/src/buddies/src/bd/bdReaderOptions.cc index 678abdd2d..fde037d2b 100644 --- a/src/buddies/src/bd/bdReaderOptions.cc +++ b/src/buddies/src/bd/bdReaderOptions.cc @@ -110,6 +110,9 @@ GenericReaderOptions::GenericReaderOptions () m_lefdef_produce_labels = load_options.get_option_by_name ("lefdef_config.produce_labels").to_bool (); m_lefdef_label_suffix = load_options.get_option_by_name ("lefdef_config.labels_suffix").to_string (); m_lefdef_label_datatype = load_options.get_option_by_name ("lefdef_config.labels_datatype").to_int (); + m_lefdef_produce_lef_labels = load_options.get_option_by_name ("lefdef_config.produce_lef_labels").to_bool (); + m_lefdef_lef_label_suffix = load_options.get_option_by_name ("lefdef_config.lef_labels_suffix").to_string (); + m_lefdef_lef_label_datatype = load_options.get_option_by_name ("lefdef_config.lef_labels_datatype").to_int (); m_lefdef_produce_routing = load_options.get_option_by_name ("lefdef_config.produce_routing").to_bool (); m_lefdef_routing_suffix = load_options.get_option_by_name ("lefdef_config.routing_suffix_str").to_string (); m_lefdef_routing_datatype = load_options.get_option_by_name ("lefdef_config.routing_datatype_str").to_string (); @@ -584,16 +587,30 @@ GenericReaderOptions::add_options (tl::CommandLineOptions &cmd) "See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n" ) << tl::arg (group + - "#!--" + m_long_prefix + "lefdef-dont-produce-labels", &m_lefdef_produce_labels, "Skips label when producing geometry", - "If this option is given, no blockage geometry will be produced." + "#!--" + m_long_prefix + "lefdef-dont-produce-labels", &m_lefdef_produce_labels, "Skips DEF pin label when producing geometry", + "If this option is given, no DEF pin label will be produced." ) << tl::arg (group + - "#--" + m_long_prefix + "lefdef-label-suffix", &m_lefdef_label_suffix, "Specifies the label markers layer suffix in pattern-based mode", + "#--" + m_long_prefix + "lefdef-label-suffix", &m_lefdef_label_suffix, "Specifies the DEF pin label layer suffix in pattern-based mode", "The label marker generation and layer mapping is designed in the same way than via geometry mapping, except the option to use mask specific target layers. " "See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n" ) << tl::arg (group + - "#--" + m_long_prefix + "lefdef-label-datatype", &m_lefdef_label_datatype, "Specifies the label markers layer datatype in pattern-based mode", + "#--" + m_long_prefix + "lefdef-label-datatype", &m_lefdef_label_datatype, "Specifies the DEF pin label layer datatype in pattern-based mode", + "The label marker generation and layer mapping is designed in the same way than via geometry mapping, except the option to use mask specific target layers. " + "See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n" + ) + << tl::arg (group + + "#!--" + m_long_prefix + "lefdef-dont-produce-lef-labels", &m_lefdef_produce_lef_labels, "Skips LEF pin label when producing geometry", + "If this option is given, no LEF pin label will be produced." + ) + << tl::arg (group + + "#--" + m_long_prefix + "lefdef-lef-label-suffix", &m_lefdef_lef_label_suffix, "Specifies the LEF pin label layer suffix in pattern-based mode", + "The label marker generation and layer mapping is designed in the same way than via geometry mapping, except the option to use mask specific target layers. " + "See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n" + ) + << tl::arg (group + + "#--" + m_long_prefix + "lefdef-lef-label-datatype", &m_lefdef_lef_label_datatype, "Specifies the LEF pin label layer datatype in pattern-based mode", "The label marker generation and layer mapping is designed in the same way than via geometry mapping, except the option to use mask specific target layers. " "See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n" ) @@ -776,6 +793,9 @@ GenericReaderOptions::configure (db::LoadLayoutOptions &load_options) load_options.set_option_by_name ("lefdef_config.produce_labels", m_lefdef_produce_labels); load_options.set_option_by_name ("lefdef_config.labels_suffix", m_lefdef_label_suffix); load_options.set_option_by_name ("lefdef_config.labels_datatype", m_lefdef_label_datatype); + load_options.set_option_by_name ("lefdef_config.produce_lef_labels", m_lefdef_produce_lef_labels); + load_options.set_option_by_name ("lefdef_config.lef_labels_suffix", m_lefdef_lef_label_suffix); + load_options.set_option_by_name ("lefdef_config.lef_labels_datatype", m_lefdef_lef_label_datatype); load_options.set_option_by_name ("lefdef_config.produce_routing", m_lefdef_produce_routing); load_options.set_option_by_name ("lefdef_config.routing_suffix_str", m_lefdef_routing_suffix); load_options.set_option_by_name ("lefdef_config.routing_datatype_str", m_lefdef_routing_datatype); diff --git a/src/buddies/src/bd/bdReaderOptions.h b/src/buddies/src/bd/bdReaderOptions.h index 2691f3218..3b0e22bff 100644 --- a/src/buddies/src/bd/bdReaderOptions.h +++ b/src/buddies/src/bd/bdReaderOptions.h @@ -176,6 +176,9 @@ private: bool m_lefdef_produce_labels; std::string m_lefdef_label_suffix; int m_lefdef_label_datatype; + bool m_lefdef_produce_lef_labels; + std::string m_lefdef_lef_label_suffix; + int m_lefdef_lef_label_datatype; bool m_lefdef_produce_routing; std::string m_lefdef_routing_suffix; std::string m_lefdef_routing_datatype; diff --git a/src/drc/unit_tests/drcSimpleTests.cc b/src/drc/unit_tests/drcSimpleTests.cc index 11b7e6413..6b19de6d3 100644 --- a/src/drc/unit_tests/drcSimpleTests.cc +++ b/src/drc/unit_tests/drcSimpleTests.cc @@ -1292,3 +1292,9 @@ TEST(49d_drcWithFragments) { run_test (_this, "49", true); } + +TEST(50_issue826) +{ + run_test (_this, "50", false); +} + diff --git a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc index 3d89896f5..ba8b8a7f0 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc @@ -127,6 +127,8 @@ static std::string purpose_to_name (LayerPurpose purpose) return "VIA"; case Label: return "LABEL"; + case LEFLabel: + return "LEFLABEL"; case Pins: return "PIN"; case Fills: @@ -497,6 +499,9 @@ LEFDEFReaderOptions::LEFDEFReaderOptions () m_produce_labels (true), m_labels_suffix (".LABEL"), m_labels_datatype (1), + m_produce_lef_labels (true), + m_lef_labels_suffix (".LABEL"), + m_lef_labels_datatype (1), m_produce_routing (true), m_routing_suffix (""), m_routing_datatype (0), @@ -566,6 +571,9 @@ LEFDEFReaderOptions &LEFDEFReaderOptions::operator= (const LEFDEFReaderOptions & m_produce_labels = d.m_produce_labels; m_labels_suffix = d.m_labels_suffix; m_labels_datatype = d.m_labels_datatype; + m_produce_lef_labels = d.m_produce_lef_labels; + m_lef_labels_suffix = d.m_lef_labels_suffix; + m_lef_labels_datatype = d.m_lef_labels_datatype; m_produce_routing = d.m_produce_routing; m_routing_suffix = d.m_routing_suffix; m_routing_suffixes = d.m_routing_suffixes; @@ -991,23 +999,38 @@ LEFDEFReaderState::read_map_file (const std::string &path, db::Layout &layout) // "(M1/LABELS): M1.LABEL" // "(M2/LABELS): M2.LABEL" + LayerPurpose label_purpose = Pins; + std::vector layer_names; std::vector purposes = tl::split (w2, ","); for (std::vector::const_iterator p = purposes.begin (); p != purposes.end (); ++p) { if (*p == "DIEAREA" || *p == "ALL" || *p == "COMP") { tl::warn << tl::sprintf (tl::to_string (tr ("Reading layer map file %s, line %d: NAME record ignored for entity: %s")), path, ts.line_number (), *p); } else { - layer_names.push_back (tl::split (*p, "/").front ()); + std::vector lp = tl::split (*p, "/"); + if (lp.size () > 1) { + std::map::const_iterator i = purpose_translation.find (lp[1]); + if (i != purpose_translation.end ()) { + label_purpose = i->second; + } + } + layer_names.push_back (lp.front ()); } } - std::string final_name = tl::join (layer_names, "/") + ".LABEL"; - for (std::vector::const_iterator ln = layer_names.begin (); ln != layer_names.end (); ++ln) { - for (std::vector::const_iterator l = layers.begin (); l != layers.end (); ++l) { - for (std::vector::const_iterator d = datatypes.begin (); d != datatypes.end (); ++d) { - layer_map [std::make_pair (*ln, LayerDetailsKey (Label))].push_back (db::LayerProperties (*l, *d, final_name)); + if (label_purpose == Pins || label_purpose == LEFPins) { + + LayerPurpose layer_purpose = label_purpose == Pins ? Label : LEFLabel; + + std::string final_name = tl::join (layer_names, "/") + "." + purpose_to_name (layer_purpose); + for (std::vector::const_iterator ln = layer_names.begin (); ln != layer_names.end (); ++ln) { + for (std::vector::const_iterator l = layers.begin (); l != layers.end (); ++l) { + for (std::vector::const_iterator d = datatypes.begin (); d != datatypes.end (); ++d) { + layer_map [std::make_pair (*ln, LayerDetailsKey (layer_purpose))].push_back (db::LayerProperties (*l, *d, final_name)); + } } } + } } else if (w1 == "COMP") { @@ -1320,6 +1343,9 @@ std::set LEFDEFReaderState::open_layer_uncached(db::Layout &layout case Label: produce = mp_tech_comp->produce_labels (); break; + case LEFLabel: + produce = mp_tech_comp->produce_lef_labels (); + break; case Pins: produce = mp_tech_comp->produce_pins (); break; @@ -1364,6 +1390,10 @@ std::set LEFDEFReaderState::open_layer_uncached(db::Layout &layout name_suffix = mp_tech_comp->labels_suffix (); dt = mp_tech_comp->labels_datatype (); break; + case LEFLabel: + name_suffix = mp_tech_comp->lef_labels_suffix (); + dt = mp_tech_comp->lef_labels_datatype (); + break; case Pins: name_suffix = mp_tech_comp->pins_suffix_per_mask (mask); dt = mp_tech_comp->pins_datatype_per_mask (mask); diff --git a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.h b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.h index c022d0735..afe0b547c 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.h +++ b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.h @@ -607,7 +607,7 @@ public: return m_produce_labels; } - void set_produce_labels (bool f) + void set_produce_labels (bool f) { m_produce_labels = f; } @@ -632,6 +632,36 @@ public: m_labels_datatype = s; } + bool produce_lef_labels () const + { + return m_produce_lef_labels; + } + + void set_produce_lef_labels (bool f) + { + m_produce_lef_labels = f; + } + + const std::string &lef_labels_suffix () const + { + return m_lef_labels_suffix; + } + + void set_lef_labels_suffix (const std::string &s) + { + m_lef_labels_suffix = s; + } + + int lef_labels_datatype () const + { + return m_lef_labels_datatype; + } + + void set_lef_labels_datatype (int s) + { + m_lef_labels_datatype = s; + } + bool produce_routing () const { return m_produce_routing; @@ -953,6 +983,9 @@ private: bool m_produce_labels; std::string m_labels_suffix; int m_labels_datatype; + bool m_produce_lef_labels; + std::string m_lef_labels_suffix; + int m_lef_labels_datatype; bool m_produce_routing; std::string m_routing_suffix; int m_routing_datatype; @@ -984,7 +1017,8 @@ enum LayerPurpose SpecialRouting, // from DEF only LEFPins, // from LEF ViaGeometry, // from LEF+DEF - Label, // from LEF+DEF + Label, // from DEF + LEFLabel, // from LEF Obstructions, // from LEF only Outline, // from LEF+DEF Blockage, // from DEF only diff --git a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFPlugin.cc b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFPlugin.cc index cb6c92ec0..35489ff1e 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFPlugin.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFPlugin.cc @@ -374,6 +374,9 @@ class LEFDEFFormatDeclaration tl::make_member (&LEFDEFReaderOptions::produce_labels, &LEFDEFReaderOptions::set_produce_labels, "produce-labels") + tl::make_member (&LEFDEFReaderOptions::labels_suffix, &LEFDEFReaderOptions::set_labels_suffix, "labels-suffix") + tl::make_member (&LEFDEFReaderOptions::labels_datatype, &LEFDEFReaderOptions::set_labels_datatype, "labels-datatype") + + tl::make_member (&LEFDEFReaderOptions::produce_lef_labels, &LEFDEFReaderOptions::set_produce_lef_labels, "produce-lef-labels") + + tl::make_member (&LEFDEFReaderOptions::lef_labels_suffix, &LEFDEFReaderOptions::set_lef_labels_suffix, "lef-labels-suffix") + + tl::make_member (&LEFDEFReaderOptions::lef_labels_datatype, &LEFDEFReaderOptions::set_lef_labels_datatype, "lef-labels-datatype") + tl::make_member (&LEFDEFReaderOptions::produce_routing, &LEFDEFReaderOptions::set_produce_routing, "produce-routing") + // for backward compatibility tl::make_member (&LEFDEFReaderOptions::set_routing_suffix, "special-routing-suffix") + diff --git a/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc index 2714a5d52..b98adb222 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc @@ -887,7 +887,7 @@ LEFImporter::read_macro (Layout &layout) read_geometries (mg, layout.dbu (), LEFPins, &boxes_for_labels, prop_id); for (std::map ::const_iterator b = boxes_for_labels.begin (); b != boxes_for_labels.end (); ++b) { - mg->add_text (b->first, Label, db::Text (label.c_str (), db::Trans (b->second.center () - db::Point ())), 0, 0); + mg->add_text (b->first, LEFLabel, db::Text (label.c_str (), db::Trans (b->second.center () - db::Point ())), 0, 0); } } else { diff --git a/src/plugins/streamers/lefdef/db_plugin/gsiDeclDbLEFDEF.cc b/src/plugins/streamers/lefdef/db_plugin/gsiDeclDbLEFDEF.cc index 3bf4f4ad4..17a334da2 100644 --- a/src/plugins/streamers/lefdef/db_plugin/gsiDeclDbLEFDEF.cc +++ b/src/plugins/streamers/lefdef/db_plugin/gsiDeclDbLEFDEF.cc @@ -662,6 +662,42 @@ gsi::Class decl_lefdef_config ("db", "LEFDEFReaderConfi "@brief Sets the labels layer datatype value.\n" "See \\produce_via_geometry for details about the layer production rules." ) + + gsi::method ("produce_lef_labels", &db::LEFDEFReaderOptions::produce_lef_labels, + "@brief Gets a value indicating whether lef_labels shall be produced.\n" + "See \\produce_via_geometry for details about the layer production rules.\n" + "\n" + "This method has been introduced in version 0.27.2\n" + ) + + gsi::method ("produce_lef_labels=", &db::LEFDEFReaderOptions::set_produce_lef_labels, gsi::arg ("produce"), + "@brief Sets a value indicating whether lef_labels shall be produced.\n" + "See \\produce_via_geometry for details about the layer production rules.\n" + "\n" + "This method has been introduced in version 0.27.2\n" + ) + + gsi::method ("lef_labels_suffix", &db::LEFDEFReaderOptions::lef_labels_suffix, + "@brief Gets the label layer name suffix.\n" + "See \\produce_via_geometry for details about the layer production rules.\n" + "\n" + "This method has been introduced in version 0.27.2\n" + ) + + gsi::method ("lef_labels_suffix=", &db::LEFDEFReaderOptions::set_lef_labels_suffix, gsi::arg ("suffix"), + "@brief Sets the label layer name suffix.\n" + "See \\produce_via_geometry for details about the layer production rules.\n" + "\n" + "This method has been introduced in version 0.27.2\n" + ) + + gsi::method ("lef_labels_datatype", &db::LEFDEFReaderOptions::lef_labels_datatype, + "@brief Gets the lef_labels layer datatype value.\n" + "See \\produce_via_geometry for details about the layer production rules.\n" + "\n" + "This method has been introduced in version 0.27.2\n" + ) + + gsi::method ("lef_labels_datatype=", &db::LEFDEFReaderOptions::set_lef_labels_datatype, gsi::arg ("datatype"), + "@brief Sets the lef_labels layer datatype value.\n" + "See \\produce_via_geometry for details about the layer production rules.\n" + "\n" + "This method has been introduced in version 0.27.2\n" + ) + gsi::method ("produce_routing", &db::LEFDEFReaderOptions::produce_routing, "@brief Gets a value indicating whether routing geometry shall be produced.\n" "See \\produce_via_geometry for details about the layer production rules." diff --git a/src/plugins/streamers/lefdef/lay_plugin/LEFDEFTechnologyComponentEditor.ui b/src/plugins/streamers/lefdef/lay_plugin/LEFDEFTechnologyComponentEditor.ui index f999fa569..269457785 100644 --- a/src/plugins/streamers/lefdef/lay_plugin/LEFDEFTechnologyComponentEditor.ui +++ b/src/plugins/streamers/lefdef/lay_plugin/LEFDEFTechnologyComponentEditor.ui @@ -35,7 +35,7 @@ - 0 + 2 @@ -1037,8 +1037,8 @@ Otherwise it's looked up relative to the LEF or DEF file. 0 - - + + 0 @@ -1047,8 +1047,56 @@ Otherwise it's looked up relative to the LEF or DEF file. - - + + + + + 0 + 0 + + + + + + + + Layer name +suffix ... + + + + + + + Routing (*) + + + + + + + + 0 + 0 + + + + + + + :/right.png + + + + + + + Special routing (*) + + + + + 0 @@ -1073,6 +1121,16 @@ Otherwise it's looked up relative to the LEF or DEF file. + + + + + 0 + 0 + + + + @@ -1089,174 +1147,6 @@ Otherwise it's looked up relative to the LEF or DEF file. - - - - - 0 - 0 - - - - - - - - Fills (*) - - - - - - - Layer name -suffix ... - - - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - - - - - LEF Pins (*) - - - - - - - Layer name -suffix ... - - - - - - - - - - :/right.png - - - - - - - Via geometry (*) - - - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - - - - - GDS data- -type ... - - - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - - - - :/right.png - - - - - - - - 0 - 0 - - - - - - - - Pins (*) - - - @@ -1273,6 +1163,129 @@ type ... + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + + + :/right.png + + + + + + + + 0 + 0 + + + + + + + :/right.png + + + + + + + Qt::Vertical + + + + + + + + + + :/right.png + + + + + + + Fills (*) + + + + + + + Via geometry (*) + + + + + + + Obstructions + + + + + + + + 0 + 0 + + + + + + + :/right.png + + + + + + + Pins (*) + + + + + + + + 0 + 0 + + + + @@ -1283,6 +1296,52 @@ type ... + + + + + 0 + 0 + + + + + + + + GDS data- +type ... + + + + + + + + 0 + 0 + + + + + + + + Layer name +suffix ... + + + + + + + + 0 + 0 + + + + @@ -1309,22 +1368,8 @@ type ... - - - - Special routing (*) - - - - - - - Obstructions - - - - - + + 0 @@ -1333,19 +1378,75 @@ type ... - - + + - + 0 0 - - + + + + + + + 0 + 0 + - - :/right.png + + + + + + LEF Pins (*) + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + + + + GDS data- +type ... + + + + + + + Blockages @@ -1356,79 +1457,15 @@ type ... - - - - GDS data- -type ... - - - - - - - Routing (*) - - - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - - - - :/right.png - - - - - - - Qt::Vertical - - - - - - - - 0 - 0 - - - - - + - Blockages + LEF pin labels - - - - 0 - 0 - - + @@ -1438,24 +1475,10 @@ type ... - - - - 0 - 0 - - - + - - - - 0 - 0 - - - + @@ -1613,9 +1636,6 @@ type ... produce_labels suffix_labels datatype_labels - produce_blockages - suffix_blockages - datatype_blockages read_all_cbx diff --git a/src/plugins/streamers/lefdef/lay_plugin/layLEFDEFImportDialogs.cc b/src/plugins/streamers/lefdef/lay_plugin/layLEFDEFImportDialogs.cc index 58f35e1aa..744dab2f0 100644 --- a/src/plugins/streamers/lefdef/lay_plugin/layLEFDEFImportDialogs.cc +++ b/src/plugins/streamers/lefdef/lay_plugin/layLEFDEFImportDialogs.cc @@ -516,6 +516,9 @@ LEFDEFReaderOptionsEditor::commit (db::FormatSpecificReaderOptions *options, con data->set_produce_labels (produce_labels->isChecked ()); data->set_labels_suffix (tl::to_string (suffix_labels->text ())); data->set_labels_datatype (datatype_labels->text ().toInt ()); + data->set_produce_lef_labels (produce_lef_labels->isChecked ()); + data->set_lef_labels_suffix (tl::to_string (suffix_lef_labels->text ())); + data->set_lef_labels_datatype (datatype_lef_labels->text ().toInt ()); data->set_separate_groups (separate_groups->isChecked ()); data->set_read_lef_with_def (read_lef_with_def->isChecked ()); data->set_map_file (tl::to_string (mapfile_path->text ())); @@ -587,6 +590,9 @@ LEFDEFReaderOptionsEditor::setup (const db::FormatSpecificReaderOptions *options produce_labels->setChecked (data->produce_labels ()); suffix_labels->setText (tl::to_qstring (data->labels_suffix ())); datatype_labels->setText (QString::number (data->labels_datatype ())); + produce_lef_labels->setChecked (data->produce_lef_labels ()); + suffix_lef_labels->setText (tl::to_qstring (data->lef_labels_suffix ())); + datatype_lef_labels->setText (QString::number (data->lef_labels_datatype ())); separate_groups->setChecked (data->separate_groups ()); read_lef_with_def->setChecked (data->read_lef_with_def ()); mapfile_path->setText (tl::to_qstring (data->map_file ()));