FloPoCo's DAGOperator
Average3.svg, the dependency graph corresponding to Average3.dag

What it is

DAGOperator is a meta-operator that assembles other FloPoCo operators.

It inputs a text file describing a Directed Acyclic Graph (DAG) of FloPoCo components, and produces a single VHDL file linking all these components in a single pipeline.

The syntax of DAGOperator's input file is designed to ease the exploration of

Such changes may be explored by minor modifications to the input file. Then FloPoCo's DAGOperator will take care of defining intermediate signals, assembling the operators, and building a correct-by-construction pipeline (inserting all the required synchronization registers).

Another potential application of DAGOperator is to act as an intermediate step for HLS compilers.

Usage and syntax of the infile

First have a look at these two heavily commented example files:

Basic usage: ./flopoco DAGOperator infile=QuadraticSol.dag

Normal usage: ./flopoco dependencygraph=full verbose=2 frequency=400 DAGOperator infile=QuadraticSol.dag

A DAG file is composed of

Input, output and intermediate signals need not be typed: DAGOperator will use the types of the I/Os of the nodes to infer the types of the other signals (or complain in case of mismatch)

The formal syntax of DAG files can be found in the source file DAGOperator.cpp.

These examples are all floating-point. It is in principle possible to assemble integer or fixed-point operators as well, but some conversion Operators may be missing. Contact Florent de Dinechin in such cases.

In the flopoco command above, the dependencygraph=full produces an SVG file of the DAG graph. It may be useful to understand what is happening in the pipeline (click on the image the full-scale version):

Credits

Thanks to the developpers of the cpp-peglib single-file parser generator.

Luke Newman heroically wrote the first draft of DAGOperator during his research project at INSA-Lyon. He demonstrated that cpp-peglib was a good solution. He also implemented a syntax that was not generic enough, so eventually I'm afraid not a single line of his code remains. That's research code for you.

Some old timers may remember the FPPipeline Operator written by Bogdan Pasca a long time ago. It was good. DAGOperator is all better.