Skip to content

Releases

OpenCompact v0.3.1

Choose a tag to compare

@rustyqt rustyqt released this 04 Nov 01:51
7956d5a

OpenCompact v0.3.1

A patch release of OpenCompact, the CCSDS 123.0-B-2 hyperspectral and multispectral image compression core, at
technology readiness level 3 (fully verified by simulation; not tested on hardware, no flight heritage). It adds tools
only: the HDL, the testbenches, the compile order and the Open Logic pin are those of v0.3.0.

Changes since v0.3.0

  • Added: a resource and throughput estimate for any configuration (tools/estimate/, MIT licence), used by the
    Open Space Composer:

    • ocp_throughput.mjs: header length, image period in clock cycles and maximum length of a compressed image (the
      throughput model of the Composer, moved into the repository);
    • ocp_resources.mjs: the memories of ocp_core with depth, data width and stored SECDED codeword width and their
      bits, and LUT, flip-flops and clock frequency for PolarFire;
    • ocp_models.mjs: the fitted models, generated by tools/ocp_estimate_fit.py from the Libero calibration data
      (tools/tests/calibration_polarfire.json).

    tools/ocp_estimate.py is the same estimate in Python. Stable functions: headerBytes, imagePeriod,
    maxImageBytes, estimateResources.

  • Changed: user guide section 8.2 gives the resources and clock frequencies measured with the RTL of v0.3.0 and the
    estimate with its accuracy. The roadmap lists the predictor at the widest generic corner (c11) as an open item.

  • Changed: the scripts take the tool paths from the environment or the PATH only (VUNIT_MODELSIM_PATH,
    OCP_LIBERO, OCP_OOC_OUT or the corresponding options).

  • The CHANGELOG version rule now states that a release adding tools without changing the HDL, the testbenches or the
    interfaces is a patch release.

Designs using v0.3.0 need no change: the core is identical.

Accuracy of the estimate

Memories: exact for the generics. They equal the memories of the GHDL netlist of 126 configurations
(lint/memory_check.py, in the CI). The throughput model is exact as well: the predictor testbench checks it cycle by
cycle.

LUT, flip-flops and clock frequency for a PolarFire MPF100T (STD) with Libero SoC 2025.2 and a 32-bit interface: linear
models fitted to 61 synthesis runs and 16 place and route runs. Five configurations of the user guide table are kept
out of the fit as a check.

Quantity All runs (RMS, max) Check set (RMS, max)
LUT 7.5 %, 30.6 % (c11) 7.0 %, 13.5 %
Flip-flops 3.7 %, 14.4 % 8.4 %, 14.4 %
Clock frequency 4.4 %, 12.8 % 2.5 %, 3.7 %

LUT for the 11 configurations of the user guide table: RMS 11.9 %, max 30.6 % (c11); for the ten others RMS 7.8 %,
max 13.5 %.

Verification

  • git diff v0.3.0 v0.3.1 -- hdl tb compile_order.txt open-logic is empty: the core, the testbenches and the Open Logic
    pin are those of v0.3.0. The simulation evidence of v0.3.0 therefore applies unchanged: QuestaSim 613 of 613 in the
    optimised run and with code coverage, GHDL 613 of 613, CCSDS test data selection 1275 of 1275, AMD Vivado simulator
    167 of 167 top levels, and the code coverage of v0.3.0.
  • GHDL 6.0.0: the full regression in the CI of the release.
  • The checks of the estimate in the CI:
    • lint/memory_check.py;
    • python tools/ocp_estimate_fit.py --check and python tools/ocp_estimate_golden.py --check;
    • node --test (19 tests: the features, estimates and notes of every case are equal in Python and JavaScript);
    • the TypeScript 7.0.2 strict check of the JSDoc types;
    • python -m pytest tools/tests.
  • VSG, markdownlint, compliance matrix and register map checks are clean.

Dependencies

  • Open Logic 4.7.0-ft.9 (open-space-hdl/open-logic-ft, submodule open-logic), unchanged.
  • VHDL-2008; verified with GHDL 6.0.0, QuestaSim 2024.3 and the AMD Vivado simulator 2025.2. The estimate needs Python 3
    or a browser (ES modules); its checks use Node.js 22 and TypeScript 7.0.2.

Known issues and open items

  • c11 (D = 32, Omega = 19, P = 15, R = 64) needs 81160 LUTs on PolarFire and reaches 75 MHz; area and clock frequency
    of the predictor at this corner are open (roadmap).
  • TRL 4 needs the hardware test of a reference system that contains the core (roadmap).

OpenCompact v0.3.0

Choose a tag to compare

@rustyqt rustyqt released this 27 Oct 15:37
c238942

OpenCompact v0.3.0

A minor release of OpenCompact, the CCSDS 123.0-B-2 hyperspectral and multispectral image compression core, at
technology readiness level 3 (fully verified by simulation; not tested on hardware, no flight heritage). It is the
version of the first hardware test of a reference system of the family (spfi_compress), the path to TRL 4.

Changes since v0.2.0

  • Added: runtime parameters (RuntimeParams_g, default false, only with RuntimeConfig_g). Every image takes its
    own user-defined data, sub-frame interleaving depth M (BI order), weight update parameters (log2 t_inc, vmin, vmax)
    and entropy coder parameters (Umax, gamma0, gamma* and K of the sample-adaptive coder; Umax, gamma0 and gamma* of
    the hybrid coder; r of the block-adaptive coder). They come from new ports of ocp_core (Cfg_UserData to
    Cfg_RefInterval, Act_UserData to Act_RefInterval) or, in ocp_channel, from new AXI4-Lite registers of
    ocp_mib (NEXT_SAMPLES, NEXT_ORDER, NEXT_WEIGHTS, NEXT_ADAPTIVE, NEXT_BLOCK) committed with the dimensions. The
    header of every image carries its parameters. With the generic false the compressed images, the throughput and the
    registers of the GHDL netlist are those of v0.2.0. User guide section 4.5.
  • Added: register map version 3 (ID 0x4F435003): NEXT_SAMPLES to NEXT_BLOCK and GENERICS.RUNTIME_PARAMS; the
    existing registers keep their offsets and fields.
  • Added: a decoder in the reference model (ocp_model.decompress, tools/ocp_decompress.py, user guide section
    11). It decodes a compressed image of any configuration of CCSDS 123.0-B-2 in Python, without other software, and
    reconstructs what the CNES reference decoder reconstructs. It is the decompression step of the hardware test of a
    reference system.
  • Added: lint/xsim_smoke.py also elaborates and simulates the runtime parameter configurations (167 top levels).

Designs using v0.2.0 need no change: the new generic defaults to the previous behaviour, the new ports have defaults or
are unused with it, and the register map only adds registers.

