diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e4abc553..34b4b30f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,17 @@ -## Next release +## 0.6.10 +- Improved `Logic.replicate(1)` and same-width `signExtend` to return the original signal, eliminating redundant replication modules and generated SystemVerilog (). - Improved simulation performance and generated outputs by avoiding module creation for four-state-safe operations involving `Const`s, zero shifts, and muxes with constant controls (). - Enforced that `Const` values cannot be changed through `put` or `inject`, including through another `Logic` driven by a `Const` (). - Added per-`Const` preferred radix control for generated literals, normalized `Const` names to reflect their displayed radix, and enhanced `LogicValue.toRadixString` to omit its width and radix decorator or digit separators (). +- Fixed a bug to prevent stack overflows when synthesizing designs with combinational loops (). - Improved generated SystemVerilog to collapse contiguous partial array and range assignments into packed slice assignments when safe (). -- Added per-direction configuration of explicit or implicit object and data types for generated SystemVerilog ports. Defaults preserve the existing `input logic`, `output logic`, and `inout wire` declarations (). +- Added per-direction configuration of explicit or implicit object and data types for generated SystemVerilog ports. Defaults preserve the existing `input logic`, `output logic`, and `inout wire` declarations (, ). +- Significantly enhanced ROHD DevTools with embedded and standalone VM connections, live hierarchy and signal inspection, filtering, snapshots and export, and cross-probe integration (). - Improved `Logic.getRange` and `slice` on filled `Const`s to return direct constants instead of constructing `BusSubset` modules (). - Improved generated SystemVerilog for swizzles to compact adjacent bit selections into legal slice expressions (). - Improved generated SystemVerilog to collapse a variety of intermediate `LogicArray`s and net buses (e.g. from bit-blasting, aggregate connections, `assignSubset`) into inline concatenations on their consuming connections, eliminating unnecessary intermediate declarations, `assign`s, and `net_connect`s when it is safe to do so (). +- Centralized synthesizer naming so output names in different contexts are more consistent (). ## 0.6.9 diff --git a/lib/src/utilities/config.dart b/lib/src/utilities/config.dart index ccc341a42..d2e567ea4 100644 --- a/lib/src/utilities/config.dart +++ b/lib/src/utilities/config.dart @@ -10,5 +10,5 @@ /// A utility for ROHD configuration file. class Config { /// The version of the ROHD framework. - static const String version = '0.6.9'; + static const String version = '0.6.10'; } diff --git a/pubspec.yaml b/pubspec.yaml index 01f1ac72f..42949a933 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: rohd -version: 0.6.9 +version: 0.6.10 description: The Rapid Open Hardware Development (ROHD) framework, a framework for describing and verifying hardware. homepage: https://intel.github.io/rohd-website repository: https://github.com/intel/rohd diff --git a/tool/prepare_release.sh b/tool/prepare_release.sh new file mode 100755 index 000000000..dfdb7bc61 --- /dev/null +++ b/tool/prepare_release.sh @@ -0,0 +1,109 @@ +#!/bin/bash + +# Copyright (C) 2026 Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause +# +# prepare_release.sh +# Prepare ROHD for a release without publishing it. +# +# Usage (from repo root): +# tool/prepare_release.sh +# +# 2026 July 30 +# Author: Max Korbel + +set -euo pipefail + +# Require an explicit stable semantic version so an accidental invocation cannot +# mutate release metadata with an incomplete or pre-release version. +if [[ $# -ne 1 || ! "$1" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Usage: $0 " >&2 + exit 2 +fi + +# Resolve all paths and source provenance before changing the working tree. +readonly VERSION="$1" +readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +readonly REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +readonly ARTIFACT_REPOSITORY="${ROHD_ARTIFACT_REPOSITORY:-https://github.com/intel/rohd.git}" +readonly ARTIFACT_BRANCH="${ROHD_ARTIFACT_BRANCH:-artifacts}" +readonly SOURCE_COMMIT="$(git -C "$REPO_ROOT" rev-parse HEAD)" +readonly TEMP_DIR="$(mktemp -d)" + +cleanup() { + rm -rf "$TEMP_DIR" +} +trap cleanup EXIT + +cd "$REPO_ROOT" + +# Fail before making release changes if earlier tests left temporary outputs. +tool/gh_actions/check_tmp_test.sh + +# Fetch the official artifact build without depending on a locally named remote. +echo "Fetching the ROHD DevTools build from $ARTIFACT_REPOSITORY ($ARTIFACT_BRANCH)..." +git fetch --quiet --no-tags "$ARTIFACT_REPOSITORY" "refs/heads/$ARTIFACT_BRANCH" +readonly ARTIFACT_COMMIT="$(git rev-parse FETCH_HEAD)" +readonly ARTIFACT_SOURCE_COMMIT="$(git rev-parse "$ARTIFACT_COMMIT^")" + +# The artifact workflow creates its commit directly on top of the source commit. +# Refuse a stale build rather than packaging DevTools from a different revision. +if [[ "$ARTIFACT_SOURCE_COMMIT" != "$SOURCE_COMMIT" ]]; then + echo "The DevTools artifact is stale." >&2 + echo " Current source: $SOURCE_COMMIT" >&2 + echo " Artifact source: $ARTIFACT_SOURCE_COMMIT" >&2 + echo "Wait for the artifact workflow for the current source commit to finish." >&2 + exit 1 +fi + +# Extract into a temporary directory and smoke-test before replacing the local +# release payload, leaving the existing build intact if validation fails. +git cat-file -e "$ARTIFACT_COMMIT:extension/devtools/build/index.html" +git cat-file -e "$ARTIFACT_COMMIT:extension/devtools/config.yaml" +git archive "$ARTIFACT_COMMIT" extension/devtools | tar -x -C "$TEMP_DIR" + +tool/gh_actions/devtool/test_devtools_install.sh \ + "$TEMP_DIR/extension/devtools" + +# Install the tested artifact. The web build is ignored by Git but included in +# the published package through the exception in .pubignore. +rm -rf extension/devtools/build +mkdir -p extension/devtools +cp -R "$TEMP_DIR/extension/devtools/build" extension/devtools/build +cp "$TEMP_DIR/extension/devtools/config.yaml" extension/devtools/config.yaml + +# Synchronize every framework version declaration and promote the pending +# changelog section to the requested release number. +sed -i "0,/^version: .*/s//version: $VERSION/" pubspec.yaml +sed -i \ + "0,/static const String version = '.*';/s//static const String version = '$VERSION';/" \ + lib/src/utilities/config.dart + +if grep -q "^## $VERSION$" CHANGELOG.md; then + : +elif grep -q '^## Next release$' CHANGELOG.md; then + sed -i "0,/^## Next release$/s//## $VERSION/" CHANGELOG.md +else + echo "CHANGELOG.md needs a '## Next release' or '## $VERSION' heading." >&2 + exit 1 +fi + +if ! grep -q "^version: $VERSION$" pubspec.yaml || + ! grep -q "static const String version = '$VERSION';" \ + lib/src/utilities/config.dart; then + echo "Failed to synchronize release version $VERSION." >&2 + exit 1 +fi + +# Run the same checks used for normal development and reject malformed diffs. +# Publishing remains a separate, intentionally manual operation. +tool/run_checks.sh +git diff --check + +cat <