| | 1 | {{{ |
| | 2 | #!html |
| | 3 | <h1> TME3 : Réalisation d'un parser de fichiers pour le format ".vst "</h1> |
| | 4 | }}} |
| | 5 | [[PageOutline]] |
| | 6 | |
| | 7 | = 1. Objectifs = |
| | 8 | |
| | 9 | L'objectif de ce TME est de vous familiariser avec les outils '''flex''' et '''bison''', |
| | 10 | qui sont des outils de la distribution GNU permettant de générer automatiquement des |
| | 11 | ''scanners'' (un scanner est un analyseur lexical) et des ''parsers'' (un parser est un analyseur |
| | 12 | syntaxique) pour différents formats de fichiers. |
| | 13 | |
| | 14 | Vous allez donc développer un ''parser'' pour le sous-ensemble de la grammaire du |
| | 15 | langage VHDL utilisé par la chaîne de CAO Allianced pour décrire la vue structurelle |
| | 16 | (format ".vst"). La structure de donnée construite en mémoire est la structure de données ''lofig'' |
| | 17 | présentée en cours. |
| | 18 | |
| | 19 | Nous ne vous donnons pas la grammaire du format ".vst" mais vous devrez |
| | 20 | la construire en analysant les fichiers d'exemples au format ".vst" qui sont disponibles dans le répertoire |
| | 21 | {{{ |
| | 22 | ~encadr/cao/tme3/vst+. |
| | 23 | }}} |
| | 24 | |
| | 25 | Le sous-ensemble de VHDL visé permet de décrire des composants possédant des ports |
| | 26 | d'entrée/sortie, des signaux, et d'instancier ces composants en les connectants par les signaux. |
| | 27 | On fait l'hypothèse que tous les signaux sont de type bit, et il n'est donc pas demandÈ de traiter les vecteurs de bits. |
| | 28 | |
| | 29 | 1 : Ècriture du \emph{scanner}} |
| | 30 | |
| | 31 | On rappelle qu'on appelle \texttt{token} une suite de caractËres lus dans |
| | 32 | le fichier qu'on cherche ‡ analyser, et correspondant ‡ une |
| | 33 | expression rÈguliËre : mot-clef, identificateur, etc... |
| | 34 | Vous devez Ècrire le fichier \texttt{vst.l} dÈfinissant les expressions |
| | 35 | rÈguliËres correspondant au format .vst. |
| | 36 | |
| | 37 | On rappelle qu'en VHDL, les lettres majuscules et minuscules ne sont pas |
| | 38 | diffÈrenciÈes. |
| | 39 | Cherchez dans le manuel de \texttt{flex} une maniËre simple de |
| | 40 | produire un \emph{scanner} qui ne fasse pas la diffÈrence entre |
| | 41 | majuscules et minuscules. |
| | 42 | |
| | 43 | \begin{enumerate} |
| | 44 | \itemsep=-.5ex |
| | 45 | |
| | 46 | \item Ètablir la liste des mots clefs du format .vst, et en dÈduire les |
| | 47 | expressions rÈguliËres en langage \texttt{lex} permettant de |
| | 48 | les reconnaÓtre~; |
| | 49 | |
| | 50 | \item Ètablir la liste des opÈrateurs du langage et les rËgles |
| | 51 | permettant de les reconnaÓtre. |
| | 52 | On utilisera une classe pour les opÈrateurs |
| | 53 | possÈdant un seul caractËre~; |
| | 54 | |
| | 55 | \item un identificateur du VHDL commence par une lettre, suivie |
| | 56 | optionnellement d'autant de lettres, chiffres ou |
| | 57 | d'\emph{underscore}s que l'on veut, avec la contrainte que l'on |
| | 58 | ne doit pas avoir 2 \emph{underscore}s successifs. |
| | 59 | Etablir la rËgle de reconnaissance d'un identificateur~; |
| | 60 | |
| | 61 | \item un commentaire commence par \texttt{-\hspace{.2ex}-} et s'achËve en fin de |
| | 62 | ligne. Etablir la rËgle permettant d'absorber ces commentaires. |
| | 63 | |
| | 64 | \item Etablir la rËgle permettant d'absorber les caractËres d'espacement et les |
| | 65 | caractËres de tabulation. |
| | 66 | |
| | 67 | \end{enumerate} |
| | 68 | |
| | 69 | On donne ci-dessous une partie du fichier \texttt{vst.l} que vous devez Ècrire. |
| | 70 | Modifiez ce fichier en introduisant les rËgles que nous vous avons demandÈ d'Ètablir, et |
| | 71 | dÈfinissez les commandes d'affichage qui permettent d'afficher la chaÓne de |
| | 72 | caractËres correspondant ‡ chaque token reconnu. |
| | 73 | |
| | 74 | %\small |
| | 75 | %\scriptsize |
| | 76 | \begin{verbatim} |
| | 77 | %{ |
| | 78 | #include <string.h> |
| | 79 | #include <stdio.h> |
| | 80 | int yylineno = 1; /* compteur de numero de ligne */ |
| | 81 | %} |
| | 82 | dÈfinitions de macro |
| | 83 | %% |
| | 84 | [ \t] { /* Rien de rien */ } |
| | 85 | \n {yylineno++;} |
| | 86 | regle1 {printf("TOKEN1: %s\n", yytext);} |
| | 87 | regle2 {printf("TOKEN2: %s\n", yytext);} |
| | 88 | reglen {printf("TOKEN3: %s\n", yytext);} |
| | 89 | %% |
| | 90 | int main(void) |
| | 91 | { |
| | 92 | yylex(); |
| | 93 | return 0; |
| | 94 | } |
| | 95 | \end{verbatim} |
| | 96 | \normalsize |
| | 97 | |
| | 98 | Nous rappellons que la compilation s'effectue grosso-modo ainsi, |
| | 99 | ‡ charge pour vous d'intÈgrer cela dans un \texttt{Makefile}. |
| | 100 | |
| | 101 | %\small |
| | 102 | %\scriptsize |
| | 103 | \begin{verbatim} |
| | 104 | flex -t vst.l > vst.yy.c |
| | 105 | gcc -Wall -Werror -o scanner vst.yy.c -lfl |
| | 106 | \end{verbatim} |
| | 107 | \normalsize |
| | 108 | |
| | 109 | \texttt{lex} dÈclare une macro non utilisÈe dans le cas prÈsent, |
| | 110 | et il y a donc un avertissement justifiÈ au moment de la compilation. |
| | 111 | Pour Èviter cela, il faut dÈfinir dans le prologue du fichier |
| | 112 | vst.l la macro \texttt{YY\_NO\_UNPUT}. |
| | 113 | |
| | 114 | \section*{Etape 2 : modification du \emph{scanner}} |
| | 115 | |
| | 116 | On cherche maintenant ‡ modifier le scanner pour qu'il affiche non plus |
| | 117 | la chaÓne de caractËres associÈe ‡ chaque token, mais un entier |
| | 118 | reprÈsentant le type du token reconnu. |
| | 119 | |
| | 120 | Pour cela~: |
| | 121 | |
| | 122 | \begin{enumerate} |
| | 123 | \itemsep=-.5ex |
| | 124 | |
| | 125 | \item DÈfinir dans le prologue du fichier vst.l un type ÈnumÈrÈ qui associe |
| | 126 | ‡ chaque token un entier dÈfinissant son type. On utilise en gÈnÈral des valeurs |
| | 127 | supÈrieures ‡ 255 pour les token correspondant ‡ une chaÓne de plusieurs caractËres, |
| | 128 | de faÁon ‡ pouvoir directement utiliser le code ascii du caractËre dans le cas |
| | 129 | d'un token constituÈ d'un seul caractËre. ~; |
| | 130 | |
| | 131 | \item Modifier les actions associÈes aux rËgles afin qu'elles retournent |
| | 132 | le type du \emph{token}~; |
| | 133 | %\small |
| | 134 | \begin{verbatim} |
| | 135 | entity {return T_ENTITY;} |
| | 136 | \end{verbatim} |
| | 137 | \normalsize |
| | 138 | |
| | 139 | \item Modifier le \texttt{main} pour qu'il affiche le type des tokens reconnus. |
| | 140 | Nous rappellons que \texttt{yylex} retourne 0 lorsque la fin de fichier est lue~; |
| | 141 | |
| | 142 | \end{enumerate} |
| | 143 | |
| | 144 | \section*{Etape 3 : dÈbut de l'Ècriture du \emph{parser}} |
| | 145 | |
| | 146 | Il faut maintenant dÈfinir dans le fichier \texttt{vst.y} les rËgles de la grammaire |
| | 147 | correspondant au format .vst. Ces rËgles s'appuient sur les token reconnus par flex. |
| | 148 | Dans ce TME, il ne sera pas question d'analyse sÈmantique ni mÍme |
| | 149 | d'actions ‡ effectuer lorsqu'une rËgle est activÈe. |
| | 150 | On se bornera donc ‡ effectuer l'analyse de syntaxe en s'assurant que les structures |
| | 151 | grammaticales dÈfinies permettent effectivement d'analyser le fichier exemple.vst. |
| | 152 | |
| | 153 | Cette Ètape vise ‡ analyser le fichier \texttt{signal.ex}, qui ne constitue qu'une |
| | 154 | partie du fichier \texttt{exemple.vst}. On cherche principalement ‡ traiter |
| | 155 | le problËme des rËgles permettant de reconnaÓtre un nombre variable d'arguments |
| | 156 | (une liste de signaux dans notre cas). |
| | 157 | |
| | 158 | \begin{enumerate} |
| | 159 | \itemsep=-.5ex |
| | 160 | |
| | 161 | \item dÈfinir les rËgles de grammaire correspondant ‡ la dÈclaration des signaux VHDL |
| | 162 | en analysant le contenu du fichier \texttt{signal.ex} qui vous est fourni, |
| | 163 | et implanter ces rËgles dans le fichier vst.y.~; |
| | 164 | |
| | 165 | \item Dans le fichier vst.y, complÈter la dÈclaration des diffÈrents |
| | 166 | token utilisÈs par le parser. |
| | 167 | On dÈclarera tous les token susceptibles d'Ítre reconnus par |
| | 168 | le scanner.~; |
| | 169 | |
| | 170 | \item Comme nous n'allons pas effectuer d'actions pour ces |
| | 171 | rËgles, nous utiliserons le mode \emph{debug} de bison |
| | 172 | pour vÈrifier que l'analyse se passe bien. |
| | 173 | Pour activer ce mode, il faut utiliser l'option \texttt{-t} de |
| | 174 | bison et positionner la variable \texttt{yydebug} ‡ une |
| | 175 | valeur autre que zÈro dans la fonction main()~; |
| | 176 | \item Il faut par ailleurs que \texttt{bison} fournisse la liste des |
| | 177 | \emph{tokens} ‡ \texttt{flex}. Pour cela, il faut utiliser l'option |
| | 178 | \texttt{-d}, pour demander ‡ bison de gÈnËrer un fichier \texttt{vst.tab.h} |
| | 179 | contenant ces dÈfinitions. |
| | 180 | Il faut donc modifier le fichier vst.l pour qure le fichier |
| | 181 | \texttt{vst.tab.h} soit inclus dans le fichier vst.l et supprimer les dÈfinitions |
| | 182 | de token existant par ailleurs dans vst.l. |
| | 183 | \item il faut Ègalement modifier la fonction \texttt{main}, qui est maintenant dÈfinie |
| | 184 | dans le fichier vst.y, et doit appeller la fonction \texttt{yyparse()}. |
| | 185 | \end{enumerate} |
| | 186 | |
| | 187 | Voici une Èbauche du fichier \texttt{vst.y} que vous devez modifier et complÈter: |
| | 188 | |
| | 189 | %\scriptsize |
| | 190 | \begin{verbatim} |
| | 191 | %{ |
| | 192 | #include <string.h> |
| | 193 | #include <stdio.h> |
| | 194 | |
| | 195 | extern int yylex(void); |
| | 196 | extern int yylineno; |
| | 197 | extern FILE *yyin; |
| | 198 | |
| | 199 | int yyerror(char *s) |
| | 200 | { |
| | 201 | fprintf(stderr, "%s line %d\n", s, yylineno); |
| | 202 | return 1; |
| | 203 | } |
| | 204 | %} |
| | 205 | |
| | 206 | %token ... |
| | 207 | |
| | 208 | %% |
| | 209 | prod : regle TOKEN |
| | 210 | | ... |
| | 211 | ; |
| | 212 | %% |
| | 213 | |
| | 214 | int main(int argc, char *argv[]) |
| | 215 | { |
| | 216 | if(argc != 2) { |
| | 217 | printf(usage : %s filename\n", argv[0]); |
| | 218 | exit(1); |
| | 219 | } |
| | 220 | yyin = fopen(argv[1],"r"); |
| | 221 | if(!yyin) { |
| | 222 | printf(cannot open file : %s\n", argv[1]); |
| | 223 | exit(1); |
| | 224 | } |
| | 225 | yydebug = 1; |
| | 226 | yyparse(); |
| | 227 | return 0; |
| | 228 | } |
| | 229 | \end{verbatim} |
| | 230 | \normalsize |
| | 231 | |
| | 232 | Nous rappellons que la compilation s'effectue grosso-modo ainsi, |
| | 233 | ‡ charge pour vous d'intÈgrer cela dans le \texttt{Makefile} dÈj‡ constituÈ |
| | 234 | pour \texttt{lex}. |
| | 235 | Nous vous rappellons que la compilation de \texttt{lex} doit dÈpendre du |
| | 236 | fichier d'entÍte gÈnÈrÈ par \texttt{yacc}. |
| | 237 | |
| | 238 | %\small |
| | 239 | %\scriptsize |
| | 240 | \begin{verbatim} |
| | 241 | bison -t -d vst.y |
| | 242 | gcc -Wall -Werror -o parser vst.tab.c vst.yy.c -lfl |
| | 243 | \end{verbatim} |
| | 244 | \normalsize |
| | 245 | |
| | 246 | \section*{Etape 4 : suite et fin de l'Ècriture du \emph{parser}} |
| | 247 | |
| | 248 | L'idÈe est de construire le \emph{parser} de maniËre incrÈmentale. |
| | 249 | La syntaxe de la dÈclaration des signaux ayant ÈtÈ dÈfinie, vous allez, |
| | 250 | dans cet ordre~: |
| | 251 | \begin{enumerate} |
| | 252 | \itemsep=-.5ex |
| | 253 | \item dÈfinir les rËgles de dÈclaration des ports en partant |
| | 254 | de l'exemple \texttt{port.ex} qui vous est fourni~; |
| | 255 | \item dÈfinir les rËgles de dÈclaration du composant en partant |
| | 256 | de l'exemple \texttt{component.ex} qui vous est fourni~; |
| | 257 | \item dÈfinir les rËgles de dÈclaration de l'entitÈ en partant |
| | 258 | de l'exemple \texttt{entity.ex} qui vous est fourni~; |
| | 259 | \item dÈfinir toutes les rËgles nÈcessaires ‡ la lecture du fichier |
| | 260 | \texttt{exemple.vst}. |
| | 261 | \end{enumerate} |
| | 262 | |
| | 263 | Vous pouvez faire des validations intermÈdiaires simplement en dÈclarant |
| | 264 | un nouveau symbole de dÈpart gr‚ce ‡ |
| | 265 | %\small |
| | 266 | \begin{verbatim} |
| | 267 | %start regle |
| | 268 | \end{verbatim} |
| | 269 | \normalsize |
| | 270 | |
| | 271 | Vous pouvez considÈrer que le TME est terminÈ lorsque le parser construit |
| | 272 | ‡ partir des deux fichiers vst.l et vst.y est capable de lire et de reconnaitre |
| | 273 | la totalitÈ du fichier exemple.vst. |
| | 274 | |
| | 275 | \small |
| | 276 | \subsubsection*{signal.ex} |
| | 277 | \begin{multicols}{2} |
| | 278 | \begin{verbatim} |
| | 279 | signal opc : bit; |
| | 280 | signal read : bit; |
| | 281 | signal lock : bit; |
| | 282 | signal a : bit; |
| | 283 | signal d : bit; |
| | 284 | signal ack : bit; |
| | 285 | signal tout : bit; |
| | 286 | signal it_0 : bit; |
| | 287 | signal req0 : bit; |
| | 288 | signal req1 : bit; |
| | 289 | signal gnt0 : bit; |
| | 290 | signal gnt1 : bit; |
| | 291 | signal sel1 : bit; |
| | 292 | signal sel2 : bit; |
| | 293 | signal sel3 : bit; |
| | 294 | signal sel4 : bit; |
| | 295 | signal sel5 : bit; |
| | 296 | signal sel6 : bit; |
| | 297 | signal sel7 : bit; |
| | 298 | signal sel8 : bit; |
| | 299 | signal sel9 : bit; |
| | 300 | signal snoopdo: bit; |
| | 301 | \end{verbatim} |
| | 302 | \end{multicols} |
| | 303 | \subsubsection*{port.ex} |
| | 304 | \begin{multicols}{2} |
| | 305 | \begin{verbatim} |
| | 306 | port ( |
| | 307 | clk : in bit; |
| | 308 | resetn : in bit; |
| | 309 | ireq : out bit; |
| | 310 | ignt : in bit; |
| | 311 | dreq : out bit; |
| | 312 | dgnt : in bit; |
| | 313 | opc : out bit; |
| | 314 | lock : out bit; |
| | 315 | read : inout bit; |
| | 316 | a : inout bit; |
| | 317 | d : inout bit; |
| | 318 | ack : in bit; |
| | 319 | tout : in bit; |
| | 320 | it_0 : in bit; |
| | 321 | it_1 : in bit; |
| | 322 | it_2 : in bit; |
| | 323 | it_3 : in bit; |
| | 324 | it_4 : in bit; |
| | 325 | it_5 : in bit; |
| | 326 | snoopdo: in bit |
| | 327 | ); |
| | 328 | \end{verbatim} |
| | 329 | \end{multicols} |
| | 330 | \subsubsection*{component.ex} |
| | 331 | \begin{multicols}{2} |
| | 332 | \begin{verbatim} |
| | 333 | component PIR3000 |
| | 334 | port ( |
| | 335 | clk : in bit; |
| | 336 | resetn : in bit; |
| | 337 | ireq : out bit; |
| | 338 | ignt : in bit; |
| | 339 | dreq : out bit; |
| | 340 | dgnt : in bit; |
| | 341 | opc : out bit; |
| | 342 | lock : out bit; |
| | 343 | read : inout bit; |
| | 344 | a : inout bit; |
| | 345 | d : inout bit; |
| | 346 | ack : in bit; |
| | 347 | tout : in bit; |
| | 348 | it_0 : in bit; |
| | 349 | it_1 : in bit; |
| | 350 | it_2 : in bit; |
| | 351 | it_3 : in bit; |
| | 352 | it_4 : in bit; |
| | 353 | it_5 : in bit; |
| | 354 | snoopdo: in bit |
| | 355 | ); |
| | 356 | end component; |
| | 357 | \end{verbatim} |
| | 358 | \end{multicols} |
| | 359 | \subsubsection*{entity.ex} |
| | 360 | \begin{verbatim} |
| | 361 | entity EXEMPLE is |
| | 362 | port ( |
| | 363 | clk : in bit; |
| | 364 | resetn : in bit |
| | 365 | ); |
| | 366 | end exemple; |
| | 367 | \end{verbatim} |
| | 368 | \scriptsize |
| | 369 | \newpage |
| | 370 | \subsubsection*{expemple.vst} |
| | 371 | \begin{multicols}{2} |
| | 372 | \begin{verbatim} |
| | 373 | end exemple; |
| | 374 | entity EXEMPLE is |
| | 375 | port ( |
| | 376 | clk : in bit; |
| | 377 | resetn : in bit |
| | 378 | ); |
| | 379 | end exemple; |
| | 380 | |
| | 381 | architecture structural of system is |
| | 382 | component PIR3000 |
| | 383 | port ( |
| | 384 | clk : in bit; |
| | 385 | resetn : in bit; |
| | 386 | ireq : out bit; |
| | 387 | ignt : in bit; |
| | 388 | dreq : out bit; |
| | 389 | dgnt : in bit; |
| | 390 | opc : out bit; |
| | 391 | lock : out bit; |
| | 392 | read : inout bit; |
| | 393 | a : inout bit; |
| | 394 | d : inout bit; |
| | 395 | ack : in bit; |
| | 396 | tout : in bit; |
| | 397 | it_0 : in bit; |
| | 398 | it_1 : in bit; |
| | 399 | it_2 : in bit; |
| | 400 | it_3 : in bit; |
| | 401 | it_4 : in bit; |
| | 402 | it_5 : in bit; |
| | 403 | snoopdo: in bit |
| | 404 | ); |
| | 405 | end component; |
| | 406 | |
| | 407 | component PIRAM |
| | 408 | port ( |
| | 409 | clk : in bit; |
| | 410 | resetn : in bit; |
| | 411 | sel : in bit; |
| | 412 | opc : in bit; |
| | 413 | read : in bit; |
| | 414 | a : in bit; |
| | 415 | d : inout bit; |
| | 416 | ack : out bit; |
| | 417 | tout : in bit |
| | 418 | ); |
| | 419 | end component; |
| | 420 | |
| | 421 | component PITTY |
| | 422 | port ( |
| | 423 | clk : in bit; |
| | 424 | resetn : in bit; |
| | 425 | sel : in bit; |
| | 426 | opc : in bit; |
| | 427 | read : in bit; |
| | 428 | a : in bit; |
| | 429 | d : inout bit; |
| | 430 | ack : out bit; |
| | 431 | tout : in bit |
| | 432 | ); |
| | 433 | end component; |
| | 434 | |
| | 435 | component PIBCU |
| | 436 | port ( |
| | 437 | clk : in bit; |
| | 438 | req0 : in bit; |
| | 439 | req1 : in bit; |
| | 440 | gnt0 : out bit; |
| | 441 | gnt1 : out bit; |
| | 442 | sel1 : out bit; |
| | 443 | sel2 : out bit; |
| | 444 | sel3 : out bit; |
| | 445 | sel4 : out bit; |
| | 446 | sel5 : out bit; |
| | 447 | sel6 : out bit; |
| | 448 | sel7 : out bit; |
| | 449 | sel8 : out bit; |
| | 450 | sel9 : out bit; |
| | 451 | snoopdo : out bit; |
| | 452 | resetn : in bit; |
| | 453 | opc : in bit; |
| | 454 | read : in bit; |
| | 455 | lock : in bit; |
| | 456 | a : in bit; |
| | 457 | d : inout bit; |
| | 458 | ack : inout bit; |
| | 459 | tout : out bit; |
| | 460 | it : out bit |
| | 461 | ); |
| | 462 | end component; |
| | 463 | |
| | 464 | signal opc : bit; |
| | 465 | signal read : bit; |
| | 466 | signal lock : bit; |
| | 467 | signal a : bit; |
| | 468 | signal d : bit; |
| | 469 | signal ack : bit; |
| | 470 | signal tout : bit; |
| | 471 | |
| | 472 | signal it_0 : bit; |
| | 473 | signal it_1 : bit; |
| | 474 | signal it_2 : bit; |
| | 475 | signal it_3 : bit; |
| | 476 | signal it_4 : bit; |
| | 477 | signal it_5 : bit; |
| | 478 | |
| | 479 | signal req0 : bit; |
| | 480 | signal req1 : bit; |
| | 481 | |
| | 482 | signal gnt0 : bit; |
| | 483 | signal gnt1 : bit; |
| | 484 | |
| | 485 | signal sel1 : bit; |
| | 486 | signal sel2 : bit; |
| | 487 | signal sel3 : bit; |
| | 488 | signal sel4 : bit; |
| | 489 | signal sel5 : bit; |
| | 490 | signal sel6 : bit; |
| | 491 | signal sel7 : bit; |
| | 492 | signal sel8 : bit; |
| | 493 | signal sel9 : bit; |
| | 494 | signal snoopdo: bit; |
| | 495 | |
| | 496 | begin |
| | 497 | |
| | 498 | r3000 : Pir3000 |
| | 499 | port map ( |
| | 500 | clk => clk, |
| | 501 | resetn => resetn, |
| | 502 | ireq => req0, |
| | 503 | ignt => gnt0, |
| | 504 | dreq => req1, |
| | 505 | dgnt => gnt1, |
| | 506 | opc => opc, |
| | 507 | lock => lock, |
| | 508 | read => read, |
| | 509 | a => a, |
| | 510 | d => d, |
| | 511 | ack => ack, |
| | 512 | tout => tout, |
| | 513 | snoopdo => snoopdo, |
| | 514 | it_0 => it_0, |
| | 515 | it_1 => it_1, |
| | 516 | it_2 => it_2, |
| | 517 | it_3 => it_3, |
| | 518 | it_4 => it_4, |
| | 519 | it_5 => it_5 |
| | 520 | ); |
| | 521 | |
| | 522 | rst : piram |
| | 523 | port map ( |
| | 524 | clk => clk, |
| | 525 | resetn => resetn, |
| | 526 | sel => sel1, |
| | 527 | opc => opc, |
| | 528 | read => read, |
| | 529 | a => a, |
| | 530 | d => d, |
| | 531 | ack => ack, |
| | 532 | tout => tout |
| | 533 | ); |
| | 534 | |
| | 535 | exc : piram |
| | 536 | port map ( |
| | 537 | clk => clk, |
| | 538 | resetn => resetn, |
| | 539 | sel => sel2, |
| | 540 | opc => opc, |
| | 541 | read => read, |
| | 542 | a => a, |
| | 543 | d => d, |
| | 544 | ack => ack, |
| | 545 | tout => tout |
| | 546 | ); |
| | 547 | |
| | 548 | bcu : pibcu |
| | 549 | port map ( |
| | 550 | clk => clk, |
| | 551 | req0 => req0, |
| | 552 | req1 => req1, |
| | 553 | |
| | 554 | gnt0 => gnt0, |
| | 555 | gnt1 => gnt1, |
| | 556 | |
| | 557 | sel1 => sel1, |
| | 558 | sel2 => sel2, |
| | 559 | sel3 => sel3, |
| | 560 | sel4 => sel4, |
| | 561 | sel5 => sel5, |
| | 562 | sel6 => sel6, |
| | 563 | sel7 => sel7, |
| | 564 | sel8 => sel8, |
| | 565 | sel9 => sel9, |
| | 566 | |
| | 567 | resetn => resetn, |
| | 568 | opc => opc, |
| | 569 | read => read, |
| | 570 | lock => lock, |
| | 571 | a => a, |
| | 572 | d => d, |
| | 573 | ack => ack, |
| | 574 | tout => tout, |
| | 575 | snoopdo=> snoopdo, |
| | 576 | it => it_1 |
| | 577 | ); |
| | 578 | |
| | 579 | ins : piram |
| | 580 | port map ( |
| | 581 | clk => clk, |
| | 582 | resetn => resetn, |
| | 583 | sel => sel3, |
| | 584 | opc => opc, |
| | 585 | read => read, |
| | 586 | a => a, |
| | 587 | d => d, |
| | 588 | ack => ack, |
| | 589 | tout => tout |
| | 590 | ); |
| | 591 | |
| | 592 | dat : piram |
| | 593 | port map ( |
| | 594 | clk => clk, |
| | 595 | resetn => resetn, |
| | 596 | sel => sel4, |
| | 597 | opc => opc, |
| | 598 | read => read, |
| | 599 | a => a, |
| | 600 | d => d, |
| | 601 | ack => ack, |
| | 602 | tout => tout |
| | 603 | ); |
| | 604 | |
| | 605 | tty : pitty |
| | 606 | port map ( |
| | 607 | clk => clk, |
| | 608 | resetn => resetn, |
| | 609 | sel => sel5, |
| | 610 | opc => opc, |
| | 611 | read => read, |
| | 612 | a => a, |
| | 613 | d => d, |
| | 614 | ack => ack, |
| | 615 | tout => tout |
| | 616 | ); |
| | 617 | |
| | 618 | ttz : pitty |
| | 619 | port map ( |
| | 620 | clk => clk, |
| | 621 | resetn => resetn, |
| | 622 | sel => sel9, |
| | 623 | opc => opc, |
| | 624 | read => read, |
| | 625 | a => a, |
| | 626 | d => d, |
| | 627 | ack => ack, |
| | 628 | tout => tout |
| | 629 | ); |
| | 630 | |
| | 631 | end structural; |
| | 632 | \end{verbatim} |
| | 633 | \end{multicols} |
| | 634 | |
| | 635 | \end{document} |
| | 636 | |
| | 637 | |