Signoff DRC passes in ICC2 but fails in standalone IC Validator on the merged GDS. Why?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
The two runs are not checking the same data. By default signoff_check_drc (ICC2) reads the design view for the top block and standard cells but only the pin information from the frame view of macros and pads, while standalone IC Validator reads every polygon in the merged GDS. Any macro geometry that the frame view abstracts away, such as internal metal near the edge, is invisible to the ICC2 run.
Technical Explanation
- Default view selection: design view for the top block and library cells, pins from the frame view for macro and I/O pad cells. With
signoff.check_drc.ignore_blockages_in_cells(ICC2) at its default of true, even the frame view's routing blockages are ignored. - The typical failures are spacing between a top-level strap or route and macro internal metal near the boundary, fill placed over area that is empty in the frame but not in the GDS, and via or density rules that count macro metal.
signoff.physical.merge_stream_files(ICC2) names GDSII or OASIS files whose data replaces the library view for the cells they define, so ICC2 checks the real macro layout. Cells in libraries listed insignoff.physical.merge_exclude_libraries(ICC2) are not replaced.signoff.check_drc.read_layout_views(ICC2) reads the layout view instead, which matches the stream data it came from and runs faster. Layout views are not in cell libraries by default; setlib.workspace.save_layout_views(ICC2) to true during library preparation.- Precedence for child cell data is merged stream files, then layout views, then design views, then frame views. A cell with none of these is skipped during checking, which is another silent gap.
- Other causes to rule out: a different layer map between the stream-out and
signoff.physical.layer_map_file(ICC2), a newer macro GDS than the one the frame was built from, and fill data that ICC2 did not read because it was older than the design view. - In standalone runs, several
-i(ICV) options merge libraries: the first becomes the main library and later ones are merged in with no layer mapping.
What To Check
- Which view ICC2 read for each macro, from the run log and settings.
- Location of standalone violations relative to macro boundaries.
- Macro GDS date against the frame view source.
- Layer map used for stream-out against the signoff layer map.
Command Checks & Actions
set_app_options -name signoff.physical.merge_stream_files -value {sram_a.gds pll.oas}Makes ICC2 signoff DRC use the real macro layouts instead of their frame views.
set_app_options -name signoff.check_drc.read_layout_views -value {sram*}Alternative: read saved layout views for matching macros, faster than merging stream files.
signoff_check_drcReruns signoff DRC with the new view selection so both runs see the same data.
icv -i top.gds -c top drc.rsStandalone check of the merged GDS, the reference result.
cell.LAYOUT_ERRORSLocation and structure name of each standalone violation, used to map errors to macro edges.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): After merging macro GDS, ICC2 reports the same 42 violations as the standalone run, all within 2 um of two macro edges.
- Suspicious (illustrative): Counts match but a handful differ in location, suggesting a layer map or database unit difference.
- Hard stop: The standalone run still fails on a rule ICC2 reports clean after merging, or any macro skipped because no view was found.
Common Mistake
The Trap: Waiving the standalone violations as abstraction artefacts because ICC2 is clean. The shapes are in the GDS that goes to the mask shop, and a strap 0.02 um too close to macro M4 is a real spacing violation whichever tool found it.
What The Interviewer Is Testing
- Knowledge of which views ICC2 reads by default and how to change it.
- Can the candidate name the view precedence order?
- Recognising that the standalone run on the final GDS is the one that counts.
Follow-up Question & Model Response
"Why not always set signoff.check_drc.read_design_views (ICC2) to {} and be done with it?"*
Candidate Model Response: The design view shows the cell as the library saw it, which exposes problems the frame view hides, but it is still not the stream data. It also has to exist: design views are not in cell libraries unless lib.workspace.save_design_views (ICC2) was set at library preparation. For hard macros delivered as GDS, merging the stream file is the only way to check exactly what goes to the fab. Reading every design view also costs runtime on a large block.
Practical Example
Tapeout Scenario: A block with six SRAMs is clean in ICC2 but the standalone run on the merged GDS shows 42 M4 spacing violations (illustrative). All sit within 2 um of the east edge of two SRAM types, where the macro has internal M4 that its frame view drops. Setting signoff.physical.merge_stream_files (ICC2) to the two SRAM GDS files reproduces all 42 in ICC2. Adding a 0.5 um routing blockage along those edges and rerouting three straps clears them in both tools.
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