[91] | 1 | %------------------------------------------------------------------------------ |
---|
| 2 | % $Id$ |
---|
| 3 | %------------------------------------------------------------------------------ |
---|
| 4 | |
---|
| 5 | \section{Introduction} |
---|
| 6 | \ContentsCurrent |
---|
| 7 | |
---|
| 8 | \subsection{Motivations} |
---|
| 9 | \slidetitle{Cadre de la thèse} |
---|
| 10 | { |
---|
| 11 | \begin{itemize} |
---|
| 12 | \item {\it Cadre :}\newline |
---|
| 13 | Collaboration avec Bull sur le projet PFC\newline |
---|
| 14 | (Plate-forme de confiance totale) |
---|
| 15 | \item {\it Notre contribution :}\newline |
---|
| 16 | Réalisation d'un générateur de processeur ouvert. |
---|
| 17 | \end{itemize} |
---|
| 18 | } |
---|
| 19 | { |
---|
| 20 | } |
---|
| 21 | |
---|
| 22 | \subsection{Cahier des charges} |
---|
| 23 | \slidetitle{Besoins : Cahier des charges} |
---|
| 24 | { |
---|
| 25 | Il faut une architecture : |
---|
| 26 | \begin{description} |
---|
| 27 | \item [Ouverte :] Évite les fonctionnalités cachées. |
---|
| 28 | \item [Pérenne :] Évite les problèmes d'approvisionnements. |
---|
| 29 | \item [Paramétrable :] S'adapte aux critères de l'application. |
---|
| 30 | \item [Performante :] Applications nécessitant de la puissance de calculs. |
---|
| 31 | \end{description} |
---|
| 32 | } |
---|
| 33 | { |
---|
| 34 | % Concevoir un cpu pour PFC : |
---|
| 35 | % |
---|
| 36 | % ouverte, pérenne, paramétrable, performante. |
---|
| 37 | % |
---|
| 38 | % Applications cibles : cryptographique. |
---|
| 39 | } |
---|
| 40 | |
---|
| 41 | %\subsection{Architecture Performante} |
---|
| 42 | \slidetitle{Architecture Performante} |
---|
| 43 | { |
---|
| 44 | \begin{center} |
---|
| 45 | {\it Exécution de plusieurs instructions simultanément} |
---|
| 46 | \end{center} |
---|
| 47 | |
---|
| 48 | Exploitation de toutes les formes de parallélisme. |
---|
| 49 | |
---|
| 50 | \begin{description} |
---|
| 51 | \item[ILP :] Instruction Level Parallelism |
---|
| 52 | \item[TLP :] Thread Level Parallelism |
---|
| 53 | \item[DLP :] Data Level Parallelism |
---|
| 54 | \end{description} |
---|
| 55 | } |
---|
| 56 | { |
---|
| 57 | } |
---|
| 58 | |
---|
| 59 | \section{Micro Architecture} |
---|
| 60 | \ContentsCurrent |
---|
| 61 | |
---|
| 62 | \subsection{Vue d'ensemble} |
---|
| 63 | \slidetitle{Vue d'ensemble} |
---|
| 64 | { |
---|
| 65 | % 3 Parties :\\ |
---|
| 66 | \begin{description} |
---|
| 67 | \item [Front end :] Chargement de paquets d'instructions, décodage |
---|
| 68 | \item [Out Of Order Engine :] Renommage, Lancement des instructions, Maintien dans l'ordre du programme |
---|
| 69 | \item [Execute Loop :] Lecture des opérandes, Execution, Ecritures des résultats |
---|
| 70 | \end{description} |
---|
| 71 | |
---|
| 72 | \printgraph{MORPHEO_micro_architecture-part}{0.7} |
---|
| 73 | } |
---|
| 74 | { |
---|
| 75 | } |
---|
| 76 | |
---|
| 77 | \slide |
---|
| 78 | { |
---|
| 79 | \printgraph{MORPHEO_micro_architecture-overview}{0.48} |
---|
| 80 | } |
---|
| 81 | { |
---|
| 82 | } |
---|
| 83 | |
---|
| 84 | \subsection{Front End} |
---|
| 85 | \slidetitle{Front End} |
---|
| 86 | { |
---|
| 87 | \printgraph{MORPHEO_micro_architecture-front_end}{0.75} |
---|
| 88 | } |
---|
| 89 | { |
---|
| 90 | } |
---|
| 91 | |
---|
| 92 | \slidetitle{Fetch unit} |
---|
| 93 | { |
---|
| 94 | \begin{description} |
---|
| 95 | \item[Address\_management :] Gère le programme counter. |
---|
| 96 | \item[Ifetch\_queue :] FIFO (classique) récupérant les réponses provenant du cache. |
---|
| 97 | \end{description} |
---|
| 98 | \printgraph{MORPHEO_micro_architecture-front_end-fetch_unit}{0.75} |
---|
| 99 | } |
---|
| 100 | { |
---|
| 101 | } |
---|
| 102 | |
---|
| 103 | \slidetitle{Prediction Unit} |
---|
| 104 | { |
---|
| 105 | \printgraph{MORPHEO_micro_architecture-front_end-prediction_unit}{0.6} |
---|
| 106 | } |
---|
| 107 | { |
---|
| 108 | } |
---|
| 109 | |
---|
| 110 | \slidetitle{Decod Unit} |
---|
| 111 | { |
---|
| 112 | \begin{description} |
---|
| 113 | \item[Decod :] Décodage - branchement et évènement (exception, instructions spéciales) |
---|
| 114 | \item[Decod\_queue :] FIFO classique, Supprime les instructions incorrects |
---|
| 115 | \end{description} |
---|
| 116 | \printgraph{MORPHEO_micro_architecture-front_end-decod_unit}{0.8} |
---|
| 117 | } |
---|
| 118 | { |
---|
| 119 | } |
---|
| 120 | |
---|
| 121 | %\slidetitle{Context State} |
---|
| 122 | % { |
---|
| 123 | % \printgraph{MORPHEO_micro_architecture-front_end-context_state}{0.75} |
---|
| 124 | % } |
---|
| 125 | % { |
---|
| 126 | % } |
---|
| 127 | |
---|
| 128 | \subsection{Out Of Order Engine} |
---|
| 129 | \slidetitle{Out Of Order Engine} |
---|
| 130 | { |
---|
| 131 | \printgraph{MORPHEO_micro_architecture-out_of_order_engine}{0.8} |
---|
| 132 | } |
---|
| 133 | { |
---|
| 134 | } |
---|
| 135 | |
---|
| 136 | \slidetitle{Rename Unit} |
---|
| 137 | { |
---|
| 138 | \printgraph{MORPHEO_micro_architecture-out_of_order_engine-rename_unit}{0.65} |
---|
| 139 | } |
---|
| 140 | { |
---|
| 141 | } |
---|
| 142 | |
---|
| 143 | \slidetitle{Issue Queue} |
---|
| 144 | { |
---|
| 145 | Route vers les ports de sorties les instructions. |
---|
| 146 | |
---|
| 147 | \printgraph{MORPHEO_micro_architecture-out_of_order_engine-issue_queue-1}{0.75} |
---|
| 148 | } |
---|
| 149 | { |
---|
| 150 | } |
---|
| 151 | |
---|
| 152 | \slidetitle{Reexecute Unit + SPR} |
---|
| 153 | { |
---|
| 154 | Des instructions doivent être réinjectés dans la boucle d'execution |
---|
| 155 | \begin{itemize} |
---|
| 156 | \item Accès aux registres spéciaux |
---|
| 157 | \item Store en tête du Re Order Buffer |
---|
| 158 | \end{itemize} |
---|
| 159 | \printgraph{MORPHEO_micro_architecture-out_of_order_engine-reexecute_unit}{0.75} |
---|
| 160 | } |
---|
| 161 | { |
---|
| 162 | } |
---|
| 163 | |
---|
| 164 | \slidetitle{Commit Unit} |
---|
| 165 | { |
---|
| 166 | \printgraph{MORPHEO_micro_architecture-out_of_order_engine-commit_unit}{0.75} |
---|
| 167 | } |
---|
| 168 | { |
---|
| 169 | } |
---|
| 170 | |
---|
| 171 | \subsection{Execute Loop} |
---|
| 172 | \slidetitle{Execute Loop} |
---|
| 173 | { |
---|
| 174 | \printgraph{MORPHEO_micro_architecture-execute_loop}{0.75} |
---|
| 175 | } |
---|
| 176 | { |
---|
| 177 | } |
---|
| 178 | |
---|
| 179 | \slidetitle{Read unit} |
---|
| 180 | { |
---|
| 181 | \begin{description} |
---|
| 182 | \item[Read\_queue :] FIFO classique, Lecture des opérandes depuis le banc de registres. |
---|
| 183 | \item[Reservation\_station :] Attente de la disponibilité de toutes les opérandes. Lancement des instructions prêtes. |
---|
| 184 | \end{description} |
---|
| 185 | |
---|
| 186 | \printgraph{MORPHEO_micro_architecture-execute_loop-read_unit}{0.75} |
---|
| 187 | } |
---|
| 188 | { |
---|
| 189 | } |
---|
| 190 | |
---|
| 191 | %\slidetitle{Functionnal Unit} |
---|
| 192 | % { |
---|
| 193 | % \printgraph{MORPHEO_micro_architecture-execute_loop-functionnal_unit}{0.75} |
---|
| 194 | % } |
---|
| 195 | % { |
---|
| 196 | % } |
---|
| 197 | % |
---|
| 198 | \slidetitle{Load Store Unit} |
---|
| 199 | { |
---|
| 200 | \begin{description} |
---|
| 201 | \item[speculative\_access\_queue :] FIFO classique. Accès au cache |
---|
| 202 | \item[load\_queue :] Attente des réponses puis vérification des dépendances RAW. |
---|
| 203 | \item[store\_queue :] File stockant les écritures. Attente d'être en tête du ROB. |
---|
| 204 | \end{description} |
---|
| 205 | |
---|
| 206 | \printgraph{MORPHEO_micro_architecture-execute_loop-load_store_unit}{0.8} |
---|
| 207 | } |
---|
| 208 | { |
---|
| 209 | } |
---|
| 210 | |
---|
| 211 | \slidetitle{Write Unit} |
---|
| 212 | { |
---|
| 213 | \begin{description} |
---|
| 214 | \item[Write\_queue :] FIFO classique, Ecriture des résultats vers le banc de registres. |
---|
| 215 | \item[Execute\_queue :] (Optionnel) FIFO classique |
---|
| 216 | \end{description} |
---|
| 217 | |
---|
| 218 | \printgraph{MORPHEO_micro_architecture-execute_loop-write_unit}{0.75} |
---|
| 219 | } |
---|
| 220 | { |
---|
| 221 | } |
---|
| 222 | |
---|
| 223 | \slidetitle{Register File} |
---|
| 224 | { |
---|
| 225 | \begin{minipage}{0.45\textwidth} |
---|
| 226 | \printgraph{MORPHEO_micro_architecture-execute_loop-register_unit}{0.75} |
---|
| 227 | \end{minipage} |
---|
| 228 | \begin{minipage}{0.45\textwidth} |
---|
| 229 | \begin{description} |
---|
| 230 | \item[RegisterFile :] Multi bancs |
---|
| 231 | \item[Status List :] Registre de validité (1 bit) |
---|
| 232 | \end{description} |
---|
| 233 | \end{minipage} |
---|
| 234 | } |
---|
| 235 | { |
---|
| 236 | } |
---|
| 237 | |
---|
| 238 | \section{Exemple d'instance} |
---|
| 239 | \ContentsCurrent |
---|
| 240 | |
---|
| 241 | \slide |
---|
| 242 | { |
---|
| 243 | \printgraph{MORPHEO_micro_architecture-overview}{0.48} |
---|
| 244 | } |
---|
| 245 | { |
---|
| 246 | } |
---|
| 247 | |
---|
| 248 | \slide |
---|
| 249 | { |
---|
| 250 | \printgraph{MORPHEO_micro_architecture-ex01}{0.48} |
---|
| 251 | } |
---|
| 252 | { |
---|
| 253 | Hypoth<E8>se de d<E9>part |
---|
| 254 | |
---|
| 255 | SMT 2 |
---|
| 256 | } |
---|
| 257 | |
---|
| 258 | \slide |
---|
| 259 | { |
---|
| 260 | \printgraph{MORPHEO_micro_architecture-ex02}{0.48} |
---|
| 261 | } |
---|
| 262 | { |
---|
| 263 | contexte x4 pr<E9>dicteur d<E9>di<E9> |
---|
| 264 | } |
---|
| 265 | |
---|
| 266 | \slide |
---|
| 267 | { |
---|
| 268 | \printgraph{MORPHEO_micro_architecture-ex03}{0.48} |
---|
| 269 | } |
---|
| 270 | { |
---|
| 271 | Select ... |
---|
| 272 | } |
---|
| 273 | |
---|
| 274 | \slide |
---|
| 275 | { |
---|
| 276 | \printgraph{MORPHEO_micro_architecture-ex04}{0.48} |
---|
| 277 | } |
---|
| 278 | { |
---|
| 279 | possibilit<E9> de CMP |
---|
| 280 | } |
---|
| 281 | |
---|
| 282 | %\section{Custom Unit} |
---|
| 283 | %\ContentsCurrent |
---|
| 284 | % |
---|
| 285 | %\subsection{Spécification} |
---|
| 286 | %\slidetitle{Spécification} |
---|
| 287 | % { |
---|
| 288 | % } |
---|
| 289 | % { |
---|
| 290 | % } |
---|
| 291 | % |
---|
| 292 | %\subsection{Interface} |
---|
| 293 | %\slidetitle{Interface - Decod} |
---|
| 294 | % { |
---|
| 295 | % } |
---|
| 296 | % { |
---|
| 297 | % } |
---|
| 298 | % |
---|
| 299 | %\slidetitle{Interface - Functionnal Unit} |
---|
| 300 | % { |
---|
| 301 | % } |
---|
| 302 | % { |
---|
| 303 | % } |
---|
| 304 | % |
---|
| 305 | %\subsection{Exemple} |
---|
| 306 | %\slidetitle{Exemple : Pseudo Crypto unit} |
---|
| 307 | % { |
---|
| 308 | % } |
---|
| 309 | % { |
---|
| 310 | % } |
---|
| 311 | % |
---|
| 312 | %\slidetitle{Exemple : Random unit} |
---|
| 313 | % { |
---|
| 314 | % } |
---|
| 315 | % { |
---|
| 316 | % } |
---|
| 317 | % |
---|
| 318 | %\section{Optimisation future} |
---|
| 319 | %\ContentsCurrent |
---|
| 320 | % |
---|
| 321 | %\slidetitle{Différente algorithme de priorité / équilibrage de charge} |
---|
| 322 | % { |
---|
| 323 | % } |
---|
| 324 | % { |
---|
| 325 | % } |
---|
| 326 | % |
---|
| 327 | %\slidetitle{Différente implémentation de la Load Store Queue} |
---|
| 328 | % { |
---|
| 329 | % \begin{description} |
---|
| 330 | % \item[NO\_SPECULATIVE\_LOAD : ] each load wait all previous store before the data cache access |
---|
| 331 | % \item[SPECULATIVE\_LOAD\_ACCESS : ] each load wait all previous store before the commiting |
---|
| 332 | % \item[SPECULATIVE\_LOAD\_COMMIT : ] each load commit the result before the end of dependence's check |
---|
| 333 | % \item[SPECULATIVE\_LOAD\_BYPASS : ] each load bypass the result before the end of dependence's check |
---|
| 334 | % \end{description} |
---|
| 335 | % } |
---|
| 336 | % { |
---|
| 337 | % } |
---|
| 338 | % |
---|
| 339 | %\slidetitle{MAC Unit - Custom Unit} |
---|
| 340 | % { |
---|
| 341 | % } |
---|
| 342 | % { |
---|
| 343 | % } |
---|
| 344 | % |
---|
| 345 | %\slidetitle{ICache Management} |
---|
| 346 | % { |
---|
| 347 | % } |
---|
| 348 | % { |
---|
| 349 | % } |
---|