Pourquoi un chemin de données dans les microcontrôleurs a-t-il toujours une puissance de 2 de large?

8

Les chemins de données des microcontrôleurs ont toujours une puissance de 2 larges: 4 bits, 8, 16, 32 bits, etc. Même les PIC qui utilisent des instructions larges de 12 bits sont des contrôleurs 8 bits. Pourquoi? Y a-t-il un avantage de conception à cela? Quel est le problème avec un bus de données 12 bits ou un contrôleur 7 bits ?

edit
Le 7 bits n'a pas beaucoup de sens, mais c'est ce qui m'a fait penser à la question. Les réponses se réfèrent à la tradition des 8 bits. Mais 16 bits n'est pas 8 bits, et 24 bits peuvent gérer des données 8 bits ainsi que 16 bits, non? Pourquoi ont-ils sauté le 24 bits pour passer au 32 bits?

Federico Russo
la source
7
le sacrilège le brûle sur le bûcher!
kenny
@kenny Ouais, je suis aussi indigné! :-)
m.Alin
@ m.Alin l'horreur! Avant de vous en rendre compte, les gens reviendront à la conception de tranches et à l'écriture de leurs propres assembleurs.
kenny
Il devrait être condamné à 3 ans d'utilisation uniquement de vieux télétypes à code 5 bits (ceux-ci avaient des codes séparés pour "shift" pour accéder à plus de lettres, entre autres joies).
Olin Lathrop
2
... parce qu'un peu en soi est une puissance de 2? :-P
shimofuri

Réponses:

8

La tradition a une forte attraction. Mais il en va de même de l'interopérabilité. Presque tous les formats de fichiers et protocoles de communication existants fonctionnent sur des octets. Comment les gérez-vous dans votre microcontrôleur 7 bits?

Le PIC s'en tire en ayant l'espace d'instruction entièrement séparé et programmé à l'avance de l'extérieur. Il y a une certaine valeur à raser les bits du jeu d'instructions, car c'est la seule chose que vous pouvez contrôler vous-même en tant que concepteur de microprocesseurs.

Si vous voulez une architecture extrême, vous pouvez coder le jeu d'instructions par Huffman, vous donnant une longueur variable .

pjc50
la source
7

4 bits sensibles minimum:
0-9 Les données numériques nécessitent 4 bits
0-9 = 10 mots.
Taille de mot binaire suivante la plus élevée = 4 bits = 16 mots possibles.
Donc données BCD (décimal codé binaire) = 4 bits

Saut logique suivant 8 bits
0-9, az, AZ = 10 + 26 + 26 = 62 mots.
Pourrait gérer avec 7 bits = 128 mots.
8 est à peu près aussi simple que 7 et autorise 2 x 4 bits afin que les données numériques puissent être compressées 2 par octet de 8 bits.

Alors 12 bits (pas 16)?:
Prochaine taille logique = 12 bits et le PDP-8 précoce et très réussi utilisait 12 bits. 12 bits utilisés pour les données et le programme autorisent 2 ^ 12 = 4096 emplacements d'adresse. Comme Bill Gates l'a peut-être dit une fois, "4K de mémoire devrait être suffisant pour n'importe qui".

La famille PDP-11 suivante utilisait 16 bits.

Doubler pour la compatibilité.
Si vous souhaitez interagir avec des systèmes à des niveaux inférieurs et supérieurs et si vous souhaitez avoir des appareils plus capables dans la même famille, être capable de gérer 2 mots du plus petit système au sein du plus grand mot du système est très logique.


MAIS

Les exceptions qui prouvent la règle:

"Toujours" est un mot si fort :-) Exemples
1 bit, 12 bits, 18 bits, 36 bits ci-dessous.
Les machines 18 et 36 bits n'ont jamais été des microcontrôleurs.
1 et 12 bits étaient.


Le système à un bit mentionné ci-dessous est vraiment un système de "bits aléatoires comme bon vous semble". Le mot de données à un bit est essentiellement un indicateur go / no-go produit par calcul et est utilisé pour activer ou désactiver l'activité du programme. Le compteur de programmes est un compteur progressif qui avance dans la mémoire de façon cyclique avec le code activé ou désactivé selon les besoins. Très très très méchant en effet. Au moment de son arrivée sur le marché, les processeurs 8 bits de l'époque étaient assez matures et le processeur 1 bit n'avait jamais vraiment de sens. Je ne sais pas combien il a jamais été utilisé.


1 bit !!!:

Motorola MC14500B J'ai reçu une mention honorable de Jack Gansell pour la meilleure description de cet appareil :-)

Fiche technique - cliquez sur la page pour télécharger le PDF.

entrez la description de l'image ici


