Comment fonctionnent les signaux Active High et Active Low dans les systèmes embarqués?

8

Il s'agit du fonctionnement général des microcontrôleurs.

La programmation que nous faisons est convertie en 1 et en 0 par le compilateur et ces codes compréhensibles par la machine sont ensuite chargés dans le microcontrôleur.

Comment le microcontrôleur réagit à cela. Je veux dire, ces 1 et 0 sont-ils convertis en tension logique correspondante (5v et 0) par DAC? Si c'est comme ça, comment ce petit morceau de silicium décide-t-il quoi faire avec ces différentes combinaisons de 5v et 0v?

Je comprends que chaque CI est composé de portes logiques et que ces portes sont composées de transistors. Alors, comment ces transistors réagissent-ils aux diverses combinaisons de 5v et 0v?

Qu'est-ce qui les pousse à rechercher ces logiques. Je veux dire comment ils surveillent ces instructions lorsqu'ils sont allumés?

Donc, il doit certainement y avoir un système d'exploitation chargé dans le MCU qui lui dit de traiter et comment traiter ces instructions, n'est-ce pas? ..

La prochaine chose est .. considérez un temporisateur .. c'est simplement un registre qui incrémente d'un après chaque cycle d'horloge .. Le système d'exploitation n'est-il pas à nouveau chargé d'incrémenter le mcu après chaque horloge? Ai-je raison? Dans ce cas, dans quelle langue, tout le code d'un système d'exploitation est écrit?

Je peux simplement continuer mon travail avec la programmation du mcu pour différentes tâches mais aujourd'hui j'étais intéressé de savoir comment mon code est compris par cette machine.

Désolé que ma question soit longue à lire .. s'il vous plaît aidez-moi à apprendre ces choses de base ..

Merci d'avance..

VV Rao
la source
Je suppose que les gens auront ce genre de questions au début de leur carrière ..
VV Rao
message supprimé se sentait mal
Rick_2047

Réponses:

6

Il n'est pas nécessaire d'utiliser un DAC. Les tensions sont utilisées pour représenter les 1 et les 0 par la convention que tout ce qui est inférieur à 0,8 V (AKA «bas») est un zéro, et tout ce qui dépasse 2,4 V (AKA «haut») est un. Il est relativement simple de construire des circuits qui exécutent une logique sur ces tensions représentatives.

Par exemple, un circuit peut produire quelque chose dans la plage de 2,4 V à 5 V pour représenter «1» si l'une des entrées est supérieure à 2,4 V, ou quelque chose de moins de 0,8 V dans le cas contraire, et vous avez une porte OU. S'il nécessite les deux entrées représentant 1 pour produire 2,4 V, vous avez une porte ET. Un onduleur émet juste un niveau haut lorsque l'entrée est faible, et vice-versa. Vous pouvez construire des portes simples comme celles-ci avec seulement quelques transistors et effectuer une logique booléenne combinatoire. En utilisant des groupes de bits pour représenter des nombres, vous pouvez même créer des circuits pour ajouter des nombres avec une logique combinatoire, aucun logiciel requis.

Une fois que vous travaillez avec des portes, vous pouvez construire des tongs et, à partir de celles-ci, des registres et des compteurs. Les tongs vous permettent de stocker des 1 et des 0 à un moment donné et de les utiliser plus tard. Les registres et compteurs sont des circuits qui exécutent des fonctions sur des groupes de bits qui représentent des nombres. Un registre contient un numéro jusqu'à ce que vous y chargiez un nouveau numéro. Un compteur est comme un registre, mais possède une autre entrée qui fait incrémenter le nombre stocké. (La décrémentation est également possible). Cela vous place dans le domaine des machines à états et de la logique séquentielle, toujours aucun logiciel requis.

Les systèmes de mémoire sont un moyen de stocker un grand nombre de bits. Au niveau des composants, une partie de la mémoire est construite comme une énorme collection de bascules, mais le plus souvent, il existe une autre technologie (DRAM) qui, bien que n'étant pas exactement une bascule, fait la même chose.

Dans une autre étape, vous pouvez construire un système de logique séquentielle et combinatoire qui peut effectuer des opérations en fonction des bits stockés dans un système de mémoire, y compris l'écriture de nouvelles valeurs dans ce système de mémoire. Vous êtes maintenant arrivé au niveau du processeur, et tout ce que fait le processeur, c'est juste du matériel qui exécute de nombreuses tâches simples. (malgré les noyaux microprogrammés). À ce stade, les combinaisons particulières de bits que vous mettez dans le système de mémoire peuvent être considérées comme des logiciels en langage machine.

