Propsed solution for #824: introduce a new internal purpose: LEFLabel which maps label for LEF pins

This commit is contained in:
Matthias Koefferlein 2021-06-08 22:16:10 +02:00
parent 15c97123b5
commit b02a4a3bfa
10 changed files with 453 additions and 295 deletions

View File

@ -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);

View File

@ -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;

View File

@ -1292,3 +1292,9 @@ TEST(49d_drcWithFragments)
{
run_test (_this, "49", true);
}
TEST(50_issue826)
{
run_test (_this, "50", false);
}

View File

@ -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<std::string> layer_names;
std::vector<std::string> purposes = tl::split (w2, ",");
for (std::vector<std::string>::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<std::string> lp = tl::split (*p, "/");
if (lp.size () > 1) {
std::map<std::string, LayerPurpose>::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<std::string>::const_iterator ln = layer_names.begin (); ln != layer_names.end (); ++ln) {
for (std::vector<int>::const_iterator l = layers.begin (); l != layers.end (); ++l) {
for (std::vector<int>::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<std::string>::const_iterator ln = layer_names.begin (); ln != layer_names.end (); ++ln) {
for (std::vector<int>::const_iterator l = layers.begin (); l != layers.end (); ++l) {
for (std::vector<int>::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<unsigned int> 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<unsigned int> 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);

View File

@ -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

View File

@ -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") +

View File

@ -887,7 +887,7 @@ LEFImporter::read_macro (Layout &layout)
read_geometries (mg, layout.dbu (), LEFPins, &boxes_for_labels, prop_id);
for (std::map <std::string, db::Box>::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 {

View File

@ -662,6 +662,42 @@ gsi::Class<db::LEFDEFReaderOptions> 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."

View File

@ -35,7 +35,7 @@
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
<number>2</number>
</property>
<widget class="QWidget" name="tab_3">
<attribute name="title">
@ -1037,8 +1037,8 @@ Otherwise it's looked up relative to the LEF or DEF file.
<property name="bottomMargin">
<number>0</number>
</property>
<item row="3" column="2">
<widget class="QLineEdit" name="suffix_lef_pins">
<item row="2" column="8">
<widget class="QLineEdit" name="datatype_special_routing">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -1047,8 +1047,56 @@ Otherwise it's looked up relative to the LEF or DEF file.
</property>
</widget>
</item>
<item row="2" column="6">
<widget class="QLabel" name="label_16">
<item row="2" column="2">
<widget class="QLineEdit" name="suffix_pins">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="lbl1">
<property name="text">
<string>Layer name
suffix ...</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QCheckBox" name="produce_routing">
<property name="text">
<string>Routing (*)</string>
</property>
</widget>
</item>
<item row="5" column="6">
<widget class="QLabel" name="label_17">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QCheckBox" name="produce_special_routing">
<property name="text">
<string>Special routing (*)</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_13">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
@ -1073,6 +1121,16 @@ Otherwise it's looked up relative to the LEF or DEF file.
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QLineEdit" name="datatype_lef_pins">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="6">
<widget class="QLabel" name="label_23">
<property name="sizePolicy">
@ -1089,174 +1147,6 @@ Otherwise it's looked up relative to the LEF or DEF file.
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLineEdit" name="suffix_via_geometry">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="produce_fills">
<property name="text">
<string>Fills (*)</string>
</property>
</widget>
</item>
<item row="0" column="7">
<widget class="QLabel" name="lbl1_2">
<property name="text">
<string>Layer name
suffix ...</string>
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QLineEdit" name="datatype_obstructions">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="8">
<widget class="QLineEdit" name="datatype_routing">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="produce_lef_pins">
<property name="text">
<string>LEF Pins (*)</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="lbl1">
<property name="text">
<string>Layer name
suffix ...</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="label_30">
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="produce_via_geometry">
<property name="text">
<string>Via geometry (*)</string>
</property>
</widget>
</item>
<item row="3" column="8">
<widget class="QLineEdit" name="datatype_labels">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLineEdit" name="suffix_pins">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="3" column="7">
<widget class="QLineEdit" name="suffix_labels">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="7">
<widget class="QLineEdit" name="suffix_routing">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_3">
<property name="text">
<string>GDS data-
type ...</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QLineEdit" name="suffix_fills">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="3" column="6">
<widget class="QLabel" name="label_24">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
</property>
</widget>
</item>
<item row="2" column="7">
<widget class="QLineEdit" name="suffix_special_routing">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="produce_pins">
<property name="text">
<string>Pins (*)</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="label_14">
<property name="sizePolicy">
@ -1273,6 +1163,129 @@ type ...</string>
</property>
</widget>
</item>
<item row="5" column="8">
<widget class="QLineEdit" name="datatype_blockages">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QLineEdit" name="datatype_fills">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_12">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
</property>
</widget>
</item>
<item row="3" column="6">
<widget class="QLabel" name="label_24">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
</property>
</widget>
</item>
<item row="0" column="4" rowspan="6">
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="label_30">
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="produce_fills">
<property name="text">
<string>Fills (*)</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="produce_via_geometry">
<property name="text">
<string>Via geometry (*)</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="produce_obstructions">
<property name="text">
<string>Obstructions</string>
</property>
</widget>
</item>
<item row="2" column="6">
<widget class="QLabel" name="label_16">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="produce_pins">
<property name="text">
<string>Pins (*)</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QLineEdit" name="suffix_fills">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QLineEdit" name="suffix_obstructions">
<property name="sizePolicy">
@ -1283,6 +1296,52 @@ type ...</string>
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QLineEdit" name="datatype_obstructions">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="0" column="8">
<widget class="QLabel" name="label_27">
<property name="text">
<string>GDS data-
type ...</string>
</property>
</widget>
</item>
<item row="1" column="8">
<widget class="QLineEdit" name="datatype_routing">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="0" column="7">
<widget class="QLabel" name="lbl1_2">
<property name="text">
<string>Layer name
suffix ...</string>
</property>
</widget>
</item>
<item row="2" column="7">
<widget class="QLineEdit" name="suffix_special_routing">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLineEdit" name="datatype_via_geometry">
<property name="sizePolicy">
@ -1309,22 +1368,8 @@ type ...</string>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QCheckBox" name="produce_special_routing">
<property name="text">
<string>Special routing (*)</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="produce_obstructions">
<property name="text">
<string>Obstructions</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QLineEdit" name="datatype_lef_pins">
<item row="1" column="7">
<widget class="QLineEdit" name="suffix_routing">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -1333,19 +1378,75 @@ type ...</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_13">
<item row="3" column="8">
<widget class="QLineEdit" name="datatype_labels">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</widget>
</item>
<item row="1" column="2">
<widget class="QLineEdit" name="suffix_via_geometry">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="pixmap">
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="produce_lef_pins">
<property name="text">
<string>LEF Pins (*)</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLineEdit" name="suffix_lef_pins">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="5" column="7">
<widget class="QLineEdit" name="suffix_blockages">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="3" column="7">
<widget class="QLineEdit" name="suffix_labels">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_3">
<property name="text">
<string>GDS data-
type ...</string>
</property>
</widget>
</item>
<item row="5" column="5">
<widget class="QCheckBox" name="produce_blockages">
<property name="text">
<string>Blockages</string>
</property>
</widget>
</item>
@ -1356,79 +1457,15 @@ type ...</string>
</property>
</widget>
</item>
<item row="0" column="8">
<widget class="QLabel" name="label_27">
<property name="text">
<string>GDS data-
type ...</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QCheckBox" name="produce_routing">
<property name="text">
<string>Routing (*)</string>
</property>
</widget>
</item>
<item row="2" column="8">
<widget class="QLineEdit" name="datatype_special_routing">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_12">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
</property>
</widget>
</item>
<item row="0" column="4" rowspan="6">
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QLineEdit" name="datatype_fills">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="4" column="5">
<widget class="QCheckBox" name="produce_blockages">
<widget class="QCheckBox" name="produce_lef_labels">
<property name="text">
<string>Blockages</string>
<string>LEF pin labels</string>
</property>
</widget>
</item>
<item row="4" column="6">
<widget class="QLabel" name="label_17">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<widget class="QLabel" name="label_32">
<property name="text">
<string/>
</property>
@ -1438,24 +1475,10 @@ type ...</string>
</widget>
</item>
<item row="4" column="7">
<widget class="QLineEdit" name="suffix_blockages">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
<widget class="QLineEdit" name="suffix_lef_labels"/>
</item>
<item row="4" column="8">
<widget class="QLineEdit" name="datatype_blockages">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
<widget class="QLineEdit" name="datatype_lef_labels"/>
</item>
</layout>
</widget>
@ -1613,9 +1636,6 @@ type ...</string>
<tabstop>produce_labels</tabstop>
<tabstop>suffix_labels</tabstop>
<tabstop>datatype_labels</tabstop>
<tabstop>produce_blockages</tabstop>
<tabstop>suffix_blockages</tabstop>
<tabstop>datatype_blockages</tabstop>
<tabstop>read_all_cbx</tabstop>
</tabstops>
<resources>

View File

@ -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 ()));