Wie funktionieren das Active High- und das Active Low-Signal in eingebetteten Systemen?


8

Hier geht es darum, wie Mikrocontroller im Allgemeinen funktionieren.

Die Programmierung, die wir durchführen, wird vom Compiler in Einsen und Nullen konvertiert, und dieser maschinenverständliche Code wird dann in den Mikrocontroller geladen.

Wie reagiert der Mikrocontroller darauf? Ich meine, werden diese Einsen und Nullen vom DAC in entsprechende Logikspannung (5 V und 0) umgewandelt? Wenn es so ist, wie entscheidet dieses kleine Stück Silizium, was mit diesen verschiedenen Kombinationen von 5 V und 0 V zu tun ist?

Ich verstehe, dass jeder einzelne IC aus Logikgattern besteht und diese Gatter aus Transistoren bestehen. Wie reagieren diese Transistoren also auf verschiedene Kombinationen von 5 V und 0 V?

Was lässt sie nach diesen Logiken suchen? Ich meine, wie sie diese Anweisungen überwachen, wenn sie eingeschaltet sind?

Es muss also sicher ein Betriebssystem in das mcu geladen sein, das es anweist, es zu verarbeiten und wie man diese Anweisungen verarbeitet, nicht wahr?

Das nächste ist ... Betrachten Sie einen Timer ... es ist einfach ein Register, das nach jedem Taktzyklus um eins erhöht wird. Weist das Betriebssystem die mcu nicht erneut an, nach jedem Takt zu erhöhen? Habe ich recht? In diesem Fall wird in welcher Sprache der gesamte Code für ein Betriebssystem geschrieben?

Ich kann einfach meine Arbeit mit der Programmierung des mcu für verschiedene Aufgaben fortsetzen, aber heute war ich interessiert zu wissen, wie mein Code von dieser Maschine verstanden wird.

Es tut mir leid, dass meine Frage lang zu lesen ist. Bitte helfen Sie mir, diese grundlegenden Dinge zu lernen.

Danke im Voraus..


Ich nehme an, die Leute werden diese Art von Fragen zu Beginn ihrer Karriere haben.
VV Rao

gelöschte Nachricht fühlte sich schlecht an
Rick_2047

Antworten:


6

Es ist nicht erforderlich, einen DAC zu verwenden. Spannungen werden verwendet, um Einsen und Nullen gemäß der Konvention darzustellen, dass alles unter 0,8 V (AKA 'niedrig') eine Null ist und alles über 2,4 V (AKA 'hoch') eine Eins ist. Es ist relativ einfach, Schaltungen zu konstruieren, die Logik für diese repräsentativen Spannungen ausführen.

Zum Beispiel kann eine Schaltung etwas im Bereich von 2,4 V bis 5 V ausgeben, um '1' darzustellen, wenn entweder der Eingang über 2,4 V liegt oder etwas weniger als 0,8 V, und Sie haben ein ODER-Gatter. Wenn beide Eingänge 1 darstellen müssen, um 2,4 V auszugeben, haben Sie ein UND-Gatter. Ein Wechselrichter gibt nur dann ein High aus, wenn der Eingang niedrig ist, und umgekehrt. Sie können einfache Gatter wie diese mit nur wenigen Transistoren erstellen und eine kombinatorische boolesche Logik ausführen. Durch die Verwendung von Bitgruppen zur Darstellung von Zahlen können Sie sogar Schaltkreise zum Hinzufügen von Zahlen mit kombinatorischer Logik erstellen, ohne dass Software erforderlich ist.

Sobald Sie mit Gates arbeiten, können Sie Flip-Flops und daraus Register und Zähler erstellen. Mit Flip-Flops können Sie Einsen und Nullen ab einem bestimmten Zeitpunkt speichern und später verwenden. Register und Zähler sind Schaltungen, die Funktionen für Gruppen von Bits ausführen, die Zahlen darstellen. Ein Register enthält eine Nummer, bis Sie eine neue Nummer in das Register laden. Ein Zähler ist wie ein Register, hat jedoch einen anderen Eingang, durch den die gespeicherte Nummer erhöht wird. (Dekrementierung ist ebenfalls möglich). Dies versetzt Sie in den Bereich von Zustandsautomaten und sequentieller Logik, dennoch ist keine Software erforderlich.

