Multifunction Printer Error Diffusion

Recommended for:

  • Device: Unknown

  • Quartus®: v17.1



This design is part of a multifunction printer pipeline, as described in FPGA Acceleration of Multifunction Printer Image Processing Using OpenCL™.

The error diffusion kernel takes a 600dpi letter-sized CMYK image and produces an equivalent image with every pixel half-toned. Such an output is the final stage of image processing inside a printer before it is send to the laser system. The actual algorithm implemented is a variant of the well-known Floyd Steinberg error diffusion algorithm with modified coefficients for arithmetic simplicity. See the white paper above for much more details on this algorithm, and the overall Multifunction Printer system.

This example design was designed for platforms with smaller FPGA devices, specifically the Cyclone® V SoC Development Kit.


  • Single work-item kernel
  • Sliding window design pattern


The design example provides source code for the OpenCL device (.cl) as well as the host application. For compiling the host application, the Linux* package includes a Makefile.

The following downloads are provided for this example:

The use of this design is governed by, and subject to, the terms and conditions of the hardware reference design license agreement.

Software and Hardware Requirements

This design example requires the following tools:

  • Intel® FPGA software v17.1 or later
  • Intel FPGA SDK for OpenCL v17.1 or later
  • On Linux: GNU Make and gcc
  • To compile to arm32 architecture, also get SoCEDS v17.1 or later.

To download the Intel design tools, visit the OpenCL download page. The requirements for the underlying operating system are the same as those of the Intel FPGA SDK for OpenCL.

OpenCL and the OpenCL logo are trademarks of Apple Inc. used by permission by Khronos.

* Product is based on a published Khronos Specification, and has passed the Khronos Conformance Testing Process. Current conformance status can be found at