12 bits:

Harris HM-6100 alias Intersil IM6100 - wannabee mini-ordinateur 12 bits] ( http://www.classiccmp.org/dunfield/other/i6100cfs.pdf )

Basé sur le mini-ordinateur 12 bits DEC PDP-8 très réussi.

Aperçu

  • La mémoire de programme et la mémoire de données occupent le même espace mémoire. La taille totale de la mémoire directement adressable est de 4 K mots. La taille du mot est de 12 bits. Le 6100 n'a pas de mémoire de pile.

    La taille de la mémoire du programme est de 4 K mots. Toutes les instructions conditionnelles permettent au processeur d'ignorer uniquement l'instruction suivante. Pour aller conditionnellement à une adresse arbitraire en mémoire lorsque certaines conditions sont remplies, le code doit exécuter l'instruction "sauter si la condition n'est pas remplie" en premier et placer une instruction de saut inconditionnel direct ou indirect après l'instruction de saut. Des instructions inconditionnelles peuvent être utilisées pour sauter directement dans la page courante (127 mots), ou sauter indirectement dans tout l'espace mémoire (4 K mots). Le 6100 prend en charge les appels de sous-programme, mais, en raison du manque de mémoire de pile, l'adresse de retour des sous-programmes est stockée en mémoire . Il n'y a pas d'instruction "retour du sous-programme" - le sous-programme doit utiliser un saut indirect pour revenir à l'appelant.

    La taille de la mémoire de données est de 4 K mots. Les données sont accessibles directement dans la page zéro (0000h - 007Fh) ou dans la page actuelle de 127 mots. Les données sont accessibles indirectement n'importe où dans 4 K mots de mémoire.

Wikipédia - Intersil 6100

Le PDP-8 & Intersil 6100 avait 16 instructions très riches. Il n'y a AUCUNE instruction de soustraction.
L'instruction ADD est nommée TADD pour vous rappeler qu'il s'agit d'un complément à 2, donc nous n'avons pas besoin d'aucune instruction ... soustraire.


18 bits, 36 bits autres - la famille PDP:

Processeur de données programmé Wikipedia

PDP1 - 18 bits

PDP2 - 24 bits sont morts

PDP3, PDP6 - 36 bits


Manuel de l'utilisateur PDP-12 (préliminaire - Wow.
Malgré la numérotation, il s'agit du pré-PDP16 - un PDP-8 sur les stéroïdes avec une capacité d'E / S analogiques - et une machine de laboratoire d'ingénierie. J'aurais pu en avoir un gratuitement si j'avais voulu, mais il n'aurait pas pu être installé dans un endroit sensible - ou insensible. Le
premier jeu sur ordinateur auquel j'ai joué était sur l'un d'eux.
Space War. La
machine était dans deux petites armoires.
Vous ouvriez une porte et pénétriez à l'intérieur pour faire des choses à son rythme. internes.

Russell McMahon
la source
Si vous voulez une pièce de production 24 bits, les GPU R300 / 420 d'ATI (cartes 9500-X600 et X700-850) conviennent parfaitement.
Dan est en train de jouer par Firelight le
L'idée d'un micro à un bit semble intéressante, mais dans quelle mesure une puce comme la MC14500B était-elle utile en pratique? Je penserais qu'avoir des données d'entrée contrôler un bit d'adresse de programme (en utilisant un verrou et un multiplexeur 2: 1) serait plus efficace que d'essayer d'utiliser des instructions pour gérer l'état. J'ai trouvé une fiche technique des années 1990 pour la pièce, ce qui suggère qu'elle est restée un certain temps, mais je suis curieux de savoir comment une telle puce serait réellement utilisée.
supercat
@supercat - J'ai trouvé une référence où un concepteur a dit qu'il avait une vieille conception discrète de wirewrap que vous avez remplacée par une basée sur un MC14500B et au fil des ans, le client en a acheté un certain nombre. Cela dit, un appareil plus paralysé et incapable serait difficile à imaginer.
Russell McMahon
Je ne peux pas vraiment imaginer la psychologie du design des années 1970, mais le contrôleur de lecteur de disquette de Steve Wozniak (présenté dans Apple] [) démontre qu'il ne faut pas beaucoup de logique discrète pour construire un "ordinateur". Après avoir consulté le manuel de ce MC14500B, j'ai réfléchi à la manière de concevoir un système pour exécuter du code à partir d'une PROM en utilisant une logique discrète (en dehors de la PROM elle-même). Je pense que les tripes de ma machine seraient un verrou transparent 8 bits, une bascule 8 bits et un quad NAND, et éventuellement un retard RC (selon les exigences de configuration / maintien pour les E / S). Une instruction 16 bits par cycle.
supercat
Sept bits de la bascule entraîneraient les bits d'adresse supérieurs de la PROM, et le bit inférieur serait piloté par l'horloge. Au cours de la première moitié de chaque cycle, le verrou transparent échantillonnerait les six bits de sortie supérieurs (adresse d'E / S) et le périphérique effectuerait une lecture d'E / S. L'entrée E / S piloterait le septième bit de verrouillage transparent, et 3 NAND agiraient comme un multiplexeur en utilisant l'entrée verrouillée pour sélectionner Q0 ou Q1 dans la PROM pour alimenter le bit de verrouillage transparent restant. Au cours de la seconde moitié de chaque cycle, effectuez une écriture d'E / S avec l'adresse et les données verrouillées.
supercat
7

Parce que la plupart du monde a convergé sur le stockage, la communication et la gestion des données informatiques en morceaux de 8 bits. Ce n'est pas une norme officielle, mais c'est une norme ad hoc très solide.

Dans le passé, il y avait des machines qui géraient des multiples autres que 8 bits dans leurs chemins de données. Les exemples incluent les séries CDC Cyber ​​6000 et 7000 et le PDP-8. Les machines CDC utilisaient des octets de 6 bits, et le PDP-8 avait un mot large de 12 bits sans moyen spécial de traiter uniquement les quantités de 8 bits. Il y avait certainement d'autres machines dans cette catégorie aussi. La raison pour laquelle vous n'en entendez pas beaucoup parler aujourd'hui est que les gens ont décidé qu'ils voulaient des machines capables de bien gérer leurs octets 8 bits, et c'est ce que font les fabricants. Dans quelle mesure pensez-vous qu'un microcontrôleur 7 bits se vendrait? Celui qui en ferait un serait ridiculisé et trouverait alors peu de clients. Ce serait une proposition commerciale stupide.

Vous pouvez voir des preuves supplémentaires des «octets» non 8 bits si vous regardez les normes Internet. Ils utilisent délibérément le terme "octet" car à l'époque il n'y avait pas d'accord universel qu'un octet était toujours de 8 bits. De nos jours, le sens de l'octet a convergé pour signifier 8 bits binaires et vous vous feriez rire de la ville si vous essayez de l'utiliser différemment.

Olin Lathrop
la source
2

Il y a un peu d'efficacité mélangée à beaucoup de compatibilité descendante comme raison de ce choix de conception commun.

Si mon chemin de données fait 7 bits de large, j'ai besoin de 3 bits pour représenter une ligne donnée de ce chemin. Étant donné que je vais gaspiller trois bits, je pourrais aussi bien les utiliser pleinement, à la fois pour l'efficacité et pour éliminer un chemin mort qui pourrait entraîner un bug de plantage.

Les types de données les plus courants sont basés sur un quartet de 4 bits, et la plupart d'entre eux sont basés sur un octet de 8 bits. En choisissant d'utiliser une autre base, vous devrez peut-être recourir à un code étrange et inefficace pour gérer les types de données courants. Par exemple, mon ordinateur 7 bits nécessiterait 5 espaces mémoire pour gérer n'importe lequel des nombres 32 bits, y compris les virgules flottantes, qui sont très courants dans l'industrie d'aujourd'hui.

Si ma machine ne dépendait pas de données externes, je pourrais probablement m'en tirer, mais les contrôleurs de moteur, les encodeurs, les capteurs de température et la plupart des dispositifs et capteurs d'interface du monde réel prennent en charge ces unités standard.

Ce n'est pas qu'il est impossible d'interfacer un ordinateur 7 bits avec un port USB, mais vous allez faire beaucoup de tests supplémentaires et exécuter beaucoup plus d'instructions traitant toutes ces 5 transactions unitaires pour les types de données 32 bits que vous ne le feriez si vous ajouté un peu plus à votre chemin de données et est tombé en ligne avec le reste de l'industrie.

Il a en grande partie commencé et fusionné à la forme actuelle en raison de l'efficacité de l'adressage des bits, cependant, c'est la cause première. Si, par exemple, vous deviez créer un ordinateur trinaire (3 états plutôt que 2 états par bit), vous verriez les tailles de bits les plus efficaces à 3, 9, 27, 81, etc. Vous verriez également des tentatives moins efficaces de 18, 24, 33 et 66 dans le but de fournir une compatibilité plus étroite avec les systèmes binaires.

Adam Davis
la source
1
"Les types de données les plus courants sont basés sur un quartet 4 bits". Je ne pense pas que ce soit vrai. Les données texte (il y en a beaucoup ) sont basées sur des octets, et les données numériques (y compris compressées / encodées) sont souvent basées sur 16 bits ou 32 bits. La seule utilisation des données 4 bits à laquelle je pense est le BCD, mais l'OMI est très limitée.
stevenvh
@stevenvh Je pense qu'il fait référence à la grande utilisation de HEX pour regrouper les données ... Je dirais que c'est vrai, dans les architectures, vous voyez souvent cette décomposition
clabacchio
1

C'est plus facile car cela vous permet de spécifier un nombre de bits dans un certain nombre de bits. Cela peut sembler une astuce de salon, mais les jeux d'instructions le font tout le temps. Pensez par exemple à une instruction "décalage à gauche":

SHL R1,4

Si vous avez un nombre de bits qui est une puissance de deux, vous pouvez encoder l'opérande en un nombre fixe de bits sans aucun gaspillage.

drxzcl
la source
1
J'y ai pensé aussi, mais je ne suis pas sûr que ce soit une raison suffisante pour baser une architecture complète dessus.
stevenvh
1
Un facteur plus important, je pense, est la possibilité de stocker et d'accéder aux données dans des tableaux de bits. L'utilisation de tels tableaux ne représente pas une grande partie de ce que font les ordinateurs, mais ils sont rarement rares. Sur une machine avec par exemple des octets de 8 bits, l'élément i d'un tableau peut être lu via arr[i >> 3] >> (i & 7)ou en testant s'il arr[i >> 3] & mask[i & 7]est différent de zéro (certains CPU préfèrent une approche à l'autre). Faire une telle chose avec une taille de mot sans puissance de deux serait beaucoup plus difficile.
supercat
@supercat Pas beaucoup plus difficile, mais beaucoup plus lent. On remplace simplement un quart de travail par une division. Je suis sûr que vous le savez déjà, mais je pensais juste que cela valait la peine d'être souligné.
Roman Starkov
0

En ce qui concerne mes connaissances en électronique numérique, la raison semble être assez évidente. Le fait est que, pour tous les systèmes numériques, nous utilisons le concept de système numérique binaire. Cela signifie que nous n'avons que deux niveaux de fonctionnement, à savoir 0 ou 1. Donc, toute combinaison possible au niveau matériel doit être une combinaison de 0 et de 1. Donc, si nous devons effectuer 4 tâches différentes, nous avons besoin de 2 variables, pour 32 tâches, nous avons besoin de 5 variables et ainsi de suite (la logique étant 2 ^ n où n est le nombre de variables). Donc, comme nous ne traitons que de deux niveaux, nous sommes donc obligés d'avoir une combinaison en tant que puissance de 2 seulement, ce qui représente donc 2,4,8,16,32,64,128,256 et ainsi de suite ...... ..

naved
la source
1
Cela n'explique pas les pouvoirs de 2 pour la longueur du mot. Vous mentionnez vous-même une longueur de 5 comme suffisante pour 32 combinaisons. OP demande pourquoi il n'y a pas de contrôleurs 5 bits.
stevenvh
@stevenvh: C'est très bien monsieur. J? ai compris. Je ne me suis peut-être pas concentré sur la question correctement. Je vous remercie.
naved
J'ai déplacé votre réponse à un commentaire, que vous pouvez utiliser dans la case ci-dessous. Les réponses sont ciblées pour fournir du contenu sur la question, le reste est pour les commentaires.
clabacchio
0

J'admets que je n'ai fait qu'écrémer les autres réponses, mais un détail clé ne semble qu'indirectement abordé: la vitesse logique et la compacité.

Si vous deviez empaqueter des valeurs 24 bits de manière contiguë et pouvoir également y accéder de manière adressée en octets, la logique de traitement devrait alors être divisée par 3 pour l'accès aux mots. La division est assez chère à faire en logique (vérifiez simplement la référence de votre processeur préféré - l'instruction de division est lente), à ​​moins qu'elle ne soit spécifiquement par une puissance de 2; dans ce cas, vous ignorez simplement les bits les plus bas (ce que le logiciel fait par décalage de bits). C'est la même raison fondamentale pour laquelle nous préférons les accès alignés.

Il est bien sûr possible de concevoir un processeur autour de ces limites, peut-être même de coder les accès de mots comme quatrième valeur d'adresse (car deux bits sont nécessaires pour sélectionner parmi trois octets), et je ne serais pas terriblement surpris de le voir dans un DSP (comme un GPU); mais ce n'est pas la norme pour les processeurs. Cela finirait également par un étrange 4 / 3ème pas pour les accès aux tableaux d'octets, qui nécessiteraient une gestion similaire aux numéros BCD. Il devient ainsi beaucoup plus efficace de gérer un tableau de vecteurs 3x8 bits au lieu de 8 bits.

Yann Vernier
la source