Why model a JPEG decoder in C++ first?
Because the C++ model is the reference the RTL is verified against, and the place the design's behaviour on real, varied files is pinned down before the Verilog is trusted.
Decoding a JPEG sounds solved until it has to happen at line rate, in hardware, on arbitrary files. The standard allows a range of chroma subsampling modes and carries its own quantisation and Huffman tables in every image, so a real decoder cannot assume a fixed configuration — it has to read the file and adapt.
The programme built a high-throughput JPEG decoder as a streaming pipeline: parse the format, Huffman-decode the entropy-coded symbols, reorder, dequantise, inverse-transform, reassemble blocks with chroma upsampling, and convert back to RGB — all fed and drained over AXI-Stream.
It was modelled in C++ first. The model is not a formality: it is the reference the RTL is verified against, and the place where the design's behaviour on real, varied files is pinned down before a line of Verilog is trusted.
Stated before they had answers.
The decoder had to handle different chroma subsampling modes and the quantisation and Huffman tables carried inside each image.
The design targets real-time processing, so the pipeline had to stream, not stall on the entropy stage.
Huffman decoding resists parallelism, and it sits upstream of everything, so it sets the pace of the whole decoder.
Correctness across varied files needed a golden model, built in C++, before the RTL could be trusted.
An encoded image arrives over AXI-Stream. The format parser extracts the image configuration and the DHT/DQT tables; Huffman decoding recovers the coded symbols and minimum coded units; the stream is reordered, dequantised and inverse-transformed; blocks are reassembled with chroma upsampling; and colour-space conversion produces an RGB image out over AXI-Stream. Quantisation and Huffman tables are taken from the file, per image.
The specific scope, rather than a capability list.
Written out because a reader facing the same programme gets more from this than from a summary of what went well.
Huffman decoding is serial and sits upstream of everything, so throughput is won or lost there, not in the arithmetic stages.
Reading the DQT and DHT tables from every image, and supporting several chroma modes, meant the decoder configures itself rather than assuming a format.
JPEG works in 8×8 blocks and minimum coded units; keeping those flowing over AXI-Stream without stalls took care at every stage boundary.
The C++ reference had to be faithful enough that matching it actually proved the RTL correct across varied files.
A streaming decode pipeline from AXI-Stream encoded input to AXI-Stream RGB output.
The Verilog RTL checked against a faithful reference across varied, real files.
Support for different chroma subsampling modes and image-carried DQT and DHT tables.
A parameterised decoder reusable across formats and platforms rather than tuned to one file type.
Customer projects are presented at property, capability, outcome and integration level. Customer names, internal architecture and confidential deliverables are not disclosed. Where a figure would identify a customer or a design, it is omitted rather than approximated. More detail is available under a non-disclosure agreement, within the limits each customer has agreed.
Every item links to its own page.
Machine vision and edge inference.
SERVICEArchitecture, HDL, timing closure.
CAPABILITYModel-based verification.
SOLUTIONThe wider body of imaging work.
CASE STUDYThe encode side of the same chain.
CASE STUDYA moving-image codec in hardware.
Because the C++ model is the reference the RTL is verified against, and the place the design's behaviour on real, varied files is pinned down before the Verilog is trusted.
Huffman entropy decoding, which is inherently serial and sits upstream of the arithmetic stages, so it paces the whole pipeline.
The quantisation tables (DQT) and Huffman tables (DHT) carried inside each JPEG. A general decoder reads them per image rather than assuming a fixed configuration.
Yes — the decoder supports the standard's different chroma subsampling modes, upsampling during block assembly before colour conversion.
Tell us the format, the throughput target and the platform. Codec datapaths that stream at line rate are core Faststream work.