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 Explanation
- Step one is an initial
signoff_check_drc(ICC2). To reuse an existing run, pointsignoff.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.
-netsor-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
set_app_options -name signoff.fix_drc.init_drc_error_db -value signoff_check_drc_runReuses the results of an earlier signoff DRC run instead of running a new initial check.
save_blockSaves the block first, since IC Validator reads the on-disk block, not the one in memory.
signoff_fix_drcRuns the default flow: 2 repair loops, 5 detail-route iterations, block saved as block_ADR_#.
signoff_fix_drc -max_number_repair_loop 4Allows up to 4 repair loops when 2 leave fixable violations.
set_app_options -name signoff.fix_drc.last_run_full_chip -value trueRuns the final loop check on the whole block for accuracy.
signoff_check_drcFull 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
Master the Physical Design Implementation Flow
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.

Continue practising