BeginnerQuestion 114 of 127Source: Synopsys ICC2 Implementation User Guide: Routing

What does check_routes catch that check_lvs doesn't, and vice versa?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

check_routes is the router's verification check: it looks for DRCs, open nets, antenna violations and voltage area violations on routed signal nets. check_lvs is a connectivity check across signal, clock and power and ground nets that looks for shorts, opens and floating shapes. They overlap on opens and shorts, but each covers things the other does not.

Technical Reference DiagramWhat does check_routes catch that check_lvs doesn't, and vice versa?
Two-column comparison table of check_routes and check_lvs coverage: net types checked, DRC, opens, shorts, antenna, voltage area and floating shapes.

Technical Explanation

  • check_routes covers routed signal nets and, by default, skips user nets, frozen nets (those with physical_status set to locked) and PG nets. It reports design rule violations of every kind, open nets, antenna violations and voltage area violations.
  • check_routes saves its results to the zroute.err error data, which later commands such as route_detail -incremental true -initial_drc_from_input true can read.
  • By default check_routes caps reported open nets at 200. Use -report_all_open_nets true if you need the full list.
  • With -coordinates, check_routes checks only DRCs in that area, not opens or antenna. Treat it as a local check.
  • check_lvs covers signal, clock and PG nets. It checks shorts, opens and floating net shapes, pieces of metal that belong to a net but touch none of its pins.
  • check_lvs does not check antenna rules or spacing rules. It is about connectivity only.
  • By default check_lvs reports at most 20 violations per type. Set -max_errors 0 to see them all, and use multithreading through set_host_options on large blocks.

What To Check

  • check_routes: DRC count by type, open nets, antenna violations and voltage area violations.
  • check_lvs -max_errors 0: shorts, opens and floating routes, with no reporting cap.
  • Any short or open between PG nets, which only check_lvs sees by default.
  • Whether either report was truncated by its default limit.

Command Checks & Actions

ICC2check_routes

DRC, open net, antenna and voltage area check on routed signal nets; writes `zroute.err`.

ICC2check_lvs

Short, open and floating shape check across signal, clock and PG nets.

ICC2check_lvs -max_errors 0

Removes the default limit of 20 reported violations per type.

ICC2check_routes -drc false -open_net false -antenna true -voltage_area false

Runs only the antenna part of `check_routes` when that is the question you are asking.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): Both checks run on the final database: zero opens and shorts in both, DRCs and antenna at zero or reviewed.
  • Suspicious (illustrative): Only check_routes was run, so PG shorts and floating shapes are unknown.
  • Hard stop: A short or open in either report, or a report that hit its default cap and was not rerun.

Common Mistake

The Trap: Running only check_routes and calling the block connectivity-clean. check_routes does not check PG nets as nets, so a VDD strap shorted to a VSS strap by a hand edit is never reported. check_lvs would have shown the short in seconds, and the block goes to physical verification with a real failure.

What The Interviewer Is Testing

  • Whether you know which net types each check covers by default.
  • Do you know that antenna and spacing live in one check and floating shapes in the other?
  • A strong answer shows you check for truncated reports before calling a block clean.

Follow-up Question & Model Response

"What is a floating shape, and why does it matter?"

Candidate Model Response: It is a piece of metal assigned to a net that does not connect to any pin of that net. Typical sources are leftover stubs after rerouting or pieces of a hand edit. It carries no signal, but it still adds capacitance, can cause DRCs, and some flows treat it as an LVS mismatch. check_lvs finds these. remove_redundant_shapes can clean up floating and dangling shapes on nets that have no DRCs, and you rerun both checks afterwards.

Practical Example

Tapeout Scenario: A routed block returns the following (illustrative). check_routes: 0 opens, 6 DRCs, 2 antenna violations. check_lvs, with its default cap: 0 opens, 1 short, 20 floating routes. Rerun with -max_errors 0, it shows 1 short and 37 floating routes. The short is between a VDD and a VSS strap after a hand edit, which check_routes never looked at because it does not check PG nets. The floating routes are leftover stubs from an ECO, cleared with remove_redundant_shapes.

PnR Flow Mentor Guide

Read the complete 8-chapter PnR Flow Mentor Guide free on the web — library setup through placement, clock tree synthesis, routing, chip finishing, hierarchical implementation, and ECO, all the way to stream-out.

PnR Flow Physical Design Mentor Guide — eight chaptersPnR Flow Mentor GuideEight chapters, library setup through to stream-out. →