Skip to content

OpenCompact 0.2.0

Choose a tag to compare

@rustyqt rustyqt released this 25 Oct 13:19
· 48 commits to main since this release
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).