%------------------------------------------------------------------------------
% $Id$
%------------------------------------------------------------------------------

\section{Introduction}
\ContentsCurrent

\subsection{Motivations}
\slidetitle{Cadre de la thèse}
	   {
	     \begin{itemize}
	     \item {\it Cadre :}\newline
	       Collaboration avec Bull sur le projet PFC\newline
	       (Plate-forme de confiance totale)
	     \item {\it Notre contribution :}\newline
	       Réalisation d'un générateur de processeur ouvert.
	     \end{itemize}
	   }
	   {
	   }

\subsection{Cahier des charges}
\slidetitle{Besoins : Cahier des charges}
	   {
	     Il faut une architecture :
	     \begin{description}
	     \item [Ouverte :] Évite les fonctionnalités cachées.
	     \item [Pérenne :] Évite les problèmes d'approvisionnements.
	     \item [Paramétrable :] S'adapte aux critères de l'application.
	     \item [Performante :] Applications nécessitant de la puissance de calculs.
	     \end{description}
	   }
	   {
%	     Concevoir un cpu pour PFC :
%	     
%	     ouverte, pérenne, paramétrable, performante.
%
%	     Applications cibles : cryptographique.
	   }

%\subsection{Architecture Performante}
\slidetitle{Architecture Performante}
	   {
	     \begin{center}
	       {\it Exécution de plusieurs instructions simultanément}
	     \end{center}

	     Exploitation de toutes les formes de parallélisme.

	     \begin{description}
	     \item[ILP :] Instruction Level Parallelism
	     \item[TLP :] Thread      Level Parallelism
	     \item[DLP :] Data        Level Parallelism
	     \end{description}
	   }
	   {
	   }

\section{Micro Architecture}
\ContentsCurrent

