The Fossy user manual can be downloaded here.
FOSSY is currently available from CoSynth, please visit their website for further information.
We start with a C++ “Golden Model” as a base for further refinements. In the first step the model is broken into structural blocks. The different structural blocks are represented by SystemC modules and OSSS Shared Objects. OSSS Shared Objects model communication and synchronisation between parallel processes with a method based interface. Shared Objects can contain any user class and guarantee consistent access from any number of client processes.
This first structural description is called Application Layer Model. In this models we can use powerful features from C++, SystemC and OSSS:
The Application Layer Model contains the functionality, the logical structure and a first approximation of the timing behaviour of the system (profiling data from the software analysis can be annotated into the model).
The executable Application Layer Model is used to verify the correctness of the model and to explore implementations with different HW/SW partitionings and/or different communication structures.
The next step is the refinement to a Virtual Target Architecture Model. Implementation details like bus protocols, bitwidths of communication channels and processor types are added to the model. By specifying these details the model is now cycle-accurate.
Application Layer Model and Virtual Target Architecture Model are input for the FOSSY synthesis tool. FOSSY generates efficient synthesisable VHDL for the hardware parts and the communication structures as well as C++ code for the software and the bus drivers.
The output of FOSSY is combined with platform-specific configuration files and code extracted directly from the Virtual Target Architecture Model. Industrial standard 3rd party tools (e.g. the Xilinx XST) take the configuration, VHDL and C++ code and generate the bitstream for the implementation in a platform FPGA.