JustJeff
la source
Maintenant, j'ai compris que les transistors sont la base sur laquelle les processeurs sont créés, c'est-à-dire avec une porte comme nand, nous pouvons créer des bascules, des registres, des compteurs, alu et tout cela ensemble fait le système informatique. L'entrée des transistors peut être haute ou basse (over2.4v 0r under0.8v) .. Ma question est, quel est le périphérique qui interprète 1 et 0 du compilateur comme logique correspondante à ces transistors si aucun DAC n'est utilisé?
VV Rao
@Vicky Rao - Je pense que ce qui vous déroute, c'est que vous mélangez les niveaux d'abstraction. Rien n'est requis pour convertir la sortie du compilateur en niveaux logiques pour les transistors, car les logiciels 1 et 0 et les matériels 1 et 0 ne sont que des vues différentes de la même réalité physique. Ce qui à un niveau ressemble à des millions de transistors changeant d'état, à un autre niveau ressemble à un processeur exécutant un logiciel.
JustJeff
6

Obtenez le livre "Code: le langage caché du matériel informatique et des logiciels" de Charles Petzold . Il est génial, facile à lire et répondra à bon nombre de ces questions.

Si vous ne pouvez pas vous permettre le livre de Petzold, alors consultez "Comment les ordinateurs fonctionnent" de Roger Young . Il couvre une grande partie des mêmes choses, et les versions HTML et PDF sont gratuites.

Shawn J. Goff
la source
Un autre livre intéressant serait Les éléments des systèmes informatiques.
Rick_2047
5

Considérons un NPN BJT; un transistor. L'un des premiers découverts.

Vous devez maintenant le câbler de telle sorte que le collecteur soit connecté à une entrée logique variable et que l'émetteur soit connecté à une autre entrée logique, avec une résistance en série. Ensuite, une résistance de l'émetteur à la masse.

               logic
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 +-- output
                 |
                 /
                 \ 10k
                 /
                 |
                ---
                 -

Vous venez de construire une porte ET. La sortie n'est élevée que lorsque les deux entrées sont hautes. Ce n'est pas parfait du tout car cela dépend de l'entrée du collecteur, et parce qu'il ne se déploie pas bien, mais cela vous donne une idée de la façon dont les transistors peuvent être utilisés pour calculer une fonction.

Ensuite, vous pouvez également construire une porte NON;

                5V
                 |
                 /
                 \  10k
                 /
                 +-- output
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 |
                ---
                 -

L'ajout de cela à la sortie de la porte ET que nous venons de créer nous donne une porte NAND, et vous savez peut-être qu'avec une porte NAND, vous pouvez construire n'importe quelle forme de logique. Il a également l'avantage que le signal est mis en mémoire tampon, augmentant la capacité de fan out et de chaînage.

Les vrais processeurs utilisent rarement les BJT, mais plutôt la logique CMOS, mais les mêmes principes s'appliquent.

Thomas O
la source
Vous pouvez utiliser des transistors FET au lieu de NPN :)
endolith
C'est pourquoi j'ai ajouté ceci: "Les vrais processeurs utilisent rarement les BJT, mais à la place la logique CMOS, mais les mêmes principes s'appliquent." Les n-JFET et les n-MOSFET fonctionneraient probablement aussi bien que des formes plus estoriques comme les valves.
Thomas O
Vous pouvez également utiliser un PNP pour faire un NOT de la même manière que le AND avec le NPN
Matt Williamson
3

Peut-être devriez-vous rechercher des références de systèmes numériques ou regarder des trucs comme VHDL. Un MCU est essentiellement conçu avec des blocs de construction, qui peuvent être une variété de portes logiques et de blocs de construction (plus petits). En fin de compte, tout se résume aux portes logiques qui sont en effet composées de transistors. Un microcontrôleur simple typique comme un PIC18F ou quelque chose ne fonctionne pas sur un système d'exploitation. Le programme que vous y chargez est un tas d'instructions machine que le PIC exécute en continu. Tout le processus est effectué par le matériel.

