CIRCA: An Approximate Computing Tool Flow

  • Project group for Computer Engineering and Computer Science students
  • Course number: L.079.07005
  • Terms: WS 20/21 and SS 21


Many applications in various domains either exhibit an inherent error resilience (e.g., multimedia processing, where the human senses cannot perceive minor differences in sound or pixel values) or do not provide a golden result (e.g., recommender systems). The design paradigm Approximate Computing utilizes this fact to trade off computational accuracy against a target metric (e.g., runtime, hardware area, or energy consumption). For the trade-off, Approximate Computing - as the name suggests - applies approximations at all levels of the computing stack, from the software level (e.g., by skipping iterations of a loop) down to the circuit level (e.g., by removing gates or transistors from the circuitry). It is essential, however, to keep the quality above a user-defined threshold, since, otherwise, the result might become unuseable.

Approximate Computing can, for example, be used for reducing the computational demand of algorithms enabling them for embedded devices, in mobile applications to increase battery lifetime, or in video streaming applications to maintain a steady video stream even when the bandwidth drops, think of Netflix as an example that adjusts the video quality dynamically to the bandwidth available.

To give you an example of how Approximate Computing looks like in practice and why approximating a system is not a trivial task, see the figure below. The images are the output of a JPEG compression hardware, which was targeted by Approximate Computing. The image on the left-hand side shows the compressed output image generated with the original, precise system. The center image and the image on the right show examples of approximate outcomes. These two images have been produced with JPEG compression hardware that was subjected to approximations. Some bits have been truncated from the computations for the hardware generating the center image, resulting in an outcome beyond acceptable quality. The approximations of the hardware creating the image on the right-hand side have been applied more intelligently, making it almost indistinguishable from the reference (left image). For both the image in the middle and the image on the right-hand side, power savings of around 53% over the original implementation have been achieved, highlighting the benefits of Approximate Computing and the advantages of the approximation technique that generated the image on the right.

Goals of the project group

The overall goal of this project group is to develop an automated Approximate Computing tool flow for the synthesis of approximate circuits. Such a tool flow is needed since the manual generation of approximate circuits usually poses an intractable task. An automated tool flow allows for a more efficient exploration of the design space. Starting from a design description in C/C++ for a high-level synthesis (HLS) tool, the tool flow will synthesize the design for FPGAs as well as ASICs, and apply approximations at different steps of the flow. Approximation techniques, methods for evaluating the quality of the approximate circuits, and search or optimization algorithms have to be developed and implemented to this end. Finally, an evaluation of the applied concepts will be performed. Hence, to achieve the overall goal, the project group has to focus on two main challenges: 1. the design and implementation of the tool flow itself, and 2. the development and integration of methods employed by the tool flow.

  1. For the design and implementation of the tool flow, the project group uses the open-source framework CIRCA as a starting point. CIRCA has been developed in our working group and implements the basic functionality for the synthesis of approximate circuits. The project group will improve and extend CIRCA's functionality (e.g., by HLS support and different back-end tools to target FPGAs as well as ASICs). Requirements to the tool flow are, for example, the seamless integration of new tools and methods, the modularity of the individual steps within the flow, and the support of approximation and evaluation methods at any level of abstraction.
  2. For the development of new techniques and concepts employed by the tool flow, the project group looks into different approximation, analysis, and evaluation methods for approximate circuits on different levels of abstraction (e.g., HLS-level, RTL-level, or gate-level). Furthermore, search or optimization algorithms will be investigated, and concepts will be developed, which will characterize the input design regarding approximability. 

You can find more information in the presentation of the project group.


The milestones of the project groups are the following:

  • Familiarize with Approximate Computing, (high-level) circuit synthesis, and the CIRCA framework
  • Work on mini projects to gain hands-on experience
  • Form subgroups that focus on the different aspects of the project
  • Implement and evaluate state-of-the-art methods
  • Identify potential for improvements in the state-of-the-art
  • Develop and implement own concepts and approaches
  • Perform experiments and analyze the results
  • Document your project
  • Present and demonstrate your project
  • Complete the project group and add relevant skills to your CV

There will be no seminar in the project group. Instead, there will be a Studienleistung, i.e., mini projects that you will be working on at the beginning of the project group, which you have to pass. 

Also, do not forget to register for the course on Approximate Computing in the winter semester 2020/21 offered by Prof. Marco Platzner and Dr. Hassan Ghasemzadeh Mohammadi!


The project group focuses on software development and hardware development and covers many aspects of Computer Science and Computer Engineering. Therefore, the project group is suited for any student who is interested in the task.

It is not required but a plus, if you have experience in some of the following fields:

  • Python, C/C++, or Verilog,
  • the development of complex software,
  • (approximate) hardware design,
  • the synthesis process,
  • HLS tools, or
  • Approximate Computing.

What you will gain

  • Experience in the hot topic of research: Approximate Computing in all its facets
  • Practical experience in conducting a large software project
  • Expertise in (approximate) hardware design
  • Detailed knowledge about the (high-level) circuit synthesis process
  • Skills in presenting, project management, and organization
  • And many things more

Further information

If you need further information, do not hesitate to contact Linus Witschen.