%------------------------------------------------------------------------------ % $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} } { Hypothse de dpart SMT 2 } \slide { \printgraph{MORPHEO_micro_architecture-ex02}{0.48} } { contexte x4 prdicteur ddi } \slide { \printgraph{MORPHEO_micro_architecture-ex03}{0.48} } { Select ... } \slide { \printgraph{MORPHEO_micro_architecture-ex04}{0.48} } { possibilit 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} % { % } % { % }