Skip to content

feat: integrate xcomm coverage-v2 and native clock ownership - #115

Merged
Makiras merged 6 commits into
masterfrom
xreactor-coverage-v2
Oct 22, 2026
Merged

Makiras merged 6 commits into
masterfrom
xreactor-coverage-v2

Conversation

@Makiras

@Makiras Makiras commented Oct 12, 2026

Copy link
Copy Markdown
Contributor

Description

Adapt Picker to the coverage-v2 xcomm SDK and native clock ownership in xcomm #30. Generated DUT signals use XData directly, and their Step entry points honor the native engine's exclusive clock ownership. Manual stepping resumes after the engine releases the clock.

  • Pin xcomm to e64d8622f7c50fc32a9f9447415672a470103496; verify native ABI 3 and coverage descriptor protocol 5.
  • Update generated Python/UVM signal access, indexed port handling and the MultiClock example; migrate UVM builds to the reorganized TLM SDK source paths.
  • Keep native builds, generated simulator libraries and standalone xcomm wheel builds consistent with -fno-strict-aliasing.
  • Extend the real generated Adder regression to cover clock acquisition, rejected manual/competing stepping, native triggers, coverage counters and release back to manual stepping.
  • Fix tagged release publication with an explicit publisher dispatch and a wait of up to 60 minutes for the source CI run to succeed before publishing its exact artifacts.

This branch includes all three commits from Picker #114, followed by the coverage-v2 integration. The PRs overlap; #114 remains open for review history, and no PR is merged or closed by this change.

Release and compatibility

Release intent: release:minor for Picker. The paired xcomm PR is intended for a major package release; its native ABI remains 3, independently of the package version.

Rebuild generated native DUT extensions against matching xcomm headers and runtime. Generated leaves are XData objects: pass dut.signal directly to backend APIs in place of dut.signal.xdata. Coverage descriptors use XCoveragePoint and bin.point_id.

Merge prerequisite: the current development requirement, xspcomm>=0.3.0.dev2,<0.4, excludes the planned xcomm 1.x release. Before merging/releasing Picker, align its dependency range, preview-wheel version and maintainer documentation with the agreed xcomm major version, and rerun installation/release checks. The compatible xcomm release must be published first. This PR records that prerequisite without changing or publishing any tag.

Type of change

  • xcomm dependency and generated-signal API migration
  • Release CI bug fix
  • Documentation and integration test updates

How Has This Been Tested?

Tests ran from an isolated checkout of 4dd442c using xcomm e64d862, GCC 11, CPython 3.12 and Verilator 5.026.

  • 27 Picker/xcomm native CTest targets pass.
  • Python and Java generated Adder export/build/simulation pass, including the new Python ownership and native coverage checks.
  • 11 release-policy unit tests pass.
  • Fresh Picker 2.0.2.dev5 and xspcomm 0.3.0.dev2 wheels build and install together in a clean offline virtual environment; pip check, ABI/protocol checks, clock ownership, Picker version/help and error exit checks pass.
  • 932 tests in the local paired XReactor frontend pass against the newly built xcomm wheel. Those frontend changes are separate from this PR.

Checklist

  • Source dependency pin, runtime ABI and coverage protocol checks agree.
  • Added real generated-DUT regression coverage and migration documentation.
  • Added exactly one version label: release:minor.
  • Align development/package version constraints with the planned xcomm major release before merging.
  • Merge and publish the compatible xcomm release before releasing Picker.

Makiras and others added 5 commits October 1, 2026 14:44
Dispatch Release Picker after the release bundle is uploaded, and wait for the source Tagged CI run to finish successfully before publishing. Replace the workflow_run listener to support builds dispatched with GITHUB_TOKEN.
Require xspcomm>=0.2.0,<0.3 and pin development builds to the published
v0.2.0 commit. Check native ABI 2 in wheel verification and require
libxspcomm.so.2 in release archives so development, wheel and native
release packages use the same supported runtime generation.

Replace removed XPin wrappers with direct XData objects in Python and UVM
DUTs, including internal signals and indexed port access. Update the
MultiClock example and document the native rebuild and signal API migration.
Add a generated Adder regression for ABI identity, direct XData leaves,
port aliases, assignment protection and 128-bit arithmetic.

