V1 validation history¶
This page preserves V1 development measurements and commands from their original revisions. Current V2 functional instructions are in verification; the stock TT qualification procedure defines V2 physical approval and provenance. The earlier V1 workflow commands below are historical, not the V2 dispatch interface.
V1 development status recorded in September 2026¶
V1 is implemented and functional verification passes. The latest local candidate from PR #9 passes routed electrical checks at 1.5 ns. Full same-revision physical and gate-level acceptance is mandatory before release. See published releases for accepted source revisions, workflow runs, and retained artifacts. Development merges are not physical acceptance; no FPGA or silicon operation is claimed.
Last failing CI physical source: c22a3d440bb1bf25fe691259c937f95bc4e683c3.
Run 35460188674
passed its functional job and failed the enforced slew checks. Its precheck,
gate-level, and final acceptance jobs were consequently skipped.
Last failing CI candidate metric |
Result |
|---|---|
Python tests |
176 passed |
RTL suites |
3 core differential + 3 pin-level passed |
Lint / formal induction |
Passed |
Die / target |
1289.28 x 710.64 um (6x4) / 40 ns (25 MHz) |
Standard-cell area / utilization, excluding filler |
241531 um2 / 26.7649% |
Worst routed setup / hold slack |
+21.090696 / +0.100768 ns |
Slew violations, fast / slow / typical |
0 / 125 / 23 |
Fanout violations |
1 at each corner |
Capacitance / Magic DRC / LVS errors |
0 / 0 / 0 |
Slew counts use the candidate’s conservative 1.5 ns constraint; they cannot be compared directly with counts under the earlier library limits. Positive setup/hold slack is not electrical signoff or an Fmax measurement. Available placement area is not a guarantee of equivalent capacity for new features.
Earlier local closure checkpoint¶
The native ARM64 LibreLane 3.1.0.dev3 container completed synthesis through
routing, extraction, and final STA locally. Physical inputs match draft
commit 3056a35; the captured manifest records the earlier c22a3d4 plus
dirty inputs, with hashes identifying the exact configuration. This is
development evidence, not clean-checkout release acceptance.
Explicit nominal layer/via RC initialization improved the repair path:
Local extracted result |
Value |
|---|---|
Standard-cell area / utilization |
242867 um2 / 26.9129% |
Worst setup / hold slack |
+21.217341 / +0.106257 ns |
Fanout / capacitance / routing DRC / antenna violations |
0 / 0 / 0 / 0 |
Slew violations, fast / slow / typical at 1.5 ns |
0 / 90 / 0 |
Worst reported slow-corner slew |
2.297081 ns |
The worst slew is below the library’s 2.5074 ns default, but the current candidate enforces the stricter 1.5 ns target and therefore still fails its configured electrical gate. Do not silently change or suppress that target. The shortened run did not execute final layout DRC/LVS, precheck, gate-level regression, or release acceptance. Its original tool exit code was zero because it stopped before the checker steps; the local runner now separately rejects missing or violating routed metrics, and correctly rejects this run.
Local electrical closure, 2026-09-23¶
The 55% global-route slew repair margin accommodates the measured difference
between estimated and extracted wire capacitance; the final transition limit
remains 1.5 ns. See the diagnosis.
The local route/extraction/STA checkpoint protocol-v1-route-01 passed:
Local extracted result |
Value |
|---|---|
Python tests / RTL suites / lint / formal / synthesis |
205 / 6 / passed / passed / passed |
Standard-cell area / utilization |
244113 um2 / 27.0510% |
Worst setup / hold slack |
+21.053364 / +0.106182 ns |
Slew / fanout / capacitance violations, all corners |
0 / 0 / 0 |
Routing DRC / antenna violations |
0 / 0 |
Unannotated signal nets, all corners |
0 |
The manifest records base 88f5210 plus dirty input hashes. Physical config
SHA-256: 38bf9b73fb2e324455dc9cd94eeaa75fe819dedf406c5b42ca561155153b9e92.
This establishes local routed closure, not release acceptance. Final layout
DRC/LVS, precheck, and matching gate-level tests require the full workflow on
the final release revision. The release checker rejects changed or missing
transition constraints even when electrical violation counts are zero.
Evidence history¶
Scaffold
fe0a027: GDS, precheck, and gate-level passed. This tiny combinational baseline validates flow setup, not the engine.Integrated
b8493a4: physical run completed GDS and nine prechecks but gate-level elaboration lacked the IHP UDP primitives. It had 55 slow-corner slew and 123 fanout violations; standard-cell area was 235839 um2. The older checker did not enforce these electrical metrics. This was not a release-quality physical pass.The model-source fix includes
sg13cmos5l_udp.v. All three pin suites passed locally on that routed netlist and again on thef3e605erouted netlist, including UART at both rates. Those results do not transfer signoff to a later netlist and do not resolve electrical violations.f3e605e: first closure run reduced fanout violations to three but retained 55 slow-corner slew violations.c22a3d4added a post-antenna repair pass and tightened slew; its results are above. Neither candidate is accepted.
Failed and cancelled runs remain visible as history; neither supplies passing acceptance evidence. Experiment details belong with the draft closure PR, not in the product requirements or the Phase 2 feature list.
Verification scope and retained artifacts¶
Core differential tests compare more than 26,000 system cycles, including twelve deterministic random seeds. Pin-level tests independently decode both UART rates and test concurrent SPI traffic, starvation, and interruption safety. See verification for proof assumptions and coverage limits.
The release workflow retains Python JUnit, both RTL XML reports, formal logs, waveforms, random programs/stimuli, assembled UART firmware, and source/tool/ checksum manifests. Gate-level evidence additionally identifies the routed netlist and primitive models. The physical checker rejects missing or violating slew, fanout, capacitance, geometry, timing, test, and provenance evidence. It requires all nine prechecks and the three named gate-level suites.
Gate-level simulation here is functional routed-netlist simulation; it does not replace extracted STA with a claim of delay-annotated simulation.
Local work and final release gate¶
Use the local build instructions for iterative optimization. Routine pushes run functional and documentation CI. Expensive GDS workflows are manual, to avoid rebuilding the chip for documentation or intermediate experiment pushes. The full acceptance requirement has not changed.
After local closure, dispatch the full workflow on the exact candidate:
gh workflow run gds.yaml --repo mcranny/protocol-emulator-asic --ref BRANCH
gh run list --repo mcranny/protocol-emulator-asic --workflow gds.yaml
Confirm that the resulting run’s head SHA is the intended source. Require functional, GDS, precheck, gate-level, and acceptance jobs to pass together. After any merge, validate the final release revision rather than assuming the branch’s earlier evidence automatically proves the merged commit.
Direct actions and CMOS5L support tools are pinned. LibreLane is 3.1.0.dev3;
IHP-Open-PDK is 2bbec755dc67ca3db0261c3d6163e15735d66710. Nested actions and
some dependencies remain dynamically resolved; CI is not fully hermetic.
Download artifacts from the same run to the paths below, then independently check them with the exact workflow head SHA:
python tools/check_physical.py \
--metrics GDS_logs/runs/wokwi/final/metrics.json \
--config GDS_logs/runs/wokwi/resolved.json \
--precheck precheck_reports/results.xml \
--gatelevel gatelevel_test_results/results.xml \
--source-commit FULL_WORKFLOW_HEAD_SHA \
--submission submission/tt_submission/commit_id.json \
--rtl-manifest functional/build/rtl-evidence.json \
--gatelevel-manifest gatelevel-evidence/gatelevel-evidence.json \
--python-tests functional/build/python-results.xml \
--core-tests functional/test/results_core.xml \
--formal-log functional/build/formal-engine.log
Here functional is the test-results artifact, and submission is the
tt_submission artifact. Retain matching PDK/config/source identities, GDS,
netlist, SPEF, metrics, reports, firmware, and test results with the release.
Do not tag V1 until every mandatory gate passes. GitHub Pages remains optional.