Repository navigation
Releases
OpenCompact v0.3.1
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 ofocp_corewith 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 bytools/ocp_estimate_fit.pyfrom the Libero calibration data
(tools/tests/calibration_polarfire.json).
tools/ocp_estimate.pyis 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
PATHonly (VUNIT_MODELSIM_PATH,
OCP_LIBERO,OCP_OOC_OUTor 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-logicis 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 --checkandpython 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
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 withRuntimeConfig_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 ofocp_core(Cfg_UserDatato
Cfg_RefInterval,Act_UserDatatoAct_RefInterval) or, inocp_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.pyalso 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 indocs/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.pyelaborate 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).
- all 6474 images of the CCSDS test data set decode correctly: the 4908 lossless ones exactly, the 1566
- 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_gfalse the GHDL netlist keeps the registers of v0.2.0, and withRuntimeConfig_gfalse 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
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 ofocp_core(Cfg_*,Cfg_Taken,Act_*) or, inocp_channel,
through new AXI4-Lite registers ofocp_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.pyalso 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 indocs/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.pyelaborate 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_gfalse 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.pyc01
before and after; core verification report, section 5).
OpenCompact v0.1.1
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
indocs/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.pyelaborate 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
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_predictorwith "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
- Open Logic 4.7.0-ft.6 from open-space-hdl/open-logic-ft (submodule
open-logic). - UVVM for the testbenches (submodule
uvvm).
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.