L'exécution d'un algorithme dans une machine repose sur les opérations suivantes :
Exemple de problème : Identifier si un nombre de 4 octets est premier.
Ce que l'on pourrait faire :
On aurait alors un circuit logique extrêmement complexe, au fonctionnement presque instantané, sans programme. Mais ce circuit ne sait faire que cela ! Fabriquer un tel circuit serait utile si on avait besoin de faire souvent ce calcul de façon extrêmement rapide.
Dans ce cas, la structure du circuit agit comme une mémoire qui aurait figé toutes les possibilités de nombres premiers de moins de 32 bits.
def estPremier(nombre):
d = 2
while d**2 <= nombre and nombre%d != 0:
d += 1
return d**2 > nombre
Ce programme est une succession de commande qui se déroule dans un ordre précis. Les calculs ne se font pas tous en même temps. Le système doit mémoriser les résultats de calcul pour pouvoir les utiliser ensuite.
Pas de mémoire → pas de temps, pas d'avant ou d'après. Séquentiel → mémoire.
On ne peut pas créer une ligne directe pour chaque paire de circuit devant communiquer. À la place, les données circulent sur un bus.
Conséquence : Il faut définir à chaque instant quel circuit écrit (WRite) sur le bus et quel circuit lit (ReaD)
C'est la structure générale adoptée par tous les microprocesseurs depuis les années 1950.
PL = 0.L'unité de séquencement doit être capable de générer des successions de signaux de façon à faire agir les différents blocs dans un ordre précis.
Exemple : Demander à la mémoire de se positionner en ligne 50, demander à la mémoire de placer le contenu de cette ligne sur le bus de données, demander à un registre de copier ce qui est présent sur le bus de données…