\begin{figure}\leavevmode\center
\includegraphics[width=.8\linewidth]{architecture-csg}
\caption{\label{archi-csg} software architecture for embedded system generation}
%\end{figure}\begin{figure}\leavevmode\center
\mbox{}\vspace*{1ex}\\
\includegraphics[width=.8\linewidth]{architecture-hls}
\caption{\label{archi-hls} software architecture of HLS}
%\end{figure}\begin{figure}\leavevmode\center
\mbox{}\vspace*{1ex}\\
\includegraphics[width=.8\linewidth]{architecture-hpc}
\caption{\label{archi-hpc} software architecture of HPC}
\end{figure}
%
The figures~\ref{archi-csg}, \ref{archi-hls} and \ref{archi-hpc}
summarize the software architecture of COACH framework we plan to develop.
In figures, the dotted boxes are the softwares or formats that COACH
has to provide or define.
\vspace*{.75ex}\par
For the system genration presented figure~\ref{archi-csg}, the conductor is
the program \verb!CSG! (COACH System Generator). Its inputs are a process
network and miscellaneaous generation parameters.
The main parameters are the template of the target hardware architecture
with its instanciation parameters, the hardware/software mapping of the
tasks and the FPGA device.
From these inputs \verb!CSG! can generate the system (software \& hardware) as
a SystemC simulator to prototype and explore quickly the system design
space and/or as a bitstream directly downloadable on the FPGA device.
For processing, \verb+CSG+ requires 1) a hardware template found into the
architecture library, 2) a micro-kernel, it chooses among
two in the micro kernel library, 3) the system hardware components that
are taken from the SystemC model library for the simulator and from the
VHDL component library for the FPGA bitstream.  
For generating the coprocessor of a task mapped as harware, \verb+CSG+
controls the HLS tools described below.
\\
To proove CSG that COACH is open and CSG is really configurable, COACH will
basically support 3 architecture template (the COACH template based on a
MIPS processors and a VCI token ring, the Altera template based on the NIOS
and AVALON bus, the Xilinx template based on the MICROBLAZE and OPB bus)
and 2 operating systems (DNA/OS and MUTEK). Furthermore, thus is enforced
by the \mustbecompleted{FIXME:zied} contribution that consists in
implementing an other hardware target.
\\
Finally, it is important to notice that this work is a strong
enhancement of the SocLib software.
\vspace*{.75ex}\par
The software architecture for HLS is presented figure~\ref{archi-hls}.
The input is a task of the process network. The HLS tools do not work
directly on the C++ task description but on an internal format called
\xcoach generated by a the GNU C compiler (GCC) tainted by a COACH
driver. This allows on the one hand to insure that all the tools will
accept the same C++ description and on the other hand to make possible
to chain them. The front-end tools read a \xcoach description and writes
a new \xcoach description that exibits possible parallelism or implement
specific instruction for ASIP. The back-end tools read a \xcoach
description and generates a \xcoach+ description that is a \xcoach
description anotated with hardware information to let work the VHDL systemC
drivers. Furthermore, the back-end tools uses a macro-cell library.
\vspace*{.75ex}\par
The software architecture for HPC is presented figure~\ref{archi-hpc}.
\mustbecompleted{FIXME Miss HPC description\\\ldots\\\ldots\\\ldots\\\ldots.}
\vspace*{.75ex}\par
The project is splitted into 8 tasks numbered from 0 to 7.
The first task (task 0) is the project management, the last one (task 7) is
the dissemination the other task are listed below:
\begin{enumerate}
\item\textbf{\backbone:} This task groups the critical issues of the
	project. They consist of the definition of COACH inputs, the \xcoach
	format that is mandatory to develop the HLS tools and the HLS drivers
	that are mandatory for testing the HLS tools. 
\item\textbf{system generation:} This task groups \verb+CSG+s and the components
	required to generate the system simulator and bitstream except the HLS
	tools that belong to the task 3 and 4. These components are the
	operating systems, the VHDL description and SystemC models of the
	target hardware achitectures.
\item\textbf{HLS front-end:} This task groups the 4 HLS front-head. Those
	are a tool that exhibits fine grain parallelism using polyedric
	transformation, a tool that exhibits coarse grain parallelism,
	a tool that minimizes the memory usage and a tool that implement ASIP.
\item\textbf{HLS back-end:} This task groups two HLS back-end tool, one
	for treating the data oriented description, the second for treating the
	control dominated description. This task contains also a the
	development of a frequency adaptator that will allow the coprocessor
	to respect the processor \& bus frequency.
\item\textbf{Communication software PC/FPGA-SoC:} This task groups all what is mandatorythe critical issues of the
\item\textbf{Demonstrator:} This task groups the demostrators of the COACH project.
\end{enumerate}
This task division offers the avantage that tasks except for the "\backbone" and
"demonstrator" task are almost independent at the development level as shown
figure~\ref{dependence-dev}. The dependence at the validation level is
presented figure~\ref{dependence-test}. It is more critical but the
redundance in the tasks "HLS front-end", "HLS back-end" and "demonstrators"
reduces this inter-dependence.\\
So if the first phasis of "\backbone" task is sucessfully conduced, most of the
projet delivrables will be carry through, even if some delivrable are lated
or missing.
\begin{figure}\leavevmode\center
\begin{minipage}[t]{.4\linewidth}
\includegraphics[width=1\linewidth]{dependence-dev}
\caption{\label{dependence-dev}Dependence graph at development level}
\end{minipage}\hfill\begin{minipage}[t]{.4\linewidth}
\includegraphics[width=1\linewidth]{dependence-test}
\caption{\label{dependence-test}Dependence graph at validation level}
\end{minipage}
\end{figure}
