VLSI Programming 2018

(course module 2IMN35)


Author: Kees van Berkel,

  • part-time full professor of SAN (System Architecture and Networking),
  • within the department Computer Science and Mathematics of the Technical University Eindhoven,
  • email: c.h.v.berkel@tue.nl

Date: 2017 November 20

  • Lecturer: Kees van Berkel
  • Co-lecturer: Rudolf Mak
  • Lab assistents: Richard Verhoeven, Jeroen Redegeld

Learning objectives

  • to acquire insight in the description, design, analysis, and optimization of large-scale parallel computations;
  • to acquire insight in the (future) capabilities of VLSI, FPGAs and High-Performance Computers as implementation media of parallel computations;
  • to acquire skills in the design, analysis, and optimization of parallel computations and their implementation on FPGAs.

The course makes use of the StaccatoLab tools, the Python language, and Jupyter notebooks. See below.


Massive parallelism is needed to exploit the huge and ever increasing computational capabilities of Very Large Scale Integrated (VLSI) circuits, and High Performance Computers (HPC). In this course we:

  • focus on fine-grained parallelism (not on networks of cpu cores);
  • assume that parallelism is by design (not by compilation);
  • draw inspiration from audio processing, image processing, and radio astronomy (not general-purpose computing);
  • assume Field Programmable Arrays (FPGA) for practical implementation.

Major elements of the course:

  • dataflow as a programming model in which it is convenient to express a wide range of algorithms with a high degree of parallelism;
  • an execution model for dataflow graphs that supports implementations that are both highly parallel and resource efficient;
  • dataflow graph analysis techniques: deadlock, throughput, latencies, real-time behavior, resource usage, etc.;
  • dataflow graph transformations: pipelining, retiming, J-slow, unfolding, unrolling, folding, strength reduction, etc.;
  • systolic design, as a method to construct large-scale parallel (dataflow) programs;
  • audio processing: linear time-invariant systems, convolution, filters, fourier transforms, spectral analysis;
  • image processing: 2D-convolution, 2D filters, 2D fourier analysis, radio astronomy;
  • implementation of dataflow graphs on FPGAs.

Python and Jupyter

The dataflow programming language used by StaccatoLab is embedded in Python. The StaccatoLab tools are programmed in Python as well. Python is a widely used high-level programming language for general-purpose programming. Python features a dynamic type system and automatic memory management. It supports multiple programming paradigms, including object-oriented, imperative, functional and procedural, and has a large and comprehensive standard library.

A dataflow program is developed and documented as a Jupyter Notebook. So are the StaccatoLab tutorial, the StaccatoLab regression tests, the VLSI programming course notes, and the student assignments. StaccatoLab tools are invoked from the Jupyter notebook containing the dataflow program (graph). The Jupyter notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text.

PYNQ as experimentation and demo platform

The PYNQ-Z1 board is the hardware platform for the PYNQ open-source framework, and can be programmed in Jupyter Notebook using Python. The board features the ZYNQ XC7Z020 FPGA. For the 2018 edition of the course VLSI programming we are considering the PYNQ-Z1 FPGA board.


MSc assignments contributing to the StaccatoLab program

If you are interested in contributing to StaccatoLab by means of an MSc project, first read the background information below and then consult the MSc assignments contributing to the StaccatoLab program.

In [ ]: