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.

LayoutPlacement before and after a local resize
  • Tap cells
  • Logic
  • Buffers and inverters
  • Flip-flops
  • Clock tree
  • met1
  • met2
  • met3
  • met4
  • I/O pins
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
Placement before and after a local resizeDrawing the layout…
  1. Global route

    Original placed cells before the edit.

  2. 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.

StageCell areaUtilizationWirelength (HPWL)Routed wirelengthWorst max slackTotal negative max slackWorst min slackClock skewRouting usageOverflowRouting violationsCells placed
Floorplan4,332.9 µm²42.4 %——1.5886 ns0.0000 ns0.4679 ns————136 tap cells; I/O pins not placed yet
Global placement4,332.9 µm²42.4 %4,952 µm—1.1493 ns0.0000 ns0.4919 ns——0.0994—136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops
Detailed placement4,332.9 µm²42.4 %6,041 µm—1.0508 ns0.0000 ns0.4980 ns————136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops
Clock tree4,420.5 µm²43.2 %6,331 µm—1.0227 ns0.0000 ns0.3439 ns0.0084 ns———136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops, 8 clock tree
Global route4,420.5 µm²43.2 %6,331 µm13,938 µm0.7109 ns0.0000 ns0.3259 ns—13.1 %0—136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops, 8 clock tree
Detailed route4,438.0 µm²43.4 %6,351 µm7,649 µm1.3628 ns0.0000 ns0.3487 ns———0136 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.

EditIntended behaviorPhysical consequence to inspect
Resize a timing-path cellPreserve its Boolean functionFootprint, load, placement and routing
Insert a hold-delay cellPreserve logical valuesMinimum delay, maximum delay and new routes
Reconnect a miswired select pinImplement the corrected selectionChanged nets and all affected timing paths
Reroute a noisy connectionPreserve logical connectivitySpacing, 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 observationMeasured result
Cell area before / after4420.4896 / 4438.0064 µm²
Resized / added / removed1 / 0 / 0
Changed net memberships0
TT setup before / after1.0077 / 1.3628 ns
Final routing markers0

A larger cell improves this experiment’s setup result. The cold-slow failure remains open.

Moved instanceManhattan 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 observationMeasured result
Added / removed / resized cells0 / 0 / 0
Moved / unchanged placements0 / 39
Changed net membershipsa, sel
Wirelength before / after130 / 170 µm
TT maximum slack before / after1.6625 / 1.6620 ns
Equivalence after correction3 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.

  1. Define the target

    Use the unchanged specification for a timing ECO and the corrected RTL for a functional ECO.

  2. Compare the physical edit

    Inspect added, removed, resized and moved cells, plus changed net memberships and routing.

  3. 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
  1. Why compare every instance?

    A local command can trigger neighboring movement or a broad route change. The actual difference defines the verification scope.

  2. What do spare cells provide?

    Existing transistor structures that may be connected for a later functional edit, subject to routing and mask restrictions.

  3. 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.

STAOpenSTA in OpenROAD 26Q2 · sky130hd tt_025C_1v80 Liberty · simulator service
Edit the constraints or the netlist, then run

          
Expected: WNS 1.9002 ns

Check yourself

Predict the outputKeep the original live netlist and raise its period from 3 ns to 4 ns. What maximum slack is reported, in ns?
create_clock -name clk -period 4 [get_ports clk]
set_input_delay 0.2 -clock clk [delete_from_list [all_inputs] [get_ports clk]]
set_output_delay 0.5 -clock clk [all_outputs]
set_load 0.01 [all_outputs]
Read the netlist: design.v
module eco(clk, a, b, sel, y);
input clk, a, b, sel; output y; wire qa, qb;
sky130_fd_sc_hd__dfxtp_1 fa (.CLK(clk), .D(a), .Q(qa));
sky130_fd_sc_hd__dfxtp_1 fb (.CLK(clk), .D(b), .Q(qb));
sky130_fd_sc_hd__mux2_1 selector (.A0(qa), .A1(qb), .S(a), .X(y));
endmodule
ConceptWhich reference should a functional bug-fix ECO match?
ConceptOne resize improves setup but the slow corner remains negative. What is established?
ConceptNo cells moved after reconnection. What further evidence is needed for a metal-only claim?
ConceptWhy rerun extraction after a timing ECO?

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.