mirror of https://github.com/KLayout/klayout.git
Using a larger branch complexity than default for LVS full test's netlist compare
In addition: typo fixed, added doc for complexity configuration parameters.
This commit is contained in:
parent
df7195b81f
commit
9d250d6df9
|
|
@ -786,7 +786,7 @@ private:
|
|||
* @brief Compares edges as "less"
|
||||
* Edge comparison is based on the pins attached (name of the first pin).
|
||||
*/
|
||||
static bool edge_less (const db::Net *a, const db::Net *b);
|
||||
static bool net_less (const db::Net *a, const db::Net *b);
|
||||
|
||||
/**
|
||||
* @brief Compares edges as "equal"
|
||||
|
|
@ -1260,8 +1260,8 @@ NetGraphNode::operator< (const NetGraphNode &node) const
|
|||
}
|
||||
}
|
||||
if (m_edges.empty ()) {
|
||||
// do a more detailed analysis on the edges
|
||||
return edge_less (net (), node.net ());
|
||||
// do a more detailed analysis on the nets involved
|
||||
return net_less (net (), node.net ());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1285,7 +1285,7 @@ NetGraphNode::operator== (const NetGraphNode &node) const
|
|||
}
|
||||
|
||||
bool
|
||||
NetGraphNode::edge_less (const db::Net *a, const db::Net *b)
|
||||
NetGraphNode::net_less (const db::Net *a, const db::Net *b)
|
||||
{
|
||||
if ((a != 0) != (b != 0)) {
|
||||
return (a != 0) < (b != 0);
|
||||
|
|
|
|||
|
|
@ -131,6 +131,18 @@ module LVS
|
|||
# @synopsis max_res(threshold)
|
||||
# See \Netter#max_res for a description of that function.
|
||||
|
||||
# %LVS%
|
||||
# @name max_branch_complexity
|
||||
# @brief Configures the maximum branch complexity for ambiguous net matching
|
||||
# @synopsis max_branch_complexity(n)
|
||||
# See \Netter#max_branch_complexity for a description of that function.
|
||||
|
||||
# %LVS%
|
||||
# @name max_depth
|
||||
# @brief Configures the maximum search depth for net match deduction
|
||||
# @synopsis max_depth(n)
|
||||
# See \Netter#max_depth for a description of that function.
|
||||
|
||||
%w(schematic compare same_nets same_circuits same_device_classes equivalent_pins min_caps max_res max_depth max_branch_complexity).each do |f|
|
||||
eval <<"CODE"
|
||||
def #{f}(*args)
|
||||
|
|
|
|||
|
|
@ -371,11 +371,41 @@ module LVS
|
|||
@comparer.max_resistance = value.to_f
|
||||
end
|
||||
|
||||
# %LVS%
|
||||
# @name max_depth
|
||||
# @brief Configures the maximum search depth for net match deduction
|
||||
# @synopsis max_depth(n)
|
||||
# The netlist compare algorithm works recursively: once a net
|
||||
# equivalence is established, additional matches are derived from
|
||||
# this equivalence. Such equivalences in turn are used to derive
|
||||
# new equivalences and so on. The maximum depth parameter configures
|
||||
# the number of recursions the algorithm performs before picking
|
||||
# the next net. With higher values for the depth, the algorithm
|
||||
# pursues this "deduction path" in greater depth while with
|
||||
# smaller values, the algorithm prefers picking nets in a random fashion
|
||||
# as the seeds for this deduction path. The default value is 8.
|
||||
|
||||
def max_depth(value)
|
||||
lvs_data
|
||||
@comparer.max_depth = value.to_i
|
||||
end
|
||||
|
||||
# @name max_branch_complexity
|
||||
# @brief Configures the maximum branch complexity for ambiguous net matching
|
||||
# @synopsis max_branch_complexity(n)
|
||||
# The netlist compare algorithm is basically a backtracing algorithm.
|
||||
# With ambiguous nets, the algorithm picks possible net pairs and
|
||||
# tries whether they will make a good match. Following the deduction
|
||||
# path for this nets may lead to further branches if more ambiguous
|
||||
# nets are encountered. To avoid combinational explosion, the maximum
|
||||
# branch complexity is limited to the value configured with this
|
||||
# function. The default value is 100 which means not more than
|
||||
# 100 combinations are tried for a single seed pair. For networks
|
||||
# with inherent ambiguity such as decoders, the complexity
|
||||
# can be increased at the expense of potentially larger runtimes.
|
||||
# The runtime penality is roughly proportional to the branch
|
||||
# complexity.
|
||||
|
||||
def max_branch_complexity(value)
|
||||
lvs_data
|
||||
@comparer.max_branch_complexity = value.to_i
|
||||
|
|
|
|||
|
|
@ -87,6 +87,8 @@ void run_test (tl::TestBase *_this, const std::string &suffix, const std::string
|
|||
// output, but this will essentially verify the output netlist's consistency.
|
||||
db::NetlistCrossReference xref;
|
||||
db::NetlistComparer comparer (&xref);
|
||||
comparer.set_max_branch_complexity (500);
|
||||
comparer.set_max_depth (20);
|
||||
bool res = comparer.compare (&nl1, &nl2);
|
||||
if (! res) {
|
||||
tl::info << "Netlist mismatch:";
|
||||
|
|
|
|||
Loading…
Reference in New Issue