\Section{Introduction}

L'outil \cpu est un générateur de processeurs hautement paramétrable. A partir d'un fichier de paramètres, cet outil va générer du VHDL synthétisable.

L'outil \viewer permet d'avoir une vue graphique du processeur qui a été généré à partir du fichier de paramètres. 

\Section{Interface}

L'outil prend en entrée 2 informations :

\begin{description}
\item[name      : ] Nom du modèle ``Top Level''
\item[directory : ] Localisation du modèle
\end{description}

La description d'une instance d'un processeur est fortement hiérarchique. A chaque composant du modèle correspond un fichier de configurations. Leur nom est formé comme suit : {\bf [directory]/[name\_father]\_[name\_component].xml}. Le top level n'ayant pas de père, son fichier aura le nom {\bf [directory]/[name].xml}.

\subSection{Fichiers de configurations}
Nous allons maintenant voir la syntaxe du fichier de configurations. Il ne faut pas confondre le fichier de paramètres qui est utilisé par l'outil \cpu et le fichier de configurations généré par l'outil \cpu et utilisé par l'outil \viewer.

\verbatiminput{\dircommon/syntax.xml}

\begin{description}
\item[balise description : ] {\it obligatoire et unique} Balise englobante
\end{description}
\begin{description}
\item[balise comment : ] {\it obligatoire et unique} Contient un descriptif du composant décrit.
\end{description}
\begin{description}
\item[balise entity : ] {\it obligatoire et unique} Définition du composant courant
  \begin{description}
  \item[attribut name : ] nom d'instance du composant
  \item[attribut type : ] nom du composant
  \end{description}
\end{description}
\begin{description}
\item[balise generic : ] {\it nombre quelconque d'occurrence} Paramètre du composant
  \begin{description}
  \item[attribut name    : ] Nom du paramètre
  \item[attribut value   : ] Valeur actuelle du paramètre
  \item[attribut min     : ] Valeur minimal du paramètre
  \item[attribut max     : ] Valeur maximal du paramètre
  \item[attribut step    : ] Pas entre deux valeurs de paramètres (par exemple +1 ou *2)
  \item[attribut default : ] Valeur par défaut de ce paramètre
  \item[attribut level   : ] Niveau requis pour que l'utilisateur puisse voir ce paramètre. Le niveau varie de 0 (paramètre jamais affiché) à 5 (affichage de presque aucun des paramètres (mode néophyte))
  \item[attribut comment : ] Commentaire associé au paramètre
  \end{description}
\end{description}
\begin{description}
\item[balise port : ] {\it au moins 1 occurrence} Interface du composant. Une interface est un groupe de port cohérent entre eux. On peut par exemple cité l'interface Read et l'interface Write du composant fifo.
  \begin{description}
  \item[attribut name         : ] Nom de l'interface
  \item[attribut localisation : ] Localisation de l'interface sur les bords du composant. Cet attribut peut prendre les valeur {\it North}, {\it South}, {\it East} et {\it West}. L'ordre des interfaces à une incidence. Ces dernières sont ordonnée suivant le sens horaire sur la face concerné. C'est à dire que sur la face Nord les interfaces seront placés de gauche à droite, face ouest de haut en base, face sud de droite à gauche et enfin face ouest de bas en haut.
  \end{description}
\end{description}
\begin{description}
\item[balise architecture : ] {\it 0 ou 1} 
\end{description}
\begin{description}
\item[balise component : ] {\it nombre quelconque d'occurrences} Sous composant inclue dans le composant courant. Un composant est représenté par un rectangle. 
  \begin{description}
  \item[attribut name    : ] nom de l'instance du sous composant
  \item[attribut type    : ] nom du sous composant
  \item[attribut pos\_x0 : ] abscisse  du coin inférieur gauche
  \item[attribut pos\_y0 : ] coordonne du coin supérieur droit 
  \item[attribut pos\_x1 : ] abscisse  du coin inférieur gauche
  \item[attribut pos\_y1 : ] coordonne du coin supérieur droit 
  \end{description}
\end{description}
\begin{description}
\item[balise port\_map : ] {\it au moins 1 occurrence} mapping entre les interfaces du sous composant et des autres sous composant ou du composant englobant.
  \begin{description}
  \item[attribut name         : ] nom de l'interface
  \item[attribut localisation : ] localisation de l'interface sur les bords du sous-composant
  \item[attribut component    : ] nom du composant avec lequel cet interface est inter-connectée
  \item[attribut port         : ] nom de l'interface avec lequel cet interface est inter-connectée
  \end{description}
\end{description}

\subSection{Sortie écran}

La sortie écran est décomposée en 3 parties : 

\begin{enumerate}
  \item {\bf Barre de menu :} la barre de menu contient les entrées suivantes 
    \begin{itemize}
      \item Fichier
	\begin{itemize}
	  \item Ouvrir
	  \item Sauvegarder
	  \item Sauvegarder sous
	  \item Quitter
	\end{itemize}
      \item Affichage
	\begin{itemize}
	  \item Afficher panneau latéral
	  \item Afficher nom composants
	  \item Afficher nom signaux
	\end{itemize}
      \item Outils
	\begin{itemize}
	  \item Zoom +
	  \item Zoom -
	  \item Zoom initial
	  \item Niveau de configurations (1 à 5)
	\end{itemize}
      \item ?
	\begin{itemize}
	\item A propos
	\end{itemize}
    \end{itemize}
  \item {\bf Panneau latéral : } le panneau latéral contient le nom et le type du composant actuelle. Ensuite une liste des paramètres du modèle (qui satisfont la condition niveau du paramètre >= niveau de configurations). Chaque survol d'un paramètre affiche un pop-up indiquant le commentaire associé à ce paramètre. Ensuite il affiche le commentaire associé à ce composant.
  \item {\bf Fenêtre principal : } la fenêtre principal contient une vue schématique du composant. Sur chaque face d'un composant, les interfaces sont uniformément répartie. Les positions des paramètres son exprimé en pourcentage de la fenêtre principal. (c'est donc des coordonné proportionnelle où le point [0,0] est dans le coin inférieur gauche de cet fenêtre et le point [100,100] est dans le coin supérieur droit).
\end{enumerate}

\Section{Étape}

\begin{enumerate}
\item Prendre un fichier de configuration et afficher sont contenus
\item Permettre à l'utilisateur de pouvoir naviguer dans la hiérarchie du composant.
\item Affichage des Paramètres
\item Modification des paramètres.
\end{enumerate}

Quelques fonctionnalités optionnels

\begin{itemize}
\item Raccourci clavier
\item Zoom +/-/range
\item Routage des fils intelligent.
\item Analyse syntaxique du fichier de configuration
\end{itemize}

