mirror of https://github.com/KLayout/klayout.git
* Fixed #489 (LEF/DEF reader provides pin names as properties) * Removed vi swap file * #489 fixed (LEF pins also get properties, added tests)
This commit is contained in:
parent
e99d3a1893
commit
1992fc762a
|
|
@ -1136,10 +1136,23 @@ DEFImporter::do_read (db::Layout &layout)
|
||||||
|
|
||||||
std::pair <bool, unsigned int> dl = open_layer (layout, g->first, Pins);
|
std::pair <bool, unsigned int> dl = open_layer (layout, g->first, Pins);
|
||||||
if (dl.first) {
|
if (dl.first) {
|
||||||
|
|
||||||
|
db::properties_id_type prop_id = 0;
|
||||||
|
if (produce_pin_props ()) {
|
||||||
|
db::PropertiesRepository::properties_set props;
|
||||||
|
props.insert (std::make_pair (pin_prop_name_id (), tl::Variant (label)));
|
||||||
|
prop_id = layout.properties_repository ().properties_id (props);
|
||||||
|
}
|
||||||
|
|
||||||
for (std::vector<db::Polygon>::const_iterator p = g->second.begin (); p != g->second.end (); ++p) {
|
for (std::vector<db::Polygon>::const_iterator p = g->second.begin (); p != g->second.end (); ++p) {
|
||||||
db::Polygon pt = p->transformed (trans);
|
db::Polygon pt = p->transformed (trans);
|
||||||
design.shapes (dl.second).insert (pt);
|
if (prop_id == 0) {
|
||||||
|
design.shapes (dl.second).insert (pt);
|
||||||
|
} else {
|
||||||
|
design.shapes (dl.second).insert (db::PolygonWithProperties (pt, prop_id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dl = open_layer (layout, g->first, Label);
|
dl = open_layer (layout, g->first, Label);
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,8 @@ LEFDEFReaderOptions::LEFDEFReaderOptions ()
|
||||||
m_net_property_name (1),
|
m_net_property_name (1),
|
||||||
m_produce_inst_names (true),
|
m_produce_inst_names (true),
|
||||||
m_inst_property_name (1),
|
m_inst_property_name (1),
|
||||||
|
m_produce_pin_names (false),
|
||||||
|
m_pin_property_name (1),
|
||||||
m_produce_cell_outlines (true),
|
m_produce_cell_outlines (true),
|
||||||
m_cell_outline_layer ("OUTLINE"),
|
m_cell_outline_layer ("OUTLINE"),
|
||||||
m_produce_placement_blockages (true),
|
m_produce_placement_blockages (true),
|
||||||
|
|
@ -77,6 +79,8 @@ LEFDEFReaderOptions::LEFDEFReaderOptions (const LEFDEFReaderOptions &d)
|
||||||
m_net_property_name (d.m_net_property_name),
|
m_net_property_name (d.m_net_property_name),
|
||||||
m_produce_inst_names (d.m_produce_inst_names),
|
m_produce_inst_names (d.m_produce_inst_names),
|
||||||
m_inst_property_name (d.m_inst_property_name),
|
m_inst_property_name (d.m_inst_property_name),
|
||||||
|
m_produce_pin_names (d.m_produce_pin_names),
|
||||||
|
m_pin_property_name (d.m_pin_property_name),
|
||||||
m_produce_cell_outlines (d.m_produce_cell_outlines),
|
m_produce_cell_outlines (d.m_produce_cell_outlines),
|
||||||
m_cell_outline_layer (d.m_cell_outline_layer),
|
m_cell_outline_layer (d.m_cell_outline_layer),
|
||||||
m_produce_placement_blockages (d.m_produce_placement_blockages),
|
m_produce_placement_blockages (d.m_produce_placement_blockages),
|
||||||
|
|
@ -357,7 +361,8 @@ LEFDEFLayerDelegate::finish (db::Layout &layout)
|
||||||
LEFDEFImporter::LEFDEFImporter ()
|
LEFDEFImporter::LEFDEFImporter ()
|
||||||
: mp_progress (0), mp_stream (0), mp_layer_delegate (0),
|
: mp_progress (0), mp_stream (0), mp_layer_delegate (0),
|
||||||
m_produce_net_props (false), m_net_prop_name_id (0),
|
m_produce_net_props (false), m_net_prop_name_id (0),
|
||||||
m_produce_inst_props (false), m_inst_prop_name_id (0)
|
m_produce_inst_props (false), m_inst_prop_name_id (0),
|
||||||
|
m_produce_pin_props (false), m_pin_prop_name_id (0)
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
@ -393,6 +398,14 @@ LEFDEFImporter::read (tl::InputStream &stream, db::Layout &layout, LEFDEFLayerDe
|
||||||
m_inst_prop_name_id = layout.properties_repository ().prop_name_id (ld.tech_comp ()->inst_property_name ());
|
m_inst_prop_name_id = layout.properties_repository ().prop_name_id (ld.tech_comp ()->inst_property_name ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_produce_pin_props = false;
|
||||||
|
m_pin_prop_name_id = 0;
|
||||||
|
|
||||||
|
if (ld.tech_comp () && ld.tech_comp ()->produce_pin_names ()) {
|
||||||
|
m_produce_pin_props = true;
|
||||||
|
m_pin_prop_name_id = layout.properties_repository ().prop_name_id (ld.tech_comp ()->pin_property_name ());
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
mp_progress = &progress;
|
mp_progress = &progress;
|
||||||
|
|
|
||||||
|
|
@ -145,6 +145,26 @@ public:
|
||||||
m_inst_property_name = s;
|
m_inst_property_name = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool produce_pin_names () const
|
||||||
|
{
|
||||||
|
return m_produce_pin_names;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_produce_pin_names (bool f)
|
||||||
|
{
|
||||||
|
m_produce_pin_names = f;
|
||||||
|
}
|
||||||
|
|
||||||
|
const tl::Variant &pin_property_name () const
|
||||||
|
{
|
||||||
|
return m_pin_property_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_pin_property_name (const tl::Variant &s)
|
||||||
|
{
|
||||||
|
m_pin_property_name = s;
|
||||||
|
}
|
||||||
|
|
||||||
bool produce_cell_outlines () const
|
bool produce_cell_outlines () const
|
||||||
{
|
{
|
||||||
return m_produce_cell_outlines;
|
return m_produce_cell_outlines;
|
||||||
|
|
@ -423,6 +443,8 @@ private:
|
||||||
tl::Variant m_net_property_name;
|
tl::Variant m_net_property_name;
|
||||||
bool m_produce_inst_names;
|
bool m_produce_inst_names;
|
||||||
tl::Variant m_inst_property_name;
|
tl::Variant m_inst_property_name;
|
||||||
|
bool m_produce_pin_names;
|
||||||
|
tl::Variant m_pin_property_name;
|
||||||
bool m_produce_cell_outlines;
|
bool m_produce_cell_outlines;
|
||||||
std::string m_cell_outline_layer;
|
std::string m_cell_outline_layer;
|
||||||
bool m_produce_placement_blockages;
|
bool m_produce_placement_blockages;
|
||||||
|
|
@ -696,6 +718,22 @@ protected:
|
||||||
return m_inst_prop_name_id;
|
return m_inst_prop_name_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets a flag indicating whether pinance names shall be produced as properties
|
||||||
|
*/
|
||||||
|
bool produce_pin_props () const
|
||||||
|
{
|
||||||
|
return m_produce_pin_props;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets the property name id of the pinance name property
|
||||||
|
*/
|
||||||
|
db::property_names_id_type pin_prop_name_id () const
|
||||||
|
{
|
||||||
|
return m_pin_prop_name_id;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void create_generated_via (std::vector<db::Polygon> &bottom,
|
void create_generated_via (std::vector<db::Polygon> &bottom,
|
||||||
std::vector<db::Polygon> &cut,
|
std::vector<db::Polygon> &cut,
|
||||||
|
|
@ -719,6 +757,8 @@ private:
|
||||||
db::property_names_id_type m_net_prop_name_id;
|
db::property_names_id_type m_net_prop_name_id;
|
||||||
bool m_produce_inst_props;
|
bool m_produce_inst_props;
|
||||||
db::property_names_id_type m_inst_prop_name_id;
|
db::property_names_id_type m_inst_prop_name_id;
|
||||||
|
bool m_produce_pin_props;
|
||||||
|
db::property_names_id_type m_pin_prop_name_id;
|
||||||
|
|
||||||
const std::string &next ();
|
const std::string &next ();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -239,6 +239,8 @@ class LEFDEFFormatDeclaration
|
||||||
tl::make_member (&LEFDEFReaderOptions::net_property_name, &LEFDEFReaderOptions::set_net_property_name, "net-property-name") +
|
tl::make_member (&LEFDEFReaderOptions::net_property_name, &LEFDEFReaderOptions::set_net_property_name, "net-property-name") +
|
||||||
tl::make_member (&LEFDEFReaderOptions::produce_inst_names, &LEFDEFReaderOptions::set_produce_inst_names, "produce-inst-names") +
|
tl::make_member (&LEFDEFReaderOptions::produce_inst_names, &LEFDEFReaderOptions::set_produce_inst_names, "produce-inst-names") +
|
||||||
tl::make_member (&LEFDEFReaderOptions::inst_property_name, &LEFDEFReaderOptions::set_inst_property_name, "inst-property-name") +
|
tl::make_member (&LEFDEFReaderOptions::inst_property_name, &LEFDEFReaderOptions::set_inst_property_name, "inst-property-name") +
|
||||||
|
tl::make_member (&LEFDEFReaderOptions::produce_pin_names, &LEFDEFReaderOptions::set_produce_pin_names, "produce-pin-names") +
|
||||||
|
tl::make_member (&LEFDEFReaderOptions::pin_property_name, &LEFDEFReaderOptions::set_pin_property_name, "pin-property-name") +
|
||||||
tl::make_member (&LEFDEFReaderOptions::produce_cell_outlines, &LEFDEFReaderOptions::set_produce_cell_outlines, "produce-cell-outlines") +
|
tl::make_member (&LEFDEFReaderOptions::produce_cell_outlines, &LEFDEFReaderOptions::set_produce_cell_outlines, "produce-cell-outlines") +
|
||||||
tl::make_member (&LEFDEFReaderOptions::cell_outline_layer, &LEFDEFReaderOptions::set_cell_outline_layer, "cell-outline-layer") +
|
tl::make_member (&LEFDEFReaderOptions::cell_outline_layer, &LEFDEFReaderOptions::set_cell_outline_layer, "cell-outline-layer") +
|
||||||
tl::make_member (&LEFDEFReaderOptions::produce_placement_blockages, &LEFDEFReaderOptions::set_produce_placement_blockages, "produce-placement-blockages") +
|
tl::make_member (&LEFDEFReaderOptions::produce_placement_blockages, &LEFDEFReaderOptions::set_produce_placement_blockages, "produce-placement-blockages") +
|
||||||
|
|
|
||||||
|
|
@ -126,8 +126,28 @@ LEFImporter::get_iteration (db::Layout &layout)
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class Shape, class Trans>
|
||||||
|
static db::Shape insert_shape (db::Cell &cell, unsigned int layer_id, const Shape &shape, const Trans &trans, db::properties_id_type prop_id)
|
||||||
|
{
|
||||||
|
if (prop_id == 0) {
|
||||||
|
return cell.shapes (layer_id).insert (shape.transformed (trans));
|
||||||
|
} else {
|
||||||
|
return cell.shapes (layer_id).insert (db::object_with_properties<Shape> (shape.transformed (trans), prop_id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Shape>
|
||||||
|
static db::Shape insert_shape (db::Cell &cell, unsigned int layer_id, const Shape &shape, db::properties_id_type prop_id)
|
||||||
|
{
|
||||||
|
if (prop_id == 0) {
|
||||||
|
return cell.shapes (layer_id).insert (shape);
|
||||||
|
} else {
|
||||||
|
return cell.shapes (layer_id).insert (db::object_with_properties<Shape> (shape, prop_id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
LEFImporter::read_geometries (db::Layout &layout, db::Cell &cell, LayerPurpose purpose, std::map<std::string, db::Box> *collect_bboxes)
|
LEFImporter::read_geometries (db::Layout &layout, db::Cell &cell, LayerPurpose purpose, std::map<std::string, db::Box> *collect_bboxes, db::properties_id_type prop_id)
|
||||||
{
|
{
|
||||||
int layer_id = -1;
|
int layer_id = -1;
|
||||||
std::string layer_name;
|
std::string layer_name;
|
||||||
|
|
@ -194,14 +214,14 @@ LEFImporter::read_geometries (db::Layout &layout, db::Cell &cell, LayerPurpose p
|
||||||
std::vector<db::Trans> ti = get_iteration (layout);
|
std::vector<db::Trans> ti = get_iteration (layout);
|
||||||
if (layer_id >= 0) {
|
if (layer_id >= 0) {
|
||||||
for (std::vector<db::Trans>::const_iterator t = ti.begin (); t != ti.end (); ++t) {
|
for (std::vector<db::Trans>::const_iterator t = ti.begin (); t != ti.end (); ++t) {
|
||||||
db::Shape s = cell.shapes (layer_id).insert (p.transformed (*t));
|
db::Shape s = insert_shape (cell, layer_id, p, *t, prop_id);
|
||||||
if (collect_bboxes) {
|
if (collect_bboxes) {
|
||||||
collect_bboxes->insert (std::make_pair (layer_name, db::Box ())).first->second = s.bbox ();
|
collect_bboxes->insert (std::make_pair (layer_name, db::Box ())).first->second = s.bbox ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (layer_id >= 0) {
|
} else if (layer_id >= 0) {
|
||||||
db::Shape s = cell.shapes (layer_id).insert (p);
|
db::Shape s = insert_shape (cell, layer_id, p, prop_id);
|
||||||
if (collect_bboxes) {
|
if (collect_bboxes) {
|
||||||
collect_bboxes->insert (std::make_pair (layer_name, db::Box ())).first->second = s.bbox ();
|
collect_bboxes->insert (std::make_pair (layer_name, db::Box ())).first->second = s.bbox ();
|
||||||
}
|
}
|
||||||
|
|
@ -235,14 +255,14 @@ LEFImporter::read_geometries (db::Layout &layout, db::Cell &cell, LayerPurpose p
|
||||||
std::vector<db::Trans> ti = get_iteration (layout);
|
std::vector<db::Trans> ti = get_iteration (layout);
|
||||||
if (layer_id >= 0) {
|
if (layer_id >= 0) {
|
||||||
for (std::vector<db::Trans>::const_iterator t = ti.begin (); t != ti.end (); ++t) {
|
for (std::vector<db::Trans>::const_iterator t = ti.begin (); t != ti.end (); ++t) {
|
||||||
db::Shape s = cell.shapes (layer_id).insert (p.transformed (*t));
|
db::Shape s = insert_shape (cell, layer_id, p, *t, prop_id);
|
||||||
if (collect_bboxes) {
|
if (collect_bboxes) {
|
||||||
collect_bboxes->insert (std::make_pair (layer_name, db::Box ())).first->second = s.bbox ();
|
collect_bboxes->insert (std::make_pair (layer_name, db::Box ())).first->second = s.bbox ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (layer_id >= 0) {
|
} else if (layer_id >= 0) {
|
||||||
db::Shape s = cell.shapes (layer_id).insert (p);
|
db::Shape s = insert_shape (cell, layer_id, p, prop_id);
|
||||||
if (collect_bboxes) {
|
if (collect_bboxes) {
|
||||||
collect_bboxes->insert (std::make_pair (layer_name, db::Box ())).first->second = s.bbox ();
|
collect_bboxes->insert (std::make_pair (layer_name, db::Box ())).first->second = s.bbox ();
|
||||||
}
|
}
|
||||||
|
|
@ -275,14 +295,14 @@ LEFImporter::read_geometries (db::Layout &layout, db::Cell &cell, LayerPurpose p
|
||||||
std::vector<db::Trans> ti = get_iteration (layout);
|
std::vector<db::Trans> ti = get_iteration (layout);
|
||||||
if (layer_id >= 0) {
|
if (layer_id >= 0) {
|
||||||
for (std::vector<db::Trans>::const_iterator t = ti.begin (); t != ti.end (); ++t) {
|
for (std::vector<db::Trans>::const_iterator t = ti.begin (); t != ti.end (); ++t) {
|
||||||
db::Shape s = cell.shapes (layer_id).insert (b.transformed (*t));
|
db::Shape s = insert_shape (cell, layer_id, b, *t, prop_id);
|
||||||
if (collect_bboxes) {
|
if (collect_bboxes) {
|
||||||
collect_bboxes->insert (std::make_pair (layer_name, db::Box ())).first->second = s.bbox ();
|
collect_bboxes->insert (std::make_pair (layer_name, db::Box ())).first->second = s.bbox ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (layer_id >= 0) {
|
} else if (layer_id >= 0) {
|
||||||
db::Shape s = cell.shapes (layer_id).insert (b);
|
db::Shape s = insert_shape (cell, layer_id, b, prop_id);
|
||||||
if (collect_bboxes) {
|
if (collect_bboxes) {
|
||||||
collect_bboxes->insert (std::make_pair (layer_name, db::Box ())).first->second = s.bbox ();
|
collect_bboxes->insert (std::make_pair (layer_name, db::Box ())).first->second = s.bbox ();
|
||||||
}
|
}
|
||||||
|
|
@ -685,9 +705,6 @@ LEFImporter::do_read (db::Layout &layout)
|
||||||
test (";");
|
test (";");
|
||||||
} else if (test ("PORT")) {
|
} else if (test ("PORT")) {
|
||||||
|
|
||||||
std::map <std::string, db::Box> bboxes;
|
|
||||||
read_geometries (layout, cell, Pins, &bboxes);
|
|
||||||
|
|
||||||
// produce pin labels
|
// produce pin labels
|
||||||
// TODO: put a label on every single object?
|
// TODO: put a label on every single object?
|
||||||
std::string label = pn;
|
std::string label = pn;
|
||||||
|
|
@ -698,6 +715,16 @@ LEFImporter::do_read (db::Layout &layout)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
db::properties_id_type prop_id = 0;
|
||||||
|
if (produce_pin_props ()) {
|
||||||
|
db::PropertiesRepository::properties_set props;
|
||||||
|
props.insert (std::make_pair (pin_prop_name_id (), tl::Variant (label)));
|
||||||
|
prop_id = layout.properties_repository ().properties_id (props);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map <std::string, db::Box> bboxes;
|
||||||
|
read_geometries (layout, cell, Pins, &bboxes, prop_id);
|
||||||
|
|
||||||
for (std::map <std::string, db::Box>::const_iterator b = bboxes.begin (); b != bboxes.end (); ++b) {
|
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);
|
std::pair <bool, unsigned int> dl = open_layer (layout, b->first, Label);
|
||||||
if (dl.first) {
|
if (dl.first) {
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,7 @@ private:
|
||||||
std::map<std::string, ViaDesc> m_vias;
|
std::map<std::string, ViaDesc> m_vias;
|
||||||
|
|
||||||
std::vector <db::Trans> get_iteration (db::Layout &layout);
|
std::vector <db::Trans> get_iteration (db::Layout &layout);
|
||||||
void read_geometries (db::Layout &layout, db::Cell &cell, LayerPurpose purpose, std::map<std::string, db::Box> *collect_bboxes = 0);
|
void read_geometries (db::Layout &layout, db::Cell &cell, LayerPurpose purpose, std::map<std::string, db::Box> *collect_bboxes = 0, properties_id_type prop_id = 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,36 @@ static void set_net_property_name (db::LEFDEFReaderOptions *config, const tl::Va
|
||||||
config->set_net_property_name (name);
|
config->set_net_property_name (name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static tl::Variant get_instance_property_name (const db::LEFDEFReaderOptions *config)
|
||||||
|
{
|
||||||
|
if (config->produce_inst_names ()) {
|
||||||
|
return config->inst_property_name ();
|
||||||
|
} else {
|
||||||
|
return tl::Variant ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void set_instance_property_name (db::LEFDEFReaderOptions *config, const tl::Variant &name)
|
||||||
|
{
|
||||||
|
config->set_produce_inst_names (! name.is_nil ());
|
||||||
|
config->set_inst_property_name (name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static tl::Variant get_pin_property_name (const db::LEFDEFReaderOptions *config)
|
||||||
|
{
|
||||||
|
if (config->produce_pin_names ()) {
|
||||||
|
return config->pin_property_name ();
|
||||||
|
} else {
|
||||||
|
return tl::Variant ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void set_pin_property_name (db::LEFDEFReaderOptions *config, const tl::Variant &name)
|
||||||
|
{
|
||||||
|
config->set_produce_pin_names (! name.is_nil ());
|
||||||
|
config->set_pin_property_name (name);
|
||||||
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
gsi::Class<db::LEFDEFReaderOptions> decl_lefdef_config ("db", "LEFDEFReaderConfiguration",
|
gsi::Class<db::LEFDEFReaderOptions> decl_lefdef_config ("db", "LEFDEFReaderConfiguration",
|
||||||
gsi::method ("layer_map", (db::LayerMap &(db::LEFDEFReaderOptions::*) ()) &db::LEFDEFReaderOptions::layer_map,
|
gsi::method ("layer_map", (db::LayerMap &(db::LEFDEFReaderOptions::*) ()) &db::LEFDEFReaderOptions::layer_map,
|
||||||
|
|
@ -112,7 +142,7 @@ gsi::Class<db::LEFDEFReaderOptions> decl_lefdef_config ("db", "LEFDEFReaderConfi
|
||||||
) +
|
) +
|
||||||
gsi::method_ext ("net_property_name", &get_net_property_name,
|
gsi::method_ext ("net_property_name", &get_net_property_name,
|
||||||
"@brief Gets a value indicating whether and how to produce net names as properties.\n"
|
"@brief Gets a value indicating whether and how to produce net names as properties.\n"
|
||||||
"If set to a value not nil, net names will be attached to the shapes and instances generated as user properties.\n"
|
"If set to a value not nil, net names will be attached to the net shapes generated as user properties.\n"
|
||||||
"This attribute then specifies the user property name to be used for attaching the net names.\n"
|
"This attribute then specifies the user property name to be used for attaching the net names.\n"
|
||||||
"If set to nil, no net names will be produced.\n"
|
"If set to nil, no net names will be produced.\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
@ -122,6 +152,38 @@ gsi::Class<db::LEFDEFReaderOptions> decl_lefdef_config ("db", "LEFDEFReaderConfi
|
||||||
"@brief Sets a value indicating whether and how to produce net names as properties.\n"
|
"@brief Sets a value indicating whether and how to produce net names as properties.\n"
|
||||||
"See \\net_property_name for details."
|
"See \\net_property_name for details."
|
||||||
) +
|
) +
|
||||||
|
gsi::method_ext ("pin_property_name", &get_pin_property_name,
|
||||||
|
"@brief Gets a value indicating whether and how to produce pin names as properties.\n"
|
||||||
|
"If set to a value not nil, pin names will be attached to the pin shapes generated as user properties.\n"
|
||||||
|
"This attribute then specifies the user property name to be used for attaching the pin names.\n"
|
||||||
|
"If set to nil, no pin names will be produced.\n"
|
||||||
|
"\n"
|
||||||
|
"The corresponding setter is \\pin_property_name=.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.26.4."
|
||||||
|
) +
|
||||||
|
gsi::method_ext ("pin_property_name=", &set_pin_property_name, gsi::arg ("name"),
|
||||||
|
"@brief Sets a value indicating whether and how to produce pin names as properties.\n"
|
||||||
|
"See \\pin_property_name for details.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.26.4."
|
||||||
|
) +
|
||||||
|
gsi::method_ext ("instance_property_name", &get_instance_property_name,
|
||||||
|
"@brief Gets a value indicating whether and how to produce instance names as properties.\n"
|
||||||
|
"If set to a value not nil, instance names will be attached to the instances generated as user properties.\n"
|
||||||
|
"This attribute then specifies the user property name to be used for attaching the instance names.\n"
|
||||||
|
"If set to nil, no instance names will be produced.\n"
|
||||||
|
"\n"
|
||||||
|
"The corresponding setter is \\instance_property_name=.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.26.4."
|
||||||
|
) +
|
||||||
|
gsi::method_ext ("instance_property_name=", &set_instance_property_name, gsi::arg ("name"),
|
||||||
|
"@brief Sets a value indicating whether and how to produce instance names as properties.\n"
|
||||||
|
"See \\instance_property_name for details.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.26.4."
|
||||||
|
) +
|
||||||
gsi::method ("produce_cell_outlines", &db::LEFDEFReaderOptions::produce_cell_outlines,
|
gsi::method ("produce_cell_outlines", &db::LEFDEFReaderOptions::produce_cell_outlines,
|
||||||
"@brief Gets a value indicating whether to produce cell outlines.\n"
|
"@brief Gets a value indicating whether to produce cell outlines.\n"
|
||||||
"If set to true, cell outlines will be produced on the layer given by \\cell_outline_layer. "
|
"If set to true, cell outlines will be produced on the layer given by \\cell_outline_layer. "
|
||||||
|
|
|
||||||
|
|
@ -264,24 +264,8 @@
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>6</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="2" column="1">
|
<item row="7" column="1">
|
||||||
<widget class="QLabel" name="label_18">
|
<widget class="QLabel" name="label_10">
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="pixmap">
|
|
||||||
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="7">
|
|
||||||
<widget class="QLineEdit" name="suffix_labels"/>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="2" colspan="2">
|
|
||||||
<widget class="QLineEdit" name="net_prop_name"/>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="6">
|
|
||||||
<widget class="QLabel" name="label_16">
|
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
|
@ -296,122 +280,6 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="8">
|
|
||||||
<widget class="QLineEdit" name="datatype_blockages"/>
|
|
||||||
</item>
|
|
||||||
<item row="6" column="5">
|
|
||||||
<widget class="QCheckBox" name="produce_blockages">
|
|
||||||
<property name="text">
|
|
||||||
<string>Blockages</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="6">
|
|
||||||
<widget class="QLabel" name="label_13">
|
|
||||||
<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="4" column="8">
|
|
||||||
<widget class="QLineEdit" name="datatype_routing"/>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="2" colspan="2">
|
|
||||||
<widget class="QLabel" name="label_7">
|
|
||||||
<property name="text">
|
|
||||||
<string>On layer with spec ...</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="5">
|
|
||||||
<widget class="QCheckBox" name="produce_labels">
|
|
||||||
<property name="text">
|
|
||||||
<string>Pin labels</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="5">
|
|
||||||
<widget class="QCheckBox" name="produce_pins">
|
|
||||||
<property name="text">
|
|
||||||
<string>Pins</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="5">
|
|
||||||
<widget class="QCheckBox" name="produce_via_geometry">
|
|
||||||
<property name="text">
|
|
||||||
<string>Via geometry</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</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="0" colspan="2">
|
|
||||||
<widget class="QLabel" name="label_6">
|
|
||||||
<property name="text">
|
|
||||||
<string>Produce ...</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="0">
|
|
||||||
<widget class="QCheckBox" name="produce_outlines">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Cell outlines</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="8">
|
|
||||||
<widget class="QLabel" name="label_3">
|
|
||||||
<property name="text">
|
|
||||||
<string>GDS datatype ...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="7">
|
|
||||||
<widget class="QLineEdit" name="suffix_routing"/>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="8">
|
|
||||||
<widget class="QLineEdit" name="datatype_via_geometry"/>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="2" colspan="2">
|
|
||||||
<widget class="QLineEdit" name="outline_layer"/>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="7">
|
|
||||||
<widget class="QLabel" name="lbl1">
|
|
||||||
<property name="text">
|
|
||||||
<string>Layer name suffix ...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="8">
|
|
||||||
<widget class="QLineEdit" name="datatype_pins"/>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="2" colspan="2">
|
<item row="0" column="2" colspan="2">
|
||||||
<widget class="QLabel" name="label_8">
|
<widget class="QLabel" name="label_8">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
|
@ -419,53 +287,8 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="8">
|
<item row="2" column="2" colspan="2">
|
||||||
<widget class="QLineEdit" name="datatype_labels"/>
|
<widget class="QLineEdit" name="inst_prop_name"/>
|
||||||
</item>
|
|
||||||
<item row="6" column="0">
|
|
||||||
<widget class="QCheckBox" name="produce_placement_blockages">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Blockages</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="6" 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="3" column="0" colspan="4">
|
|
||||||
<widget class="QLabel" name="help_label">
|
|
||||||
<property name="text">
|
|
||||||
<string><html><body>(<a href="int:/about/variant_notation.xml">See here for the name notation</a>)</body></html></string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="6" column="7">
|
|
||||||
<widget class="QLineEdit" name="suffix_blockages"/>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="7">
|
|
||||||
<widget class="QLineEdit" name="suffix_pins"/>
|
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QCheckBox" name="produce_net_names">
|
<widget class="QCheckBox" name="produce_net_names">
|
||||||
|
|
@ -481,8 +304,8 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="6">
|
<item row="1" column="1">
|
||||||
<widget class="QLabel" name="label_14">
|
<widget class="QLabel" name="label_11">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
|
@ -497,8 +320,31 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="5" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>Produce ...</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0">
|
||||||
|
<widget class="QCheckBox" name="produce_outlines">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Cell outlines</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="6" column="1">
|
<item row="6" column="1">
|
||||||
<widget class="QLabel" name="label_10">
|
<widget class="QLabel" name="label_9">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
|
@ -513,6 +359,71 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>50</weight>
|
||||||
|
<italic>false</italic>
|
||||||
|
<bold>false</bold>
|
||||||
|
<underline>false</underline>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Produce ...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="8">
|
||||||
|
<widget class="QLineEdit" name="datatype_pins"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QCheckBox" name="produce_inst_names">
|
||||||
|
<property name="text">
|
||||||
|
<string>Inst names</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="0">
|
||||||
|
<widget class="QCheckBox" name="produce_placement_blockages">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Blockages</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0" colspan="4">
|
||||||
|
<widget class="QLabel" name="help_label">
|
||||||
|
<property name="text">
|
||||||
|
<string><html><body>(<a href="int:/about/variant_notation.xml">See here for the name notation</a>)</body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2" colspan="2">
|
||||||
|
<widget class="QLineEdit" name="net_prop_name"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="8">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>GDS datatype ...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="7">
|
||||||
|
<widget class="QLabel" name="lbl1">
|
||||||
|
<property name="text">
|
||||||
|
<string>Layer name suffix ...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="1" column="6">
|
<item row="1" column="6">
|
||||||
<widget class="QLabel" name="label_12">
|
<widget class="QLabel" name="label_12">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
|
@ -529,8 +440,75 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="1">
|
<item row="5" column="2" colspan="2">
|
||||||
<widget class="QLabel" name="label_9">
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="text">
|
||||||
|
<string>On layer with spec ...</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="2" colspan="2">
|
||||||
|
<widget class="QLineEdit" name="region_layer"/>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="2" colspan="2">
|
||||||
|
<widget class="QLineEdit" name="placement_blockage_layer"/>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="2" colspan="2">
|
||||||
|
<widget class="QLineEdit" name="outline_layer"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="7">
|
||||||
|
<widget class="QLineEdit" name="suffix_via_geometry"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="5">
|
||||||
|
<widget class="QCheckBox" name="produce_via_geometry">
|
||||||
|
<property name="text">
|
||||||
|
<string>Via geometry</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="1">
|
||||||
|
<widget class="QLabel" name="label_19">
|
||||||
|
<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="9">
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="5" colspan="2">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Produce ...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="5">
|
||||||
|
<widget class="QCheckBox" name="produce_pins">
|
||||||
|
<property name="text">
|
||||||
|
<string>Pins</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="0">
|
||||||
|
<widget class="QCheckBox" name="produce_regions">
|
||||||
|
<property name="text">
|
||||||
|
<string>Regions</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="6">
|
||||||
|
<widget class="QLabel" name="label_13">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
|
@ -545,33 +523,77 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="2" column="1">
|
||||||
<widget class="QCheckBox" name="produce_inst_names">
|
<widget class="QLabel" name="label_18">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Inst names</string>
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="2" colspan="2">
|
<item row="2" column="7">
|
||||||
<widget class="QLineEdit" name="placement_blockage_layer"/>
|
<widget class="QLineEdit" name="suffix_pins"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0" colspan="2">
|
<item row="1" column="8">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLineEdit" name="datatype_via_geometry"/>
|
||||||
<property name="font">
|
</item>
|
||||||
<font>
|
<item row="3" column="0">
|
||||||
<weight>50</weight>
|
<widget class="QCheckBox" name="produce_pin_names">
|
||||||
<italic>false</italic>
|
|
||||||
<bold>false</bold>
|
|
||||||
<underline>false</underline>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Produce ...</string>
|
<string>Pin names</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="2" colspan="2">
|
<item row="3" column="1">
|
||||||
<widget class="QLineEdit" name="inst_prop_name"/>
|
<widget class="QLabel" name="label_20">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<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">
|
||||||
|
<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="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>
|
||||||
<item row="4" column="6">
|
<item row="4" column="6">
|
||||||
<widget class="QLabel" name="label_15">
|
<widget class="QLabel" name="label_15">
|
||||||
|
|
@ -589,11 +611,28 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="8">
|
<item row="4" column="7">
|
||||||
<widget class="QLineEdit" name="datatype_obstructions"/>
|
<widget class="QLineEdit" name="suffix_routing"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="4" column="8">
|
||||||
<widget class="QLabel" name="label_11">
|
<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">
|
||||||
|
<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">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
|
@ -608,35 +647,14 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="7">
|
<item row="6" column="6">
|
||||||
<widget class="QLineEdit" name="suffix_via_geometry"/>
|
<widget class="QLabel" name="label_17">
|
||||||
</item>
|
<property name="sizePolicy">
|
||||||
<item row="3" column="5">
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
<widget class="QCheckBox" name="produce_obstructions">
|
<horstretch>0</horstretch>
|
||||||
<property name="text">
|
<verstretch>0</verstretch>
|
||||||
<string>Obstructions</string>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="7">
|
|
||||||
<widget class="QLineEdit" name="suffix_obstructions"/>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="5" colspan="2">
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>Produce ...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="7" column="0">
|
|
||||||
<widget class="QCheckBox" name="produce_regions">
|
|
||||||
<property name="text">
|
|
||||||
<string>Regions</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="7" column="1">
|
|
||||||
<widget class="QLabel" name="label_19">
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
|
|
@ -645,15 +663,17 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="4" rowspan="8">
|
<item row="5" column="7">
|
||||||
<widget class="Line" name="line">
|
<widget class="QLineEdit" name="suffix_labels"/>
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="2" colspan="2">
|
<item row="5" column="8">
|
||||||
<widget class="QLineEdit" name="region_layer"/>
|
<widget class="QLineEdit" name="datatype_labels"/>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="7">
|
||||||
|
<widget class="QLineEdit" name="suffix_blockages"/>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="8">
|
||||||
|
<widget class="QLineEdit" name="datatype_blockages"/>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
|
@ -759,18 +779,6 @@
|
||||||
<tabstop>produce_pins</tabstop>
|
<tabstop>produce_pins</tabstop>
|
||||||
<tabstop>suffix_pins</tabstop>
|
<tabstop>suffix_pins</tabstop>
|
||||||
<tabstop>datatype_pins</tabstop>
|
<tabstop>datatype_pins</tabstop>
|
||||||
<tabstop>produce_obstructions</tabstop>
|
|
||||||
<tabstop>suffix_obstructions</tabstop>
|
|
||||||
<tabstop>datatype_obstructions</tabstop>
|
|
||||||
<tabstop>produce_routing</tabstop>
|
|
||||||
<tabstop>suffix_routing</tabstop>
|
|
||||||
<tabstop>datatype_routing</tabstop>
|
|
||||||
<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>
|
<tabstop>read_all_cbx</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
<resources>
|
<resources>
|
||||||
|
|
|
||||||
|
|
@ -347,6 +347,7 @@ LEFDEFReaderOptionsEditor::LEFDEFReaderOptionsEditor (QWidget *parent)
|
||||||
|
|
||||||
connect (produce_net_names, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
connect (produce_net_names, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||||
connect (produce_inst_names, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
connect (produce_inst_names, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||||
|
connect (produce_pin_names, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||||
connect (produce_outlines, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
connect (produce_outlines, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||||
connect (produce_placement_blockages, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
connect (produce_placement_blockages, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||||
connect (produce_regions, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
connect (produce_regions, SIGNAL (stateChanged (int)), this, SLOT (checkbox_changed ()));
|
||||||
|
|
@ -376,6 +377,7 @@ LEFDEFReaderOptionsEditor::commit (db::FormatSpecificReaderOptions *options, con
|
||||||
data->set_layer_map (layer_map->get_layer_map ());
|
data->set_layer_map (layer_map->get_layer_map ());
|
||||||
data->set_produce_net_names (produce_net_names->isChecked ());
|
data->set_produce_net_names (produce_net_names->isChecked ());
|
||||||
data->set_produce_inst_names (produce_inst_names->isChecked ());
|
data->set_produce_inst_names (produce_inst_names->isChecked ());
|
||||||
|
data->set_produce_pin_names (produce_pin_names->isChecked ());
|
||||||
|
|
||||||
double dbu_value = 0.0;
|
double dbu_value = 0.0;
|
||||||
tl::from_string (tl::to_string (dbu->text ()), dbu_value);
|
tl::from_string (tl::to_string (dbu->text ()), dbu_value);
|
||||||
|
|
@ -404,6 +406,16 @@ LEFDEFReaderOptionsEditor::commit (db::FormatSpecificReaderOptions *options, con
|
||||||
data->set_inst_property_name (v);
|
data->set_inst_property_name (v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// parse the pin property name (may throw an exception)
|
||||||
|
{
|
||||||
|
std::string np = tl::to_string (pin_prop_name->text ());
|
||||||
|
tl::Extractor ex (np.c_str ());
|
||||||
|
tl::Variant v;
|
||||||
|
ex.read (v);
|
||||||
|
ex.expect_end ();
|
||||||
|
data->set_pin_property_name (v);
|
||||||
|
}
|
||||||
|
|
||||||
data->set_produce_cell_outlines (produce_outlines->isChecked ());
|
data->set_produce_cell_outlines (produce_outlines->isChecked ());
|
||||||
data->set_cell_outline_layer (tl::to_string (outline_layer->text ()));
|
data->set_cell_outline_layer (tl::to_string (outline_layer->text ()));
|
||||||
data->set_produce_regions (produce_regions->isChecked ());
|
data->set_produce_regions (produce_regions->isChecked ());
|
||||||
|
|
@ -454,6 +466,8 @@ LEFDEFReaderOptionsEditor::setup (const db::FormatSpecificReaderOptions *options
|
||||||
net_prop_name->setText (tl::to_qstring (data->net_property_name ().to_parsable_string ()));
|
net_prop_name->setText (tl::to_qstring (data->net_property_name ().to_parsable_string ()));
|
||||||
produce_inst_names->setChecked (data->produce_inst_names ());
|
produce_inst_names->setChecked (data->produce_inst_names ());
|
||||||
inst_prop_name->setText (tl::to_qstring (data->inst_property_name ().to_parsable_string ()));
|
inst_prop_name->setText (tl::to_qstring (data->inst_property_name ().to_parsable_string ()));
|
||||||
|
produce_pin_names->setChecked (data->produce_pin_names ());
|
||||||
|
pin_prop_name->setText (tl::to_qstring (data->pin_property_name ().to_parsable_string ()));
|
||||||
produce_outlines->setChecked (data->produce_cell_outlines ());
|
produce_outlines->setChecked (data->produce_cell_outlines ());
|
||||||
outline_layer->setText (tl::to_qstring (data->cell_outline_layer ()));
|
outline_layer->setText (tl::to_qstring (data->cell_outline_layer ()));
|
||||||
produce_regions->setChecked (data->produce_regions ());
|
produce_regions->setChecked (data->produce_regions ());
|
||||||
|
|
@ -499,6 +513,7 @@ LEFDEFReaderOptionsEditor::checkbox_changed ()
|
||||||
{
|
{
|
||||||
net_prop_name->setEnabled (produce_net_names->isChecked ());
|
net_prop_name->setEnabled (produce_net_names->isChecked ());
|
||||||
inst_prop_name->setEnabled (produce_inst_names->isChecked ());
|
inst_prop_name->setEnabled (produce_inst_names->isChecked ());
|
||||||
|
pin_prop_name->setEnabled (produce_pin_names->isChecked ());
|
||||||
outline_layer->setEnabled (produce_outlines->isChecked ());
|
outline_layer->setEnabled (produce_outlines->isChecked ());
|
||||||
region_layer->setEnabled (produce_regions->isChecked ());
|
region_layer->setEnabled (produce_regions->isChecked ());
|
||||||
placement_blockage_layer->setEnabled (produce_placement_blockages->isChecked ());
|
placement_blockage_layer->setEnabled (produce_placement_blockages->isChecked ());
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
static void run_test (tl::TestBase *_this, const char *lef_dir, const char *filename, const char *au, bool priv = true)
|
static db::LEFDEFReaderOptions default_options ()
|
||||||
{
|
{
|
||||||
db::LEFDEFReaderOptions tc;
|
db::LEFDEFReaderOptions tc;
|
||||||
tc.set_via_geometry_datatype (0);
|
tc.set_via_geometry_datatype (0);
|
||||||
|
|
@ -45,6 +45,12 @@ static void run_test (tl::TestBase *_this, const char *lef_dir, const char *file
|
||||||
tc.set_labels_suffix (".LABEL");
|
tc.set_labels_suffix (".LABEL");
|
||||||
tc.set_blockages_datatype (4);
|
tc.set_blockages_datatype (4);
|
||||||
tc.set_blockages_suffix (".BLK");
|
tc.set_blockages_suffix (".BLK");
|
||||||
|
|
||||||
|
return tc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void run_test (tl::TestBase *_this, const char *lef_dir, const char *filename, const char *au, const db::LEFDEFReaderOptions &tc, bool priv = true)
|
||||||
|
{
|
||||||
db::LEFDEFLayerDelegate ld (&tc);
|
db::LEFDEFLayerDelegate ld (&tc);
|
||||||
|
|
||||||
db::Manager m;
|
db::Manager m;
|
||||||
|
|
@ -150,91 +156,107 @@ static void run_test (tl::TestBase *_this, const char *lef_dir, const char *file
|
||||||
|
|
||||||
TEST(1)
|
TEST(1)
|
||||||
{
|
{
|
||||||
run_test (_this, "lef1", "lef:in.lef", 0);
|
run_test (_this, "lef1", "lef:in.lef", 0, default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(2)
|
TEST(2)
|
||||||
{
|
{
|
||||||
run_test (_this, "lef2", "lef:in.lef", "au.oas.gz");
|
run_test (_this, "lef2", "lef:in.lef", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(3)
|
TEST(3)
|
||||||
{
|
{
|
||||||
run_test (_this, "lef3", "lef:in.lef", "au.oas.gz");
|
run_test (_this, "lef3", "lef:in.lef", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(4)
|
TEST(4)
|
||||||
{
|
{
|
||||||
run_test (_this, "lef4", "lef:in.lef", 0);
|
run_test (_this, "lef4", "lef:in.lef", 0, default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(5)
|
TEST(5)
|
||||||
{
|
{
|
||||||
run_test (_this, "lef5", "lef:in.lef", 0);
|
run_test (_this, "lef5", "lef:in.lef", 0, default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(6)
|
TEST(6)
|
||||||
{
|
{
|
||||||
run_test (_this, "lef6", "lef:in.lef", 0);
|
run_test (_this, "lef6", "lef:in.lef", 0, default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(7)
|
TEST(7)
|
||||||
{
|
{
|
||||||
run_test (_this, "lef7", "lef:in_tech.lef+lef:in.lef", "au.oas.gz");
|
run_test (_this, "lef7", "lef:in_tech.lef+lef:in.lef", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(10)
|
TEST(10)
|
||||||
{
|
{
|
||||||
run_test (_this, "def1", "lef:in.lef+def:in.def", "au.oas.gz");
|
run_test (_this, "def1", "lef:in.lef+def:in.def", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(11)
|
TEST(11)
|
||||||
{
|
{
|
||||||
run_test (_this, "def2", "lef:0.lef+lef:1.lef+def:in.def.gz", "au.oas.gz");
|
run_test (_this, "def2", "lef:0.lef+lef:1.lef+def:in.def.gz", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(12)
|
TEST(12)
|
||||||
{
|
{
|
||||||
run_test (_this, "def3", "lef:in.lef+def:in.def", "au.oas.gz");
|
run_test (_this, "def3", "lef:in.lef+def:in.def", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(13)
|
TEST(13)
|
||||||
{
|
{
|
||||||
run_test (_this, "def4", "lef:in.lef+def:in.def", "au.oas.gz");
|
run_test (_this, "def4", "lef:in.lef+def:in.def", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(14)
|
TEST(14)
|
||||||
{
|
{
|
||||||
run_test (_this, "def5", "lef:in.lef+def:in.def", "au.oas.gz");
|
run_test (_this, "def5", "lef:in.lef+def:in.def", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(15)
|
TEST(15)
|
||||||
{
|
{
|
||||||
run_test (_this, "def6", "lef:cells.lef+lef:tech.lef+def:in.def.gz", "au.oas.gz");
|
run_test (_this, "def6", "lef:cells.lef+lef:tech.lef+def:in.def.gz", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(16)
|
TEST(16)
|
||||||
{
|
{
|
||||||
run_test (_this, "def7", "lef:cells.lef+lef:tech.lef+def:in.def.gz", "au.oas.gz");
|
run_test (_this, "def7", "lef:cells.lef+lef:tech.lef+def:in.def.gz", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(17)
|
TEST(17)
|
||||||
{
|
{
|
||||||
run_test (_this, "def8", "lef:tech.lef+def:in.def", "au.oas.gz");
|
run_test (_this, "def8", "lef:tech.lef+def:in.def", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(18)
|
TEST(18)
|
||||||
{
|
{
|
||||||
run_test (_this, "def9", "lef:tech.lef+lef:cells_modified.lef+def:in.def", "au.oas.gz");
|
run_test (_this, "def9", "lef:tech.lef+lef:cells_modified.lef+def:in.def", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(19)
|
TEST(19)
|
||||||
{
|
{
|
||||||
run_test (_this, "def10", "def:in.def", "au.oas.gz");
|
run_test (_this, "def10", "def:in.def", "au.oas.gz", default_options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(20)
|
TEST(20)
|
||||||
{
|
{
|
||||||
run_test (_this, "issue-172", "lef:in.lef+def:in.def", "au.oas.gz", false);
|
run_test (_this, "issue-172", "lef:in.lef+def:in.def", "au.oas.gz", default_options (), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(21)
|
||||||
|
{
|
||||||
|
db::LEFDEFReaderOptions opt = default_options ();
|
||||||
|
opt.set_produce_pin_names (true);
|
||||||
|
opt.set_pin_property_name (2);
|
||||||
|
run_test (_this, "issue-489", "lef:in.lef+def:in.def", "au.oas", opt, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(22)
|
||||||
|
{
|
||||||
|
db::LEFDEFReaderOptions opt = default_options ();
|
||||||
|
opt.set_produce_pin_names (true);
|
||||||
|
opt.set_pin_property_name (3);
|
||||||
|
run_test (_this, "issue-489b", "lef:in_tech.lef+lef:in.lef", "au.oas.gz", opt, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,34 @@
|
||||||
|
VERSION 5.7 ;
|
||||||
|
DIVIDERCHAR "/" ;
|
||||||
|
BUSBITCHARS "[]" ;
|
||||||
|
DESIGN test ;
|
||||||
|
UNITS DISTANCE MICRONS 2000 ;
|
||||||
|
|
||||||
|
DIEAREA ( 0 0 ) ( 37520 7840 ) ;
|
||||||
|
|
||||||
|
PINS 12 ;
|
||||||
|
- VDD + NET VDD + SPECIAL + DIRECTION INOUT + USE POWER
|
||||||
|
+ LAYER M2 ( -320 0 ) ( 320 37520 )
|
||||||
|
+ FIXED ( 37520 3920 ) W ;
|
||||||
|
- VSS + NET VSS + SPECIAL + DIRECTION INOUT + USE GROUND
|
||||||
|
+ PORT
|
||||||
|
+ LAYER M2 ( -18760 0 ) ( 18760 640 )
|
||||||
|
+ FIXED ( 18760 -320 ) N
|
||||||
|
+ PORT
|
||||||
|
+ LAYER M2 ( -18760 0 ) ( 18760 640 )
|
||||||
|
+ FIXED ( 18760 8160 ) S
|
||||||
|
;
|
||||||
|
END PINS
|
||||||
|
|
||||||
|
SPECIALNETS 4 ;
|
||||||
|
- VSS ( * VSS )
|
||||||
|
+ ROUTED M2 640 + SHAPE FOLLOWPIN ( 0 0 ) ( 37520 * )
|
||||||
|
NEW M2 640 + SHAPE FOLLOWPIN ( 0 7840 ) ( 37520 * )
|
||||||
|
+ USE GROUND
|
||||||
|
;
|
||||||
|
- VDD ( * VDD )
|
||||||
|
+ ROUTED M2 640 + SHAPE FOLLOWPIN ( 0 3920 ) ( 37520 * )
|
||||||
|
+ USE POWER
|
||||||
|
;
|
||||||
|
END SPECIALNETS
|
||||||
|
END DESIGN
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
VERSION 5.7 ;
|
||||||
|
|
||||||
|
BUSBITCHARS "[]" ;
|
||||||
|
DIVIDERCHAR "/" ;
|
||||||
|
UNITS
|
||||||
|
DATABASE MICRONS 1000 ;
|
||||||
|
END UNITS
|
||||||
|
|
||||||
|
MANUFACTURINGGRID 0.002 ;
|
||||||
|
|
||||||
|
USEMINSPACING OBS OFF ;
|
||||||
|
|
||||||
|
LAYER overlap
|
||||||
|
TYPE OVERLAP ;
|
||||||
|
END overlap
|
||||||
|
|
||||||
|
LAYER contact
|
||||||
|
TYPE CUT ;
|
||||||
|
END contact
|
||||||
|
|
||||||
|
LAYER metal1
|
||||||
|
TYPE ROUTING ;
|
||||||
|
DIRECTION HORIZONTAL ;
|
||||||
|
END metal1
|
||||||
|
|
||||||
|
LAYER via1
|
||||||
|
TYPE CUT ;
|
||||||
|
END via1
|
||||||
|
|
||||||
|
LAYER metal2
|
||||||
|
TYPE ROUTING ;
|
||||||
|
DIRECTION VERTICAL ;
|
||||||
|
END metal2
|
||||||
|
|
||||||
|
LAYER via2
|
||||||
|
TYPE CUT ;
|
||||||
|
END via2
|
||||||
|
|
||||||
|
LAYER metal3
|
||||||
|
TYPE ROUTING ;
|
||||||
|
DIRECTION HORIZONTAL ;
|
||||||
|
END metal3
|
||||||
|
|
||||||
|
LAYER via3
|
||||||
|
TYPE CUT ;
|
||||||
|
END via3
|
||||||
|
|
||||||
|
LAYER metal4
|
||||||
|
TYPE ROUTING ;
|
||||||
|
DIRECTION VERTICAL ;
|
||||||
|
END metal4
|
||||||
|
|
||||||
|
LAYER via4
|
||||||
|
TYPE CUT ;
|
||||||
|
END via4
|
||||||
|
|
||||||
|
LAYER metal5
|
||||||
|
TYPE ROUTING ;
|
||||||
|
DIRECTION HORIZONTAL ;
|
||||||
|
END metal5
|
||||||
|
|
||||||
|
|
||||||
|
END LIBRARY
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,23 @@
|
||||||
|
MACRO dummy
|
||||||
|
CLASS CORE ;
|
||||||
|
FOREIGN dummy 0.000 0.000 ;
|
||||||
|
ORIGIN 0.000 0.000 ;
|
||||||
|
SIZE 0.384 BY 0.480 ;
|
||||||
|
SYMMETRY X Y ;
|
||||||
|
SITE BLABLA ;
|
||||||
|
PROPERTY LEF58_EDGETYPE "
|
||||||
|
EDGETYPE LEFT L ;
|
||||||
|
EDGETYPE RIGHT R ;
|
||||||
|
" ;
|
||||||
|
PIN Z
|
||||||
|
ANTENNADIFFAREA 0.009048 ;
|
||||||
|
DIRECTION OUTPUT ;
|
||||||
|
PORT
|
||||||
|
LAYER M1 ;
|
||||||
|
RECT 0.306 0.357 0.318 0.403 ;
|
||||||
|
RECT 0.318 0.115 0.352 0.403 ;
|
||||||
|
VIA 0.336 0.167 square ;
|
||||||
|
VIA 0.336 0.351 square ;
|
||||||
|
END
|
||||||
|
END Z
|
||||||
|
END dummy
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
LAYER OD
|
||||||
|
TYPE IMPLANT ;
|
||||||
|
END OD
|
||||||
|
LAYER VTS_N
|
||||||
|
TYPE IMPLANT ;
|
||||||
|
END VTS_N
|
||||||
|
LAYER VTS_P
|
||||||
|
TYPE IMPLANT ;
|
||||||
|
END VTS_P
|
||||||
|
LAYER M0OD
|
||||||
|
TYPE IMPLANT ;
|
||||||
|
END M0OD
|
||||||
|
LAYER M0PO
|
||||||
|
TYPE MASTERSLICE ;
|
||||||
|
END M0PO
|
||||||
|
LAYER VIA0
|
||||||
|
TYPE CUT ;
|
||||||
|
END VIA0
|
||||||
|
LAYER M1
|
||||||
|
TYPE MASTERSLICE ;
|
||||||
|
END M1
|
||||||
|
LAYER VIA1
|
||||||
|
TYPE CUT ;
|
||||||
|
END VIA1
|
||||||
|
LAYER M2
|
||||||
|
TYPE MASTERSLICE ;
|
||||||
|
END M2
|
||||||
|
|
||||||
|
VIA square
|
||||||
|
LAYER M0PO ;
|
||||||
|
RECT -0.006 -0.006 0.006 0.006 ;
|
||||||
|
LAYER VIA0 ;
|
||||||
|
RECT -0.006 -0.006 0.006 0.006 ;
|
||||||
|
LAYER M1 ;
|
||||||
|
RECT -0.006 -0.006 0.006 0.006 ;
|
||||||
|
END square
|
||||||
|
|
@ -178,6 +178,147 @@ class DBReaders_TestClass < TestBase
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# LEF/DEF Options
|
||||||
|
def test_lefdef_options
|
||||||
|
|
||||||
|
conf = RBA::LEFDEFReaderConfiguration::new
|
||||||
|
lm = RBA::LayerMap::new
|
||||||
|
lm.map(RBA::LayerInfo::new(1, 0), 2, RBA::LayerInfo::new(42, 17))
|
||||||
|
conf.layer_map = lm
|
||||||
|
|
||||||
|
opt = RBA::LoadLayoutOptions::new
|
||||||
|
opt.lefdef_config = conf
|
||||||
|
assert_equal(opt.lefdef_config.layer_map.to_string, "1/0 : 42/17\n")
|
||||||
|
assert_equal(opt.dup.lefdef_config.layer_map.to_string, "1/0 : 42/17\n")
|
||||||
|
|
||||||
|
assert_equal(conf.layer_map.to_string, "1/0 : 42/17\n")
|
||||||
|
|
||||||
|
conf.create_other_layers = false
|
||||||
|
assert_equal(conf.create_other_layers, false)
|
||||||
|
conf.create_other_layers = true
|
||||||
|
assert_equal(conf.create_other_layers, true)
|
||||||
|
|
||||||
|
conf.dbu = 2.5
|
||||||
|
assert_equal(conf.dbu, 2.5)
|
||||||
|
|
||||||
|
assert_equal(conf.net_property_name, 1)
|
||||||
|
conf.net_property_name = "x"
|
||||||
|
assert_equal(conf.net_property_name, "x")
|
||||||
|
conf.net_property_name = 2
|
||||||
|
assert_equal(conf.net_property_name, 2)
|
||||||
|
conf.net_property_name = nil
|
||||||
|
assert_equal(conf.net_property_name, nil)
|
||||||
|
|
||||||
|
assert_equal(conf.pin_property_name, nil)
|
||||||
|
conf.pin_property_name = "y"
|
||||||
|
assert_equal(conf.pin_property_name, "y")
|
||||||
|
conf.pin_property_name = 3
|
||||||
|
assert_equal(conf.pin_property_name, 3)
|
||||||
|
conf.pin_property_name = nil
|
||||||
|
assert_equal(conf.pin_property_name, nil)
|
||||||
|
|
||||||
|
assert_equal(conf.instance_property_name, 1)
|
||||||
|
conf.instance_property_name = "z"
|
||||||
|
assert_equal(conf.instance_property_name, "z")
|
||||||
|
conf.instance_property_name = 4
|
||||||
|
assert_equal(conf.instance_property_name, 4)
|
||||||
|
conf.instance_property_name = nil
|
||||||
|
assert_equal(conf.instance_property_name, nil)
|
||||||
|
|
||||||
|
assert_equal(conf.produce_cell_outlines, true)
|
||||||
|
conf.produce_cell_outlines = false
|
||||||
|
assert_equal(conf.produce_cell_outlines, false)
|
||||||
|
|
||||||
|
assert_equal(conf.cell_outline_layer, "OUTLINE")
|
||||||
|
conf.cell_outline_layer = "17/1"
|
||||||
|
assert_equal(conf.cell_outline_layer, "17/1")
|
||||||
|
|
||||||
|
assert_equal(conf.produce_placement_blockages, true)
|
||||||
|
conf.produce_placement_blockages = false
|
||||||
|
assert_equal(conf.produce_placement_blockages, false)
|
||||||
|
|
||||||
|
assert_equal(conf.placement_blockage_layer, "PLACEMENT_BLK")
|
||||||
|
conf.placement_blockage_layer = "17/2"
|
||||||
|
assert_equal(conf.placement_blockage_layer, "17/2")
|
||||||
|
|
||||||
|
assert_equal(conf.produce_via_geometry, true)
|
||||||
|
conf.produce_via_geometry = false
|
||||||
|
assert_equal(conf.produce_via_geometry, false)
|
||||||
|
|
||||||
|
assert_equal(conf.via_geometry_suffix, "")
|
||||||
|
conf.via_geometry_suffix = "XVIA"
|
||||||
|
assert_equal(conf.via_geometry_suffix, "XVIA")
|
||||||
|
|
||||||
|
assert_equal(conf.via_geometry_datatype, 0)
|
||||||
|
conf.via_geometry_datatype = 17
|
||||||
|
assert_equal(conf.via_geometry_datatype, 17)
|
||||||
|
|
||||||
|
assert_equal(conf.produce_pins, true)
|
||||||
|
conf.produce_pins = false
|
||||||
|
assert_equal(conf.produce_pins, false)
|
||||||
|
|
||||||
|
assert_equal(conf.pins_suffix, ".PIN")
|
||||||
|
conf.pins_suffix = "XPIN"
|
||||||
|
assert_equal(conf.pins_suffix, "XPIN")
|
||||||
|
|
||||||
|
assert_equal(conf.pins_datatype, 2)
|
||||||
|
conf.pins_datatype = 18
|
||||||
|
assert_equal(conf.pins_datatype, 18)
|
||||||
|
|
||||||
|
assert_equal(conf.produce_obstructions, true)
|
||||||
|
conf.produce_obstructions = false
|
||||||
|
assert_equal(conf.produce_obstructions, false)
|
||||||
|
|
||||||
|
assert_equal(conf.obstructions_suffix, ".OBS")
|
||||||
|
conf.obstructions_suffix = "XOBS"
|
||||||
|
assert_equal(conf.obstructions_suffix, "XOBS")
|
||||||
|
|
||||||
|
assert_equal(conf.obstructions_datatype, 3)
|
||||||
|
conf.obstructions_datatype = 19
|
||||||
|
assert_equal(conf.obstructions_datatype, 19)
|
||||||
|
|
||||||
|
assert_equal(conf.produce_blockages, true)
|
||||||
|
conf.produce_blockages = false
|
||||||
|
assert_equal(conf.produce_blockages, false)
|
||||||
|
|
||||||
|
assert_equal(conf.blockages_suffix, ".BLK")
|
||||||
|
conf.blockages_suffix = "XBLK"
|
||||||
|
assert_equal(conf.blockages_suffix, "XBLK")
|
||||||
|
|
||||||
|
assert_equal(conf.blockages_datatype, 4)
|
||||||
|
conf.blockages_datatype = 20
|
||||||
|
assert_equal(conf.blockages_datatype, 20)
|
||||||
|
|
||||||
|
assert_equal(conf.produce_labels, true)
|
||||||
|
conf.produce_labels = false
|
||||||
|
assert_equal(conf.produce_labels, false)
|
||||||
|
|
||||||
|
assert_equal(conf.labels_suffix, ".LABEL")
|
||||||
|
conf.labels_suffix = "XLABEL"
|
||||||
|
assert_equal(conf.labels_suffix, "XLABEL")
|
||||||
|
|
||||||
|
assert_equal(conf.labels_datatype, 1)
|
||||||
|
conf.labels_datatype = 21
|
||||||
|
assert_equal(conf.labels_datatype, 21)
|
||||||
|
|
||||||
|
assert_equal(conf.produce_routing, true)
|
||||||
|
conf.produce_routing = false
|
||||||
|
assert_equal(conf.produce_routing, false)
|
||||||
|
|
||||||
|
assert_equal(conf.routing_suffix, "")
|
||||||
|
conf.routing_suffix = "XROUT"
|
||||||
|
assert_equal(conf.routing_suffix, "XROUT")
|
||||||
|
|
||||||
|
assert_equal(conf.routing_datatype, 0)
|
||||||
|
conf.routing_datatype = 22
|
||||||
|
assert_equal(conf.routing_datatype, 22)
|
||||||
|
|
||||||
|
assert_equal(conf.lef_files.join(","), "")
|
||||||
|
conf.lef_files = [ "u.lef", "v.lef" ]
|
||||||
|
assert_equal(conf.lef_files.join(","), "u.lef,v.lef")
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
# MAG Options
|
# MAG Options
|
||||||
def test_mag_options
|
def test_mag_options
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue