hocl icon indicating copy to clipboard operation
hocl copied to clipboard

HoCL (Higher Order dataflow Coordination Language) is a language for describing dataflow networks and generating tool-specific descriptions.

HoCL

HoCL (Higher Order dataflow Coordination Language) is a language for describing dataflow process networks and generating tool-specific descriptions.

HoCL

  • can describe hierarchical and/or parameterized graphs
  • support two styles of description : structural and functional
  • use polymorphic type inference to check graphs
  • supports the notion of higher order wiring functions for describing and encapsulating graph patterns
  • supports several dataflow semantics (SDF, PSDF, ..) by means of annotations

The generated code is independent of the target implementation platform (software, hardware, mixed, ..). Targeting is done using dedicated backends. The current version comes is equipped with five backends :

  • a DOT backend for visualisation of the generated networks
  • a SystemC backend for simulation
  • a PREESM backend for implementing the described dataflow applications on many/multi-core embedded platforms
  • a DIF backend for interfacing to various dataflow analysis tools
  • an XDF backend for interfacing to CAL-based design flows

HoCL is a joint project between the Dream and Vaader research groups.

DOCUMENTATION

A short tutorial on the language.

A minimal user manual describing how to invoke the compiler.

A gentle introduction to the concepts of functional graph description.

A BNF description of the syntax, in pdf and html

The formal semantics of the language.

A short video illustrating the use of the toplevel interpreter.

INSTALLATION

Pre-requisites :

Download the source tree (git clone https://github.com/jserot/hocl).

From the root of the source tree :

  1. ./configure [options] (./configure --help for the list of options)
  2. make
  3. make install

To try examples :

  1. go the directory containing the example (e.g. cd examples/working/simple/basic)
  2. type make dot to generate the .dot representation (make will also display it)
  3. type make systemc to invoke the SystemC backend (code will be generated in sub-directory systemc); to test the generated code: cd systemc; make
  4. type make preesm to invoke the PREESM backend (code will be generated in sub-directory preesm)