What changes in routing at double-patterning nodes?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
At double-patterning nodes one metal layer is printed with two masks, so every shape and via gets a mask colour and same-mask shapes need more spacing than different-mask ones. Routing has to assign colours legally, usually automatically during detail routing. Cut metal shapes are used to separate line ends, and writing DEF or GDS needs specific options so masks and cuts carry through.
Technical Explanation
- When features are too close to print with one exposure, the layer is split across two masks. Neighbours on different masks can sit closer than neighbours on the same mask.
- Every shape and via on those layers needs a mask colour.
route_detailand other routing commands normally add them automatically. derive_mask_constraintderives colours for uncoloured shapes and vias from the underlying tracks:-derive_cut_maskfor vias,-follow_pin_maskto take colour from the pins a wire touches, and-follow_wider_object_maskto follow a wider object rather than the track.- Via definitions can carry mask constraints on their shapes or enclosure layers, and NDRs can include mask constraints for routed nets.
- Cut metal shapes reduce line-end spacing. A cut metal layer matches the metal layer with the same mask number, and its size comes from the technology file.
create_cut_metalsinserts cuts where the preferred-direction spacing equals the cut width. - If routing changes after cuts are inserted, remove them with
remove_cut_metalsand insert them again. - Output needs care: DEF with cut metal shapes requires
write_def -version 5.8, and GDSII or OASIS requires-connect_below_cut_metalonwrite_gdsorwrite_oasis.
What To Check
- Same-mask spacing violations in
check_routes. - That every shape on double-patterning layers has a mask colour.
- Cut metal shapes present where line ends are closest, and refreshed after routing changes.
- The DEF version and GDS options used for output.
Command Checks & Actions
derive_mask_constraint -follow_pin_mask [get_shapes -of_objects [get_nets net1]]Assigns mask colours to a net's shapes based on the pins they touch.
create_cut_metalsInserts cut metal shapes between line ends that meet the cut rule.
remove_cut_metalsRemoves all cut metal shapes, needed before re-inserting after routing changes.
write_def -version 5.8 block.defWrites DEF in the version that can carry cut metal shapes.
check_routesReports mask-related spacing violations with other DRCs.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): All shapes coloured, no same-mask violations, cuts refreshed after the last routing change, and outputs written with the right options.
- Suspicious (illustrative): A cluster of same-mask violations in a dense area, usually cleared by rerouting a few nets.
- Hard stop: Cut metals left from before an ECO, or a DEF written in an older version that drops them.
Common Mistake
The Trap: Running an ECO after cut metals were inserted and not refreshing them. Some cuts now sit where wires moved, and some new line ends have none. Signoff DRC flags both, and the fix requires remove_cut_metals, reinsertion and a new check that should have been part of the ECO step.
What The Interviewer Is Testing
- Whether you understand why mask colour creates new spacing rules.
- Do you know the tools that assign colours and cuts?
- A strong answer shows you remember the output format requirements.
Follow-up Question & Model Response
"Why does a wire need to follow its pin's mask?"
Candidate Model Response: The pin shape already has a colour, fixed by the cell layout. If the wire touching it is on the other mask, the overlap between them is split across two exposures, which can print badly or break the connection. Following the pin mask keeps the connected shapes on one mask. The same logic applies to wider objects, which is what -follow_wider_object_mask covers.
Practical Example
Tapeout Scenario: On a double-patterned M2 (illustrative), two parallel wires 0.04 um apart on the same mask violate the 0.05 um same-mask spacing, while different masks only need 0.032 um. check_routes flags 37 of these in one area after an ECO. All 37 are cleared by rerouting the affected nets with route_eco and an incremental route_detail pass; derive_mask_constraint is used only for three new shapes the edit had left uncoloured. The ECO had also moved 12 line ends, so the engineer runs remove_cut_metals and create_cut_metals, then writes the block with write_def -version 5.8.
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