Repository navigation
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).