\subsection{Vue d'ensemble}
\slidetitle{Vue d'ensemble}
           {
%             3 Parties :\\
             \begin{description}
             \item [Front end :] Chargement de paquets d'instructions, décodage
             \item [Out Of Order Engine :] Renommage, Lancement des instructions, Maintien dans l'ordre du programme
             \item [Execute Loop :] Lecture des opérandes, Execution, Ecritures des résultats
             \end{description}

             \printgraph{MORPHEO_micro_architecture-part}{0.7}
           }
           {
           }

\slide
           {
             \printgraph{MORPHEO_micro_architecture-overview}{0.48}
           }
           {
           }

\subsection{Front End}
\slidetitle{Front End}
           {
             \printgraph{MORPHEO_micro_architecture-front_end}{0.75}
           }
           {
           }

\slidetitle{Fetch unit}
           {
             \begin{description}
             \item[Address\_management :] Gère le programme counter.
             \item[Ifetch\_queue :] FIFO (classique) récupérant les réponses provenant du cache.
             \end{description}
             \printgraph{MORPHEO_micro_architecture-front_end-fetch_unit}{0.75}
           }
           {
           }

\slidetitle{Prediction Unit}
           {
             \printgraph{MORPHEO_micro_architecture-front_end-prediction_unit}{0.6}
           }
           {
           }

\slidetitle{Decod Unit}
           {
             \begin{description}
             \item[Decod :] Décodage - branchement et évènement (exception, instructions spéciales)
             \item[Decod\_queue :] FIFO classique, Supprime les instructions incorrects
             \end{description}
             \printgraph{MORPHEO_micro_architecture-front_end-decod_unit}{0.8}
           }
           {
           }

%\slidetitle{Context State}
%           {
%             \printgraph{MORPHEO_micro_architecture-front_end-context_state}{0.75}
%           }
%           {
%           }

\subsection{Out Of Order Engine}
\slidetitle{Out Of Order Engine}
           {
             \printgraph{MORPHEO_micro_architecture-out_of_order_engine}{0.8}
           }
           {
           }

\slidetitle{Rename Unit}
           {
             \printgraph{MORPHEO_micro_architecture-out_of_order_engine-rename_unit}{0.65}
           }
           {
           }

\slidetitle{Issue Queue}
           {
             Route vers les ports de sorties les instructions.

             \printgraph{MORPHEO_micro_architecture-out_of_order_engine-issue_queue-1}{0.75}
           }
           {
           }

\slidetitle{Reexecute Unit + SPR}
           {
             Des instructions doivent être réinjectés dans la boucle d'execution
             \begin{itemize}
               \item Accès aux registres spéciaux
               \item Store en tête du Re Order Buffer
             \end{itemize} 
             \printgraph{MORPHEO_micro_architecture-out_of_order_engine-reexecute_unit}{0.75}
           }
           {
           }

\slidetitle{Commit Unit}
           {
             \printgraph{MORPHEO_micro_architecture-out_of_order_engine-commit_unit}{0.75}
           }
           {
           }

\subsection{Execute Loop}
\slidetitle{Execute Loop}
           {
             \printgraph{MORPHEO_micro_architecture-execute_loop}{0.75}
           }
           {
           }

\slidetitle{Read unit}
           {
             \begin{description}
             \item[Read\_queue :] FIFO classique, Lecture des opérandes depuis le banc de registres.
             \item[Reservation\_station :] Attente de la disponibilité de toutes les opérandes. Lancement des instructions prêtes.
             \end{description}

             \printgraph{MORPHEO_micro_architecture-execute_loop-read_unit}{0.75}
           }
           {
           }

%\slidetitle{Functionnal Unit}
%           {
%             \printgraph{MORPHEO_micro_architecture-execute_loop-functionnal_unit}{0.75}
%           }
%           {
%           }
%
\slidetitle{Load Store Unit}
           {
             \begin{description}
             \item[speculative\_access\_queue :] FIFO classique. Accès au cache
             \item[load\_queue :] Attente des réponses puis vérification des dépendances RAW.
             \item[store\_queue :] File stockant les écritures. Attente d'être en tête du ROB.
             \end{description}

             \printgraph{MORPHEO_micro_architecture-execute_loop-load_store_unit}{0.8}
           }
           {
           }

\slidetitle{Write Unit}
           {
             \begin{description}
             \item[Write\_queue :] FIFO classique, Ecriture des résultats vers le banc de registres.
             \item[Execute\_queue :] (Optionnel) FIFO classique
             \end{description}

             \printgraph{MORPHEO_micro_architecture-execute_loop-write_unit}{0.75}
           }
           {
           }

\slidetitle{Register File}
           {
             \begin{minipage}{0.45\textwidth}
             \printgraph{MORPHEO_micro_architecture-execute_loop-register_unit}{0.75}
             \end{minipage}
             \begin{minipage}{0.45\textwidth}
               \begin{description}
               \item[RegisterFile :] Multi bancs
               \item[Status List :] Registre de validité (1 bit)
               \end{description}
             \end{minipage}
           }
           {
           }

\section{Exemple d'instance}
\ContentsCurrent

\slide
           {
             \printgraph{MORPHEO_micro_architecture-overview}{0.48}
           }
           {
           }

\slide
           {
             \printgraph{MORPHEO_micro_architecture-ex01}{0.48}
           }
           {
             Hypoth<E8>se de d<E9>part

             SMT 2
           }

\slide
           {
             \printgraph{MORPHEO_micro_architecture-ex02}{0.48}
           }
           {
             contexte x4 pr<E9>dicteur d<E9>di<E9>
           }

\slide
           {
             \printgraph{MORPHEO_micro_architecture-ex03}{0.48}
           }
           {
             Select ...
           }

\slide
           {
             \printgraph{MORPHEO_micro_architecture-ex04}{0.48}
           }
           {
             possibilit<E9> de CMP
           }

%\section{Custom Unit}
%\ContentsCurrent
%
%\subsection{Spécification}
%\slidetitle{Spécification}
%           {
%           }
%           {
%           }
%
%\subsection{Interface}
%\slidetitle{Interface - Decod}
%           {
%           }
%           {
%           }
%
%\slidetitle{Interface - Functionnal Unit}
%           {
%           }
%           {
%           }
%
%\subsection{Exemple}
%\slidetitle{Exemple : Pseudo Crypto unit}
%           {
%           }
%           {
%           }
%
%\slidetitle{Exemple : Random unit}
%           {
%           }
%           {
%           }
%
%\section{Optimisation future}
%\ContentsCurrent
%
%\slidetitle{Différente algorithme de priorité / équilibrage de charge}
%           {
%           }
%           {
%           }
%
%\slidetitle{Différente implémentation de la Load Store Queue}
%           {
%             \begin{description}
%             \item[NO\_SPECULATIVE\_LOAD     : ] each load wait all previous store before the data cache access
%             \item[SPECULATIVE\_LOAD\_ACCESS : ] each load wait all previous store before the commiting
%             \item[SPECULATIVE\_LOAD\_COMMIT : ] each load commit the result before the end of dependence's check
%             \item[SPECULATIVE\_LOAD\_BYPASS : ] each load bypass the result before the end of dependence's check
%             \end{description}
%           }
%           {
%           }
%
%\slidetitle{MAC Unit - Custom Unit}
%           {
%           }
%           {
%           }
%
%\slidetitle{ICache Management}
%           {
%           }
%           {
%           }
