Lattice-Traversing Design Space Exploration Framework

A High Level Synthesis (HLS) Design Space Exploration (DSE) framework, developed by me under the supervision of Prof. Laura Pozzi and Dr. Giovanni Ansaloni form Università della Svizzera italiana (USI). The framework implements a local search exploration strategy able to smartly navigate the design space by reshaping it into a unitary lattice rapresentation.

The lattice-traversing exploration, starting from an initial set of Pareto-solutions, obtained after an initial sampling phase, navigates the n-dimensional lattice and is able to effectively visit the design space by favouring changes among directives with a lower variance with respect to directives with a higher one. By locally exploring only Pareto-neighbours the algorithm is able to rapidly approximate the real Pareto-frontier minimising the number of synthesis.

The proposed framework is independent both from the HLS tools and to the directives chosen for the exploration.

For more details about the Lattice-Traversing Design Space Exploration methodology you can refer to:

2018 Lattice-Traversing Design Space Exploration for High Level Synthesis
L. Ferretti, G. Ansaloni, and L. Pozzi. Lattice-Traversing Design Space Exploration for High Level Synthesis. IEEE International Conference on Computer Design, 2018.

How to run the framework

To run the framework you have to download the functions implementing the Lattice-Traversing DSE methodology included in the file, and a dataset like the ones in the file.


In order to test the Lattice-Traversing DSE methodology, we have used 5 different benchmarks. We have selected 5 different functions from the CHStone benchmark suite. For each of these functions we have chosen a subset of directives to explore with an HLS tool and we have performed an exhaustive exploration over the defined design space. The datasets have been generated synthesizing the functions with Vivado HLS. Then, we have used the results of the exhaustive exploration and the configurations used to generate the different hardware implementations to test our framework. The functions selected are:

  • ChenIDCt from JPEG benchmark.
  • encode from ADPCM benchmark.
  • decode from ADPCM benchmark.
  • Autocorrelation from GSM benchmark.
  • Reflection_coefficients from GSM benchmark.

The results of the exhaustive explorations are stored in files named <benchmark_name>.db.

Python code

The framework has been entirely developed in Python 2.7 and, in order to use it, run the code in requires the following modules:

  • lattice_data: this module contains the Lattice class. The Lattice class must be defined to describes the design space and it contains the information related to the explored configurations;
  • lattice_synthesis: this module contains classes Synthesiser and FakeSynthesiser. These are used to invoke Vivado HLS and generate the synthesis data given an input configuration. Fake synthesiser retrieve data from the exhaustive exploration already performed;
  • lattice_ds_point: this module contains class DSpoint. Is used to define a point in the design space with all its attributes;
  • lattice_sphere_tree: this module contains the Sphere Tree class. This class defines the sphere used to perform the local search in the neighbourhood of the configuration to explore;
  • lattice_utils: this module contains some helper function, metrics, and support functions, used across different modules;
  • datasets: this module contains the class Datasets and the different datasets' name, types and function used to retrieve the data from the exploration datasets;


Lorenzo Ferretti, Ph.D. student at Università della Svizzera italiana (USI).
You can find more information about my work here and for any question you can contact me at