How do you inspect and debug the FinFET placement grid in ICC2?
From PDVerse PnR Interview Handbook, part of the pdVerse Mentor Guide
Short Answer
Before touching any geometry, find out what grid is actually active โ report_grids -type finfet shows the pitch, offsets, and whether a FinFET grid is even defined for your technology, and check_finfet_grid tells you exactly which violations exist. Read the violation carefully: an error on a macro boundary doesn't necessarily mean the macro's origin is wrong โ a macro can have a perfectly legal origin and still fail because its width pushes the far edge off-grid.
Technical Explanation
- Before touching any geometry, find out what grid is actually active โ
report_grids -type finfetshows the pitch, offsets, and whether a FinFET grid is even defined for your technology, andcheck_finfet_gridtells you exactly which violations exist. - Read the violation carefully: an error on a macro boundary doesn't necessarily mean the macro's origin is wrong โ a macro can have a perfectly legal origin and still fail because its width pushes the far edge off-grid.
- For a manual sanity check on one coordinate, subtract the applicable offset and divide by the pitch โ the result should be an exact integer for a point that's supposed to sit on-grid. Do this arithmetic in exact DBU (database-unit) integers, not floating point, since floating-point rounding can produce false "off-grid" results.
- Check both X and Y directions, and remember that orientation (R90, MX, etc.) transforms which boundary maps to which coordinate โ a formula that works for a north-facing macro can give the wrong answer for a rotated one.
- Once you've localized the root cause, it's usually one of: wrong technology data loaded, an incompatible macro abstract, a unit-scaling mistake, wrong orientation, or a genuinely invalid placement โ fix the cause, not just the symptom, because nudging one edge independently can distort the whole macro and break other rules.
- Always re-run the actual grid-aware placement/legalization commands afterward rather than trusting your own hand calculation as the final word โ and if no grid is defined at all, don't invent pitch/offset values, go confirm the intended technology setup first.
Command Checks & Actions
analyze_lib_cell_placement -lib_cells <lib_cells> -trials 1000Samples random legal sites and reports a per-lib-cell pass-rate table -- the direct FinFET-grid legality debug command, rather than inferring grid problems indirectly from a failed route.
set_technology -report_onlyConfirms which grid and node settings are actually active before trusting the placement-legality result above, since a stale or wrong node setting would make that result meaningless.
Common Mistake
The Trap: Copying grid values from a tutorial into a different PDK, or assuming a snapped origin guarantees all boundaries are legal.
Follow-up Question & Model Response
"Why inspect both the database units and the grid?"
Candidate Model Response: Conversion errors can create apparent geometry violations even when the intended physical dimension was valid.
Practical Example
Tapeout Scenario: For an illustrative y offset of 0.012 um and pitch of 0.048 um, y = 0.108 um is aligned because (0.108 - 0.012)/0.048 = 2. A boundary at 0.120 um gives 2.25 and is off this grid.
Physical Design & Planning Handbook
Master ASIC Physical Design Planning & Floorplanning
Dive into 14 comprehensive chapters covering netlist sanity, FinFET grids, macro placement, power grids, CTS, and timing budgeting.
Offline PDF Bundle
Want all 1109 questions offline?
Get the complete 4-book PDF bundle (PnR, STA, MMMC, Low Power) with a clickable table of contents - no ads, no internet needed.

Continue practising