WIP: bug fixing.

This commit is contained in:
Matthias Koefferlein 2020-07-25 22:54:25 +02:00
parent dbe5e19017
commit a9719ad78e
4 changed files with 30 additions and 7 deletions

View File

@ -982,7 +982,7 @@ DEFImporter::read_vias (db::Layout & /*layout*/, db::Cell & /*design*/, double s
std::string ln = get ();
if (m_lef_importer.is_routing_layer (ln) && seen_layers.find (ln) != seen_layers.end ()) {
if (m_lef_importer.is_routing_layer (ln) && seen_layers.find (ln) == seen_layers.end ()) {
seen_layers.insert (ln);
routing_layers.push_back (ln);
}
@ -1004,7 +1004,7 @@ DEFImporter::read_vias (db::Layout & /*layout*/, db::Cell & /*design*/, double s
std::string ln = get ();
if (m_lef_importer.is_routing_layer (ln) && seen_layers.find (ln) != seen_layers.end ()) {
if (m_lef_importer.is_routing_layer (ln) && seen_layers.find (ln) == seen_layers.end ()) {
seen_layers.insert (ln);
routing_layers.push_back (ln);
}
@ -1015,7 +1015,7 @@ DEFImporter::read_vias (db::Layout & /*layout*/, db::Cell & /*design*/, double s
}
db::Polygon poly;
read_polygon (poly, scale);
read_rect (poly, scale);
geo_based_vg->add_polygon (ln, poly, mask);
}

View File

@ -245,7 +245,7 @@ GeometryBasedViaGenerator::GeometryBasedViaGenerator ()
void
GeometryBasedViaGenerator::create_cell (LEFDEFReaderState &reader, Layout &layout, db::Cell &cell, unsigned int /*mask_bottom*/, unsigned int /*mask_cut*/, unsigned int /*mask_top*/, const LEFDEFNumberOfMasks * /*nm*/)
{
for (std::map <std::string, std::list<std::pair<unsigned int, db::Polygon> > >::const_iterator g = m_geometries.begin (); g != m_geometries.end (); ++g) {
for (std::map <std::string, std::list<std::pair<unsigned int, db::Polygon> > >::const_iterator g = m_polygons.begin (); g != m_polygons.end (); ++g) {
for (std::list<std::pair<unsigned int, db::Polygon> >::const_iterator i = g->second.begin (); i != g->second.end (); ++i) {
@ -259,12 +259,33 @@ GeometryBasedViaGenerator::create_cell (LEFDEFReaderState &reader, Layout &layou
}
}
for (std::map <std::string, std::list<std::pair<unsigned int, db::Box> > >::const_iterator g = m_boxes.begin (); g != m_boxes.end (); ++g) {
for (std::list<std::pair<unsigned int, db::Box> >::const_iterator i = g->second.begin (); i != g->second.end (); ++i) {
std::pair <bool, unsigned int> dl (false, 0);
dl = reader.open_layer (layout, g->first, ViaGeometry, i->first);
if (dl.first) {
cell.shapes (dl.second).insert (i->second);
}
}
}
}
void
GeometryBasedViaGenerator::add_polygon (const std::string &ln, const db::Polygon &poly, unsigned int mask)
{
m_geometries [ln].push_back (std::make_pair (mask, poly));
m_polygons [ln].push_back (std::make_pair (mask, poly));
}
void
GeometryBasedViaGenerator::add_box (const std::string &ln, const db::Box &box, unsigned int mask)
{
m_boxes [ln].push_back (std::make_pair (mask, box));
}
// -----------------------------------------------------------------------------------

View File

@ -925,9 +925,11 @@ public:
virtual void create_cell (LEFDEFReaderState &reader, Layout &layout, db::Cell &cell, unsigned int mask_bottom, unsigned int mask_cut, unsigned int mask_top, const LEFDEFNumberOfMasks *num_cut_masks);
void add_polygon (const std::string &ln, const db::Polygon &poly, unsigned int mask);
void add_box (const std::string &ln, const db::Box &box, unsigned int mask);
private:
std::map <std::string, std::list<std::pair<unsigned int, db::Polygon> > > m_geometries;
std::map <std::string, std::list<std::pair<unsigned int, db::Polygon> > > m_polygons;
std::map <std::string, std::list<std::pair<unsigned int, db::Box> > > m_boxes;
};
/**

View File

@ -607,7 +607,7 @@ LEFImporter::read_viadef_by_geometry (GeometryBasedViaGenerator *vg, ViaDesc &vi
}
db::Box b (points [0], points [1]);
vg->add_polygon (layer_name, db::Polygon (b), mask);
vg->add_box (layer_name, b, mask);
expect (";");