mirror of https://github.com/KLayout/klayout.git
New layer flavors: special nets, LEF pins.
This commit is contained in:
parent
9825245e0c
commit
e51f15b116
|
|
@ -543,7 +543,7 @@ DEFImporter::read_single_net (std::string &nondefaultrule, Layout &layout, db::C
|
|||
|
||||
test (")");
|
||||
|
||||
std::pair <bool, unsigned int> dl = open_layer (layout, ln, Routing);
|
||||
std::pair <bool, unsigned int> dl = open_layer (layout, ln, specialnets ? SpecialRouting : Routing);
|
||||
if (dl.first) {
|
||||
|
||||
db::Point p (x, y);
|
||||
|
|
@ -597,7 +597,7 @@ DEFImporter::read_single_net (std::string &nondefaultrule, Layout &layout, db::C
|
|||
}
|
||||
|
||||
if (pts.size () > 1) {
|
||||
std::pair <bool, unsigned int> dl = open_layer (layout, ln, Routing);
|
||||
std::pair <bool, unsigned int> dl = open_layer (layout, ln, specialnets ? SpecialRouting : Routing);
|
||||
if (dl.first) {
|
||||
produce_routing_geometry (design, style, dl.second, prop_id, pts, ext, w);
|
||||
}
|
||||
|
|
@ -749,7 +749,7 @@ DEFImporter::read_nets (db::Layout &layout, db::Cell &design, double scale, bool
|
|||
db::Polygon p;
|
||||
read_polygon (p, scale);
|
||||
|
||||
std::pair <bool, unsigned int> dl = open_layer (layout, ln, Routing);
|
||||
std::pair <bool, unsigned int> dl = open_layer (layout, ln, specialnets ? SpecialRouting : Routing);
|
||||
if (dl.first) {
|
||||
if (prop_id != 0) {
|
||||
design.shapes (dl.second).insert (db::object_with_properties<db::Polygon> (p, prop_id));
|
||||
|
|
@ -767,7 +767,7 @@ DEFImporter::read_nets (db::Layout &layout, db::Cell &design, double scale, bool
|
|||
db::Polygon p;
|
||||
read_rect (p, scale);
|
||||
|
||||
std::pair <bool, unsigned int> dl = open_layer (layout, ln, Routing);
|
||||
std::pair <bool, unsigned int> dl = open_layer (layout, ln, specialnets ? SpecialRouting : Routing);
|
||||
if (dl.first) {
|
||||
if (prop_id != 0) {
|
||||
design.shapes (dl.second).insert (db::object_with_properties<db::Polygon> (p, prop_id));
|
||||
|
|
|
|||
|
|
@ -56,6 +56,9 @@ LEFDEFReaderOptions::LEFDEFReaderOptions ()
|
|||
m_produce_pins (true),
|
||||
m_pins_suffix (".PIN"),
|
||||
m_pins_datatype (2),
|
||||
m_produce_lef_pins (true),
|
||||
m_lef_pins_suffix (".PIN"),
|
||||
m_lef_pins_datatype (2),
|
||||
m_produce_obstructions (true),
|
||||
m_obstructions_suffix (".OBS"),
|
||||
m_obstructions_datatype (3),
|
||||
|
|
@ -68,6 +71,9 @@ LEFDEFReaderOptions::LEFDEFReaderOptions ()
|
|||
m_produce_routing (true),
|
||||
m_routing_suffix (""),
|
||||
m_routing_datatype (0),
|
||||
m_produce_special_routing (true),
|
||||
m_special_routing_suffix (""),
|
||||
m_special_routing_datatype (0),
|
||||
m_separate_groups (false)
|
||||
{
|
||||
// .. nothing yet ..
|
||||
|
|
@ -96,6 +102,9 @@ LEFDEFReaderOptions::LEFDEFReaderOptions (const LEFDEFReaderOptions &d)
|
|||
m_produce_pins (d.m_produce_pins),
|
||||
m_pins_suffix (d.m_pins_suffix),
|
||||
m_pins_datatype (d.m_pins_datatype),
|
||||
m_produce_lef_pins (d.m_produce_lef_pins),
|
||||
m_lef_pins_suffix (d.m_lef_pins_suffix),
|
||||
m_lef_pins_datatype (d.m_lef_pins_datatype),
|
||||
m_produce_obstructions (d.m_produce_obstructions),
|
||||
m_obstructions_suffix (d.m_obstructions_suffix),
|
||||
m_obstructions_datatype (d.m_obstructions_datatype),
|
||||
|
|
@ -108,6 +117,9 @@ LEFDEFReaderOptions::LEFDEFReaderOptions (const LEFDEFReaderOptions &d)
|
|||
m_produce_routing (d.m_produce_routing),
|
||||
m_routing_suffix (d.m_routing_suffix),
|
||||
m_routing_datatype (d.m_routing_datatype),
|
||||
m_produce_special_routing (d.m_produce_special_routing),
|
||||
m_special_routing_suffix (d.m_special_routing_suffix),
|
||||
m_special_routing_datatype (d.m_special_routing_datatype),
|
||||
m_separate_groups (d.m_separate_groups),
|
||||
m_lef_files (d.m_lef_files)
|
||||
{
|
||||
|
|
@ -216,6 +228,9 @@ LEFDEFReaderState::open_layer (db::Layout &layout, const std::string &n, LayerPu
|
|||
default:
|
||||
produce = mp_tech_comp->produce_routing ();
|
||||
break;
|
||||
case SpecialRouting:
|
||||
produce = mp_tech_comp->produce_special_routing ();
|
||||
break;
|
||||
case ViaGeometry:
|
||||
produce = mp_tech_comp->produce_via_geometry ();
|
||||
break;
|
||||
|
|
@ -225,6 +240,9 @@ LEFDEFReaderState::open_layer (db::Layout &layout, const std::string &n, LayerPu
|
|||
case Pins:
|
||||
produce = mp_tech_comp->produce_pins ();
|
||||
break;
|
||||
case LEFPins:
|
||||
produce = mp_tech_comp->produce_lef_pins ();
|
||||
break;
|
||||
case Obstructions:
|
||||
produce = mp_tech_comp->produce_obstructions ();
|
||||
break;
|
||||
|
|
@ -255,6 +273,11 @@ LEFDEFReaderState::open_layer (db::Layout &layout, const std::string &n, LayerPu
|
|||
canonical_purpose = "NET";
|
||||
dt += mp_tech_comp->routing_datatype ();
|
||||
break;
|
||||
case SpecialRouting:
|
||||
name += mp_tech_comp->special_routing_suffix ();
|
||||
canonical_purpose = "SPNET";
|
||||
dt += mp_tech_comp->special_routing_datatype ();
|
||||
break;
|
||||
case ViaGeometry:
|
||||
name += mp_tech_comp->via_geometry_suffix ();
|
||||
dt += mp_tech_comp->via_geometry_datatype ();
|
||||
|
|
@ -270,6 +293,11 @@ LEFDEFReaderState::open_layer (db::Layout &layout, const std::string &n, LayerPu
|
|||
dt += mp_tech_comp->pins_datatype ();
|
||||
canonical_purpose = "PIN";
|
||||
break;
|
||||
case LEFPins:
|
||||
name += mp_tech_comp->lef_pins_suffix ();
|
||||
dt += mp_tech_comp->lef_pins_datatype ();
|
||||
canonical_purpose = "LEFPIN";
|
||||
break;
|
||||
case Obstructions:
|
||||
name += mp_tech_comp->obstructions_suffix ();
|
||||
dt += mp_tech_comp->obstructions_datatype ();
|
||||
|
|
@ -360,6 +388,9 @@ LEFDEFReaderState::finish (db::Layout &layout)
|
|||
default:
|
||||
dt = mp_tech_comp->routing_datatype ();
|
||||
break;
|
||||
case SpecialRouting:
|
||||
dt = mp_tech_comp->special_routing_datatype ();
|
||||
break;
|
||||
case ViaGeometry:
|
||||
dt = mp_tech_comp->via_geometry_datatype ();
|
||||
break;
|
||||
|
|
@ -369,6 +400,9 @@ LEFDEFReaderState::finish (db::Layout &layout)
|
|||
case Pins:
|
||||
dt = mp_tech_comp->pins_datatype ();
|
||||
break;
|
||||
case LEFPins:
|
||||
dt = mp_tech_comp->lef_pins_datatype ();
|
||||
break;
|
||||
case Obstructions:
|
||||
dt = mp_tech_comp->obstructions_datatype ();
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -295,6 +295,36 @@ public:
|
|||
m_pins_datatype = s;
|
||||
}
|
||||
|
||||
bool produce_lef_pins () const
|
||||
{
|
||||
return m_produce_lef_pins;
|
||||
}
|
||||
|
||||
void set_produce_lef_pins (bool f)
|
||||
{
|
||||
m_produce_lef_pins = f;
|
||||
}
|
||||
|
||||
const std::string &lef_pins_suffix () const
|
||||
{
|
||||
return m_lef_pins_suffix;
|
||||
}
|
||||
|
||||
void set_lef_pins_suffix (const std::string &s)
|
||||
{
|
||||
m_lef_pins_suffix = s;
|
||||
}
|
||||
|
||||
int lef_pins_datatype () const
|
||||
{
|
||||
return m_lef_pins_datatype;
|
||||
}
|
||||
|
||||
void set_lef_pins_datatype (int s)
|
||||
{
|
||||
m_lef_pins_datatype = s;
|
||||
}
|
||||
|
||||
bool produce_obstructions () const
|
||||
{
|
||||
return m_produce_obstructions;
|
||||
|
|
@ -415,6 +445,36 @@ public:
|
|||
m_routing_datatype = s;
|
||||
}
|
||||
|
||||
bool produce_special_routing () const
|
||||
{
|
||||
return m_produce_special_routing;
|
||||
}
|
||||
|
||||
void set_produce_special_routing (bool f)
|
||||
{
|
||||
m_produce_special_routing = f;
|
||||
}
|
||||
|
||||
const std::string &special_routing_suffix () const
|
||||
{
|
||||
return m_special_routing_suffix;
|
||||
}
|
||||
|
||||
void set_special_routing_suffix (const std::string &s)
|
||||
{
|
||||
m_special_routing_suffix = s;
|
||||
}
|
||||
|
||||
int special_routing_datatype () const
|
||||
{
|
||||
return m_special_routing_datatype;
|
||||
}
|
||||
|
||||
void set_special_routing_datatype (int s)
|
||||
{
|
||||
m_special_routing_datatype = s;
|
||||
}
|
||||
|
||||
void clear_lef_files ()
|
||||
{
|
||||
m_lef_files.clear ();
|
||||
|
|
@ -478,6 +538,9 @@ private:
|
|||
bool m_produce_pins;
|
||||
std::string m_pins_suffix;
|
||||
int m_pins_datatype;
|
||||
bool m_produce_lef_pins;
|
||||
std::string m_lef_pins_suffix;
|
||||
int m_lef_pins_datatype;
|
||||
bool m_produce_obstructions;
|
||||
std::string m_obstructions_suffix;
|
||||
int m_obstructions_datatype;
|
||||
|
|
@ -490,6 +553,9 @@ private:
|
|||
bool m_produce_routing;
|
||||
std::string m_routing_suffix;
|
||||
int m_routing_datatype;
|
||||
bool m_produce_special_routing;
|
||||
std::string m_special_routing_suffix;
|
||||
int m_special_routing_datatype;
|
||||
bool m_separate_groups;
|
||||
std::vector<std::string> m_lef_files;
|
||||
};
|
||||
|
|
@ -499,15 +565,17 @@ private:
|
|||
*/
|
||||
enum LayerPurpose
|
||||
{
|
||||
Routing = 0,
|
||||
ViaGeometry = 1,
|
||||
Label = 2,
|
||||
Pins = 3,
|
||||
Obstructions = 4,
|
||||
Outline = 5,
|
||||
Blockage = 6,
|
||||
PlacementBlockage = 7,
|
||||
Region = 8
|
||||
Routing = 0, // from DEF only
|
||||
SpecialRouting, // from DEF only
|
||||
ViaGeometry, // from LEF+DEF
|
||||
Label, // from LEF+DEF
|
||||
Pins, // from DEF
|
||||
LEFPins, // from LEF
|
||||
Obstructions, // from LEF only
|
||||
Outline, // from LEF+DEF
|
||||
Blockage, // from DEF only
|
||||
PlacementBlockage, // from DEF only
|
||||
Region, // from DEF only
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -96,9 +96,10 @@ read_map_file (const std::string &path, db::LEFDEFReaderState &layers)
|
|||
tl::TextInputStream ts (file_stream);
|
||||
|
||||
std::map<std::string, std::string> purpose_translation;
|
||||
purpose_translation ["LEFPIN"] = "PIN";
|
||||
purpose_translation ["LEFPIN"] = "LEFPIN";
|
||||
purpose_translation ["PIN"] = "PIN";
|
||||
purpose_translation ["LEFOBS"] = "OBS";
|
||||
purpose_translation ["SPNET"] = "NET";
|
||||
purpose_translation ["SPNET"] = "SPNET";
|
||||
purpose_translation ["NET"] = "NET";
|
||||
purpose_translation ["VIA"] = "VIA";
|
||||
purpose_translation ["BLOCKAGE"] = "BLK";
|
||||
|
|
@ -406,6 +407,9 @@ class LEFDEFFormatDeclaration
|
|||
tl::make_member (&LEFDEFReaderOptions::produce_pins, &LEFDEFReaderOptions::set_produce_pins, "produce-pins") +
|
||||
tl::make_member (&LEFDEFReaderOptions::pins_suffix, &LEFDEFReaderOptions::set_pins_suffix, "pins-suffix") +
|
||||
tl::make_member (&LEFDEFReaderOptions::pins_datatype, &LEFDEFReaderOptions::set_pins_datatype, "pins-datatype") +
|
||||
tl::make_member (&LEFDEFReaderOptions::produce_lef_pins, &LEFDEFReaderOptions::set_produce_lef_pins, "produce-lef-pins") +
|
||||
tl::make_member (&LEFDEFReaderOptions::lef_pins_suffix, &LEFDEFReaderOptions::set_lef_pins_suffix, "lef-pins-suffix") +
|
||||
tl::make_member (&LEFDEFReaderOptions::lef_pins_datatype, &LEFDEFReaderOptions::set_lef_pins_datatype, "lef-pins-datatype") +
|
||||
tl::make_member (&LEFDEFReaderOptions::produce_obstructions, &LEFDEFReaderOptions::set_produce_obstructions, "produce-obstructions") +
|
||||
tl::make_member (&LEFDEFReaderOptions::obstructions_suffix, &LEFDEFReaderOptions::set_obstructions_suffix, "obstructions-suffix") +
|
||||
tl::make_member (&LEFDEFReaderOptions::obstructions_datatype, &LEFDEFReaderOptions::set_obstructions_datatype, "obstructions-datatype") +
|
||||
|
|
@ -418,6 +422,9 @@ class LEFDEFFormatDeclaration
|
|||
tl::make_member (&LEFDEFReaderOptions::produce_routing, &LEFDEFReaderOptions::set_produce_routing, "produce-routing") +
|
||||
tl::make_member (&LEFDEFReaderOptions::routing_suffix, &LEFDEFReaderOptions::set_routing_suffix, "routing-suffix") +
|
||||
tl::make_member (&LEFDEFReaderOptions::routing_datatype, &LEFDEFReaderOptions::set_routing_datatype, "routing-datatype") +
|
||||
tl::make_member (&LEFDEFReaderOptions::produce_special_routing, &LEFDEFReaderOptions::set_produce_special_routing, "produce-special-routing") +
|
||||
tl::make_member (&LEFDEFReaderOptions::special_routing_suffix, &LEFDEFReaderOptions::set_special_routing_suffix, "special-routing-suffix") +
|
||||
tl::make_member (&LEFDEFReaderOptions::special_routing_datatype, &LEFDEFReaderOptions::set_special_routing_datatype, "special-routing-datatype") +
|
||||
tl::make_member (&LEFDEFReaderOptions::begin_lef_files, &LEFDEFReaderOptions::end_lef_files, &LEFDEFReaderOptions::push_lef_file, "lef-files")
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -789,7 +789,7 @@ LEFImporter::read_macro (Layout &layout)
|
|||
}
|
||||
|
||||
std::map <std::string, db::Box> bboxes;
|
||||
read_geometries (layout, cell, Pins, &bboxes, prop_id);
|
||||
read_geometries (layout, cell, LEFPins, &bboxes, prop_id);
|
||||
|
||||
for (std::map <std::string, db::Box>::const_iterator b = bboxes.begin (); b != bboxes.end (); ++b) {
|
||||
std::pair <bool, unsigned int> dl = open_layer (layout, b->first, Label);
|
||||
|
|
|
|||
|
|
@ -296,6 +296,30 @@ gsi::Class<db::LEFDEFReaderOptions> decl_lefdef_config ("db", "LEFDEFReaderConfi
|
|||
"@brief Sets the pin geometry layer datatype value.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
) +
|
||||
gsi::method ("produce_lef_pins", &db::LEFDEFReaderOptions::produce_lef_pins,
|
||||
"@brief Gets a value indicating whether LEF pin geometries shall be produced.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
) +
|
||||
gsi::method ("produce_lef_pins=", &db::LEFDEFReaderOptions::set_produce_lef_pins, gsi::arg ("produce"),
|
||||
"@brief Sets a value indicating whether LEF pin geometries shall be produced.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
) +
|
||||
gsi::method ("lef_pins_suffix", &db::LEFDEFReaderOptions::lef_pins_suffix,
|
||||
"@brief Gets the LEF pin geometry layer name suffix.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
) +
|
||||
gsi::method ("lef_pins_suffix=", &db::LEFDEFReaderOptions::set_lef_pins_suffix, gsi::arg ("suffix"),
|
||||
"@brief Sets the LEF pin geometry layer name suffix.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
) +
|
||||
gsi::method ("lef_pins_datatype", &db::LEFDEFReaderOptions::lef_pins_datatype,
|
||||
"@brief Gets the LEF pin geometry layer datatype value.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
) +
|
||||
gsi::method ("lef_pins_datatype=", &db::LEFDEFReaderOptions::set_lef_pins_datatype, gsi::arg ("datatype"),
|
||||
"@brief Sets the LEF pin geometry layer datatype value.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
) +
|
||||
gsi::method ("produce_obstructions", &db::LEFDEFReaderOptions::produce_obstructions,
|
||||
"@brief Gets a value indicating whether obstruction markers shall be produced.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
|
|
@ -392,6 +416,42 @@ gsi::Class<db::LEFDEFReaderOptions> decl_lefdef_config ("db", "LEFDEFReaderConfi
|
|||
"@brief Sets the routing layer datatype value.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
) +
|
||||
gsi::method ("produce_special_routing", &db::LEFDEFReaderOptions::produce_special_routing,
|
||||
"@brief Gets a value indicating whether special routing geometry shall be produced.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules.\n"
|
||||
"\n"
|
||||
"The differentiation between special and normal routing has been introduced in version 0.26.5."
|
||||
) +
|
||||
gsi::method ("produce_special_routing=", &db::LEFDEFReaderOptions::set_produce_special_routing, gsi::arg ("produce"),
|
||||
"@brief Sets a value indicating whether special routing geometry shall be produced.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
"\n"
|
||||
"The differentiation between special and normal routing has been introduced in version 0.26.5."
|
||||
) +
|
||||
gsi::method ("special_routing_suffix", &db::LEFDEFReaderOptions::special_routing_suffix,
|
||||
"@brief Gets the special routing layer name suffix.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
"\n"
|
||||
"The differentiation between special and normal routing has been introduced in version 0.26.5."
|
||||
) +
|
||||
gsi::method ("special_routing_suffix=", &db::LEFDEFReaderOptions::set_special_routing_suffix, gsi::arg ("suffix"),
|
||||
"@brief Sets the special routing layer name suffix.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
"\n"
|
||||
"The differentiation between special and normal routing has been introduced in version 0.26.5."
|
||||
) +
|
||||
gsi::method ("special_routing_datatype", &db::LEFDEFReaderOptions::special_routing_datatype,
|
||||
"@brief Gets the special routing layer datatype value.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
"\n"
|
||||
"The differentiation between special and normal routing has been introduced in version 0.26.5."
|
||||
) +
|
||||
gsi::method ("special_routing_datatype=", &db::LEFDEFReaderOptions::set_special_routing_datatype, gsi::arg ("datatype"),
|
||||
"@brief Sets the special routing layer datatype value.\n"
|
||||
"See \\produce_via_geometry for details about the layer production rules."
|
||||
"\n"
|
||||
"The differentiation between special and normal routing has been introduced in version 0.26.5."
|
||||
) +
|
||||
gsi::method ("separate_groups", &db::LEFDEFReaderOptions::separate_groups,
|
||||
"@brief Gets a value indicating whether to create separate parent cells for individual groups.\n"
|
||||
"If this property is set to true, instances belonging to different groups are separated by putting them into "
|
||||
|
|
|
|||
|
|
@ -590,13 +590,6 @@
|
|||
<item row="3" column="2" colspan="2">
|
||||
<widget class="QLineEdit" name="pin_prop_name"/>
|
||||
</item>
|
||||
<item row="3" column="5">
|
||||
<widget class="QCheckBox" name="produce_obstructions">
|
||||
<property name="text">
|
||||
<string>Obstructions</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="6">
|
||||
<widget class="QLabel" name="label_14">
|
||||
<property name="sizePolicy">
|
||||
|
|
@ -613,19 +606,6 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="7">
|
||||
<widget class="QLineEdit" name="suffix_obstructions"/>
|
||||
</item>
|
||||
<item row="3" column="8">
|
||||
<widget class="QLineEdit" name="datatype_obstructions"/>
|
||||
</item>
|
||||
<item row="4" column="5">
|
||||
<widget class="QCheckBox" name="produce_routing">
|
||||
<property name="text">
|
||||
<string>Routing</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="6">
|
||||
<widget class="QLabel" name="label_15">
|
||||
<property name="sizePolicy">
|
||||
|
|
@ -642,43 +622,14 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="7">
|
||||
<widget class="QLineEdit" name="suffix_routing"/>
|
||||
</item>
|
||||
<item row="4" column="8">
|
||||
<widget class="QLineEdit" name="datatype_routing"/>
|
||||
</item>
|
||||
<item row="5" column="5">
|
||||
<widget class="QCheckBox" name="produce_labels">
|
||||
<property name="text">
|
||||
<string>Pin labels</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="5">
|
||||
<item row="8" column="5">
|
||||
<widget class="QCheckBox" name="produce_blockages">
|
||||
<property name="text">
|
||||
<string>Blockages</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" 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="6" column="6">
|
||||
<item row="8" column="6">
|
||||
<widget class="QLabel" name="label_17">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||
|
|
@ -694,18 +645,125 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="7">
|
||||
<widget class="QLineEdit" name="suffix_labels"/>
|
||||
</item>
|
||||
<item row="5" column="8">
|
||||
<widget class="QLineEdit" name="datatype_labels"/>
|
||||
</item>
|
||||
<item row="6" column="7">
|
||||
<item row="8" column="7">
|
||||
<widget class="QLineEdit" name="suffix_blockages"/>
|
||||
</item>
|
||||
<item row="6" column="8">
|
||||
<item row="8" column="8">
|
||||
<widget class="QLineEdit" name="datatype_blockages"/>
|
||||
</item>
|
||||
<item row="6" 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="5" column="6">
|
||||
<widget class="QLabel" name="label_23">
|
||||
<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="7" 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="7" column="5">
|
||||
<widget class="QCheckBox" name="produce_labels">
|
||||
<property name="text">
|
||||
<string>Pin labels</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="7">
|
||||
<widget class="QLineEdit" name="suffix_labels"/>
|
||||
</item>
|
||||
<item row="7" column="8">
|
||||
<widget class="QLineEdit" name="datatype_labels"/>
|
||||
</item>
|
||||
<item row="6" column="5">
|
||||
<widget class="QCheckBox" name="produce_special_routing">
|
||||
<property name="text">
|
||||
<string>Special routing</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="7">
|
||||
<widget class="QLineEdit" name="suffix_special_routing"/>
|
||||
</item>
|
||||
<item row="6" column="8">
|
||||
<widget class="QLineEdit" name="datatype_special_routing"/>
|
||||
</item>
|
||||
<item row="5" column="5">
|
||||
<widget class="QCheckBox" name="produce_routing">
|
||||
<property name="text">
|
||||
<string>Routing</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="7">
|
||||
<widget class="QLineEdit" name="suffix_routing"/>
|
||||
</item>
|
||||
<item row="5" column="8">
|
||||
<widget class="QLineEdit" name="datatype_routing"/>
|
||||
</item>
|
||||
<item row="4" column="5">
|
||||
<widget class="QCheckBox" name="produce_obstructions">
|
||||
<property name="text">
|
||||
<string>Obstructions</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="7">
|
||||
<widget class="QLineEdit" name="suffix_obstructions"/>
|
||||
</item>
|
||||
<item row="4" column="8">
|
||||
<widget class="QLineEdit" name="datatype_obstructions"/>
|
||||
</item>
|
||||
<item row="3" column="7">
|
||||
<widget class="QLineEdit" name="suffix_lef_pins"/>
|
||||
</item>
|
||||
<item row="3" column="8">
|
||||
<widget class="QLineEdit" name="datatype_lef_pins"/>
|
||||
</item>
|
||||
<item row="3" column="5">
|
||||
<widget class="QCheckBox" name="produce_lef_pins">
|
||||
<property name="text">
|
||||
<string>LEF Pins</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
|||
|
|
@ -353,9 +353,11 @@ LEFDEFReaderOptionsEditor::LEFDEFReaderOptionsEditor (QWidget *parent)
|
|||
connect (produce_regions, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||
connect (produce_via_geometry, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||
connect (produce_pins, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||
connect (produce_lef_pins, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||
connect (produce_obstructions, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||
connect (produce_blockages, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||
connect (produce_routing, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||
connect (produce_special_routing, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||
connect (produce_labels, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||
connect (add_lef_file, SIGNAL (clicked ()), this, SLOT (add_lef_file_clicked ()));
|
||||
connect (del_lef_files, SIGNAL (clicked ()), this, SLOT (del_lef_files_clicked ()));
|
||||
|
|
@ -429,6 +431,9 @@ LEFDEFReaderOptionsEditor::commit (db::FormatSpecificReaderOptions *options, con
|
|||
data->set_produce_pins (produce_pins->isChecked ());
|
||||
data->set_pins_suffix (tl::to_string (suffix_pins->text ()));
|
||||
data->set_pins_datatype (datatype_pins->text ().toInt ());
|
||||
data->set_produce_lef_pins (produce_lef_pins->isChecked ());
|
||||
data->set_lef_pins_suffix (tl::to_string (suffix_lef_pins->text ()));
|
||||
data->set_lef_pins_datatype (datatype_lef_pins->text ().toInt ());
|
||||
data->set_produce_obstructions (produce_obstructions->isChecked ());
|
||||
data->set_obstructions_suffix (tl::to_string (suffix_obstructions->text ()));
|
||||
data->set_obstructions_datatype (datatype_obstructions->text ().toInt ());
|
||||
|
|
@ -438,6 +443,9 @@ LEFDEFReaderOptionsEditor::commit (db::FormatSpecificReaderOptions *options, con
|
|||
data->set_produce_routing (produce_routing->isChecked ());
|
||||
data->set_routing_suffix (tl::to_string (suffix_routing->text ()));
|
||||
data->set_routing_datatype (datatype_routing->text ().toInt ());
|
||||
data->set_produce_special_routing (produce_special_routing->isChecked ());
|
||||
data->set_special_routing_suffix (tl::to_string (suffix_special_routing->text ()));
|
||||
data->set_special_routing_datatype (datatype_special_routing->text ().toInt ());
|
||||
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 ());
|
||||
|
|
@ -483,6 +491,9 @@ LEFDEFReaderOptionsEditor::setup (const db::FormatSpecificReaderOptions *options
|
|||
produce_pins->setChecked (data->produce_pins ());
|
||||
suffix_pins->setText (tl::to_qstring (data->pins_suffix ()));
|
||||
datatype_pins->setText (QString::number (data->pins_datatype ()));
|
||||
produce_lef_pins->setChecked (data->produce_lef_pins ());
|
||||
suffix_lef_pins->setText (tl::to_qstring (data->lef_pins_suffix ()));
|
||||
datatype_lef_pins->setText (QString::number (data->lef_pins_datatype ()));
|
||||
produce_obstructions->setChecked (data->produce_obstructions ());
|
||||
suffix_obstructions->setText (tl::to_qstring (data->obstructions_suffix ()));
|
||||
datatype_obstructions->setText (QString::number (data->obstructions_datatype ()));
|
||||
|
|
@ -492,6 +503,9 @@ LEFDEFReaderOptionsEditor::setup (const db::FormatSpecificReaderOptions *options
|
|||
produce_routing->setChecked (data->produce_routing ());
|
||||
suffix_routing->setText (tl::to_qstring (data->routing_suffix ()));
|
||||
datatype_routing->setText (QString::number (data->routing_datatype ()));
|
||||
produce_special_routing->setChecked (data->produce_special_routing ());
|
||||
suffix_special_routing->setText (tl::to_qstring (data->special_routing_suffix ()));
|
||||
datatype_special_routing->setText (QString::number (data->special_routing_datatype ()));
|
||||
produce_labels->setChecked (data->produce_labels ());
|
||||
suffix_labels->setText (tl::to_qstring (data->labels_suffix ()));
|
||||
datatype_labels->setText (QString::number (data->labels_datatype ()));
|
||||
|
|
@ -523,15 +537,19 @@ LEFDEFReaderOptionsEditor::checkbox_changed ()
|
|||
placement_blockage_layer->setEnabled (produce_placement_blockages->isChecked ());
|
||||
suffix_via_geometry->setEnabled (produce_via_geometry->isChecked ());
|
||||
suffix_pins->setEnabled (produce_pins->isChecked ());
|
||||
suffix_lef_pins->setEnabled (produce_lef_pins->isChecked ());
|
||||
suffix_obstructions->setEnabled (produce_obstructions->isChecked ());
|
||||
suffix_blockages->setEnabled (produce_blockages->isChecked ());
|
||||
suffix_routing->setEnabled (produce_routing->isChecked ());
|
||||
suffix_special_routing->setEnabled (produce_special_routing->isChecked ());
|
||||
suffix_labels->setEnabled (produce_labels->isChecked ());
|
||||
datatype_via_geometry->setEnabled (produce_via_geometry->isChecked ());
|
||||
datatype_pins->setEnabled (produce_pins->isChecked ());
|
||||
datatype_lef_pins->setEnabled (produce_lef_pins->isChecked ());
|
||||
datatype_obstructions->setEnabled (produce_obstructions->isChecked ());
|
||||
datatype_blockages->setEnabled (produce_blockages->isChecked ());
|
||||
datatype_routing->setEnabled (produce_routing->isChecked ());
|
||||
datatype_special_routing->setEnabled (produce_special_routing->isChecked ());
|
||||
datatype_labels->setEnabled (produce_labels->isChecked ());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -295,6 +295,19 @@ TEST(104_doxy_vias)
|
|||
TEST(105_specialnets_geo)
|
||||
{
|
||||
run_test (_this, "specialnets_geo", "lef:test.lef+def:test.def", "au.oas.gz", default_options (), false);
|
||||
|
||||
db::LEFDEFReaderOptions options = default_options ();
|
||||
options.set_produce_special_routing (false);
|
||||
run_test (_this, "specialnets_geo", "lef:test.lef+def:test.def", "au_no_spnet.oas.gz", options, false);
|
||||
|
||||
options.set_produce_special_routing (true);
|
||||
options.set_special_routing_datatype (10);
|
||||
options.set_special_routing_suffix (".SPNET");
|
||||
|
||||
options.set_via_geometry_datatype (11);
|
||||
options.set_via_geometry_suffix (".VIA");
|
||||
|
||||
run_test (_this, "specialnets_geo", "lef:test.lef+def:test.def", "au_spnet_mapped.oas.gz", options, false);
|
||||
}
|
||||
|
||||
TEST(106_wrongdirection)
|
||||
|
|
@ -315,4 +328,14 @@ TEST(108_scanchain)
|
|||
TEST(109_foreigncell)
|
||||
{
|
||||
run_test (_this, "foreigncell", "gds:foreign.gds+lef:in_tech.lef+lef:in.lef", "au.oas.gz", default_options (), false);
|
||||
|
||||
db::LEFDEFReaderOptions options = default_options ();
|
||||
options.set_produce_lef_pins (false);
|
||||
run_test (_this, "foreigncell", "gds:foreign.gds+lef:in_tech.lef+lef:in.lef", "au_no_lefpins.oas.gz", options, false);
|
||||
|
||||
options.set_produce_lef_pins (true);
|
||||
options.set_lef_pins_datatype (10);
|
||||
options.set_lef_pins_suffix (".LEFPIN");
|
||||
|
||||
run_test (_this, "foreigncell", "gds:foreign.gds+lef:in_tech.lef+lef:in.lef", "au_lefpins_mapped.oas.gz", options, false);
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -269,6 +269,18 @@ class DBReaders_TestClass < TestBase
|
|||
conf.pins_datatype = 18
|
||||
assert_equal(conf.pins_datatype, 18)
|
||||
|
||||
assert_equal(conf.produce_lef_pins, true)
|
||||
conf.produce_lef_pins = false
|
||||
assert_equal(conf.produce_lef_pins, false)
|
||||
|
||||
assert_equal(conf.lef_pins_suffix, ".PIN")
|
||||
conf.lef_pins_suffix = "LEFPIN"
|
||||
assert_equal(conf.lef_pins_suffix, "LEFPIN")
|
||||
|
||||
assert_equal(conf.lef_pins_datatype, 2)
|
||||
conf.lef_pins_datatype = 181
|
||||
assert_equal(conf.lef_pins_datatype, 181)
|
||||
|
||||
assert_equal(conf.produce_obstructions, true)
|
||||
conf.produce_obstructions = false
|
||||
assert_equal(conf.produce_obstructions, false)
|
||||
|
|
@ -317,6 +329,18 @@ class DBReaders_TestClass < TestBase
|
|||
conf.routing_datatype = 22
|
||||
assert_equal(conf.routing_datatype, 22)
|
||||
|
||||
assert_equal(conf.produce_special_routing, true)
|
||||
conf.produce_special_routing = false
|
||||
assert_equal(conf.produce_special_routing, false)
|
||||
|
||||
assert_equal(conf.special_routing_suffix, "")
|
||||
conf.special_routing_suffix = "SPROUT"
|
||||
assert_equal(conf.special_routing_suffix, "SPROUT")
|
||||
|
||||
assert_equal(conf.special_routing_datatype, 0)
|
||||
conf.special_routing_datatype = 23
|
||||
assert_equal(conf.special_routing_datatype, 23)
|
||||
|
||||
assert_equal(conf.separate_groups, false)
|
||||
conf.separate_groups = true
|
||||
assert_equal(conf.separate_groups, true)
|
||||
|
|
|
|||
Loading…
Reference in New Issue