How do you inspect and debug the FinFET placement grid in ICC2?
From PDVerse PnR Interview Handbook, part of the pdVerse Mentor Guide
Last updated:
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