PlatformsFaststream SiliconFaststream RadioFaststream VisionConnected EdgeFaststream SecureMobility & Rail
ProductsSemiconductor IPWireless & RANEdge & GatewaysTracking & IdentificationSoftware & FrameworksConnected Systems
Technology5G protocol stackWireless and RF architectureBaseband and low PHYForward error correctionControl and data planeHigh-speed interfacesFirmware and bootSilicon root of trustSoftware-defined vehicleAutomotive OTAFunctional safety
AIAI Engineering ServicesEdge AI & Embedded MLComputer Vision EngineeringSensor Fusion & PerceptionAI Silicon & AccelerationMLOps for DevicesAI Visual InspectionPredictive MaintenanceDriver MonitoringVideo Analytics & Safety
SolutionsSemiconductorIndustrial AIConnected ProductsAsset TrackingBluetooth AoA RTLSWearable TrackingAutomotive & MobilitySmart InfrastructureSecure IdentityWireless & SatellitePrivate 5GSmart WashroomsFuel ManagementSmart BuildingsWorker SafetyEnergy MonitoringSmart AgricultureSmart CityAutonomous PlatformsAssembly AutomationLiDAR Rail SafetyHardware Wallet
IndustriesSemiconductorTelecommunicationsIndustrial & ManufacturingAutomotive & MobilityTransportation & RailAerospace & DefenceHealthcare & MedicalEnergy & UtilitiesOil & GasRetailConsumer ElectronicsMedia & EntertainmentSmart Infrastructure & IoT
ServicesSystem Integration overviewASIC & SoC DesignRTL to GDSIIVerification methodologyDFT and silicon testLow-power designMixed-signal integrationDesign enablementFPGA DesignFPGA-to-ASIC ConversionAnalog, Mixed-Signal & RFHardware & High-Speed PCBEmbedded SoftwareCloud, OTA & Device ManagementManufacturing TransitionHow we engage
CompanyAbout FaststreamEngineering ExcellenceLeadership & OrganisationHow We EngageQuality & ComplianceStandards & EcosystemPartners & EcosystemTrust CentreLocations & DeliveryNewsroom & MediaCareersCase StudiesKnowledge CenterWhite PapersGlossaryNewsletterResources & Support
ContactStart a projectHow we engage
Talk to us
IMAGE PROCESSING

A high-throughput JPEG decoder in RTL, modelled first in C++.

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.

DomainJPEG decode IP core
PlatformsFaststream Vision · Silicon
ScopeC++ model, Verilog RTL and verification
Binding constraintHigh throughput, real-time
DisclosureProperty level; customer not named
CONTEXT

Where this started.

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.

CHALLENGES

4 problems, named.

Stated before they had answers.

01

Real files, not a fixed configuration

The decoder had to handle different chroma subsampling modes and the quantisation and Huffman tables carried inside each image.

02

High throughput as a first constraint

The design targets real-time processing, so the pipeline had to stream, not stall on the entropy stage.

03

Entropy decode is inherently serial

Huffman decoding resists parallelism, and it sits upstream of everything, so it sets the pace of the whole decoder.

04

A reference to verify against

Correctness across varied files needed a golden model, built in C++, before the RTL could be trusted.

ARCHITECTURE

How the system was built.

AXI-STREAM ENCODED → DECODE PIPELINE → AXI-STREAM RGBPARSE & ENTROPYJPEG parserFormat + DHT/DQTHuffman decodeCoded symbols, MCUsZig-zag reorder8×8 blocksRECONSTRUCTDequantiserApply DQTInverse DCT8×8 IDCTBlock assemblyChroma upsampleOUTPUTYCbCr → RGBColour spaceAXI-Stream outDecoded RGB imageConfigurableDQT / DHT per image

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.

CONTRIBUTION

What Faststream did.

The specific scope, rather than a capability list.

WHAT WAS HARD

The parts that consumed the schedule.

Written out because a reader facing the same programme gets more from this than from a summary of what went well.

01

Entropy decode paces the pipeline

Huffman decoding is serial and sits upstream of everything, so throughput is won or lost there, not in the arithmetic stages.

02

Adapting to each file

Reading the DQT and DHT tables from every image, and supporting several chroma modes, meant the decoder configures itself rather than assuming a format.

03

Streaming a block-based algorithm

JPEG works in 8×8 blocks and minimum coded units; keeping those flowing over AXI-Stream without stalls took care at every stage boundary.

04

A model worth verifying against

The C++ reference had to be faithful enough that matching it actually proved the RTL correct across varied files.

OUTCOME

What resulted.

A high-throughput JPEG decoder in RTL

A streaming decode pipeline from AXI-Stream encoded input to AXI-Stream RGB output.

Verified against a C++ model

The Verilog RTL checked against a faithful reference across varied, real files.

Configurable per image

Support for different chroma subsampling modes and image-carried DQT and DHT tables.

A reusable decode core

A parameterised decoder reusable across formats and platforms rather than tuned to one file type.

Confidentiality

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.

CAPABILITY USED

What this was built from.

Every item links to its own page.

WHERE THIS APPLIES

Industries this serves.

COMMON QUESTIONS

Questions this programme gets asked.

01

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.

02

What limits JPEG decode throughput?

Huffman entropy decoding, which is inherently serial and sits upstream of the arithmetic stages, so it paces the whole pipeline.

03

What are DQT and DHT?

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.

04

Is chroma subsampling handled?

Yes — the decoder supports the standard's different chroma subsampling modes, upsampling during block assembly before colour conversion.

KEEP READING

Related work.

BUILD WITH FASTSTREAM

Bring us the difficult part.

Tell us the format, the throughput target and the platform. Codec datapaths that stream at line rate are core Faststream work.