Pourquoi dans le microprocesseur 8085, la fréquence d'horloge est divisée par deux?


16

Pourquoi est-ce que la fréquence d'horloge produite est de 6,144 MHz, mais en interne (processeur 8085) n'utilise que 3,072 MHz. Ce qui conduit également à la valeur spécifique de 6,144 dans une horloge.

J'ai trouvé une réponse sur yahoo .... http://answers.yahoo.com/question/index?qid=20080810090119AAurr2i

mais je dois admettre que je ne l'ai pas encore bien compris. Est-ce que l'un d'entre vous pourrait jeter quelques mots à ce sujet, s'il vous plaît?


2
la réponse yahoo est très très pauvre. Veuillez me pardonner si vous connaissez l'écrivain.
Kortuk

hmm, je viens de prendre des microprocesseurs ce semestre, donc je ne sais pas à quel point cela aurait pu être mal. Je suppose que j'ai obtenu la réponse ici ... merci.
loxxy

1
Le MC6800 était encore plus exigeant. Il avait deux entrées d'horloge (phi1, phi2, déphasage d'environ 180 degrés) qui devaient ne pas se chevaucher , c'est-à-dire qu'une phase devait être faible pour certains n avant que l'autre ne puisse augmenter. Il y avait un IC oscillateur supplémentaire (MC6810?) Pour générer ces signaux d'horloge.
Curd

1
@Curd Nasty timing et il devait osciller très près des DEUX rails d'alimentation (rare à l'époque). pdf.datasheetarchive.com/indexerfiles/Scans-000/… MC6871. Le MC6810 était une puce RAM statique de 128 x 8 (!).
Spehro Pefhany

Réponses:


15

Une raison de diviser une horloge par deux est d'obtenir une onde carrée de rapport cyclique égal à 50%. Il se peut que le 8085 utilise en interne les deux fronts d'horloge et ne fonctionnerait pas si une moitié du cycle se révélait beaucoup plus courte que l'autre.

À l'époque où le 8085 était nouveau, ces beaux oscillateurs en conserve n'étaient pas courants, et les gens bricolaient souvent des circuits d'horloge à partir de cristaux discrets, de condensateurs et de portes logiques. La division par deux vous garantit des bords ascendants et descendants également espacés.

Quant à 6,144 MHz, vous constaterez qu'il peut être divisé par un entier pour obtenir des valeurs de débit en bauds communes, au moins jusqu'à 38400.


suivre ...

En regardant une fiche technique Intel pour le 8085, il y a trois déclarations intéressantes

  1. Le 8085 intègre toutes les fonctionnalités fournies par le générateur d'horloge 8224 et le contrôleur de système 8228 pour le 8080A.

  2. X1 et X2: sont connectés à un réseau cristal, LC ou RC pour piloter le générateur d'horloge interne. La fréquence d'entrée est divisée par 2 pour donner la fréquence de fonctionnement interne du processeur.

  3. CLK: sortie d'horloge à utiliser comme horloge système. La période de CLK est le double de la période d'entrée X1, X2.

Ainsi, les spéculations sur l'utilisation des bords étranges de l'horloge pour déplacer des éléments à l'intérieur, il devient évident que lorsqu'ils ont conçu le 8085, Intel remplaçait le besoin d'un contrôleur d'horloge spécial en intégrant cette fonctionnalité dans la puce. Diviser la base de temps X1-X2 en deux avant de la produire en tant que CLK garantit que le système obtient un bon rapport cyclique uniforme, si rien d'autre.


1
souvent, différentes étapes du microcontrôleur doivent être déphasées en raison d'un retard logique. l'utilisation d'un oscillateur à vitesse plus élevée et la division et l'utilisation des deux bords différents pour différents ensembles de logique peuvent réduire considérablement le coût de l'appareil. JustJeff est sur le point d'utiliser un oscillateur qui est un multiple des fréquences d'horloge standard. Cela peut rendre les transferts à grande vitesse très faciles.
Kortuk

