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
Another potential application of DAGOperator is to act as an intermediate step for HLS compilers.
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
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):
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.