Validation:
- All 24 native CTest programs and 11 release-policy tests pass.
- Generated Adder, VPI internal-signal and MultiClock simulations pass.
- UVM transaction/from-RTL pack rendering passes; VCS runtime unavailable.
- Built Picker and xcomm v0.2.0 wheels install and pass verification in a
  fresh offline environment; pip rejects pairing Picker with xcomm 0.1.1.
- Installed native AppDir contains the ABI 2 SONAME and a working command.
- Workflow and shell syntax checks pass (existing queue field excluded
  from actionlint v1.7.12).

BREAKING CHANGE: generated Python and UVM signals expose XData directly.
Replace dut.signal.xdata with dut.signal and rebuild existing generated
DUT extensions against the xcomm 0.2 / ABI 2 headers and runtime.
Co-authored-by: Makiras <22570332+Makiras@users.noreply.github.com>
Pin development builds to xcomm 83ab5b2, which shares native Trigger matching
with Coverage bins and exports native ABI 3 with coverage descriptor protocol 4.
Require the xspcomm 0.3 series, including its explicit 0.3.0.dev0 preview, and
build that preview in Development CI until a compatible stable release exists.
Tagged builds continue to require published stable xcomm releases.

Align installed-wheel checks, generated Python signal regression checks and
native release archive verification with ABI 3. Keep the existing ARM value
assertion correction inherited from the current Picker PR branch.

Apply -fno-strict-aliasing to the embedded xcomm target and its consumers,
standalone xcomm wheel builds, and generated simulator libraries while retaining
the existing optimization flags. Update the UVM template to consume python.i
and pubsub.cpp from the installed TLM source SDK through XSP_COMM_TLM.
Document dependency versions, preview builds, native compatibility and SDK paths.

Validation:
- Fresh combined Release build: all 27 Picker/xcomm C++ tests pass.
- All 11 release-policy tests pass; modified shell scripts pass syntax checks.
- Built Picker wheel installs with the xspcomm preview in a clean environment;
  pip check, metadata/native versions, ABI/protocol and CLI checks pass.
- Installed wheels generate and compile a Python Adder DUT; direct XData access,
  128-bit arithmetic and carry regression checks pass against native ABI 3.
- Native installation exports libxspcomm.so.3 with SONAME 3. Native and wheel TLM
  SDK paths resolve, and SWIG wrapper generation passes. VCS commands were only
  dry-run because the simulator toolchain is unavailable.
- Workflow lint introduces no diagnostics relative to the existing baseline.

BREAKING CHANGE: native clients and generated DUT extensions must rebuild
against xcomm ABI 3. Picker now selects xspcomm 0.3; formal releases require a
published compatible xcomm release rather than a development preview.
Pin development builds to xcomm e64d862, which exposes XCoveragePoint,
bin.point_id and explicit engine acquisition of XClock. Keep native ABI 3
relative to master's ABI 2 and require coverage descriptor protocol 5.

Raise the minimum preview and the Development CI preview build version to
0.3.0.dev2 so older coverage descriptors and clock APIs cannot satisfy the
updated dependency. Keep stable release selection within the xcomm 0.3 series.

Extend clean-wheel verification to check the renamed descriptors and native
clock ownership. Extend the generated Python Adder regression to reject DUT
Step, raw/half stepping and competing engines while owned, exercise native
cycle triggers and coverage counters, and verify manual stepping after release.
Retain the existing direct XData and 128-bit arithmetic checks.

Document the descriptor migration, ownership scope and phase-preserving
release. Generated DUT Step already delegates to XClock, so the native guard
protects it without another stepping implementation.
@Makiras Makiras added enhancement New feature or request release:minor Minor release after the PR merges labels Oct 12, 2026
Pin development builds to xcomm c39db66, including typed bit-vector
expressions and live-program collection. Align the Python requirement
with the planned 1.x release and build CI previews as 1.0.0.dev0 while
retaining native ABI 3 and coverage descriptor protocol 5.

Extend installed-wheel verification to exercise 128-bit arithmetic and
expression collection. Condense the maintainer guide to version and
dependency alignment, local validation, release sequencing and recovery.

Validation: 28 native tests, 11 release-policy tests, generated Python
Adder integration, and clean installation and verification of both wheels.
@Makiras
Makiras merged commit 7499f79 into master Oct 22, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request release:minor Minor release after the PR merges

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants