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?
microcontroller
architecture
Federico Russo
la source
la source
Réponses:
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 .
la source
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.
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.
la source
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.
la source
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.
la source
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":
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.
la source
arr[i >> 3] >> (i & 7)
ou en testant s'ilarr[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.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 ...... ..
la source
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.
la source