From 21ce1b37fbc93562942c10f631c7f415f8fdba2e Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Mon, 27 Jan 2020 14:22:46 -0800 Subject: [PATCH] abc9_ops: -check for negative arrival/required times --- passes/techmap/abc9_ops.cc | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/passes/techmap/abc9_ops.cc b/passes/techmap/abc9_ops.cc index 0fc4de3bb..2b4a5c802 100644 --- a/passes/techmap/abc9_ops.cc +++ b/passes/techmap/abc9_ops.cc @@ -77,11 +77,20 @@ void check(RTLIL::Design *design) auto it = w->attributes.find("\\abc9_arrival"); if (it != w->attributes.end()) { int count = 0; - if (it->second.flags == 0) + if (it->second.flags == 0) { + if (it->second.as_int() < 0) + log_error("%s.%s has negative arrival value %d!\n", log_id(m), log_id(port_name), + it->second.as_int()); count++; + } else for (const auto &tok : split_tokens(it->second.decode_string())) { - (void) tok; + if (tok.find_first_not_of("0123456789") != std::string::npos) + log_error("%s.%s has non-integer arrival value '%s'!\n", log_id(m), log_id(port_name), + tok.c_str()); + if (atoi(tok.c_str()) < 0) + log_error("%s.%s has negative arrival value %s!\n", log_id(m), log_id(port_name), + tok.c_str()); count++; } if (count > 1 && count != GetSize(w)) @@ -92,11 +101,20 @@ void check(RTLIL::Design *design) it = w->attributes.find("\\abc9_required"); if (it != w->attributes.end()) { int count = 0; - if (it->second.flags == 0) + if (it->second.flags == 0) { + if (it->second.as_int() < 0) + log_error("%s.%s has negative required value %d!\n", log_id(m), log_id(port_name), + it->second.as_int()); count++; + } else for (const auto &tok : split_tokens(it->second.decode_string())) { - (void) tok; + if (tok.find_first_not_of("0123456789") != std::string::npos) + log_error("%s.%s has non-integer required value '%s'!\n", log_id(m), log_id(port_name), + tok.c_str()); + if (atoi(tok.c_str()) < 0) + log_error("%s.%s has negative required value %s!\n", log_id(m), log_id(port_name), + tok.c_str()); count++; } if (count > 1 && count != GetSize(w)) -- 2.30.2