What does PrimeTime's `write_changes` produce, and how is it applied in ICC2?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
write_changes (PT) writes every netlist change made during the PrimeTime session as a change list, in a format chosen with -format. For ICC2 the format is icctcl, a Tcl script of netlist edits; ICC2 sources it, then places the changed cells with place_eco_cells -eco_changed_cells (ICC2) and reconnects them with route_eco (ICC2). The file is only a list of edits, so ICC2 still has to make them physically legal.
Technical Explanation
- The change list covers all ECO changes made in the PT session, not only the last command. Writing after setup fixing and again after hold fixing gives two files where the second repeats the first.
- Formats are ptsh (the default, a PT Tcl script), text, dctcl, icctcl for IC Compiler or IC Compiler II, eco (a binary read back by
read_eco_changes(PT)) and aprtcl for third-party tools. Only icctcl is meant for ICC2. - In physically aware mode the file carries locations; the PT user guide example shows an insert_buffer line with a -location coordinate pair and an add_buffer_on_route line with its location. Physically aware ECO needs a PrimeTime-ADV license (PT user guide, ECO chapter).
- In ICC2 you
source(ICC2) the file. Each edited cell gets an ECO change status such as create_cell, add_buffer, change_link or size_cell, which is whatplace_eco_cells -eco_changed_cells(ICC2) picks up. place_eco_cells -eco_changed_cells -legalize_only(ICC2) only legalizes changed cells that already have a location, which suits a physically aware change list; any changed cell that is still unplaced is skipped with warning EPL-021, so search the log for it. For a logic-only change list, run it without-legalize_onlyso ICC2 places the new cells itself.- After placement, insert fillers into the gaps, then run
route_eco(ICC2) to reconnect the modified nets. Check legality and routing before extraction. - With multiply instantiated module ECO enabled through
eco_enable_mim(PT),write_changes(PT) writes a separate change list per module, prefixed with the module name, so check the file list, not only the file you named.
What To Check
- The format and the number of edits in the file, by type.
- Errors or warnings while sourcing in ICC2, such as unknown library cells or missing pins.
- Every ECO cell placed and legal after
place_eco_cells(ICC2), with displacement in the expected range. - No opens or DRCs after
route_eco(ICC2).
Command Checks & Actions
write_changes -format icctcl -output pt_eco.tclWrites all session changes as an IC Compiler II Tcl script.
source pt_eco.tclApplies the netlist edits and sets the ECO change status on each cell.
place_eco_cells -eco_changed_cellsPlaces new cells and legalizes changed ones.
check_legalityConfirms every cell sits on a legal site after ECO placement.
route_ecoReconnects the nets touched by the ECO.
check_routesReports opens and routing DRCs after ECO routing.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): The script sources with no errors, every one of the changed cells is placed and legal, maximum displacement stays within a few microns and
check_routes(ICC2) reports no opens. - Suspicious (illustrative): Sourcing warns about a library cell name that matches in two libraries; set the PT variables that prepend library names and rewrite.
- Hard stop: Unplaced ECO cells after
place_eco_cells(ICC2), or source errors that stop the script halfway. Do not route or extract a half-applied ECO.
Common Mistake
The Trap: Writing one change list after setup fixing and another after hold fixing, then sourcing both in ICC2. write_changes (PT) is cumulative, so the second file repeated every setup edit. The resizes were harmless, but the 38 setup buffers went in a second time under suffixed names, nobody diffed the files, and the re-extracted PT run showed new setup violations on exactly those nets. Source only the last file written in a session.
What The Interviewer Is Testing
- Knowing the format ICC2 needs, and what the default format is.
- Can you explain how ICC2 knows which cells to place after sourcing?
- Understanding that the change list is cumulative for the PT session.
Follow-up Question & Model Response
"When would you use the eco binary format instead of icctcl?"
Candidate Model Response: The eco format is read back into PrimeTime with read_eco_changes (PT), not into ICC2. Replaying a change list in PrimeTime needs a PrimeTime-ADV license (PT UG licensing table). It is useful to replay an ECO in a fresh or restored PT session, for example to check the changes in other scenarios before implementing them. The PT user guide describes this flow: write eco, restore the session, replay, assess, then write icctcl for implementation. It is also how block-level ECOs are combined at the top level.
Practical Example
Tapeout Scenario: After fixing, write_changes -format icctcl -output pt_eco.tcl (PT) writes 57 size_cell edits and 94 inserted buffers, 151 changes in total (illustrative). Sourcing in ICC2 runs without errors, and place_eco_cells -eco_changed_cells (ICC2) places all 151 changed cells, with the largest move 1.8 µm. Fillers are re-inserted, route_eco (ICC2) reconnects 263 nets, and check_routes (ICC2) reports 0 opens and 0 shorts. The block goes to StarRC and a new PT run.
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