Speichersysteme sind eine Möglichkeit, eine große Anzahl von Bits zu speichern. Auf Komponentenebene wird ein Teil des Speichers wie eine riesige Sammlung von Flip-Flops aufgebaut, aber häufiger gibt es eine andere Technologie (DRAM), die zwar nicht gerade ein Flip-Flop ist, aber dasselbe tut.

Als weiteren Schritt können Sie ein System sequentieller und kombinatorischer Logik erstellen, das Operationen in Abhängigkeit von den in einem Speichersystem gespeicherten Bits ausführen kann, einschließlich des Zurückschreibens neuer Werte in dieses Speichersystem. Jetzt sind Sie auf der Ebene des Prozessors angekommen, und alles, was der Prozessor tut, ist nur Hardware, die viele einfache Aufgaben ausführt. (ungeachtet mikroprogrammierter Kerne). Zu diesem Zeitpunkt können die bestimmten Kombinationen von Bits, die Sie in das Speichersystem eingeben, als Maschinensprachen-Software betrachtet werden.


Jetzt habe ich verstanden, dass Transistoren die Basis sind, auf der Prozessoren erzeugt werden, dh mit einem Gate wie n und wir können Flipflops, Register, Zähler, Alu erzeugen und all diese zusammen bilden das Computersystem. Der Transistoreingang kann hoch oder niedrig sein (über 2,4 V oder unter 0,8 V). Meine Frage ist, welches Gerät interpretiert 1 und 0 vom Compiler als entsprechende Logik für diese Transistoren, wenn kein DAC verwendet wird.
VV Rao

@ Vicky Rao - Ich denke, was Sie verwirrt, ist, dass Sie Abstraktionsebenen mischen. Es ist nichts erforderlich, um die Compilerausgabe in Logikpegel für Transistoren umzuwandeln, da Software 1 und 0 sowie Hardware 1 und 0 nur unterschiedliche Ansichten derselben physischen Realität sind. Was auf einer Ebene aussieht wie Millionen von Transistoren, die ihren Zustand ändern, sieht auf einer anderen Ebene aus wie ein Prozessor, auf dem Software ausgeführt wird.
JustJeff


5

Betrachten Sie einen NPN BJT; ein Transistor. Einer der ersten entdeckt.

Jetzt verdrahten Sie es so, dass der Kollektor mit einem variablen Logikeingang verbunden ist und der Emitter mit einem anderen Logikeingang verbunden ist, wobei ein Widerstand in Reihe geschaltet ist. Dann ein Widerstand vom Emitter zur Masse.

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

Sie haben gerade ein UND-Gatter erstellt. Der Ausgang ist nur dann hoch, wenn beide Eingänge hoch sind. Es ist keineswegs perfekt, da es von der Eingabe in den Kollektor abhängt und nicht gut auffächert, aber es gibt Ihnen eine Vorstellung davon, wie Transistoren zur Berechnung einer Funktion verwendet werden können.

Dann können Sie auch ein NOT-Gate erstellen.

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

Wenn Sie dies zum Ausgang des gerade erstellten UND-Gatters hinzufügen, erhalten Sie ein NAND-Gatter, und Sie wissen möglicherweise, dass Sie mit einem NAND-Gatter jede Form von Logik konstruieren können. Es hat auch den Vorteil, dass das Signal gepuffert wird, was den Lüfterausgang und die Verkettungsfähigkeit erhöht.

Echte Prozessoren verwenden selten BJTs, sondern CMOS-Logik, aber es gelten dieselben Prinzipien.


Sie könnten FETs anstelle von NPNs verwenden :)
Endolith

