|
40 | 40 | #include "dbTable.hpp" |
41 | 41 | #include "dbTech.h" |
42 | 42 | #include "dbTechNonDefaultRule.h" |
| 43 | +#include "dbUtil.h" |
43 | 44 | #include "dbWire.h" |
44 | 45 | #include "odb/db.h" |
45 | 46 | #include "odb/dbBlockCallBackObj.h" |
@@ -2348,100 +2349,11 @@ void dbNet::setJumpers(bool has_jumpers) |
2348 | 2349 |
|
2349 | 2350 | void dbNet::checkSanity() const |
2350 | 2351 | { |
2351 | | - _dbNet* net = (_dbNet*) this; |
2352 | | - utl::Logger* logger = net->getImpl()->getLogger(); |
2353 | 2352 | std::vector<std::string> drvr_info_list; |
| 2353 | + dbUtil::findBTermDrivers(this, drvr_info_list); |
| 2354 | + dbUtil::findITermDrivers(this, drvr_info_list); |
2354 | 2355 |
|
2355 | | - // Find BTerm drivers |
2356 | | - for (dbBTerm* bterm : getBTerms()) { |
2357 | | - if (bterm->getIoType() == dbIoType::INPUT |
2358 | | - || bterm->getIoType() == dbIoType::INOUT) { |
2359 | | - dbBlock* block = bterm->getBlock(); |
2360 | | - dbModule* parent_module = block->getTopModule(); |
2361 | | - drvr_info_list.push_back( |
2362 | | - // NOLINTNEXTLINE(misc-include-cleaner) |
2363 | | - fmt::format("\n - bterm: '{}' (parent_module: '{}', block: '{}')", |
2364 | | - bterm->getName(), |
2365 | | - parent_module->getName(), |
2366 | | - block->getName())); |
2367 | | - } |
2368 | | - } |
2369 | | - |
2370 | | - // Find ITerm drivers |
2371 | | - for (dbITerm* iterm : getITerms()) { |
2372 | | - if (iterm->getIoType() == dbIoType::OUTPUT |
2373 | | - || iterm->getIoType() == dbIoType::INOUT) { |
2374 | | - dbInst* inst = iterm->getInst(); |
2375 | | - dbMaster* master = inst->getMaster(); |
2376 | | - dbModule* parent_module = inst->getModule(); |
2377 | | - dbBlock* block = inst->getBlock(); |
2378 | | - |
2379 | | - std::string parent_module_name = "null"; |
2380 | | - if (parent_module) { |
2381 | | - parent_module_name = parent_module->getName(); |
2382 | | - } |
2383 | | - |
2384 | | - std::string master_name = "null"; |
2385 | | - if (master) { |
2386 | | - master_name = master->getName(); |
2387 | | - } |
2388 | | - |
2389 | | - std::string block_name = "null"; |
2390 | | - if (block) { |
2391 | | - block_name = block->getName(); |
2392 | | - } |
2393 | | - |
2394 | | - drvr_info_list.push_back(fmt::format( // NOLINT(misc-include-cleaner) |
2395 | | - "\n - iterm: '{}' (block: '{}', parent_module: '{}', master: '{}')", |
2396 | | - iterm->getName('/'), |
2397 | | - block_name, |
2398 | | - parent_module_name, |
2399 | | - master_name)); |
2400 | | - } |
2401 | | - } |
2402 | | - |
2403 | | - size_t drvr_count = drvr_info_list.size(); |
2404 | | - if (drvr_count > 1) { |
2405 | | - // Multiple drivers found. |
2406 | | - logger->error( |
2407 | | - utl::ODB, |
2408 | | - 49, |
2409 | | - "SanityCheck: dbNet '{}' has multiple drivers: {}", |
2410 | | - getName(), |
2411 | | - fmt::join(drvr_info_list, "")); // NOLINT(misc-include-cleaner) |
2412 | | - } |
2413 | | - |
2414 | | - const uint iterm_count = getITerms().size(); |
2415 | | - const uint bterm_count = getBTerms().size(); |
2416 | | - |
2417 | | - if (drvr_count == 0 && (iterm_count + bterm_count > 0)) { |
2418 | | - logger->warn( |
2419 | | - utl::ODB, 50, "SanityCheck: dbNet '{}' has no driver.", getName()); |
2420 | | - } |
2421 | | - |
2422 | | - if (iterm_count + bterm_count < 2) { |
2423 | | - // Skip power/ground net |
2424 | | - if (getSigType().isSupply()) { |
2425 | | - return; // OK: Unconnected power/ground net |
2426 | | - } |
2427 | | - |
2428 | | - // A net connected to 1 terminal |
2429 | | - if (iterm_count == 1 |
2430 | | - && (*(getITerms().begin()))->getIoType() == dbIoType::OUTPUT) { |
2431 | | - return; // OK: Unconnected output pin |
2432 | | - } |
2433 | | - if (bterm_count == 1 |
2434 | | - && (*(getBTerms().begin()))->getIoType() == dbIoType::INPUT) { |
2435 | | - return; // OK: Unconnected input port |
2436 | | - } |
2437 | | - logger->warn(utl::ODB, |
2438 | | - 51, |
2439 | | - "SanityCheck: dbNet '{}' is dangling. It has less than 2 " |
2440 | | - "connections (# of ITerms = {}, # of BTerms = {}).", |
2441 | | - getName(), |
2442 | | - iterm_count, |
2443 | | - bterm_count); |
2444 | | - } |
| 2356 | + dbUtil::checkNetSanity(this, drvr_info_list); |
2445 | 2357 | } |
2446 | 2358 |
|
2447 | 2359 | dbModInst* dbNet::findMainParentModInst() const |
|
0 commit comments