IntermediateQuestion 203 of 222Source: Synopsys ICC2 Implementation User Guide X-2025.06-SP2: Automatically Fixing Signoff DRC Violations (Running the signoff_fix_drc Command, Summary Report)

What does `signoff_fix_drc` do by default?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

signoff_fix_drc (ICC2) has Zroute fix signoff DRC violations found by IC Validator, then rechecks with IC Validator. By default it runs an initial signoff check, two repair loops, skips rules with more than 1000 violations, runs five detail-route iterations after fixing, and saves the result as a design view named block_ADR_# (ICC2). It writes result_summary.rpt (ICC2) to the working directory.

Technical Reference DiagramWhat does `signoff_fix_drc` do by default?
A flow from an initial signoff DRC run through two repair loops, each fixing and rechecking only the affected areas, then five detail-route iterations, ending with the block saved as a design view named block_ADR_# and a result_summary.rpt report.

Technical Explanation

  • Step one is an initial signoff_check_drc (ICC2). To reuse an existing run, point signoff.fix_drc.init_drc_error_db (ICC2) at its directory; that run must have used the settings for the automatic fixing flow.
  • Each repair loop fixes the violations from the previous check and reruns IC Validator on the modified block. The default is two loops. -max_number_repair_loop (ICC2) takes 1 to 10, and the command stops early when no violations remain.
  • Later loops reroute a wider area. -start_repair_loop (ICC2) begins at a higher loop number for more scope, at the cost of more disturbance for Zroute to clean up.
  • Rules with more than 1000 violations are skipped. That limit is signoff.fix_drc.max_errors_per_rule (ICC2), and a rule that big usually has a systematic cause that routing will not fix.
  • After fixing, five detail-route iterations clean up DRCs created during fixing; signoff.fix_drc.max_detail_route_iterations (ICC2) changes that count.
  • Checking after the first run covers only areas touched by fixing, and child blocks are not checked. signoff.fix_drc.last_run_full_chip (ICC2) makes the final loop full-block.
  • Fixing targets data nets across the whole block by default. -nets or -timing_preserve_setup_slack_threshold (ICC2) protect critical nets.

What To Check

  • The TOTAL, TARGETED and REMAINING columns of result_summary.rpt (ICC2) per rule.
  • The reason codes for ignored violations, such as shapes that Zroute cannot modify.
  • Timing on the block_ADR_# (ICC2) view before accepting it.
  • A full signoff DRC on the result, since loop checks were local.

Command Checks & Actions

ICC2 (icc2_shell)set_app_options -name signoff.fix_drc.init_drc_error_db -value signoff_check_drc_run

Reuses the results of an earlier signoff DRC run instead of running a new initial check.

ICC2 (icc2_shell)save_block

Saves the block first, since IC Validator reads the on-disk block, not the one in memory.

ICC2 (icc2_shell)signoff_fix_drc

Runs the default flow: 2 repair loops, 5 detail-route iterations, block saved as block_ADR_#.

ICC2 (icc2_shell)signoff_fix_drc -max_number_repair_loop 4

Allows up to 4 repair loops when 2 leave fixable violations.

ICC2 (icc2_shell)set_app_options -name signoff.fix_drc.last_run_full_chip -value true

Runs the final loop check on the whole block for accuracy.

ICC2 (icc2_shell)signoff_check_drc

Full check on the fixed block before signoff.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): Targeted violations fall from 190 to 0 in two loops, ignored ones each have a reason code, and timing on the ADR view is unchanged within noise.
  • Suspicious (illustrative): One rule has more than 1000 violations and was skipped whole, or remaining targeted violations stay flat across loops.
  • Hard stop: The fixed view breaks timing on clock nets or leaves violations in child blocks that no one has checked.

Common Mistake

The Trap: Assuming a clean summary report means a clean block. The loops checked only the areas they touched and skipped child blocks, and one rule with 2,300 violations was ignored entirely. The full run afterwards still shows that rule at the 1,000-per-rule reporting cap, and raising signoff.check_drc.max_errors_per_rule (ICC2) shows all 2,300.

What The Interviewer Is Testing

  • Knowledge of the defaults: 2 loops, 1000-violation skip, 5 route iterations, block_ADR_# (ICC2).
  • Reading result_summary.rpt (ICC2) and its ignore reasons.
  • Knowing the local checks do not replace a full signoff run.

Follow-up Question & Model Response

"Why does signoff_fix_drc (ICC2) skip rules with more than 1000 violations?"

Candidate Model Response: A rule that fires that often usually points to a systematic cause: a wrong layer map, a missing via rule in routing, a cell library problem or fill interaction. Rerouting one violation at a time would disturb large parts of the block and still not fix the cause. The limit keeps autofix for scattered violations. You fix the root cause of a large rule first, then let autofix clean what is left.

Practical Example

Tapeout Scenario: A block has 212 signoff DRCs across 9 rules, plus 1,350 on one via-enclosure rule, counted with signoff.check_drc.max_errors_per_rule (ICC2) raised above its 1000 default (illustrative). signoff_fix_drc (ICC2) skips the via rule and targets 190 of the 212; 22 are ignored because their shapes belong to macros Zroute cannot modify. After two loops, 0 targeted violations remain. The via rule is traced to a via definition missing from the router, fixed by rerouting, and the full check reads 22, all inside macros, sent to the macro owner.

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