diff --git a/src/db/db/dbLayoutVsSchematicWriter.cc b/src/db/db/dbLayoutVsSchematicWriter.cc index 5cb57cf09..ea4f747aa 100644 --- a/src/db/db/dbLayoutVsSchematicWriter.cc +++ b/src/db/db/dbLayoutVsSchematicWriter.cc @@ -239,6 +239,7 @@ void std_writer_impl::write (TokenizedOutput &stream, const db::NetlistCro for (db::NetlistCrossReference::PerCircuitData::log_entries_const_iterator l = pcd->log_entries.begin (); l != pcd->log_entries.end (); ++l) { TokenizedOutput (o, Keys::log_entry_key, true) << severity_to_s (l->severity) << message_to_s (l->msg); + o << endl; } } diff --git a/src/db/db/dbNetlistCompare.cc b/src/db/db/dbNetlistCompare.cc index 58604605d..d999017fd 100644 --- a/src/db/db/dbNetlistCompare.cc +++ b/src/db/db/dbNetlistCompare.cc @@ -62,6 +62,8 @@ NetlistComparer::NetlistComparer (NetlistCompareLogger *logger) m_dont_consider_net_names = false; m_case_sensitive = false; + + m_with_log = true; } NetlistComparer::~NetlistComparer () @@ -382,7 +384,7 @@ NetlistComparer::compare_impl (const db::Netlist *a, const db::Netlist *b) const std::string msg = generate_subcircuits_not_verified_warning (ca, verified_circuits_a, cb, verified_circuits_b); - if (mp_logger->wants_log_entries ()) { + if (m_with_log) { mp_logger->log_entry (db::NetlistCompareLogger::Error, msg); } @@ -896,7 +898,7 @@ NetlistComparer::compare_circuits (const db::Circuit *c1, const db::Circuit *c2, // in must_match mode, check if the nets are identical if (mp_logger) { if (p->second && ! exact_match) { - if (mp_logger->wants_log_entries ()) { + if (m_with_log) { mp_logger->log_entry (db::NetlistCompareLogger::Error, tl::sprintf (tl::to_string (tr ("Nets %s are paired explicitly, but are not identical topologically")), nets2string (p->first))); } @@ -983,6 +985,7 @@ NetlistComparer::compare_circuits (const db::Circuit *c1, const db::Circuit *c2, compare.subcircuit_equivalence = &subcircuit_equivalence; compare.device_equivalence = &device_equivalence; compare.logger = mp_logger; + compare.with_log = m_with_log; compare.progress = &progress; std::vector nodes, other_nodes; @@ -1085,7 +1088,7 @@ NetlistComparer::compare_circuits (const db::Circuit *c1, const db::Circuit *c2, } - if (pass + 1 == num_passes && ! good && mp_logger && mp_logger->wants_log_entries ()) { + if (pass + 1 == num_passes && ! good && mp_logger && m_with_log) { compare.analyze_failed_matches (); } @@ -1211,7 +1214,7 @@ NetlistComparer::handle_pin_mismatch (const db::NetGraph &g1, const db::Circuit } else { if (mp_logger) { - if (mp_logger->wants_log_entries ()) { + if (m_with_log) { analyze_pin_mismatch (pin1, c1, pin2, c2, mp_logger); } mp_logger->pin_mismatch (pin1, pin2); diff --git a/src/db/db/dbNetlistCompare.h b/src/db/db/dbNetlistCompare.h index 3424cff9b..7f69dd7d7 100644 --- a/src/db/db/dbNetlistCompare.h +++ b/src/db/db/dbNetlistCompare.h @@ -100,17 +100,9 @@ public: /** * @brief Receives log entries for the current circuit pair - * These events are only generated when the "wants_log_entry" hint returns true. */ virtual void log_entry (Severity /*level*/, const std::string & /*msg*/) { } - /** - * @brief Returns a value indicating whether log entries need to be generated - * Log entries may include hints which are expensive to compute. This method tells the - * matching algorithm whether to create such entries or not. - */ - virtual bool wants_log_entries () const { return false; } - /** * @brief Nets a and b match exactly */ @@ -280,6 +272,24 @@ public: return m_max_depth; } + /** + * @brief Sets a value indicating that log messages are generated + * Log messages may be expensive to compute, hence they can be turned off. + * By default, log messages are generated. + */ + void set_with_log (bool f) + { + m_with_log = f; + } + + /** + * @brief Gets a value indicating that log messages are generated + */ + bool with_log () const + { + return m_with_log; + } + /** * @brief Sets a value indicating whether not to consider net names * This feature is mainly intended for testing. @@ -388,6 +398,7 @@ protected: bool handle_pin_mismatch (const NetGraph &g1, const db::Circuit *c1, const db::Pin *pin1, const NetGraph &g2, const db::Circuit *c2, const db::Pin *p2) const; mutable NetlistCompareLogger *mp_logger; + bool m_with_log; std::map, std::vector, bool> > > m_same_nets; std::unique_ptr mp_circuit_pin_categorizer; std::unique_ptr mp_device_categorizer; diff --git a/src/db/db/dbNetlistCompareCore.cc b/src/db/db/dbNetlistCompareCore.cc index e9b842a0d..9dfe56018 100644 --- a/src/db/db/dbNetlistCompareCore.cc +++ b/src/db/db/dbNetlistCompareCore.cc @@ -403,6 +403,7 @@ NetlistCompareCore::NetlistCompareCore (NetGraph *graph, NetGraph *other_graph) dont_consider_net_names (false), with_ambiguous (false), logger (0), + with_log (true), circuit_pin_mapper (0), subcircuit_equivalence (0), device_equivalence (0), @@ -1050,7 +1051,7 @@ NetlistCompareCore::derive_node_identities_from_ambiguity_group (const NodeRange if (ambiguous) { if (logger) { - if (logger->wants_log_entries ()) { + if (with_log) { logger->log_entry (db::NetlistCompareLogger::Warning, tl::sprintf (tl::to_string (tr ("Matching nets %s from an ambiguous group of nets")), nets2string (p->first->net (), p->second->net ()))); } @@ -1114,7 +1115,7 @@ NetlistCompareCore::derive_node_identities_from_ambiguity_group (const NodeRange } } - if (logger && logger->wants_log_entries () && was_ambiguous) { + if (logger && with_log && was_ambiguous) { logger->log_entry (db::NetlistCompareLogger::Info, tl::sprintf (tl::to_string (tr ("Matching nets %s following an ambiguous match")), nets2string (n->net (), n_other->net ()))); } @@ -1550,7 +1551,7 @@ NetlistCompareCore::derive_node_identities_from_node_set (std::vector::max() && depth > max_depth) { - if (logger->wants_log_entries ()) { + if (with_log) { logger->log_entry (db::NetlistCompareLogger::Warning, tl::sprintf (tl::to_string (tr ("Maximum depth exhausted (max depth is %d)")), int (max_depth))); } if (db::NetlistCompareGlobalOptions::options ()->debug_netcompare) { @@ -1668,7 +1669,7 @@ NetlistCompareCore::derive_node_identities_from_node_set (std::vector::max () && double (std::max (nr->num1, nr->num2)) * double (n_branch) > double (max_n_branch)) { - if (logger->wants_log_entries ()) { + if (with_log) { logger->log_entry (db::NetlistCompareLogger::Warning, tl::sprintf (tl::to_string (tr ("Maximum complexity exhausted (max complexity is %s, needs at least %s)")), tl::to_string (max_n_branch), tl::to_string (std::max (nr->num1, nr->num2) * n_branch))); } if (db::NetlistCompareGlobalOptions::options ()->debug_netcompare) { diff --git a/src/db/db/dbNetlistCompareCore.h b/src/db/db/dbNetlistCompareCore.h index 41a68d56a..ba4a378e7 100644 --- a/src/db/db/dbNetlistCompareCore.h +++ b/src/db/db/dbNetlistCompareCore.h @@ -96,6 +96,7 @@ public: bool dont_consider_net_names; bool with_ambiguous; NetlistCompareLogger *logger; + bool with_log; CircuitPinCategorizer *circuit_pin_mapper; SubCircuitEquivalenceTracker *subcircuit_equivalence; DeviceEquivalenceTracker *device_equivalence; diff --git a/src/db/db/dbNetlistCompareUtils.cc b/src/db/db/dbNetlistCompareUtils.cc index 95be3973f..e3325dab5 100644 --- a/src/db/db/dbNetlistCompareUtils.cc +++ b/src/db/db/dbNetlistCompareUtils.cc @@ -71,15 +71,27 @@ nl_compare_debug_indent (size_t depth) return s; } -const std::string var_sep (" \u21D4 "); +const std::string var_sep = tl::to_string (tr (" vs. ")); + +static std::string +expanded_name (const db::Net *a) +{ + if (a == 0) { + return tl::to_string (tr ("(not connected)")); + } else { + return a->expanded_name (); + } +} std::string nets2string (const db::Net *a, const db::Net *b) { - if (a->expanded_name () != b->expanded_name ()) { - return a->expanded_name () + var_sep + b->expanded_name (); + std::string na = expanded_name (a); + std::string nb = expanded_name (b); + if (na != nb) { + return na + var_sep + nb; } else { - return a->expanded_name (); + return nb; } } diff --git a/src/db/db/dbNetlistCrossReference.cc b/src/db/db/dbNetlistCrossReference.cc index 7b9b7c408..3ad0d62f4 100644 --- a/src/db/db/dbNetlistCrossReference.cc +++ b/src/db/db/dbNetlistCrossReference.cc @@ -27,7 +27,6 @@ namespace db { NetlistCrossReference::NetlistCrossReference () - : m_wants_log_entries (true) { // .. nothing yet .. } diff --git a/src/db/db/dbNetlistCrossReference.h b/src/db/db/dbNetlistCrossReference.h index 015a5326b..2a5e87fec 100644 --- a/src/db/db/dbNetlistCrossReference.h +++ b/src/db/db/dbNetlistCrossReference.h @@ -258,16 +258,6 @@ public: gen_subcircuits (a, b, Mismatch, msg); } - virtual bool wants_log_entries () const - { - return m_wants_log_entries; - } - - void set_wants_log_entries (bool f) - { - m_wants_log_entries = f; - } - void clear (); size_t circuit_count () const @@ -329,7 +319,6 @@ private: std::pair m_current_circuits; PerCircuitData *mp_per_circuit_data; PerCircuitData::log_entries_type m_other_log_entries; - bool m_wants_log_entries; void establish_pair (const db::Circuit *a, const db::Circuit *b); void establish_pair (const db::Net *a, const db::Net *b, Status status, const std::string &msg); diff --git a/src/db/db/gsiDeclDbNetlistCompare.cc b/src/db/db/gsiDeclDbNetlistCompare.cc index 5edd6ed3c..5c8ed79f3 100644 --- a/src/db/db/gsiDeclDbNetlistCompare.cc +++ b/src/db/db/gsiDeclDbNetlistCompare.cc @@ -34,7 +34,7 @@ class GenericNetlistCompareLogger { public: GenericNetlistCompareLogger () - : db::NetlistCompareLogger (), m_wants_log (false) + : db::NetlistCompareLogger () { // .. nothing yet .. } @@ -151,21 +151,6 @@ public: db::NetlistCompareLogger::log_entry (severity, msg); } - virtual bool wants_log () const - { - return m_wants_log; - } - - bool get_wants_log () const - { - return m_wants_log; - } - - void set_wants_log (bool f) - { - m_wants_log = f; - } - virtual void match_nets (const db::Net *a, const db::Net *b) { if (cb_match_nets.can_issue ()) { @@ -329,7 +314,6 @@ public: gsi::Callback cb_match_nets; gsi::Callback cb_circuit_mismatch; gsi::Callback cb_log_entry; - gsi::Callback cb_wants_log; gsi::Callback cb_net_mismatch; gsi::Callback cb_match_ambiguous_nets; gsi::Callback cb_match_devices; @@ -344,8 +328,6 @@ public: private: GenericNetlistCompareLogger (const GenericNetlistCompareLogger &d); GenericNetlistCompareLogger &operator= (const GenericNetlistCompareLogger &d); - - bool m_wants_log; }; } @@ -405,20 +387,7 @@ Class decl_GenericNetlistCompareLogger (decl_dbNetl gsi::callback ("log_entry", &GenericNetlistCompareLogger::log_entry, &GenericNetlistCompareLogger::cb_log_entry, gsi::arg ("level"), gsi::arg ("msg"), "@brief Issues an entry for the compare log.\n" "This method delivers a log message generated during the compare of two circuits.\n" - "It is called between of \\begin_circuit and \\end_circuit and only if \\wants_log returns true.\n" - "\n" - "This method has been added in version 0.28." - ) + - gsi::method ("wants_log=", &GenericNetlistCompareLogger::set_wants_log, gsi::arg ("value"), - "@brief Sets a value indicating whether the receiver wants log messages.\n" - "Log messages may include compare hints which are expensive to compute. Hence, by default, log generation is turned off. " - "Set this attribute to true in order to receive log messages.\n" - "\n" - "This method has been added in version 0.28." - ) + - gsi::method ("wants_log", &GenericNetlistCompareLogger::get_wants_log, - "@brief Gets a value indicating whether the receiver wants log messages.\n" - "See \\wants_log= for details about this flag.\n" + "It is called between of \\begin_circuit and \\end_circuit.\n" "\n" "This method has been added in version 0.28." ) + @@ -525,6 +494,19 @@ Class decl_dbNetlistComparer ("db", "NetlistComparer", "The logger is a delegate or event receiver which the comparer will send compare events to. " "See the class description for more details." ) + + gsi::method ("with_log=", &db::NetlistComparer::set_with_log, gsi::arg ("flag"), + "@brief Sets a value indicating that log messages are generated.\n" + "Log messages may be expensive to compute, hence they can be turned off.\n" + "By default, log messages are generated.\n" + "\n" + "This attribute have been introduced in version 0.28.\n" + ) + + gsi::method ("with_log", &db::NetlistComparer::with_log, + "@brief Gets a value indicating that log messages are generated.\n" + "See \\with_log= for details about this flag.\n" + "\n" + "This attribute have been introduced in version 0.28.\n" + ) + gsi::method ("same_nets", (void (db::NetlistComparer::*) (const db::Net *, const db::Net *, bool)) &db::NetlistComparer::same_nets, gsi::arg ("net_a"), gsi::arg ("net_b"), gsi::arg ("must_match", false), "@brief Marks two nets as identical.\n" "This makes a net net_a in netlist a identical to the corresponding\n" diff --git a/src/lvs/lvs/built-in-macros/_lvs_engine.rb b/src/lvs/lvs/built-in-macros/_lvs_engine.rb index 687f4868a..ae3807625 100644 --- a/src/lvs/lvs/built-in-macros/_lvs_engine.rb +++ b/src/lvs/lvs/built-in-macros/_lvs_engine.rb @@ -90,10 +90,16 @@ module LVS # %LVS% # @name compare - # @brief Compares the extracted netlist vs. the schematic + # @brief Compares the extracted netlist vs. the schematic netlist # @synopsis compare # See \Netter#compare for a description of that function. + # %LVS% + # @name no_lvs_hints + # @brief Disables LVS hints + # @synopsis no_lvs_hints + # See \Netter#no_lvs_hints for a description of that feature. + # %LVS% # @name join_symmetric_nets # @brief Joins symmetric nets of selected circuits on the extracted netlist @@ -216,7 +222,7 @@ module LVS %w(schematic compare split_gates join_symmetric_nets tolerance ignore_parameter enable_parameter disable_parameter blank_circuit align same_nets same_nets! same_circuits same_device_classes equivalent_pins - min_caps max_res max_depth max_branch_complexity consider_net_names lvs_data).each do |f| + min_caps max_res max_depth max_branch_complexity consider_net_names lvs_data no_lvs_hints).each do |f| eval <<"CODE" def #{f}(*args) _netter.#{f}(*args) diff --git a/src/lvs/lvs/built-in-macros/_lvs_netter.rb b/src/lvs/lvs/built-in-macros/_lvs_netter.rb index 8cc6ece00..a35af6944 100644 --- a/src/lvs/lvs/built-in-macros/_lvs_netter.rb +++ b/src/lvs/lvs/built-in-macros/_lvs_netter.rb @@ -499,6 +499,7 @@ CODE def _comparer_mini comparer = RBA::NetlistComparer::new + comparer.with_log = false # execute the configuration commands @comparer_miniconfig.each do |cc| @@ -518,6 +519,17 @@ CODE end + # %LVS% + # @name no_lvs_hints + # @brief Disables LVS hints + # @synopsis no_lvs_hints + # LVS hints may be expensive to compute. Use this function to disable + # generation of LVS hints + + def no_lvs_hints + @comparer_config << lambda { |comparer| comparer.with_log = false } + end + # %LVS% # @name same_nets # @brief Establishes an equivalence between the nets diff --git a/testdata/algo/lvs_test2_au.lvsdb.1 b/testdata/algo/lvs_test2_au.lvsdb.1 index eb088d4cf..e126c6a69 100644 --- a/testdata/algo/lvs_test2_au.lvsdb.1 +++ b/testdata/algo/lvs_test2_au.lvsdb.1 @@ -645,6 +645,10 @@ xref( ) ) circuit(RINGO RINGO nomatch + log( + entry(error description('Net $I22 is not matching any net from reference netlist')) + entry(error description('Net FB is not matching any net from reference netlist')) + ) xref( net(8 () mismatch) net(7 7 match) diff --git a/testdata/algo/lvs_test2_au.lvsdb.2 b/testdata/algo/lvs_test2_au.lvsdb.2 index 0d7635d17..b6eb7da64 100644 --- a/testdata/algo/lvs_test2_au.lvsdb.2 +++ b/testdata/algo/lvs_test2_au.lvsdb.2 @@ -645,6 +645,10 @@ xref( ) ) circuit(RINGO RINGO nomatch + log( + entry(error description('Net $I22 is not matching any net from reference netlist')) + entry(error description('Net FB is not matching any net from reference netlist')) + ) xref( net(8 () mismatch) net(7 7 match) diff --git a/testdata/algo/lvs_test2b_au.lvsdb.1 b/testdata/algo/lvs_test2b_au.lvsdb.1 index fd107f1b9..1bec1de6c 100644 --- a/testdata/algo/lvs_test2b_au.lvsdb.1 +++ b/testdata/algo/lvs_test2b_au.lvsdb.1 @@ -645,6 +645,10 @@ xref( ) ) circuit(RINGO RINGO nomatch + log( + entry(error description('Net $I22 is not matching any net from reference netlist')) + entry(error description('Net FB is not matching any net from reference netlist')) + ) xref( net(8 () mismatch) net(7 7 match) diff --git a/testdata/algo/lvs_test2b_au.lvsdb.2 b/testdata/algo/lvs_test2b_au.lvsdb.2 index 29b9a4b7c..23f1b8b03 100644 --- a/testdata/algo/lvs_test2b_au.lvsdb.2 +++ b/testdata/algo/lvs_test2b_au.lvsdb.2 @@ -645,6 +645,10 @@ xref( ) ) circuit(RINGO RINGO nomatch + log( + entry(error description('Net $I22 is not matching any net from reference netlist')) + entry(error description('Net FB is not matching any net from reference netlist')) + ) xref( net(8 () mismatch) net(7 7 match) diff --git a/testdata/lvs/bbdevices3.lvsdb b/testdata/lvs/bbdevices3.lvsdb index fb30c8ab9..819e2dbe9 100644 --- a/testdata/lvs/bbdevices3.lvsdb +++ b/testdata/lvs/bbdevices3.lvsdb @@ -447,6 +447,9 @@ xref( ) ) circuit(testall TESTALL nomatch + log( + entry(error description('Net $5 is not matching any net from reference netlist')) + ) xref( net(() 7 mismatch) net(2 2 match) diff --git a/testdata/lvs/bbdevices3b.lvsdb b/testdata/lvs/bbdevices3b.lvsdb index 9aecb5013..95ff6ee8b 100644 --- a/testdata/lvs/bbdevices3b.lvsdb +++ b/testdata/lvs/bbdevices3b.lvsdb @@ -293,6 +293,9 @@ xref( ) ) circuit(BWBTEST BWBTEST nomatch + log( + entry(error description('No equivalent pin A from reference netlist found in netlist.\nThis is an indication that a physical connection is not made to the subcircuit.')) + ) xref( pin(() 0 mismatch) pin(0 1 match) diff --git a/testdata/lvs/bbdevices4b.lvsdb b/testdata/lvs/bbdevices4b.lvsdb index 7ee00acb8..b91a05e0c 100644 --- a/testdata/lvs/bbdevices4b.lvsdb +++ b/testdata/lvs/bbdevices4b.lvsdb @@ -288,6 +288,9 @@ xref( ) ) circuit(BWBTEST BWBTEST nomatch + log( + entry(error description('No equivalent pin A from reference netlist found in netlist.\nThis is an indication that a physical connection is not made to the subcircuit.')) + ) xref( pin(() 0 mismatch) pin(() 1 match) diff --git a/testdata/lvs/bbdevices5.lvsdb b/testdata/lvs/bbdevices5.lvsdb index 8acdab170..56183ddcd 100644 --- a/testdata/lvs/bbdevices5.lvsdb +++ b/testdata/lvs/bbdevices5.lvsdb @@ -450,6 +450,11 @@ xref( ) ) circuit(testall TESTALL nomatch + log( + entry(error description('Net $10 is not matching any net from reference netlist')) + entry(error description('Net $5 is not matching any net from reference netlist')) + entry(info description('Connecting nets $10 and $5 is making a better match to net D1 from reference netlist (fuzziness 0 nodes)')) + ) xref( net(5 () mismatch) net(2 2 match) diff --git a/testdata/lvs/bbdevices5b.lvsdb b/testdata/lvs/bbdevices5b.lvsdb index cb9e6fb77..dd49d20c6 100644 --- a/testdata/lvs/bbdevices5b.lvsdb +++ b/testdata/lvs/bbdevices5b.lvsdb @@ -326,6 +326,11 @@ xref( ) ) circuit(testall TESTALL nomatch + log( + entry(error description('Net $10 is not matching any net from reference netlist')) + entry(error description('Net $5 is not matching any net from reference netlist')) + entry(info description('Connecting nets $10 and $5 is making a better match to net D1 from reference netlist (fuzziness 0 nodes)')) + ) xref( net(5 () mismatch) net(2 2 match) diff --git a/testdata/lvs/bbdevices6.lvsdb b/testdata/lvs/bbdevices6.lvsdb index 28492175b..d15a89969 100644 --- a/testdata/lvs/bbdevices6.lvsdb +++ b/testdata/lvs/bbdevices6.lvsdb @@ -446,6 +446,9 @@ xref( ) ) circuit(testall TESTALL nomatch + log( + entry(error description('Net $2 is not matching any net from reference netlist')) + ) xref( net(() 6 mismatch) net(3 2 match) diff --git a/testdata/lvs/bbdevices6b.lvsdb b/testdata/lvs/bbdevices6b.lvsdb index cf9afeb29..b75d0a8e5 100644 --- a/testdata/lvs/bbdevices6b.lvsdb +++ b/testdata/lvs/bbdevices6b.lvsdb @@ -322,6 +322,9 @@ xref( ) ) circuit(testall TESTALL nomatch + log( + entry(error description('Net $2 is not matching any net from reference netlist')) + ) xref( net(() 6 mismatch) net(3 2 match) diff --git a/testdata/lvs/blackbox2.lvsdb b/testdata/lvs/blackbox2.lvsdb index 733ee3295..b5e842b5a 100644 --- a/testdata/lvs/blackbox2.lvsdb +++ b/testdata/lvs/blackbox2.lvsdb @@ -181,6 +181,10 @@ xref( ) ) circuit(TOP TOP nomatch + log( + entry(error description('Nets 3 are paired explicitly, but are not identical topologically')) + entry(error description('Nets 4 are paired explicitly, but are not identical topologically')) + ) xref( net(4 1 match) net(3 2 match) diff --git a/testdata/lvs/blackbox3.lvsdb b/testdata/lvs/blackbox3.lvsdb index 953dea630..f95a64186 100644 --- a/testdata/lvs/blackbox3.lvsdb +++ b/testdata/lvs/blackbox3.lvsdb @@ -184,6 +184,9 @@ xref( ) ) circuit(TOP TOP nomatch + log( + entry(error description('Nets $1 vs. (not connected) are paired explicitly, but are not identical topologically')) + ) xref( net(() 7 mismatch) net(1 () mismatch) diff --git a/testdata/lvs/blackbox4.lvsdb b/testdata/lvs/blackbox4.lvsdb index f36d797c6..a54819f42 100644 --- a/testdata/lvs/blackbox4.lvsdb +++ b/testdata/lvs/blackbox4.lvsdb @@ -180,6 +180,11 @@ xref( ) ) circuit(TOP TOP nomatch + log( + entry(error description('Nets (not connected) vs. 5 are paired explicitly, but are not identical topologically')) + entry(error description('Nets 5,7 vs. (not connected) are paired explicitly, but are not identical topologically')) + entry(error description('Nets (not connected) vs. 7 are paired explicitly, but are not identical topologically')) + ) xref( net(() 5 mismatch) net(() 7 mismatch) diff --git a/testdata/lvs/blackbox5.lvsdb b/testdata/lvs/blackbox5.lvsdb index 0969f0954..391475a66 100644 --- a/testdata/lvs/blackbox5.lvsdb +++ b/testdata/lvs/blackbox5.lvsdb @@ -183,6 +183,12 @@ xref( ) ) circuit(TOP TOP nomatch + log( + entry(error description('Nets $1 vs. (not connected) are paired explicitly, but are not identical topologically')) + entry(error description('Nets (not connected) vs. 5 are paired explicitly, but are not identical topologically')) + entry(error description('Nets 5,7 vs. (not connected) are paired explicitly, but are not identical topologically')) + entry(error description('Nets (not connected) vs. 7 are paired explicitly, but are not identical topologically')) + ) xref( net(() 5 mismatch) net(() 7 mismatch) diff --git a/testdata/lvs/custom_compare.lvsdb b/testdata/lvs/custom_compare.lvsdb index 69358e767..6862bb95d 100644 --- a/testdata/lvs/custom_compare.lvsdb +++ b/testdata/lvs/custom_compare.lvsdb @@ -100,6 +100,10 @@ reference( # Cross reference xref( circuit(TOP TOP match + log( + entry(warning description('Matching nets $13 vs. R1 from an ambiguous group of nets')) + entry(warning description('Matching nets $14 vs. R2 from an ambiguous group of nets')) + ) xref( net(1 1 warning) net(2 2 warning) diff --git a/testdata/lvs/double_height2.lvsdb b/testdata/lvs/double_height2.lvsdb index 3fa095fe8..e794e299c 100644 --- a/testdata/lvs/double_height2.lvsdb +++ b/testdata/lvs/double_height2.lvsdb @@ -290,6 +290,12 @@ Z( ) ) X(INV2 INV2 1 + L( + M(W B('Matching nets Q1 from an ambiguous group of nets')) + M(W B('Matching nets Q2 from an ambiguous group of nets')) + M(I B('Matching nets A1 following an ambiguous match')) + M(I B('Matching nets A2 following an ambiguous match')) + ) Z( N(1 3 1) N(2 5 1) diff --git a/testdata/lvs/double_height2_texts.lvsdb b/testdata/lvs/double_height2_texts.lvsdb index 4aab34e12..2c986d071 100644 --- a/testdata/lvs/double_height2_texts.lvsdb +++ b/testdata/lvs/double_height2_texts.lvsdb @@ -290,6 +290,12 @@ Z( ) ) X(INV2 INV2 1 + L( + M(W B('Matching nets Q1 from an ambiguous group of nets')) + M(W B('Matching nets Q2 from an ambiguous group of nets')) + M(I B('Matching nets A1 following an ambiguous match')) + M(I B('Matching nets A2 following an ambiguous match')) + ) Z( N(1 3 1) N(2 5 1) diff --git a/testdata/lvs/enable_wl3.lvsdb b/testdata/lvs/enable_wl3.lvsdb index 947fc54ac..e9ab95858 100644 --- a/testdata/lvs/enable_wl3.lvsdb +++ b/testdata/lvs/enable_wl3.lvsdb @@ -107,6 +107,10 @@ reference( # Cross reference xref( circuit(Rre RRE nomatch + log( + entry(error description('Net gnd! is not matching any net from reference netlist')) + entry(error description('Net vdd! is not matching any net from reference netlist')) + ) xref( net(() 2 mismatch) net(() 1 mismatch) diff --git a/testdata/lvs/floating.lvsdb b/testdata/lvs/floating.lvsdb index ee3408fed..da867a055 100644 --- a/testdata/lvs/floating.lvsdb +++ b/testdata/lvs/floating.lvsdb @@ -377,6 +377,12 @@ reference( # Cross reference xref( circuit(DINV DINV match + log( + entry(warning description('Matching nets B<1> from an ambiguous group of nets')) + entry(warning description('Matching nets B<2> from an ambiguous group of nets')) + entry(info description('Matching nets A<1> following an ambiguous match')) + entry(info description('Matching nets A<2> following an ambiguous match')) + ) xref( net(1 1 match) net(2 2 match) diff --git a/testdata/lvs/invchain_cheat.lvsdb b/testdata/lvs/invchain_cheat.lvsdb index f4ba78725..bf85c951c 100644 --- a/testdata/lvs/invchain_cheat.lvsdb +++ b/testdata/lvs/invchain_cheat.lvsdb @@ -417,6 +417,12 @@ Z( ) ) X(INV2 INV2 1 + L( + M(W B('Matching nets $I8 vs. 4 from an ambiguous group of nets')) + M(W B('Matching nets $I7 vs. 6 from an ambiguous group of nets')) + M(I B('Matching nets $I6 vs. 3 following an ambiguous match')) + M(I B('Matching nets $I5 vs. 5 following an ambiguous match')) + ) Z( N(5 1 1) N(6 2 1) @@ -435,6 +441,14 @@ Z( ) ) X(INV3 INV3 1 + L( + M(W B('Matching nets 4 from an ambiguous group of nets')) + M(W B('Matching nets 6 from an ambiguous group of nets')) + M(W B('Matching nets 8 from an ambiguous group of nets')) + M(I B('Matching nets 3 following an ambiguous match')) + M(I B('Matching nets 5 following an ambiguous match')) + M(I B('Matching nets 7 following an ambiguous match')) + ) Z( N(7 1 1) N(8 2 1) diff --git a/testdata/lvs/res_combine1.lvs b/testdata/lvs/res_combine1.lvs index 4bff3442d..3dba3b639 100644 --- a/testdata/lvs/res_combine1.lvs +++ b/testdata/lvs/res_combine1.lvs @@ -94,4 +94,5 @@ schematic.simplify # Netlist vs. netlist align netlist.simplify +no_lvs_hints compare diff --git a/testdata/lvs/res_combine2.lvs b/testdata/lvs/res_combine2.lvs index d81811540..395f84765 100644 --- a/testdata/lvs/res_combine2.lvs +++ b/testdata/lvs/res_combine2.lvs @@ -93,4 +93,5 @@ schematic.simplify # Netlist vs. netlist align netlist.simplify +no_lvs_hints compare diff --git a/testdata/lvs/res_combine3.lvs b/testdata/lvs/res_combine3.lvs index c957acf47..e0ebec331 100644 --- a/testdata/lvs/res_combine3.lvs +++ b/testdata/lvs/res_combine3.lvs @@ -88,4 +88,5 @@ schematic.simplify # Netlist vs. netlist align netlist.simplify +no_lvs_hints compare