À partir de l'architecture du processeur 8085, lorsque ALU a effectué le calcul, le résultat est synchronisé vers l'accumulateur A au bord d'horloge suivant. Mais l'accumulateur A est directement câblé en tant qu'entrée ALU. Que se passe-t-il si le front d'horloge ne se soulève pas assez rapidement pour que A soit ajouté deux ou plusieurs fois, il serait extrêmement difficile de détecter une telle erreur, une telle conception est très " fragile "pour moi.
Sauf s'il existe un registre supplémentaire dans ALU pour enregistrer temporairement les résultats ALU?
https://en.wikipedia.org/wiki/Intel_8085#/media/File:Intel_8085_arch.svg
Réponses:
Comme @duskwuff le soupçonnait, je me suis penché sur cela. Pour répondre à la question, le 8085 possède deux registres supplémentaires dans l'ALU.
Le 8085 possède plusieurs registres "cachés": une paire WZ 16 bits et deux registres auxiliaires ALU 8 bits: ACT et TMP. WZ fait partie du fichier de registre, tandis que ACT, A (accumulateur) et TMP sont situés dans le circuit ALU lui-même.
Voici un schéma du fonctionnement de l'ALU:
Le registre ACT a plusieurs fonctions importantes. Tout d'abord, il contient l'entrée de l'ALU. Cela permet aux résultats de l'ALU d'être réécrits dans l'accumulateur sans perturber l'entrée, ce qui provoquerait une instabilité. Deuxièmement, l'ACT peut contenir des valeurs constantes (par exemple pour l'incrémentation ou la décrémentation, ou l'ajustement décimal) sans affecter l'accumulateur. Enfin, l'ACT permet les opérations ALU qui n'utilisent pas l'accumulateur.
Une conséquence intéressante de la configuration de l'ALU du 8085 est qu'une valeur ne peut être chargée dans l'accumulateur qu'après avoir traversé l'ALU.
Les détails sur le jeu de registres 8085 sont ici et les détails de l'ALU sont ici .
la source
Dans les conceptions synchrones, il est important pour le concepteur de s'assurer que de telles choses ne se produisent pas. Le registre, dans lequel les données sont "synchronisées", a des propriétés dynamiques spécifiques comme le temps de montée de l'horloge, le temps de maintien de l'horloge, les données stables avant et après le changement de signal d'horloge. Si le timing est violé, l'état résultant n'est pas garanti.
Dans votre cas particulier, ALU a son retard de propagation, et pour ajouter A deux fois, il devrait y avoir un certain temps avant que le nouveau A soit ajouté au A précédent dans l'additionneur et que le résultat apparaisse à sa sortie. Très probablement, il a été simulé et calculé qu'une telle chose ne se produira pas dans la plage de fréquences d'horloge autorisée définie pour l'appareil. C'est pourquoi la fiche technique a explicitement des valeurs d'horloge minimales et maximales. Pour 8085A-2, il est indiqué:
la source
L'accumulateur est le registre de sortie de l'ALU.
Le 8085 a une horloge à deux phases. Où une instruction d'horloge unique comme un NOP a pris 2 cycles d'horloge. Semblable au 8088 utilisé dans le PC IBM d'origine, le 8088 avait une horloge à quatre phases de 4 MHz et une instruction exécutée à une fréquence de 1 MHz.
Avec l'horloge à deux phases, vous avez deux cycles d'oscillateur pour chaque cycle d'instructions.
En interne, pour le chronométrage, n'importe quel front de l'une ou l'autre horloge peut être utilisé. Les horloges sont inversées, donc il y a en fait quatre horloges disponibles pour le chronométrage.
Ensuite, vous avez des verrous transparents qui se verrouillent sur le bord descendant et des bascules D-Flip qui se verrouillent sur le bord de l'horloge montant.
Un verrou transparent permet aux données d'entrée de se propager jusqu'à la sortie commençant au front montant de l'horloge, et les valeurs sont verrouillées sur le front descendant de l'horloge.
Le 8085 avait de nombreuses options pour éviter les conditions de course de propagation.
la source