ECO: measure every change
Make a local timing edit and a functional correction, then compare physical changes and prove the intended behavior.
- Lesson
- L7.5
- Time
- 26 min
- Runs on
- OpenROAD
- Check
- 5 questions
Replacing one MAC cell with a larger drive variant moves 6 instances during legalization. Its cold-slow setup slack improves from -5.6158 ns to -4.5768 ns. The local change helps, but the corner still fails.
- Tap cells
- Logic
- Buffers and inverters
- Flip-flops
- Clock tree
- met1
- met2
- met3
- met4
- I/O pins
- Stage
- Floorplan
- Cell area
- 4,332.9 µm²
- Utilization
- 42.4 %
- Worst max slack
- 1.5886 ns
- Total negative max slack
- 0.0000 ns
- Worst min slack
- 0.4679 ns
- Stage
- Global placement
- Cell area
- 4,332.9 µm²
- Utilization
- 42.4 %
- Wirelength (HPWL)
- 4,952 µm
- Worst max slack
- 1.1493 ns
- Total negative max slack
- 0.0000 ns
- Worst min slack
- 0.4919 ns
- Overflow
- 0.0994
- Stage
- Detailed placement
- Cell area
- 4,332.9 µm²
- Utilization
- 42.4 %
- Wirelength (HPWL)
- 6,041 µm
- Worst max slack
- 1.0508 ns
- Total negative max slack
- 0.0000 ns
- Worst min slack
- 0.4980 ns
- Stage
- Clock tree
- Cell area
- 4,420.5 µm²
- Utilization
- 43.2 %
- Wirelength (HPWL)
- 6,331 µm
- Worst max slack
- 1.0227 ns
- Total negative max slack
- 0.0000 ns
- Worst min slack
- 0.3439 ns
- Clock skew
- 0.0084 ns
- Stage
- Global route
- Cell area
- 4,420.5 µm²
- Utilization
- 43.2 %
- Wirelength (HPWL)
- 6,331 µm
- Routed wirelength
- 13,938 µm
- Worst max slack
- 0.7109 ns
- Total negative max slack
- 0.0000 ns
- Worst min slack
- 0.3259 ns
- Routing usage
- 13.1 %
- Overflow
- 0
- Stage
- Detailed route
- Cell area
- 4,438.0 µm²
- Utilization
- 43.4 %
- Wirelength (HPWL)
- 6,351 µm
- Routed wirelength
- 7,649 µm
- Worst max slack
- 1.3628 ns
- Total negative max slack
- 0.0000 ns
- Worst min slack
- 0.3487 ns
- Routing violations
- 0
- Global route
Original placed cells before the edit.
- Detailed route
The resized cell and its legalized neighbors, followed by a new route.
Read the layout as text
mac: die 112.02 × 112.02 µm, core 101.66 × 100.64 µm, 37 rows of 2.72 µm, 39 signal pins.
| Stage | Cell area | Utilization | Wirelength (HPWL) | Routed wirelength | Worst max slack | Total negative max slack | Worst min slack | Clock skew | Routing usage | Overflow | Routing violations | Cells placed |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Floorplan | 4,332.9 µm² | 42.4 % | — | — | 1.5886 ns | 0.0000 ns | 0.4679 ns | — | — | — | — | 136 tap cells; I/O pins not placed yet |
| Global placement | 4,332.9 µm² | 42.4 % | 4,952 µm | — | 1.1493 ns | 0.0000 ns | 0.4919 ns | — | — | 0.0994 | — | 136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops |
| Detailed placement | 4,332.9 µm² | 42.4 % | 6,041 µm | — | 1.0508 ns | 0.0000 ns | 0.4980 ns | — | — | — | — | 136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops |
| Clock tree | 4,420.5 µm² | 43.2 % | 6,331 µm | — | 1.0227 ns | 0.0000 ns | 0.3439 ns | 0.0084 ns | — | — | — | 136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops, 8 clock tree |
| Global route | 4,420.5 µm² | 43.2 % | 6,331 µm | 13,938 µm | 0.7109 ns | 0.0000 ns | 0.3259 ns | — | 13.1 % | 0 | — | 136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops, 8 clock tree |
| Detailed route | 4,438.0 µm² | 43.4 % | 6,351 µm | 7,649 µm | 1.3628 ns | 0.0000 ns | 0.3487 ns | — | — | — | 0 | 136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops, 8 clock tree |
The table below lists the exact movement. This experiment reroutes the block; it does not claim an incremental route-only repair.
State the purpose and permitted layers
An engineering change order, or ECO, makes a controlled change to an existing implementation. This experiment returns to the same global-route checkpoint, applies its edit, then reroutes the complete block. A timing ECO preserves specified behavior while repairing timing or an electrical limit. A functional ECO changes behavior to match a revised specification or corrected RTL.
| Edit | Intended behavior | Physical consequence to inspect |
|---|---|---|
| Resize a timing-path cell | Preserve its Boolean function | Footprint, load, placement and routing |
| Insert a hold-delay cell | Preserve logical values | Minimum delay, maximum delay and new routes |
| Reconnect a miswired select pin | Implement the corrected selection | Changed nets and all affected timing paths |
| Reroute a noisy connection | Preserve logical connectivity | Spacing, coupling, resistance and vias |
Classifying the purpose does not establish the result; verification follows the actual edit.
Before base-layer masks are fixed, an edit may change cell masters or add cells, subject to available space and full verification. A metal-only ECO restricts changes to permitted metal and via layers. Existing spare gates or configurable cells can supply logic without changing transistor layers.
An unchanged list of cell coordinates is necessary for many metal-only plans, but it is not a complete mask comparison. Master identities, orientations, physical cell shapes and all permitted layer changes must also be checked. A normal drive-strength replacement changes the cell implementation and cannot simply be called metal-only.
Audit the timing edit’s side effects
The MAC edit replaces _734_ from o311ai_0 to o311ai_4. Their output functions in the pinned Liberty are both (!A1&!A2&!A3) | (!B1) | (!C1). Matching that function supports the local Boolean replacement; it does not establish electrical equivalence.
| Timing ECO observation | Measured result |
|---|---|
| Cell area before / after | 4420.4896 / 4438.0064 µm² |
| Resized / added / removed | 1 / 0 / 0 |
| Changed net memberships | 0 |
| TT setup before / after | 1.0077 / 1.3628 ns |
| Final routing markers | 0 |
A larger cell improves this experiment’s setup result. The cold-slow failure remains open.
| Moved instance | Manhattan displacement |
|---|---|
| _408_ | 2.30 µm |
| _430_ | 1.38 µm |
| _452_ | 2.72 µm |
| _605_ | 3.64 µm |
| _625_ | 1.38 µm |
| _734_ | 2.72 µm |
The comparison checks every common instance’s position and orientation; movement is not assumed local merely because the command names one cell.
Upsizing changes the driver’s output behavior and its input capacitances. The upstream path can therefore slow while the driven path improves. Legalization and rerouting also change wire geometry, so the old parasitics must be replaced before accepting timing.
A useful acceptance condition includes every required corner and check, not only the edited path. Hold, transition, capacitance, power and geometric requirements can become worse. This edit is a measured improvement with an unresolved sign-off failure, rather than a completed timing repair.
Prove a functional correction against its target
The small second circuit registers inputs a and b, then selects between those stored values. Its mux select was incorrectly connected to a. The intended RTL selects with sel; the ECO reconnects selector/S to sel without adding a gate.
| Functional ECO observation | Measured result |
|---|---|
| Added / removed / resized cells | 0 / 0 / 0 |
| Moved / unchanged placements | 0 / 39 |
| Changed net memberships | a, sel |
| Wirelength before / after | 130 / 170 µm |
| TT maximum slack before / after | 1.6625 / 1.6620 ns |
| Equivalence after correction | 3 proven points; 0 unproven |
Pinned Yosys checks the actual exported physical netlist against corrected RTL. Ideal supplies and excluded power-only tap cells define the Boolean proof’s scope.
Before the correction, the same equivalence procedure leaves 1 point unproven. Afterward, all compared points are proved. An unproven point alone is not a formal counterexample; here the wrong select connection also directly explains the behavioral mismatch.
This functional edit preserves cell placement, but the route changes and its timing shifts. Certifying a metal-only implementation would still require a complete layer comparison and manufacturing checks. The example demonstrates a reconnection using existing logic, without claiming an approved mask change.
Define the target
Use the unchanged specification for a timing ECO and the corrected RTL for a functional ECO.
Compare the physical edit
Inspect added, removed, resized and moved cells, plus changed net memberships and routing.
Rebuild the evidence
Re-extract, rerun timing and electrical checks, prove behavior, and repeat the required final geometry and connectivity checks.
Before applying an edit, save the intended target behavior and a reproducible baseline containing the original cells, connections, placement and timing assumptions. Then make one purposeful change and compare the complete result, since automatic legalization may move cells that the editing command never named. If the new route changes many wires, expand the timing and physical review accordingly instead of limiting inspection to the edited cell. Keeping the unchanged constraints beside both reports makes the improvement interpretable and prevents a relaxed requirement from masquerading as a physical repair. The resulting review should state both the improvement achieved and every acceptance condition that remains unresolved after the change.
Asked in interviews
Why compare every instance?
A local command can trigger neighboring movement or a broad route change. The actual difference defines the verification scope.
What do spare cells provide?
Existing transistor structures that may be connected for a later functional edit, subject to routing and mask restrictions.
Which reference proves a functional ECO?
The revised intended behavior. Proving equivalence to the old buggy behavior would reject the intended fix.
Try it
The original small circuit reports 1.9002 ns maximum slack with ideal wires. Timing can pass while the select connection is wrong.
Change selector’s .S(a) to .S(sel). The live timing result does not itself prove functional correctness; the exported-layout proof above supplies separate evidence.
Run to draw the timing paths here.
WNS 1.9002 nsCheck yourself
Remember
- Define both the intended behavior and permitted physical changes.
- Measure every changed cell and connection after legalization and routing.
- An improved path is not complete multi-corner closure.
- Prove functional corrections against corrected RTL and refresh physical checks.