Verification

  • The RTL of the release (hdl/*/src) and the Open Logic pin equal those of commit 8be9d95. The full QuestaSim
    regression and the CCSDS test data set ran on that commit. The commits after it add the decoder of the reference
    model (tools), tests from the coverage review, and documentation.
  • QuestaSim (Questa Pro Microchip Edition 2024.3, time resolution 1 fs): 613 tests, all passing in the optimised run
    without code coverage and with code coverage. 607 of them ran on 8be9d95. The 6 tests added by the coverage review,
    and the MIB test they extend, ran on the same RTL with the added tests.
  • Code coverage: statements 2388 / 2408 (99.2 %), branches 1076 / 1088 (98.9 %), conditions 224 / 254 (88.2 %),
    expressions 224 / 248 (90.3 %); every state of the state machines, and every transition except the recovery
    transition of the image-start sequencer. Every remaining miss is justified in docs/coverage.md.
  • GHDL 6.0.0: the full regression in the CI of the release, 613 of 613 tests.
  • CCSDS test data selection: 1275 of 1275 tests pass in GHDL.
  • AMD Vivado simulator 2025.2: 167 of 167 top levels of lint/xsim_smoke.py elaborate and run without an error.
  • Mutations of the runtime parameters: 54 of 54 make their test fail (51 of the first version, 3 for the paths found
    by the coverage review).
  • Decoder of the reference model:
    • all 6474 images of the CCSDS test data set decode correctly: the 4908 lossless ones exactly, the 1566
      near-lossless ones within the maximum error of every sample;
    • all 1566 near-lossless images decode bit for bit as with the CNES reference decoder;
    • 90 tests in the CI (python -m pytest tools/tests).
  • VSG, markdownlint, compliance matrix and register map checks are clean.

Dependencies

  • Open Logic 4.7.0-ft.9 (open-space-hdl/open-logic-ft, submodule open-logic).
  • VHDL-2008; verified with GHDL 6.0.0, QuestaSim 2024.3 and the AMD Vivado simulator 2025.2. The decoder needs Python
    3 only.

Known issues and open items

  • With RuntimeParams_g false the GHDL netlist keeps the registers of v0.2.0, and with RuntimeConfig_g false those
    of v0.1.1. The equal utilisation after FPGA synthesis is still to be confirmed with the out-of-context Vivado flow
    (lint/vivado_ooc.py, core verification report, section 5).
  • TRL 4 needs the hardware test of a reference system that contains the core (roadmap).

OpenCompact 0.2.0

Choose a tag to compare

@rustyqt rustyqt released this 25 Oct 13:19
e427de1

OpenCompact v0.2.0

A minor release of OpenCompact, the CCSDS 123.0-B-2 hyperspectral and multispectral image compression core, at
technology readiness level 3 (fully verified by simulation; not tested on hardware, no flight heritage).

Changes since v0.1.1

  • Added: runtime configuration (RuntimeConfig_g, default false). The image dimensions NX, NY, NZ (from 1 up to
    the maxima of the generics) and the band-independent absolute and relative error limit values can change from image
    to image, through new configuration ports of ocp_core (Cfg_*, Cfg_Taken, Act_*) or, in ocp_channel,
    through new AXI4-Lite registers of ocp_mib (CONTROL, STATUS, NEXT_X, NEXT_Y, NEXT_Z, NEXT_LIMITS). A COMMIT checks
    the values and takes them at the start of the next image; values outside their ranges are taken as the nearest valid
    values. With the generic false the compressed images and the throughput are unchanged, and the logic added for the
    runtime configuration has no loads. User guide section 4.4.
  • Added: LIMITS register and GENERICS.RUNTIME_CONFIG; register map version 2 (ID 0x4F435002).
  • Added: lint/xsim_smoke.py also elaborates and simulates the runtime configurations (161 top levels).
  • Fixed: throughput model (tools/ocp_throughput.py): the tail of the hybrid coder holds back the next image once
    the output FIFO of the predictor is full; the compressed images were not affected.
  • Changed: the test end compares the alert counters of every level and ends the simulation with a failure,
    whatever the stop limits of the test.
  • Changed: Open Logic 4.7.0-ft.9 (from 4.7.0-ft.6); no port or generic of OpenCompact changes.

Designs using v0.1.1 need no change: the new generic defaults to the previous behaviour, the new ports have defaults
or are unused with it, and the register map only adds registers (the existing ones keep their offsets and fields).

Verification

  • QuestaSim (Questa Pro Microchip Edition 2024.3, time resolution 1 fs), full regression of 565 tests: 565 of 565
    pass in the optimised run without code coverage and with code coverage. The RTL of the release equals that of the
    commit of the full regression; the tests added by the coverage review ran again in both modes.
  • Code coverage: statements 2054 / 2073 (99.1 %), branches 923 / 934 (98.8 %), conditions 202 / 231 (87.4 %),
    expressions 186 / 193 (96.4 %), every state of the state machines and every transition except the recovery
    transition of the image-start sequencer; every remaining miss is justified in docs/coverage.md.
  • GHDL 6.0.0: the full regression of 565 tests in the CI.
  • CCSDS test data selection: 1275 of 1275 tests pass in GHDL.
  • AMD Vivado simulator 2025.2: 161 of 161 top levels of lint/xsim_smoke.py elaborate and run without an error.
  • Mutations of the runtime configuration: 10 of 10 make their test fail; the queue-full condition of the
    configuration queue and its hybrid term are each caught by the queue test (TC-CO-58).
  • VSG, markdownlint, compliance matrix and register map checks are clean.

Dependencies

  • Open Logic 4.7.0-ft.9 (open-space-hdl/open-logic-ft, submodule open-logic).
  • VHDL-2008; verified with GHDL 6.0.0, QuestaSim 2024.3 and the AMD Vivado simulator 2025.2.

Known issues and open items

  • With RuntimeConfig_g false the GHDL netlist differs from v0.1.1 only by logic without loads; the equal
    utilisation after FPGA synthesis is to be confirmed with the out-of-context Vivado flow (lint/vivado_ooc.py c01
    before and after; core verification report, section 5).

OpenCompact v0.1.1

Choose a tag to compare

@rustyqt rustyqt released this 19 Oct 05:20
6521538

OpenCompact v0.1.1

A patch release of OpenCompact, the CCSDS 123.0-B-2 hyperspectral and multispectral image compression core, at
technology readiness level 3 (fully verified by simulation; not tested on hardware, no flight heritage).

Changes since v0.1.0

  • Fixed: the AMD Vivado simulator (xsim) stopped at time 0 with "Index 2 out of bound 1 downto 0" in
    ocp_predictor. The array fields of the predictor items now use fully constrained array types: xsim gave the
    element of an index-constrained record field the constraint of another field when the record was accessed through
    an alias of an array element. The behaviour is unchanged in every simulator.
  • Changed: QuestaSim runs with a time resolution of 1 fs, as GHDL.
  • Added: lint/xsim_smoke.py, a smoke test that elaborates and simulates every top level of the synthesis check
    in xsim (151 top levels).
  • Added: CHANGELOG.md.

No change of ports, generics, stream formats or the register map (ID 0x4F435001, version 1); designs using v0.1.0
need no change.

Verification

  • QuestaSim (Questa Pro Microchip Edition 2024.3, time resolution 1 fs), full regression of 499 tests on the release
    head: 499 of 499 pass in the optimised run without code coverage, 499 of 499 with code coverage.
  • Code coverage: statements 1741 / 1759 (99.0 %), branches 749 / 760 (98.6 %), conditions 181 / 207 (87.4 %),
    expressions 136 / 142 (95.8 %), every state and transition of the state machines; every remaining miss is justified
    in docs/coverage.md.
  • GHDL 6.0.0: the full regression of 499 tests in the CI.
  • CCSDS test data selection: 1275 of 1275 tests pass in GHDL.
  • AMD Vivado simulator 2025.2: 151 of 151 top levels of lint/xsim_smoke.py elaborate and run without an error.
  • VSG, markdownlint, compliance matrix and register map checks are clean.

Dependencies

  • Open Logic 4.7.0-ft.6 (open-space-hdl/open-logic-ft, submodule open-logic).
  • VHDL-2008; verified with GHDL 6.0.0, QuestaSim 2024.3 and the AMD Vivado simulator 2025.2.

Known issues

None. The xsim issue of v0.1.0 is fixed in this release.

OpenCompact v0.1.0

Choose a tag to compare

@rustyqt rustyqt released this 18 Oct 11:14
072a5a8

First release of OpenCompact. It implements lossless and near-lossless compression of multispectral and hyperspectral images according to CCSDS 123.0-B-2.

Technology readiness level 3: the core is verified by simulation; no hardware test yet.

Verification

  • GHDL: full regression in the CI of this commit (GitHub Actions run 39100071941).
  • QuestaSim: the full regression of 499 tests passed on 2026-10-18 on commit 039a86e with and without code coverage; the design sources of this commit are identical to it. The run of the CCSDS test data set (1275 tests) passed as well.
  • Code coverage and the justification of every remaining miss: docs/coverage.md.

Known issue

  • The AMD Vivado simulator (xsim 2025.2) stops at time 0 in ocp_predictor with "Index 2 out of bound 1 downto 0" (seen for the configuration c26 and in the reference system spfi_compress_encrypt). The cause is a defect of that simulator: through an alias of an element of an array of records, it gives the elements of a record field that is an index-constrained unconstrained array the constraint of another field. GHDL, QuestaSim and synthesis are not affected. A behaviour-neutral workaround (fully constrained array types) is in preparation for the next release.

Dependencies

Documentation

The user guide (docs/user_guide.md) describes the interfaces, the programming sequence, the integration constraints and the conformance to the standard, including the clauses that are not or only partly implemented.