Le calcul de
se fait donc en quatorze étapes, et à chaque fois une
étape doit être complètement achevé pour exécuter la suivante. Pour cela on doit
travailler de manière synchrone avec une horloge.
Ainsi à chaque front montant de l'horloge, l'exécution d'une nouvelle étape est lancée. La difficulté consiste ici à trouver la fréquence d'horloge appropiée. Elle doit être suffisamment rapide pour que l'ensemble du calcul se réalise dans la contrainte de temps spécifiée par le cahier des charges, mais suffisamment lente pour rester compatible avec le temps de traversée des différents composants14.
De l'analyse précédente, nous en avons déduit la machine d'état représentée à la figure 4.
A chaque étape, l'UC doit envoyer les commandes appropriées pour charger le(s) bon(s) registre(s), selectionner la bonne opération de l'UAL, rendre passant les bons tristates, etc... Ainsi dans la machine d'état, chaque étape sera représentée comme suit:
Qui peut se décoder par:
Pour implémenter la machine d'état en VHDL, une machine de MOORE a été retenue. Deux processus s'exécutent en parallèle: l'un est le processus de synchronisation sensible à l'horloge, au reset et aux signaux de débordement de l'UAL et du multiplieur. L'autre contient la machine d'état et est sensible au signal ready qui provient de l'interface et à un signal ETAT_ACTUEL. Ce dernier contient le code de l'état à exécuter, et chaque fois qu'il est modifié, le processus est lancé. Ainsi toutes les instructions de l'état concerné sont exécutées, parmi elles une permet de modifier le signal ETAT_ACTUEL pour passer à l'état suivant.
Une telle modification de ce signal ne peut se réaliser que de manière synchrone, à chaque coup d'horloge on change d'état.
Il est à noter que si le reset ou l'un des signaux de débordement de l'UAL et du multiplieur passe à l'état actif (état 1), on réinitialise l'ensemblre du calcul15. Pour le reset cette action est compréhensible, mais peut paraître surprenante pour les deux autres signaux. Mais nous avons jugé bon de réinitialiser l'UC dans le cas d'un débordement, car cela signifie que la donnée est erronée16. La réinitialisation de l'UC correspond au retour à l'état ETAT0, que nous considérons comme état de repos de notre ASIC.