Deshalb habe ich Folgendes hinzugefügt: "Echte Prozessoren verwenden selten BJTs, sondern CMOS-Logik, aber es gelten dieselben Prinzipien." n-JFETs und n-MOSFETs würden wahrscheinlich genauso gut funktionieren wie estorischere Formen wie Ventile.
Thomas O

Sie können auch ein PNP verwenden, um ein NICHT auf die gleiche Weise wie das UND mit dem NPN zu tun
Matt Williamson

3

Vielleicht sollten Sie einige Referenzen zu digitalen Systemen nachschlagen oder sich mit Dingen wie VHDL befassen. Eine MCU besteht im Wesentlichen aus Bausteinen, bei denen es sich um eine Vielzahl von Logikgattern und (kleineren) Bausteinen handeln kann. Letztendlich geht es um Logikgatter, die tatsächlich aus Transistoren bestehen. Eine typische einfache MCU wie ein PIC18F oder etwas anderes führt kein Betriebssystem aus. Das Programm, das Sie in das Programm laden, besteht aus einer Reihe von Maschinenanweisungen, die der PIC kontinuierlich ausführt. Die gesamte Verarbeitung erfolgt über Hardware.

Ein allgemeiner Prozessor hat normalerweise eine ALU (berechnet das Ergebnis eines bestimmten Befehls) und mehrere Blöcke um ihn herum, die Befehle laden, den Stapel verwalten und den Speicher verwalten. Der Prozessor verfügt über einige Register, mit denen er selbst arbeiten kann, hauptsächlich zum Laden von Eingaben und Speichern von Ergebnissen. Möglicherweise sehen Sie nicht viel davon in C oder einer anderen Sprache, aber viel davon in Assembly.

Die ALU verarbeitet Anweisungen mit bestimmten Betriebscodes und Eingaben. Ein typischer Befehl könnte beispielsweise ADD 12 1 sein, was 12 + 1 = 13 bedeutet. Das Ergebnis wird in einem Register auf dem Prozessor selbst gespeichert.

Je nach Architektur ist die ALU beispielsweise 8 Bit breit. Ein einfacher 8-Bit-Addierer kann aus 8x 1-Bit-Addierern bestehen, die miteinander verbunden sind (wobei Blöcke verwendet werden, um einen größeren Block zu erstellen). Ein 1-Bit-Addierer kann mithilfe der Booleschen Algebra leicht in Logikgatter geschrieben werden. Das manuelle Aufschreiben eines ganzen 8-Bit-Addierers mit nur logischen Gattern wäre ein wahnsinniger Arbeitsaufwand. Das ist so, als würde man ein Programm schreiben, ohne überhaupt Funktionen oder Unterprogramme verwenden zu können.

Damit die digitalen Systeme ordnungsgemäß funktionieren, sind die meisten Blöcke auf Taktbasis ausgelegt. Jedes digitale System benötigt eine bestimmte Zeit, um seinen Endzustand zu erreichen. Dies ist auf Schaltverzögerungen in Transistoren und Zuständen zurückzuführen, die andere Zustände beeinflussen. Das Taktsignal ist etwas, mit dem Sie vertraut sein sollten, die Geschwindigkeit, mit der der Prozessor läuft. Ein Timer kann ein wirklich einfaches Gerät sein, das einen kleinen Addiererblock hat und jedes Mal um 1 erhöht wird, wenn es einen Takt gibt.


3

Dies ist ein großes Thema und ich kann keine einfache Antwort geben, aber ...

Sie können dieser Antwort ein wenig näher kommen, indem Sie einige geteilte und erobern, und da die andere Antwort versucht, dieses Problem aus hw-Sicht anzugreifen, werde ich es aus einer hochrangigen SW-Sicht versuchen.

Wenn Sie eine Software in C-Code schreiben (ein sehr hohes Maß an Abstraktion), sehen Sie nicht wirklich, was passiert, und verstehen nicht wirklich alle Liebhaber-Dinge, nach denen Sie fragen.

Aber fangen wir trotzdem dort an.

