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"
|
* @brief Compares edges as "less"
|
||||||
* Edge comparison is based on the pins attached (name of the first pin).
|
* 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"
|
* @brief Compares edges as "equal"
|
||||||
|
|
@ -1260,8 +1260,8 @@ NetGraphNode::operator< (const NetGraphNode &node) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (m_edges.empty ()) {
|
if (m_edges.empty ()) {
|
||||||
// do a more detailed analysis on the edges
|
// do a more detailed analysis on the nets involved
|
||||||
return edge_less (net (), node.net ());
|
return net_less (net (), node.net ());
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -1285,7 +1285,7 @@ NetGraphNode::operator== (const NetGraphNode &node) const
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
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)) {
|
if ((a != 0) != (b != 0)) {
|
||||||
return (a != 0) < (b != 0);
|
return (a != 0) < (b != 0);
|
||||||
|
|
|
||||||
|
|
@ -131,6 +131,18 @@ module LVS
|
||||||
# @synopsis max_res(threshold)
|
# @synopsis max_res(threshold)
|
||||||
# See \Netter#max_res for a description of that function.
|
# 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|
|
%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"
|
eval <<"CODE"
|
||||||
def #{f}(*args)
|
def #{f}(*args)
|
||||||
|
|
|
||||||
|
|
@ -371,11 +371,41 @@ module LVS
|
||||||
@comparer.max_resistance = value.to_f
|
@comparer.max_resistance = value.to_f
|
||||||
end
|
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)
|
def max_depth(value)
|
||||||
lvs_data
|
lvs_data
|
||||||
@comparer.max_depth = value.to_i
|
@comparer.max_depth = value.to_i
|
||||||
end
|
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)
|
def max_branch_complexity(value)
|
||||||
lvs_data
|
lvs_data
|
||||||
@comparer.max_branch_complexity = value.to_i
|
@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.
|
// output, but this will essentially verify the output netlist's consistency.
|
||||||
db::NetlistCrossReference xref;
|
db::NetlistCrossReference xref;
|
||||||
db::NetlistComparer comparer (&xref);
|
db::NetlistComparer comparer (&xref);
|
||||||
|
comparer.set_max_branch_complexity (500);
|
||||||
|
comparer.set_max_depth (20);
|
||||||
bool res = comparer.compare (&nl1, &nl2);
|
bool res = comparer.compare (&nl1, &nl2);
|
||||||
if (! res) {
|
if (! res) {
|
||||||
tl::info << "Netlist mismatch:";
|
tl::info << "Netlist mismatch:";
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue