85 | | 1. On commencera par introduire dans la règle "architecture" |
86 | | les actions de compilations permettant d'afficher le début et la fin de la section |
87 | | "architecture". |
88 | | 1. Introduire dans les règles "component" et "signal" |
89 | | les actions de compilation permettant d'afficher les components et les signaux. |
90 | | 1. Introduire dans les règles "instances", "links" et "link" les actions de |
91 | | compilation permettant d'afficher les instances. On pourra pour cela définir dans |
92 | | le fichier .vst un objet de type {{{link_t}}}, permettant de représenter un ensemble |
93 | | de links sous forme d'une liste chaînée. On pourra s'inspirer de ce qui a été |
94 | | fait dans la première étape pour l'objet {{{port_t}}}. |
95 | | 1. Vérifier que le fichier texte généré par votre parser respecte la syntaxe |
96 | | du format .vst, en utilisant le parser pour analyser le fichier qu'il a généré. |
| 85 | * On commencera par introduire dans la règle "architecture" les actions de compilations permettant d'afficher le début et la fin de la section "architecture". |
| 86 | * Introduire dans les règles "component" et "signal" les actions de compilation permettant d'afficher les components et les signaux. |
| 87 | * Introduire dans les règles "instances", "links" et "link" les actions de compilation permettant d'afficher les instances. On pourra pour cela définir dans le fichier ".vst" un objet de type {{{link_t}}}, permettant de représenter un ensemble de links sous forme d'une liste chaînée. On pourra s'inspirer de ce qui a été fait dans la première étape pour l'objet {{{port_t}}}. |
| 88 | * Vérifier que le fichier texte généré par votre parser respecte la syntaxe du format ".vst", en utilisant le parser pour analyser le fichier qu'il a généré. |
118 | | \begin{itemize}\itemsep=-.4ex |
119 | | \item {{{mbkenv}}} pour initialiser le fonctionnement des bibliothèques d'\textbf{Alliance} |
120 | | (cette fonction ne prend aucun paramètre et ne rend rien mais elle intialise un certain |
121 | | nombre de variables globales et elle lit l'environnement unix concernant Alliance. |
122 | | Elle doit etre invoquée au début de la fonction main(). |
123 | | \item {{{addlofig}}} pour créer l'\emph{entity} et les \emph{component}s; |
124 | | \item {{{getlofig}}} qui renvoie un pointeur vers une figure désignée par son nom; |
125 | | \item {{{addlocon}}} pour créer les \emph{port}s, aussi bien dans les figures que dans les instances; |
126 | | \item {{{addlosig}}} pour créer les \emph{signal}s; |
127 | | \item {{{addloins}}} pour créer les \emph{instance}s; |
128 | | \item {{{addchain}}} pour créer les bipointeurs; |
129 | | \item {{{reverse}}} pour «~retourner~» l'ordre des éléments dans une liste de type chain; |
130 | | \item {{{freechain+ pour libérer une liste créée par \verb+\addchain}}}; |
131 | | \item {{{namealloc}}} pour insérer tous les noms (chaînes de caractères) dans un dictionnaire. |
132 | | Grâce à cette fonction, $n$ pointeurs représentant $n$ chaînes de caractères identiques pointent |
133 | | sur une unique zone de mémoire, permettant de tester l'égalité des pointeurs (par {{{==}}}) |
134 | | en lieu et place de l'égalité de chaque caractère (par {{{strcmp}}}). |
| 114 | * {{{mbkenv}}} pour initialiser {{{Alliance}}} . Cette fonction ne prend aucun paramètre et ne rend rien mais elle intialise un certain nombre de variables globales et elle lit l'environnement unix concernant Alliance. Elle doit etre invoquée au début de la fonction main(). |
| 115 | * {{{addlofig}}} pour créer l'{{{entity}}} et les {{{component}}}s; |
| 116 | * {{{getlofig}}} qui renvoie un pointeur vers une figure désignée par son nom; |
| 117 | * {{{addlocon}}} pour créer les {{{port}}}, aussi bien dans les figures que dans les instances; |
| 118 | * {{{addlosig}}} pour créer les {{{signal}}}s; |
| 119 | * {{{addloins}}} pour créer les {{{instance}}}s; |
| 120 | * {{{addchain}}} pour créer les bipointeurs; |
| 121 | * {{{reverse}}} pour «renverser» l'ordre des éléments dans une liste de type chain; |
| 122 | * {{{freechain}}} pour libérer une liste créée par {{{addchain}}}; |
| 123 | * {{{namealloc}}} pour insérer tous les noms dans un dictionnaire. |
141 | | Indication : Pour construire la structure de données, on est amené à manipuler plusieurs |
142 | | structures lofig : On a une structure lofig correspondant à l'{{{entity}}} dont on souhaite |
143 | | construire la net-list, mais on est amené à construire une structure lofig pour chacune |
| 134 | '''Indication''' : Pour construire la structure de données ''lofig'', on est amené à manipuler plusieurs |
| 135 | structures de type ''lofig'' : On a une structure ''lofig'' correspondant à l'{{{entity}}} dont on souhaite |
| 136 | construire la net-list, mais on est amené à construire une structure ''lofig'' pour chacune |
151 | | 1. ajoutez la figure; |
152 | | 1. ajoutez les ports de la figure et les signaux externes; |
153 | | 1. ajoutez les components; |
154 | | 1. ajoutez les signaux internes; |
155 | | 1. ajoutez les instances. |
156 | | Vous ferez l'hypothèse simplificatrice que les connecteurs de |
157 | | l'instance (port map) \emph{sont dans le même ordre} que les connecteurs du |
158 | | modèle (component); |
| 144 | 1. créez la figure; |
| 145 | 1. créez les ports de la figure et les signaux externes; |
| 146 | 1. créez les components; |
| 147 | 1. créez les signaux internes; |
| 148 | 1. créez les instances. |
| 149 | |
| 150 | Vous ferez l'hypothèse simplificatrice que les connecteurs de l'instance (construction {{{port map}}} ) |
| 151 | sont dans le même ordre que les connecteurs du modèle (construction {{{component}}} ); |
161 | | la fonction {{{viewlofig}}}. Vous pouvez également sauvegarder sur disque la structure de données |
162 | | construite en mémoire en utilisant la fonction {{{savelofig}}}. |
163 | | Il est préférable de changer le nom de la figure avant d'effectuer la sauvegarde, |
164 | | sans oublier d'utiliser la fonction {{{namealloc}}}. |
| 154 | la fonction {{{viewlofig() }}}. Vous pouvez également sauvegarder sur disque la structure de données |
| 155 | construite en mémoire en utilisant la fonction {{{savelofig() }}}. |
| 156 | Il est préférable de changer le nom de la figure avant d'effectuer la sauvegarde pour éviter |
| 157 | d'écraser le fichier initial, sans oublier d'utiliser la fonction {{{namealloc() }}}. |