Ein einfaches Programm, das nur eine Variable enthält.

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

Dann müssen wir den Assembler-Code abrufen, damit wir verstehen können, was los ist. Dieser Schritt kann auf jeder Plattform ausgeführt werden, aber um es einfach zu halten, verwende ich gcc auf einem PC (aber es spielt keine Rolle ...)

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

Dann haben wir so etwas:

    .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

Dann versuchen Sie, jede Codezeile zu verstehen und zu verstehen, was sie bewirkt.

Und dann fangen Sie an zu untersuchen, wie jede Anweisung implementiert wird ... Zum Beispiel das subl

    subl    $16, %esp

Zu diesem Zeitpunkt ist es auf verschiedenen Architekturen unterschiedlich und x86, arm, pic ist irgendwie anders ... Aber da mein Beispiel x86 war.

Und auf dieser Ebene sehen die meisten Aktionen beim Lesen der Kopie so aus, als würden Sie nur Zahlen verschieben, und in gewissem Sinne geschieht dies. Wir haben ein vordefiniertes Programm, das wir durchlaufen. Dieses Programm wird in einer Art Flash-Speicher gespeichert, bei dem es sich normalerweise um eine elektronische Logik handelt, die einen Logikpegel abfängt.

Wenn Sie für jedes Bit eine Art " Flip-Flop " sehen, sind Sie ziemlich nah dran, und dann brauchen wir viele davon. Hier fangen wir an, Ihre Einsen und Nullen zu finden.

Damit eine Aktion ausgeführt werden kann, fügen wir eine coole Logik hinzu, die eine Zahl in eine andere Zahl umwandeln kann (die CPU selbst).

Und dann folgen wir dem Programm Schritt für Schritt und um zu wissen, wo wir sind, haben wir einen Programmzähler (PC). Und verschieben Sie die Zahlen zurück und viertens und speichern Sie diese in einem anderen Speicher, der auch eine Art Gitter mit Flip-Flops ist.

Aber lassen Sie uns noch einmal auf ein bestimmtes Beispiel zurückkommen. Um die CPU ein wenig besser zu verstehen, können wir uns die ALU und dieses vereinfachte Bild ansehen . Wenn Sie sehen, dass wir am Ausgang ein neues Ergebnis erhalten, wenn wir Daten in diesen Logikblock verschieben und eine Operation mit den OP-Pins auswählen. Dass wir wiederum an einen Ort in der Erinnerung zurückkehren können.

Und Ihre ALU in Ihrem CPU-Teil Ihrer MCU zu verfluchen, ist viel komplexer als diese, aber sie funktioniert nach dem gleichen Grundprinzip.

An diesem Punkt sehen wir eine Art Logikschaltung, die auf der einen Seite die "Arbeit" erledigt, und auf der anderen Seite etwas Speicher. Der Speicher besteht aus zwei Teilen, einem für das Programm und einem für die Daten. Aber wie "bewegen" wir uns dann tatsächlich, diese müssen irgendwie miteinander verbunden sein ...

Und hier verbinden wir diese Teile mit einem Bus.

Ein Bus besteht nur aus einigen Drähten, die die verschiedenen Teile miteinander verbinden. Die Steuerlogik teilt dem Speicher dann mit, welche Daten auf diesen Bus gesendet werden sollen und welcher Teil der CPU diese gesendeten Daten abhören soll. Dies geschieht mit einigen parallelen Steuerleitungen, die die verschiedenen Teile aktivieren / deaktivieren.

...


Wenn Sie also ein mcu Ihrer Wahl nehmen und ein sehr kleines Programm sezieren, und solange Sie nicht verstehen, was passiert, sezieren Sie es noch mehr, bis Sie ein schönes kleines Puzzle haben, mit dem Sie ein "mcu" erstellen können.

Und vergessen Sie nicht, das Datenblatt für Ihr mcu zu lesen und zu prüfen, mit welchen Teilen es hergestellt wurde, z. B. mit welcher Art von Speicher, Alu, Bussen usw. usw.