Un processeur général a généralement un ALU (calcule le résultat d'une certaine instruction) et plus de blocs autour de lui qui charge les instructions, gère la pile et gère la mémoire. Le processeur a quelques registres pour travailler avec lui-même, principalement pour charger les entrées et stocker les résultats dans.

L'ALU gère les instructions avec certains codes de fonctionnement et entrées. Par exemple, une instruction typique pourrait être ADD 12 1, ce qui signifie 12 + 1 = 13. Le résultat est stocké dans un registre sur le processeur lui-même.

Selon l'architecture, l'ALU a par exemple une largeur de 8 bits. Un simple additionneur 8 bits peut être composé d'additionneurs 8x 1 bit liés (en utilisant des blocs pour construire un bloc plus grand). Un additionneur 1 bit peut être facilement écrit dans des portes logiques en utilisant l'algèbre booléenne. Écrire manuellement un additionneur entier de 8 bits avec uniquement des portes logiques serait une folie de travail. C'est comme écrire un programme sans avoir la possibilité d'utiliser n'importe quelle fonction ou sous-programme.

Pour que les systèmes numériques fonctionnent correctement, la plupart des blocs sont conçus pour une horloge. Chaque système numérique dispose d'un certain temps pour atteindre son état final. Cela est dû aux retards de commutation dans les transistors et les états influençant les autres états. Le signal d'horloge est quelque chose que vous devez connaître, la vitesse sur laquelle le processeur fonctionne. Une minuterie pourrait être un appareil vraiment simple qui a un petit bloc d'additionneur et incrémente de 1 à chaque fois qu'il obtient un tick d'horloge.

Hans
la source
3

C'est un gros sujet et je ne peux pas donner de réponse simple mais ...

Vous pouvez vous rapprocher un peu plus de cette réponse en faisant des divisions et des conquêtes, et puisque l'autre réponse essaie d'attaquer ce problème d'un point de vue matériel, j'essaierai d'une vue SW de haut niveau.

Si vous écrivez un logiciel en disons du code c (un niveau d'abstraction très élevé), vous ne voyez pas vraiment ce qui se passe, vous ne comprenez pas vraiment tout ce que vous demandez.

Mais commençons par là quand même.

Un programme simple qui inclut juste une variable.

int main(void)
{
    int i=0;
    while(1) {
        i++;
    }
}

Ensuite, nous devons obtenir le code assembleur afin de comprendre ce qui se passe. Cette étape peut être effectuée sur n'importe quelle plate-forme que vous utilisez, mais pour rester simple, j'utilise gcc sur un PC (mais cela n'a pas d'importance ...)

gcc -O0 -S main.c -o main.lst

Ensuite, nous nous retrouvons avec quelque chose comme ceci:

    .file   "main.c"
    .text
.globl main
    .type   main, @function
main:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $16, %esp
    movl    $0, -4(%ebp)
.L2:
    addl    $1, -4(%ebp)
    jmp .L2
    .size   main, .-main
    .ident  "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
    .section    .note.GNU-stack,"",@progbits

Ensuite, vous essayez de comprendre chaque ligne de code et ce qu'elle fait.

Et puis vous commencez à regarder comment chaque instruction est mise en œuvre ... Par exemple, le subl

    subl    $16, %esp

À ce stade, il est différent sur différentes architectures et x86, arm, pic est un peu différent ... Mais puisque mon exemple était x86.

Et à ce niveau, lorsque vous lisez la copie, la plupart des actions donneront l'impression que vous ne faites que déplacer des nombres, et dans un certain sens, c'est ce qui se passe. Nous avons un programme prédéfini que nous parcourons, ce programme est stocké dans une sorte de mémoire flash qui est généralement une sorte de logique électronique qui emprisonnera un niveau logique.

Si vous voyez une sorte de " Flip-flop " pour chaque bit, alors vous êtes un peu proche, et nous en avons besoin de beaucoup. Ici, nous commençons à trouver vos uns et vos zéros.

Ensuite, pour qu'une action se produise, nous ajoutons une logique cool qui peut transformer un nombre en un autre (le CPU lui-même).

Et puis nous suivons le programme une étape à la fois, et pour savoir où nous en sommes, nous avons un compteur de programmes (PC). Et déplacez les nombres vers l'arrière et le quatrième et stockez ceux dans une autre mémoire qui est également une sorte de grille avec des bascules.

Mais revenons à nouveau à un exemple spécifique, afin de mieux comprendre le CPU, nous pouvons jeter un œil à l' ALU et à cette image simplifiée . Lorsque vous pouvez voir que lorsque nous déplaçons des données dans ce bloc logique et sélectionnons une opération avec les broches OP, nous obtiendrons un nouveau résultat à la sortie. Que nous pouvons à notre tour revenir dans un endroit de la mémoire.

Et de maudire votre ALU dans votre partie CPU de votre MCU est bien plus complexe que celui-ci, mais il fonctionne avec le même principe de base.

À ce stade, nous pouvons en quelque sorte voir un circuit logique qui fait le "travail" d'un côté, et un certain stockage de l'autre côté. Et le stockage comprend deux parties, une pour le programme et une pour les données. Mais comment pouvons-nous réellement "bouger" alors, ceux-ci doivent être connectés d'une manière ou d'une autre ...

Et c'est là que nous connectons ces pièces avec certains un bus.

Un bus est juste quelques fils qui connectent les différentes parties ensemble, puis la logique de contrôle indique à la mémoire quelles données envoyer sur ce bus, et quelle partie du CPU qui doit écouter ces données qui ont été envoyées. Et cela se fait avec des lignes de contrôle parallèles qui activeront / désactiveront les différentes parties.

...


Donc, si vous prenez votre MCU de choix et disséquez un très petit programme, et tant que vous ne comprenez pas ce qui se passe, vous le disséquez encore plus jusqu'à ce que vous ayez un joli petit puzzle qui peut être utilisé pour créer un "MCU".

Et n'oubliez pas de lire la fiche technique de votre MCU et de voir avec quel type de pièces il a été fabriqué, comme le type de mémoire, l'alu, les bus, etc.

Espérons que cela aide un peu ???

Bonne chance

Johan
la source
votre stratégie d'explication en divisant les instructions a rendu les choses très faciles .. merci ..
VV Rao
2

Vous n'avez pas vraiment besoin de savoir ces choses à moins que vous ne soyez sur le point de concevoir des processeurs vous-même, mais tout se résume à une énorme machine à états implémentée dans le matériel.

Le plus gros problème avec ce genre de question est que la réponse est énorme et prend plusieurs années de cours universitaires, donc toute réponse que vous obtenez ici ne fera que rayer la surface.

Si vous voulez vraiment savoir ce qui se passe dans un CPU, jetez un œil au code source vhdl / verilog sur: http://opencores.org/projects

Apprendre juste vhdl et verilog va être une tâche de grande envergure en soi, donc vous êtes pour une longue lecture :)

dren.dk
la source
"énorme scène-machine" - cela ressemble à une production de Broadway.
OIO du
Heureusement, les réponses que ces personnes m'ont données ne me font pas rayer la surface comme vous l'avez mentionné, au lieu de cela, elle est claire comme du cristal .. Quoi qu'il en soit, merci mon pote ..
VV Rao
2

Je veux dire, ces 1 et 0 sont-ils convertis en tension logique correspondante (5v et 0) par DAC?

Non, pas un CAD. Les 1 et les 0 n'existent jamais vraiment. Ce n'est qu'une abstraction mathématique que nous utilisons pour faciliter la programmation. Les tensions numériques réelles peuvent être de 5 V, 3,3 V ou 1 V, selon le matériel. En fin de compte, un ordinateur n'est qu'une logique numérique. La mémoire stocke les 1 et les 0 sous forme de logique numérique, un circuit logique numérique les transfère de la mémoire au processeur, le processeur est un circuit logique numérique qui peut additionner, soustraire ou comparer des nombres binaires, etc.

comment ce petit morceau de silice

Silic a est du verre, un mélange de silicium et d'oxygène. Les copeaux sont fabriqués à partir de Silic pur sur , avec des impuretés ajoutées dans des endroits spécifiques pour faire tous les transistors.

Je comprends que chaque CI est composé de portes logiques

Les CI numériques sont fabriqués à partir de portes logiques et non de CI analogiques.

Alors, comment ces transistors répondent-ils aux diverses combinaisons de 5v et 0v?

Lisez l'exemple le plus simple, l' onduleur CMOS .

endolith
la source
Vous avez expliqué que le DAC n'est pas utilisé, 1 et 0 ne sont que des abstractions mathématiques que nous utilisons pour faciliter la programmation. Pouvez-vous ajouter un peu plus de détails à ce sujet en faisant référence au "compilateur"? le compilateur convertit le langage de haut niveau en 1 et 0. Vous avez dit que ces 1 et 0 sont stockés en mémoire sous forme de logique numérique, un circuit logique numérique les transfère de la mémoire vers le processeur. Quel est le nom du périphérique qui fait cette fonction ? Et encore une fois, l'entrée du processeur sera 5v ou 0v. Alors, quel appareil convertit le 1 et le 0 de la mémoire (en fait du compilateur) en 5v et 0v?
VV Rao
1
@Vicky: Il n'y a pas de conversion de "1" à 5 V. "1" et "0" ne sont que des étiquettes que nous donnons aux hautes et basses tensions lors des calculs avec des nombres binaires. Pour une logique simple de bas niveau qui ne fonctionne pas sur des nombres binaires, il est plus courant de les appeler "H" (haut) et "L" (bas).
endolith