IntermediateQuestion 204 of 222Source: Synopsys ICC2 Implementation User Guide X-2025.06-SP2: Generating Input for the Automatic Fixing Flow and Setting Options for Signoff Design Rule Checking

Why set `signoff.check_drc.ignore_child_cell_errors true` before auto-fixing?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

Zroute can fix only top-level violations, so the check that feeds auto-fix should report only those. Setting signoff.check_drc.ignore_child_cell_errors (ICC2) to true makes signoff_check_drc (ICC2) write only top-level errors to the error data. Child-cell errors still exist and need their own check and owner.

Technical Reference DiagramWhy set `signoff.check_drc.ignore_child_cell_errors true` before auto-fixing?
A hierarchy tree with the top block routed by Zroute on top and child cells and macros underneath, top-level violations marked fixable and child-level violations marked not fixable by Zroute, with a separate full check branch.

Technical Explanation

  • The option defaults to false, which reports both top-level and child-level errors to the error data file.
  • The guide gives it as the setting for generating auto-fix input: with true, signoff DRC reports only violations Zroute can fix.
  • It also matters when you reuse results through signoff.fix_drc.init_drc_error_db (ICC2). Existing results can feed signoff_fix_drc (ICC2) only if they were produced with the settings for the automatic fixing flow.
  • There is a counting reason too. signoff.check_drc.max_errors_per_rule (ICC2) defaults to 1000, and that cap includes both top-level and child-level violations. Child errors can fill the per-rule list and push out top-level ones.
  • signoff_fix_drc (ICC2) itself does not check child blocks during its loops, so child errors would only add noise to its targets.
  • The error data shows a child-level error on one cell instance only, which makes lower-level errors easier to find when you do look at them.
  • Ignoring is not waiving. After auto-fix, run a check with the option back at false, or a standalone IC Validator run, and send child errors to whoever owns the cell or macro.

What To Check

  • The option value in the run that produced the auto-fix input.
  • Per-rule counts near 1000, where child errors may be crowding out top-level ones.
  • A full-hierarchy check after fixing, with owners for every child error.
  • result_summary.rpt (ICC2) reasons such as shapes not Zroute modifiable.

Command Checks & Actions

ICC2 (icc2_shell)set_app_options -name signoff.check_drc.ignore_child_cell_errors -value true

Reports only top-level errors, the ones Zroute can fix.

ICC2 (icc2_shell)save_block

Saves the block so the check reads the current state from disk.

ICC2 (icc2_shell)signoff_check_drc

Produces top-level-only results for the fixing flow.

ICC2 (icc2_shell)signoff_fix_drc

Fixes the top-level violations with Zroute and rechecks.

ICC2 (icc2_shell)set_app_options -name signoff.check_drc.ignore_child_cell_errors -value false

Restores full reporting for the final check.

ICC2 (icc2_shell)signoff_check_drc -error_data full_hier.err

Full-hierarchy check after fixing, saved under its own error data name.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): Auto-fix clears all top-level targets, and the full-hierarchy check shows only known child errors with owners.
  • Suspicious (illustrative): A rule sits at exactly 1000 errors in a run with child errors included. The cap may be hiding top-level violations.
  • Hard stop: The final signoff check was run with the option still true. Child-cell errors were never reported.

Common Mistake

The Trap: Leaving signoff.check_drc.ignore_child_cell_errors (ICC2) at true in the shared script after auto-fix. The final signoff run reports clean, and 60 violations inside a hard macro's merged GDS only appear in the foundry's own check.

What The Interviewer Is Testing

  • Knowing Zroute fixes top-level violations only.
  • Linking the per-rule cap to mixed top and child counts.
  • A strong answer separates ignoring for auto-fix from signing off.

Follow-up Question & Model Response

"Who fixes child-level violations then?"

Candidate Model Response: Whoever owns the child. For a standard cell that is the library team, for a hard macro the IP vendor, and for a sub-block its own implementation owner, who reruns fixing at that level. Sometimes the fix is at the top anyway, for example moving a top-level route that makes a child shape fail a context rule. The point is that each child error gets an owner and a decision, not that auto-fix at the top can reach it.

Practical Example

Tapeout Scenario: A block's first signoff DRC reports 1,000 on an M2 spacing rule, the cap, with child errors included (illustrative). With signoff.check_drc.ignore_child_cell_errors (ICC2) set to true, the same rule shows 312 top-level errors. signoff_fix_drc (ICC2) fixes all 312. The full check with the option back at false shows 720 child errors on that rule, all inside 2 IP blocks, sent to the vendor with coordinates. The vendor confirms 717 are real and ships a corrected GDS; the other 3 are top-level routes too close to an IP edge, fixed at the top with one reroute.

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. →