Hoffe das hilft ein wenig ???

Viel Glück


Ihre Strategie, es durch Aufteilen der Anweisungen zu erklären, machte es wirklich einfach. Danke.
VV Rao

2

Sie müssen diese Dinge nicht wirklich wissen, es sei denn, Sie möchten CPUs selbst entwerfen, aber alles hängt von einer riesigen Zustandsmaschine ab, die in Hardware implementiert ist.

Das größte Problem bei dieser Art von Fragen ist, dass die Antwort riesig ist und mehrere Jahre Universitätskurse in Anspruch nimmt. Jede Antwort, die Sie hier erhalten, wird nur die Oberfläche zerkratzen.

Wenn Sie wirklich wissen möchten, was in einer CPU steckt, schauen Sie sich den Quellcode von vhdl / verilog an: http://opencores.org/projects

Nur vhdl und verilog zu lernen, wird eine große Aufgabe für sich sein, also wirst du lange lesen :)


"riesige Bühnenmaschine" - das klingt nach einer Broadway-Produktion.
OIO

Glücklicherweise lassen mich die Antworten, die diese Leute gegeben haben, nicht die Oberfläche kratzen, wie Sie erwähnt haben, sondern sie kristallklar machen. Wie auch immer, danke Kumpel.
VV Rao

2

Ich meine, werden diese Einsen und Nullen vom DAC in entsprechende Logikspannung (5 V und 0) umgewandelt?

Nein, kein DAC. Die Einsen und Nullen existieren nie wirklich. Sie sind nur eine mathematische Abstraktion, mit der wir die Programmierung vereinfachen. Die tatsächlichen digitalen Spannungen können je nach Hardware 5 V oder 3,3 V oder 1 V betragen. Letztendlich ist ein Computer nur digitale Logik. Der Speicher speichert die Einsen und Nullen als digitale Logik, eine digitale Logikschaltung überträgt sie vom Speicher zum Prozessor, der Prozessor ist eine digitale Logikschaltung, die Binärzahlen addieren, subtrahieren oder vergleichen kann usw.

Wie macht dieses kleine Stück Kieselsäure

Silic a ist Glas, eine Mischung aus Silizium und Sauerstoff. Chips werden aus reinem silic gemacht auf , mit Verunreinigungen an bestimmten Orten hinzugefügt , um alle Transistoren zu machen.

Ich verstehe, dass jeder einzelne IC aus Logikgattern besteht

Digitale ICs bestehen aus Logikgattern, nicht aus analogen ICs.

Wie reagieren diese Transistoren auf verschiedene Kombinationen von 5 V und 0 V?

Lesen Sie das einfachste Beispiel, den CMOS-Inverter .


Sie haben erklärt, dass DAC nicht verwendet wird. 1 und 0 sind nur mathematische Abstraktionen, die wir verwenden, um die Programmierung zu vereinfachen. Können Sie diesbezüglich unter Bezugnahme auf "Compiler" etwas mehr Details hinzufügen? Der Compiler konvertiert die Hochsprache in 1 und 0. Sie sagten, dass diese 1 und 0 als digitale Logik im Speicher gespeichert sind. Eine digitale Logikschaltung überträgt sie vom Speicher zum Prozessor. Wie heißt das Gerät, das diese Funktion ausführt? ? Und wieder ist der Eingang des Prozessors 5V oder 0V. Welches Gerät konvertiert die 1 und 0 aus dem Speicher (tatsächlich vom Compiler) in 5 V und 0 V?
VV Rao

1
@ Vicky: Es gibt keine Konvertierung von "1" in 5 V. "1" und "0" sind nur Bezeichnungen, die wir hohen und niedrigen Spannungen geben, wenn wir mit Binärzahlen rechnen. Für einfache Low-Level-Logik, die nicht mit Binärzahlen arbeitet, werden sie häufiger als "H" (hoch) und "L" (niedrig) bezeichnet.
Endolith
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.