Cette page contient les résultats obtenues par différents étudiants, ainsi que les erreurs de codages relevées dans les sources.
Note but est :
- D'expliquer les paramètres mesurés pour la vérification du code écrit par les étudiants.
- De permettre à chacun de comprendre les défaut de son propre code.
- De permettre aux futurs inscrits dans SE204 de ne pas renouveler ces erreurs.
Simulation MCE : pas de problème
Synthèse MCE : attention à la taille du module synthétisé : 24 cellules et non pas 32 (si 32 trouvez pourquoi)
Simulation MED : pas de problème
Style de codage :
- Ne pas utiliser de code structurel (un module pour un multiplexeur, un module pour un registre...) : tout MED tient dans un seul processus synchrone "always"....
- Ne pas travailler par recopie de code (R1
- Paramétrer tout ce qui peut l'être dans la mesure du possible.
- Pas d'utilisation du signal RESET dans une fonction combinatoire, on n'initialise que les registres pas les équation booléennes...
MEDIAN simu Boggart: pas de probème si ce n'est une mauvaise archi...
MEDIAN syn+ simu Boggart: Double test, synthèse puis simulation de Boggart. Evidemment, si la synthèse échoue, la simulation aussi.
- Ne pas utiliser un processus "initial" pour donner des valeurs initiales à un signal dans un module destiné à la synthèse. Dans le matériel, le temps "Zero" n'existe pas, seule une affectation explicite d'un registre sur action d'un signal de "reset' permet d'initialiser une valeur.
- De même pas de déclaration de signal de type "logic toto = 0" dans un module destiné à la synthèse; Cela n'initialise rien du tout dans le matériel....
- Pas de logique sur l'horloge : on ne manipule que les données données entrantes des registres pour décider de leur nouvelle valeur après le front d'horloge.
- Les processus synchrones avec RESET asynchrone doivent être écris de façon "simple" et systématique, en indiquant de manière non équivoque que le reset est bien prioritaire sur tout autre signal. On ne peut écrire que des choses du type :
- always @(posedge CLK or posedge RESET) if (RESET) blabla1 else blalbla2 et en aucun cas
- if (RESET || I=5 &&...) : le synthétiseur ne peut associer à cela des flipflops avec reset asynchrone...
- Ce type de construction, bien qu'aboutissant à des simulations correctes est faux car il ne correspond pas à des structures matérielles synthétisables correctement:
- CODE NON SYNTHETISABLE : always @(posedge CLK or negedge _RST or negedge DSI)
MEDIAN syn cells : Taille (en logic cells) du code synthétisé: vous remarquez une extrème variabilité de taille, une taille supérieure à 150 doit imposer une relecture attentive du code. (1000 signifie, non synthétisable) les raisons possibles sont les suivantes:
- Tous les Warnings de synthèse n'ont pas été analysés et traités en conséquence. Tout warning éléminé est une chance de plus d'obtenir une synthèse conforme à l'idée que vous vous en faisez.
- Registres de données inutilement dupliqués : estimez vous même le nombre de registres nécessaires et vérifiez dans les résultats de synthèse.
- Compteurs déclarés en "int" (32 bits) et utilisés d'une manière ne permettant pas au synthétiseur de réduire le nombre de bits au strict nécessaire: déclarez les variables et constantes en utilisant l'indicateur de taille le plus souvent possible. (logic [12:0] , plutôt que int..)
MEDIAN freq : Fréquence de fonctionnement du filtre. ras, il faudrait analyser la différence entre les implémentations à "70 Mhz" et celles à "130 Mhz".
MEDIAN qual : Un critère de qualité calculé à partir du rapport "Fréquence/Cells", uniquement valable pour ceux qui fonctionnent.
MEDIAN sans latch:
- Traquez les "latchs' : c'est le signe de processus combinatoires mal écrits, avec pour conséquence, augmentation de taille, diminution de performance et éventuellement non conformité à la simulation.
Résulats des années précédentes:
2011/2012 P1
| Nombre d'instances | frequence maximale |
| 75 | 266,951 |
| 69 | 261,78 |
| 80 | 278,629 |
| 61 | 146,972 |
| 242 | 85,121 |
| 91 | 257,533 |
| 86 | 263,783 |
| 152 | 164,447 |
| 56 | 288,434 |
| 80 | 235,349 |
| 69 | 268,745 |
| 59 | 253,614 |
| 65 | 215,517 |
| 83 | 253,614 |
| 56 | 286,369 |
| 80 | 261,097 |
2011/2012 P2
| Nombre d'instances | frequence maximale |
| 300 | 166,583 |
| 92 | 288,434 |
| 93 | 118,68 |
| 80 | 278,629 |
| 132 | 224,215 |
| 91 | 228,728 |
| 78 | 266,951 |
| 94 | 184,196 |
| 79 | 228,728 |
| 149 | 189,502 |
| 568 | 84,338 |
| 75 | 266,951 |
| 68 | 286,369 |
| 84 | 270,783 |
2013/2014 P1
| Nombre d'instances | frequence maximale |
| 93 | 227 |
| 117 | 158 |
| 113 | 241 |
| 68 | 266 |
| 1000 | 0 |
| 64 | 317 |
| 456 | 145 |
| 70 | 227 |
| 78 | 286 |
| 71 | 240 |
| 93 | 227 |
| 71 | 266 |
| 86 | 236 |
| 75 | 286 |
| 1000 | 0 |
| 65 | 266 |
| 72 | 235 |
| 1000 | 0 |
| 1000 | 10 |
| 78 | 278 |
| 98 | 204 |
| 85 | 164 |
2013/2014 P2
| Nombre d'instances | frequence maximale |
| 62 | 229 |
| 102 | 295 |
| 119 | 173 |
| 89 | 264 |
| 81 | 269 |
| 129 | 297 |
| 141 | 275 |
| 97 | 224 |
2014/2015 P1
| Nombre d'instances | frequence maximale |
| 100 | 255 |
| 293 | 157 |
| 1000 | 1 |
| 231 | 189 |
| 1000 | 1 |
| 52 | 286 |
| 1000 | 1 |
| 189 | 172 |
| 142 | 182 |
| 44 | 340 |
| 74 | 266 |
| 1000 | 1 |
| 1000 | 1 |
| 178 | 186 |
| 115 | 299 |
| 165 | 170 |
| 73 | 226 |
| 70 | 269 |
| 231 | 157 |
2014/2015 P1
| Nombre d'instances | frequence maximale |
| 113 | 227 |
| 68 | 235 |
| 1000 | 1 |
| 68 | 235 |
| 114 | 190 |
| 1000 | 1 |
| 94 | 267 |
| 200 | 120 |