mirror of https://github.com/KLayout/klayout.git
More debugging support
This commit is contained in:
parent
8ece7bcce1
commit
f0943dea53
|
|
@ -400,16 +400,19 @@ Class<pex::RNetwork> decl_RNetwork ("pex", "RNetwork",
|
|||
"This class has been introduced in version 0.30.1\n"
|
||||
);
|
||||
|
||||
static pex::RExtractor *new_sqc_rextractor (double dbu)
|
||||
static pex::RExtractor *new_sqc_rextractor (double dbu, bool skip_simplify)
|
||||
{
|
||||
return new pex::SquareCountingRExtractor (dbu);
|
||||
auto res = new pex::SquareCountingRExtractor (dbu);
|
||||
res->set_skip_simplfy (skip_simplify);
|
||||
return res;
|
||||
}
|
||||
|
||||
static pex::RExtractor *new_tesselation_rextractor (double dbu, double min_b, double max_area)
|
||||
static pex::RExtractor *new_tesselation_rextractor (double dbu, double min_b, double max_area, bool skip_reduction)
|
||||
{
|
||||
auto res = new pex::TriangulationRExtractor (dbu);
|
||||
res->triangulation_parameters ().min_b = min_b;
|
||||
res->triangulation_parameters ().max_area = max_area;
|
||||
res->set_skip_reduction (skip_reduction);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
@ -421,7 +424,7 @@ static pex::RNetwork *extract_ipolygon (pex::RExtractor *rex, const db::Polygon
|
|||
}
|
||||
|
||||
Class<pex::RExtractor> decl_RExtractor ("pex", "RExtractor",
|
||||
gsi::constructor ("square_counting_extractor", &new_sqc_rextractor, gsi::arg ("dbu"),
|
||||
gsi::constructor ("square_counting_extractor", &new_sqc_rextractor, gsi::arg ("dbu"), gsi::arg ("skip_simplify", false),
|
||||
"@brief Creates a square counting R extractor\n"
|
||||
"The square counting extractor extracts resistances from a polygon with ports using the following approach:\n"
|
||||
"\n"
|
||||
|
|
@ -440,9 +443,10 @@ Class<pex::RExtractor> decl_RExtractor ("pex", "RExtractor",
|
|||
"values, multiply the element resistance values by the sheet resistance.\n"
|
||||
"\n"
|
||||
"@param dbu The database unit of the polygons the extractor will work on\n"
|
||||
"@param skip_simplify If true, the final step to simplify the netlist will be skipped. This feature is for testing mainly.\n"
|
||||
"@return A new \\RExtractor object that implements the square counting extractor\n"
|
||||
) +
|
||||
gsi::constructor ("tesselation_extractor", &new_tesselation_rextractor, gsi::arg ("dbu"), gsi::arg ("min_b", 0.3), gsi::arg ("max_area", 0.0),
|
||||
gsi::constructor ("tesselation_extractor", &new_tesselation_rextractor, gsi::arg ("dbu"), gsi::arg ("min_b", 0.3), gsi::arg ("max_area", 0.0), gsi::arg ("skip_reduction", false),
|
||||
"@brief Creates a tesselation R extractor\n"
|
||||
"The tesselation extractor starts with a triangulation of the original polygon. The triangulation is "
|
||||
"turned into a resistor network and simplified.\n"
|
||||
|
|
@ -464,6 +468,7 @@ Class<pex::RExtractor> decl_RExtractor ("pex", "RExtractor",
|
|||
"@param dbu The database unit of the polygons the extractor will work on\n"
|
||||
"@param min_b Defines the min 'b' value of the refined Delaunay triangulation (see \\Polygon#delaunay)\n"
|
||||
"@param max_area Defines maximum area value of the refined Delaunay triangulation (see \\Polygon#delaunay). The value is given in square micrometer units.\n"
|
||||
"@param skip_reduction If true, the reduction step for the netlist will be skipped. This feature is for testing mainly. The resulting R graph will contain all the original triangles and the internal nodes representing the vertexes.\n"
|
||||
"@return A new \\RExtractor object that implements the square counting extractor\n"
|
||||
) +
|
||||
gsi::factory_ext ("extract", &extract_ipolygon, gsi::arg ("polygon"), gsi::arg ("vertex_ports", std::vector<db::Point> (), "[]"), gsi::arg ("polygon_ports", std::vector<db::Polygon> (), "[]"),
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ struct JoinEdgeSets
|
|||
SquareCountingRExtractor::SquareCountingRExtractor (double dbu)
|
||||
{
|
||||
m_dbu = dbu;
|
||||
m_skip_simplify = false;
|
||||
|
||||
m_decomp_param.split_edges = true;
|
||||
m_decomp_param.with_segments = false;
|
||||
|
|
@ -162,8 +163,7 @@ SquareCountingRExtractor::do_extract (const db::Polygon &db_poly, const std::vec
|
|||
++em;
|
||||
}
|
||||
|
||||
// @@@ TODO: multiply with sheet rho!
|
||||
// @@@ TODO: width dependency
|
||||
// TODO: width dependency?
|
||||
if (r == 0) {
|
||||
rnetwork.create_element (pex::RElement::short_value (), pl->second, pl_next->second);
|
||||
} else {
|
||||
|
|
@ -292,7 +292,9 @@ SquareCountingRExtractor::extract (const db::Polygon &polygon, const std::vector
|
|||
|
||||
}
|
||||
|
||||
rnetwork.simplify ();
|
||||
if (! m_skip_simplify) {
|
||||
rnetwork.simplify ();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,6 +64,22 @@ public:
|
|||
return m_decomp_param;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets a value indicating whether to skip the simplify step
|
||||
*/
|
||||
void set_skip_simplfy (bool f)
|
||||
{
|
||||
m_skip_simplify = f;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets a value indicating whether to skip the simplify step
|
||||
*/
|
||||
bool skip_simplify () const
|
||||
{
|
||||
return m_skip_simplify;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets the database unit
|
||||
*/
|
||||
|
|
@ -129,6 +145,7 @@ protected:
|
|||
private:
|
||||
db::plc::ConvexDecompositionParameters m_decomp_param;
|
||||
double m_dbu;
|
||||
bool m_skip_simplify;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ namespace pex
|
|||
TriangulationRExtractor::TriangulationRExtractor (double dbu)
|
||||
{
|
||||
m_dbu = dbu;
|
||||
m_skip_reduction = false;
|
||||
|
||||
m_tri_param.min_b = 0.3;
|
||||
m_tri_param.max_area = 0.0;
|
||||
|
|
@ -206,7 +207,9 @@ TriangulationRExtractor::extract (const db::Polygon &polygon, const std::vector<
|
|||
|
||||
// eliminate internal nodes
|
||||
|
||||
eliminate_all (rnetwork);
|
||||
if (! m_skip_reduction) {
|
||||
eliminate_all (rnetwork);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -65,6 +65,22 @@ public:
|
|||
return m_tri_param;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets a value indicating whether to skip the reduction step
|
||||
*/
|
||||
void set_skip_reduction (bool f)
|
||||
{
|
||||
m_skip_reduction = f;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets a value indicating whether to skip the reduction step
|
||||
*/
|
||||
bool skip_reduction () const
|
||||
{
|
||||
return m_skip_reduction;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets the database unit
|
||||
*/
|
||||
|
|
@ -89,6 +105,7 @@ public:
|
|||
private:
|
||||
db::plc::TriangulationParameters m_tri_param;
|
||||
double m_dbu;
|
||||
bool m_skip_reduction;
|
||||
|
||||
void create_conductances (const db::plc::Polygon &tri, const std::unordered_map<const db::plc::Vertex *, RNode *> &vertex2node, RNetwork &rnetwork);
|
||||
void eliminate_node (pex::RNode *node, RNetwork &rnetwork);
|
||||
|
|
|
|||
Loading…
Reference in New Issue