2
Êtes-vous sûr de l'énoncé du cycle de service? J'avais l'impression qu'un cycle d'instructions peut nécessiter plusieurs cycles d'horloge (par exemple, un cycle d'instructions composé d'un cycle d'extraction et d'un cycle d'exécution). Je suis presque sûr que même les PIC modernes ont un cycle d'instruction en 4 étapes, c'est pourquoi il y a tout le Fosc / 4 dans toute la fiche technique
ajs410

1
@ ajs410 - le 8085 prendrait certainement plusieurs cycles d'horloge pour terminer une instruction; tous les micros 8 bits de cette époque (que je sache) ont pris au moins deux horloges pour faire quoi que ce soit. Ce dont je parle ici est purement interne à la puce. Si vous regardez les schémas fonctionnels de ces vieilles bêtes, vous pouvez voir qu'elles ont des bus internes, des registres temporaires et ainsi de suite, et ce sont ceux-là que je pense pouvoir utiliser les deux bords. Tout cycle de bus externe serait exécuté entre les bords de la même polarité.
JustJeff

6

Au moment où cette puce a été conçue, les gens utilisaient le moins de transistors possible dans le processeur, pour les rendre suffisamment petits pour s'adapter aux puces disponibles.

Je soupçonne que pratiquement tous les «registres» (à la fois les registres de jeux d'instructions visibles par le programmeur et les verrous de microarchitecture internes) dans un processeur de cette époque stockaient des données dans un verrou D transparent et sécurisé ou quelque chose de similaire. De nos jours, il y a beaucoup de transistors sur une puce, il est donc plus simple d'utiliser des bascules D maître-esclave complètes, même si elles utilisent deux fois plus de transistors.

De nombreuses instructions prennent des données d'un registre A, les combinent avec d'autres données avec l'ALU et stockent le résultat dans le registre A. C'est assez facile à faire si le registre A est implémenté avec une bascule D maître-esclave complète.

Mais si le registre A est un verrou D fermé et transparent, vous avez besoin d'horloges qui ne se chevauchent pas. Vous utilisez une impulsion sur une horloge pour stocker quelque résultat intermédiaire quelque part (alors que le registre A conserve sa constante de sortie), puis une impulsion sur une autre horloge pour charger le registre A avec la nouvelle valeur (tandis que le registre intermédiaire conserve sa constante de sortie).

Cela nécessite une horloge à 2 phases. Le moyen le plus simple de créer une horloge biphasée sans chevauchement (à l'époque où les transistors étaient rares) était un petit circuit externe qui prend une horloge d'entrée et la divise par deux.

Au fil du temps, les gens ont compris comment emballer de plus en plus de transistors sur un circuit intégré. Les concepteurs de CPU ont donc intégré de plus en plus de choses autour du CPU dans un système informatique complet sur la puce du CPU.

En lisant entre les lignes de l' article sur le signal d'horloge de Wikipedia , j'ai l'impression que les personnes qui ont conçu le 8085 et le 6502 et d'autres puces de cette époque avaient juste un peu plus de place que la génération précédente de processeurs intégrés, et ils ont décidé du meilleur l'utilisation de cette pièce était de mettre ce petit circuit externe sur puce. Mais ils ont gardé tous les registres dans le même verrou D fermé qu'avant.

C'est pourquoi la fréquence d'horloge est divisée par deux. Vous pouvez penser à la première impulsion d'horloge externe générant une impulsion sur le signal d'horloge interne phase_one pour mettre à jour ce registre de résultat intermédiaire, et la seconde impulsion de l'horloge externe générant une impulsion sur le signal d'horloge interne phase_two pour mettre à jour le registre visible par le programmeur.


Si un verrou ne passe jamais plus de quelques microsecondes sans être rechargé, on peut simplifier encore plus le circuit, de sorte qu'un "verrou" n'est rien de plus qu'une grille de passage à transistor unique et un onduleur.
supercat

1
Depuis la rédaction de ce qui précède, j'ai examiné la conception du 6502; de nombreux bus internes sont pilotés de manière inconditionnelle à un niveau élevé sur une phase d'horloge, puis pendant l'autre phase d'horloge, un registre sélectionné peut tirer les bits appropriés à un niveau bas. S'il y a par exemple cinq registres qui peuvent sortir sur le bus, cela signifie qu'au lieu d'avoir besoin d'un dispositif pull-up pour la sortie de chaque registre, la puce peut simplement utiliser un dispositif pull-up commuté et deux deux transistors câblés en série pour chaque registre tirer le bus vers le bas si nécessaire. Je m'attends à ce que le 8085 utilise presque certainement des astuces similaires.
supercat

2

Il existe de nombreuses raisons de diviser le cycle d'instructions en plusieurs cycles d'horloge. Un bon exemple est l'accès au bus de mémoire principal.

La plupart des processeurs modernes sont des architectures Von-Neumann; c'est-à-dire que leur code et leurs données existent tous les deux sur la même puce de mémoire. Eh bien, si vous voulez lire une instruction, et que cette instruction va charger une variable de la mémoire ... c'est deux accès à la mémoire. Mais la plupart de la mémoire est uniquement à port unique (c'est-à-dire qu'elle ne peut effectuer qu'une seule lecture ou écriture par cycle). Alors, comment lisez-vous les instructions et lisez votre variable?

La solution consiste à utiliser un cycle d'instruction en deux étapes. La première étape récupère l'instruction de la mémoire, et la deuxième étape peut ensuite lire (ou écrire!) La variable de la mémoire principale.

Certaines puces plus anciennes sont allées encore plus loin. À l'époque, si votre puce avait 16 bits de mémoire adressable, mais que le bus d'adresse externe n'est que de 8 bits, alors vous seriez familier avec l'activation du verrouillage d'adresse. Un cycle d'horloge envoie les 8 bits supérieurs de l'adresse 16 bits et le cycle d'horloge suivant envoie les 8 bits inférieurs. Un troisième cycle pourrait alors lire / écrire la variable de / vers la mémoire.

Il existe d'autres meilleures raisons d'avoir un cycle d'instructions de plusieurs cycles d'horloge. L'une des meilleures raisons est le pipelining. C'est une astuce que les processeurs modernes utilisent pour exploiter plus pleinement toutes les unités d'exécution disponibles dans une puce; par exemple, pendant qu'une instruction est en cours d'exécution, la suivante est récupérée en même temps.


3
Je ne pense pas que l'OP demande pourquoi vous diffuseriez une instruction sur plusieurs horloges, mais plutôt pourquoi le 8085 est conçu pour vous obliger à lui fournir une horloge 2X (qu'il divise ensuite en interne) par opposition à simplement prendre la destination fréquence d'horloge directement.
JustJeff

1
cependant, tout ce que vous avez dit sur les instructions est affiché.
JustJeff

1

En interne, le cœur du 8085A nécessite une horloge à deux phases. La logique interne qui dérive les deux phases d'horloge divise également l'horloge d'entrée par deux. Comme indiqué précédemment, la raison de l'utilisation d'une horloge d'entrée à 6,144 MHz est à des fins de débit en bauds, la puce fonctionnera très bien à 6 MHz. La puce est en fait évaluée à 3MHz nécessitant un cristal de 6MHz, mais fonctionne heureusement avec un 6.144MHz donnant une génération de débit en bauds plus facile (Un Uart pourrait être cadencé avec le 6.144MHz d'un oscillateur pilotant le 8085 ou à 3.072MHz de la sortie CLK du 8085's fournissant de nombreux taux de Baud utilisables). J'utilise toujours ces puces archaïques pour effectuer des fonctions spéciales dans certains de mes robots. J'horloge les Uarts avec leur propre oscillateur et j'horloge les 8085A avec un oscillateur à 6,4 MHz, qui fait tourner la puce à 3,2 MHz. Le 3. 2MHz se divise bien pour fournir l'horloge 40KHz pour mes transducteurs à ultrasons. Il est plus logique d'utiliser des appareils IC plus modernes dans mes robots, mais j'ai une tonne d'anciens 8085, Z80, 63C09 et 63C09E, 68B09 et 68B09E, etc. avec lesquels j'aime vraiment jouer.


0

L'horloge n'est qu'un moment où vous voulez qu'un événement se produise. Maintenant, nous ne préférons pas le déclenchement de niveau dans les circuits numériques parce que lorsque plus de temps est donné, une interaction peut se produire entre différents circuits dans le microprocesseur conduisant à des courts-circuits. Nous allons donc POUR LE DÉCLENCHEMENT DE BORD. Maintenant, le microprocesseur ne sait pas quand le déclenchement sur front s'est produit. Il ne comprend que 1 ou 0. Une bascule est donc requise pour produire 1 et 0 chaque fois qu'un front d'horloge est détecté. Ainsi, il devient nécessaire d'utiliser une bascule. Par conséquent, la fréquence d'horloge est divisée par deux.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.