---
title: "ECO and partial reconfiguration"
---

# ECO and partial reconfiguration

Engineering change orders on a routed Vivado checkpoint, recorded with a replay script, and reconfigurable partitions built with Vivado Dynamic Function Exchange or Quartus Prime Pro partial reconfiguration.

**State: not yet run against Vivado or Quartus Prime Pro**; kit shipped. The generators and readers are tested on real `report_route_status` output and a Vivado log from public projects; the `pr_verify` and partial-bitstream sample text was written by us in Vivado's layout, as no permissively licensed log was found. Nothing is verified on Windows.

## Vivado ECO

In the persistent Vivado session, on a routed checkpoint, the **ECO** section of the Timing Analysis editor (or the commands below) changes the design in Vivado's memory and records each change:

| Command | What it does |
|---|---|
| **Vivado ECO: Change a LUT Equation...** | Sets a LUT's equation; the INIT value is worked out by the Editor |
| **Vivado ECO: Connect Pins to a Net...** | Changes a net connection |
| **Vivado ECO: Probe a Net...** | Connects a net to a debug probe |
| **Vivado ECO: Release a Probe Input...** | Releases a debug probe input |
| **Vivado ECO: Route Changed Nets** | `route_design -nets` on the changed nets (or route the whole design) |
| **Vivado ECO: Report DRC** | `report_drc` on the changed design, with `report_route_status` |
| **Vivado ECO: Write Checkpoint** | Writes the changed design as a checkpoint |
| **Vivado ECO: Write Bitstream...** | Writes the bitstream and debug probes, after a confirmation; refused until the changes are routed and DRC shows no error |
| **Vivado ECO: Open Change Log** | Opens the ECO's record |

Each change shows the netlist before and after. Each ECO is recorded in the build folder (`eco/<target>/`) as `eco.json`, a change log and a replay script. Changes, routing, checkpoints and bitstreams ask you to confirm.

State: **kit shipped**; `route_design -nets` comes from search results and is checked by the kit.

## Dynamic Function Exchange and partial reconfiguration

Reconfigurable partitions are declared once in a target's `reconfiguration` block in `hdl.json` (Vivado or Quartus targets only):

- `partitions`: each with its name, instance, and a Pblock (Vivado) or a region with place and route bounds (Quartus);
- `modules`: the reconfigurable modules of each partition;
- `configurations`: each a named set of modules, one per partition.

**Build Partial Reconfiguration Configurations** builds them, and **Stop Partial Reconfiguration Build** stops a running build:

| Vendor | Flow |
|---|---|
| Vivado | The DFX non-project flow: out-of-context modules, `HD.RECONFIGURABLE` and Pblocks, `lock_design`, `pr_verify`, full and partial bitstreams |
| Quartus Prime Pro | Its PR revision flow: a base revision, one implementation revision per persona, an `.rbf` per partition |

Each configuration is a run in the Implementation Runs editor, with its worst slack, slowest clock, logic and bitstreams, the `pr_verify` verdict, and each step's log.

State: **kit shipped**; `create_revision` and `quartus_cpf` for `.pmsf` come from search results and are checked by the kit.
