Synthèse ASIC
(page d'accueil)
[ Exercice 1
Incrémenteur
]
[ Exercice 2
Style
]
[ Exercice 3
Synthétisabilité
]
[ Exercice 4
Echangeur
]
[ Exercice 5
Maximum
]
[ Exercice 6
AES
]

Styles de codages

1. Un style trop structurel nuit à la synthèse

Décrivez un multiplexeur MUX2 à deux entrées et à une sortie. A l'aide de ce composant, décrivez un multiplexeur MUX3 à trois entrées et à une sortie. Synthétisez et notez la taille de l'implémentation. Donnez une nouvelle architecture à MUX3, sous forme comportementale, et non plus hiérarchique, cette fois-ci. Synthétisez et comparez la surface obtenue. Cet exemple simpliste montre que le style de codage à préférer est celui de plus haut-niveau ou abstrait possible.

2. Petit mais costaud

Décrivez un multiplieur n x n vers 2 x n, pour une valeur de n qui vous semble compatible avec une application de votre choix. Comment calculer la division euclidienne ? On rappelle que ce calcul revient à trouver q et r tels que a x q = b + r. Comparer la taille d'un diviseur combinatoire à celle d'un multiplieur.

3. Une machine à états synchrone

Nous étudions notre premier circuit séquentiel (il y a des états) synchone (l'état est global). Il s'agit d'un contrôleur de bus. La spécification est donnée dans les deux pages web suivantes :
  1. Le contexte est résumé dans cette page.
  2. Le corrigé, avec la machine à état de Moore du contrôleur de bus, est disponible à cette adresse.
Le code du contrôleur ainsi que le script de synthèse ont déjà été écrits : Analysez le style de codage de la machine à états finis (ou Finite State Machine, alias FSM). Le script de synthèse impose une horloge à 667 MHz. L'optimisation est faite en surface préférentiellement. Les résultats obtenus par le synthétiseur sont consignés dans les fichiers : bus_ctrl.area et bus_ctrl.timing. En laissant le choix à pks_shell de l'encodage des états, nous obtenons : Cependant, avec un recodage manuel des états, on peut obtenir mieux. Décommentez les lignes --+ dans bus_ctrl.vhd et relancez la synthèse. On tombe cette fois-ci sur : Cette solution est donc préférable à tous points de vue. Nous venons de mettre le synthétiseur en défaut. En réalité, celui-ci choisit pas un encodage d'état particulier : il se contente d'associer à chaque valeur du type énuméré son indice. Cependant, notre gain n'est pas extraordinaire. Généralement, on perd plus à vouloir faire des choix qu'à laisser le synthétiseur optimiser, sauf si l'on a une très bonne raison.

4. Synthèse d'une RAM

Ce fichier décrit une RAM asynchrone : N'ayant pas accès à un générateur de RAM, nous souhaitons la synthétiser. Comment pks_shell s'en sort-il ? Comment en faire une ROM ? On détaillera en particulier la question de l'initialisation.