Flow and conditions
- OpenROAD-flow-scripts in the official container (digest pinned in the summary): Yosys synthesis, floorplan, global and detailed placement, clock-tree synthesis, global and detailed routing, OpenRCX parasitic extraction, OpenSTA timing and power, and a formal equivalence check of the final netlist against synthesis.
- Nangate45 (FreePDK45-based open cell library, typical corner 1.10 V, 25 °C): the same library and constraint set as the published pre-layout estimates. It is an academic library, not a manufacturable process.
- SKY130 HD (SkyWater open PDK, typical corner 1.80 V, 25 °C): a manufacturable open process, used as a cross-check.
- Constraints: 0.2 ns I/O delay (0.5 ns on SKY130), 50 ps clock uncertainty and transition (125/150 ps on SKY130), 10 fF output load, reset assertion excluded.
- Not included: SRAM macros, I/O pads, DFT, multi-corner and on-chip-variation sign-off, foundry DRC/LVS decks, silicon.
Results
| Design | Process library | Target | Setup slack | Minimum period | Cell area (µm²) | Die (µm²) | Utilization | Cells | DRC | Equivalent to synthesis |
|---|---|---|---|---|---|---|---|---|---|---|
| CV-X1 Pro L8 | Nangate45 | 4.0 ns | +2.19 ns | 1.81 ns (551 MHz) | 27,595.6 | 54,489.6 | 51.7% | 11,325 | 0 | yes |
| Plain SIMD baseline | Nangate45 | 4.0 ns | +2.16 ns | 1.84 ns (542 MHz) | 45,082.2 | 88,339.7 | 52.0% | 17,943 | 0 | yes |
| CV-GEMV core, P = 8 | Nangate45 | 4.0 ns | +1.60 ns | 2.40 ns (417 MHz) | 60,234.9 | 131,577 | 46.4% | 33,162 | 0 | yes |
| CV-X1 Pro L8 | SKY130 HD | 10.0 ns | +2.14 ns | 7.86 ns (127 MHz) | 150,173 | 298,668 | 51.0% | 14,666 | 0 | yes |
Setup slack is measured at the target on the routed design with extracted parasitics; the minimum period is what OpenSTA reports for the same layout. A layout re-implemented for a shorter target could differ.

Pre-layout estimate versus routed layout
The published pre-layout estimate for CV-X1 Pro L8 was 25,311.0 µm² and 306.43 MHz under the same library and constraints. The routed design uses 27,595.6 µm² of cells, including 11,325 instances with the clock tree and timing buffers, and closes 4.0 ns with +2.19 ns. The pre-layout run used no timing-driven sizing, so its frequency was the more conservative of the two.
Power from real model data
Each routed netlist was simulated at gate level (Verilator, cell models generated from the Liberty file) on real data: the inputs of Qwen2.5-0.5B layer-12 down_proj on WikiText-2. CV-X1 Pro L8 and the baseline processed 16,384 input beats from 256 tokens against 512 real weights; the CV-GEMV core processed two full tokens of the 896 × 4864 layer. Every output matched the expected values. The switching activity of every net was then applied in OpenSTA with the extracted parasitics.
| Design | Default activity | Real workload | Window | MACs | Energy per MAC |
|---|---|---|---|---|---|
| CV-X1 Pro L8 | 11.79 mW | 10.36 mW | 65.83 µs | 131,072 | 5.20 pJ |
| Plain SIMD baseline | 18.50 mW | 16.79 mW | 65.83 µs | 131,072 | 8.43 pJ |
| CV-GEMV core, P = 8 | 17.03 mW | 20.29 mW | 551.06 µs | 8,716,288 | 1.28 pJ |
Power is at 250 MHz, typical corner, for the core alone. The window includes reset and, for the two stream designs, the 64-word weight load. Default activity is OpenSTA's vectorless estimate, shown for comparison.
External baseline: a plain SIMD unit
To give the numbers a reference point, we wrote a textbook 8-lane INT8 × INT8 dot-product unit with a 32-bit saturating accumulator and the same 4-entry FIFO, three stages and stall rule, holding the same 512 weights as INT8. It went through the identical flow, constraints and workload.
| CV-X1 Pro L8 | Plain SIMD baseline | |
|---|---|---|
| What it stores | 512 weights as INT4 (256 bytes) | 512 weights as INT8 (512 bytes) |
| Per-group zero point and scale | yes, fused into the pipeline | no |
| Cell area | 27,595.6 µm² | 45,082.2 µm² |
| Flip-flops | 2,631 | 4,584 |
| Minimum period | 1.81 ns | 1.84 ns |
| Power, same real workload, 250 MHz | 10.36 mW | 16.79 mW |
| Energy per MAC | 5.20 pJ | 8.43 pJ |
| Output error on this slice vs FP | 6.11% | 3.47% |
CV-X1 Pro L8 uses 38.8% less cell area and 38.3% less power on this workload, mainly because 4-bit storage halves the weight flip-flops. The cost is accuracy: on this slice its output error is higher than the INT8 baseline's. Which trade is right depends on the model and the accuracy budget.
For CV-GEMV against open matrix-vector designs (VTA, OpenGeMM, Gemmini, the LogikBench TPU) under the same flow, processes and real model data, see the same-condition comparison.
SKY130 cross-check
On the SkyWater SKY130 HD library at a 10 ns target, CV-X1 Pro L8 closes with +2.14 ns slack (minimum period 7.86 ns), 150,173 µm² of cells on a 298,668 µm² die and 0 routing DRC violations. Power on SKY130 was not measured with workload activity.
Raw outputs
Summary JSON ↓ · CV-X1 Pro L8 finish report · power log · baseline report · CV-GEMV report · workload hashes ↓ · SKY130 report
Reproduce: studies/pnr/run_orfs.sh nangate45 cv_x1_pro_l8 with the pinned container, then the gate-level replay and power.tcl in scripts.
