¿Cómo funcionan las señales Active High y Active Low en los sistemas integrados?

8

Se trata de cómo funcionan los microcontroladores en general.

La programación que hacemos se convierte en 1 y 0 por el compilador y este código comprensible de la máquina se carga en el microcontrolador.

¿Cómo responde el microcontrolador a esto? Quiero decir, ¿son estos 1 y 0 convertidos en el voltaje lógico correspondiente (5v y 0) por DAC? Si es así, ¿cómo decide esta pequeña pieza de silicio qué hacer con estas diversas combinaciones de 5v y 0v?

Entiendo que cada IC está hecho de compuertas lógicas y estas compuertas están compuestas de transistores. Entonces, ¿cómo responden estos transistores a varias combinaciones de 5v y 0v?

¿Qué los hace buscar estas lógicas? Quiero decir, ¿cómo monitorean estas instrucciones cuando se encienden?

Entonces, ciertamente debe haber un sistema operativo cargado en el mcu que le indique que procese y cómo procesar estas instrucciones, ¿no?

Lo siguiente es ... considere un temporizador ... es simplemente un registro que se incrementa en uno después de cada ciclo de reloj ... ¿No es nuevamente el sistema operativo el que le indica al MCU que se incremente después de cada reloj? Estoy en lo cierto? En ese caso, ¿en qué idioma se escribe todo el código para un sistema operativo?

Simplemente puedo continuar mi trabajo con la programación de mcu para diferentes tareas, pero hoy estaba interesado en saber cómo esta máquina entiende mi código.

Lamento que mi pregunta sea larga de leer ... por favor, ayúdenme a aprender estas cosas básicas ...

Gracias por adelantado..

VV Rao
fuente
Supongo que la gente tendrá este tipo de preguntas durante el inicio de su carrera ..
VV Rao
mensaje eliminado se sintió mal
Rick_2047

Respuestas:

6

No hay necesidad de usar un DAC. Los voltajes se usan para representar 1's y 0's por la convención de que cualquier cosa por debajo de 0.8V (AKA 'bajo') es un cero, y cualquier cosa por encima de 2.4V (AKA 'alto') es uno. Es relativamente simple construir circuitos que realicen lógica en estos voltajes representativos.

Por ejemplo, un circuito puede emitir algo en el rango de 2.4V a 5V para representar '1' si cualquiera de las entradas está por encima de 2.4V, o algo menos de 0.8V de lo contrario, y tiene una puerta OR. Si requiere que ambas entradas representen 1 para emitir 2.4V, tiene una compuerta AND. Un inversor solo emite un valor alto cuando la entrada es baja, y viceversa. Puede construir puertas simples como estas con solo unos pocos transistores y realizar una lógica booleana combinatoria. Al usar grupos de bits para representar números, incluso puede construir circuitos para agregar números con lógica combinatoria, sin necesidad de software.

Una vez que esté trabajando con puertas, puede construir chanclas y, a partir de ellas, registros y contadores. Las chanclas le permiten almacenar 1 y 0 desde un punto en el tiempo y usarlos más adelante. Los registros y contadores son circuitos que realizan funciones en grupos de bits que representan números. Un registro contiene un número hasta que cargue un nuevo número en él. Un contador es como un registro, pero tiene otra entrada que hace que el número almacenado se incremente. (La disminución también es posible). Esto lo coloca en el ámbito de las máquinas de estado y la lógica secuencial, aún así, no se requiere software.

Los sistemas de memoria son una forma de almacenar cantidades masivas de bits. A nivel de componente, parte de la memoria se construye como una gran colección de flip-flops, pero más comúnmente existe otra tecnología (DRAM) que, aunque no es exactamente un flip-flop, hace lo mismo.

Como un paso más, puede construir un sistema de lógica secuencial y combinatoria que puede llevar a cabo operaciones dependiendo de los bits almacenados en un sistema de memoria, incluida la escritura de nuevos valores en ese sistema de memoria. Ahora que ha llegado al nivel del procesador, y todo lo que hace el procesador, es solo hardware que realiza muchas tareas simples. (no obstante los núcleos microprogramados). En este punto, las combinaciones particulares de bits que coloca en el sistema de memoria pueden considerarse software de lenguaje de máquina.

JustJeff
fuente
Ahora he entendido que los transistores son la base sobre la cual se crean los procesadores, es decir, con una compuerta como nand, podemos crear flipflops, registros, contadores, alu y todos estos juntos forman el sistema informático. La entrada de los transistores puede ser alta o baja (más de 2.4v 0r menos de 0.8v). Mi pregunta es, ¿cuál es el dispositivo que interpreta 1 y 0 del compilador como la lógica correspondiente a estos transistores si no se utiliza DAC?
VV Rao
@Vicky Rao - Creo que lo que te confunde es que estás mezclando niveles de abstracción. No se requiere nada para convertir la salida del compilador a niveles lógicos para los transistores, porque el software 1 y 0, y el hardware 1 y 0, son solo vistas diferentes de la misma realidad física. Lo que en un nivel parece millones de transistores que cambian de estado, en otro nivel parece un procesador que ejecuta software.
JustJeff
5

Considere un NPN BJT; Un transistor. Uno de los primeros descubiertos.

Ahora lo conecta de manera tal que el colector esté conectado a una entrada lógica variable, y el emisor esté conectado a otra entrada lógica, con una resistencia en serie. Luego, una resistencia del emisor a tierra.

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

Acaba de construir una puerta AND. La salida solo es alta cuando ambas entradas son altas. No es perfecto de ninguna manera, ya que depende de la entrada al colector y porque no se despliega bien, pero le da una idea de cómo se pueden usar los transistores para calcular una función.

Entonces, también puedes construir una puerta NOT;

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

Agregar esto a la salida de la compuerta AND recién construida nos da una compuerta NAND, y quizás sepa que con una compuerta NAND puede construir cualquier forma de lógica. También tiene la ventaja de que la señal está protegida, lo que aumenta el abanico y la capacidad de encadenamiento.

Los procesadores reales rara vez usan BJT, pero en su lugar la lógica CMOS, pero se aplican los mismos principios.

Thomas O
fuente
Podrías usar FET en lugar de NPN :)
endolith
Es por eso que agregué esto: "Los procesadores reales rara vez usan BJT, pero en su lugar la lógica CMOS, pero se aplican los mismos principios". Los n-JFET y los n-MOSFET probablemente funcionarían tan bien como las formas más estóricas como las válvulas.
Thomas O
También podría usar un PNP para hacer un NO de la misma manera que el AND con el NPN
Matt Williamson
3

Tal vez debería buscar algunas referencias de sistemas digitales o buscar cosas como VHDL. Una MCU está diseñada básicamente con bloques de construcción, que pueden ser una variedad de puertas lógicas y bloques de construcción (más pequeños). En última instancia, todo se reduce a puertas lógicas que de hecho están compuestas por transistores. Un MCU simple típico como un PIC18F o algo no ejecuta un sistema operativo. El programa que carga en él son un montón de instrucciones de la máquina que el PIC ejecuta continuamente. Todo el proceso se realiza por hardware.

Un proccesor general generalmente tiene una ALU (calcula el resultado de una determinada instrucción) y más bloques a su alrededor que carga las instrucciones, administra la pila y administra la memoria. El procesador tiene algunos registros para trabajar con él, principalmente para cargar entradas y almacenar resultados. Es posible que no vea mucho de esto en C u otro lenguaje, pero mucho en ensamblador.

La ALU maneja instrucciones con ciertos códigos de operación y entradas. Por ejemplo, una instrucción típica podría ser ADD 12 1, lo que significa 12 + 1 = 13. El resultado se almacena en un registro en el propio procesador.

Dependiendo de la arquitectura, la ALU tiene, por ejemplo, 8 bits de ancho. Un simple sumador de 8 bits puede estar compuesto de 8 sumadores de 1 bit unidos (utilizando bloques para construir un bloque más grande). Un sumador de 1 bit se puede escribir fácilmente en puertas lógicas utilizando álgebra booleana. Escribir un sumador de 8 bits completo manualmente con solo usar puertas lógicas sería una cantidad increíble de trabajo. Es como escribir un programa sin tener la capacidad de utilizar ninguna función o subrutinas.

Para que los sistemas digitales funcionen correctamente, la mayoría de los bloques están diseñados para funcionar según el reloj. Cada sistema digital tiene una cierta cantidad de tiempo requerido para alcanzar su estado final. Esto se debe a retrasos en el cambio de transistores y estados que influyen en otros estados. La señal del reloj es algo con lo que debería estar familiarizado, la velocidad con la que funciona el procesador. Un temporizador podría ser un dispositivo realmente simple que tiene un pequeño bloque de sumador y se incrementa en 1 cada vez que se activa el reloj.

Hans
fuente
3

Este es un gran tema y no puedo dar una respuesta simple pero ...

Puede acercarse un poco más a esta respuesta dividiendo y conquistando, y dado que la otra respuesta intenta atacar este problema desde un punto de vista hw, lo intentaré desde una vista SW de alto nivel.

Si escribe algún software en digamos código c (un nivel muy alto de abstracción), realmente no ve lo que está sucediendo, realmente no comprende todas las cosas de amantes que está preguntando.

Pero comencemos allí de todos modos.

Un programa simple que solo incluye una variable.

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

Luego, necesitamos obtener el código del ensamblador para que podamos entender lo que está sucediendo. Este paso se puede hacer en cualquier plataforma que use, pero para simplificarlo uso gcc en una PC (pero no importa ...)

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

Luego terminamos con algo como esto:

    .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

Luego intenta comprender cada línea de código y lo que hace.

Y luego comienzas a ver cómo se implementa cada instrucción ... Por ejemplo, el subl

    subl    $16, %esp

En este punto, es diferente en diferentes arquitecturas y x86, arm, pic es algo diferente ... Pero como mi ejemplo fue x86.

Y en este nivel, cuando lees la copia, la mayoría de las acciones parecerán que solo estás moviendo números, y en cierto sentido esto es lo que está sucediendo. Tenemos un programa predefinido que atravesamos, este programa se almacena en algún tipo de memoria flash que generalmente es algún tipo de lógica electrónica que atrapará un nivel lógico.

Si ves algún tipo de " Flip-flop " para cada bit, entonces estás un poco cerca, y entonces necesitamos muchos de esos. Aquí comenzamos a encontrar sus unos y ceros.

Luego, para que se produzca alguna acción, agregamos una lógica genial que puede transformar un número en otro número (la CPU misma).

Y luego seguimos el programa paso a paso, y para saber dónde estamos tenemos un contador de programa (PC). Y mueva los números hacia atrás y cuarto y almacénelos en otra memoria que también es una especie de cuadrícula con flip-flops.

Pero volvamos a un ejemplo específico nuevamente, para comprender un poco mejor la CPU, podemos echar un vistazo a la ALU y a esta imagen simplificada . Donde puede ver que cuando movemos datos a este bloque lógico y seleccionamos alguna operación con los pines OP, obtendremos un nuevo resultado en la salida. Que a su vez podemos regresar a algún lugar en la memoria.

Y para maldecir su ALU en su CPU, la parte de su MCU es mucho más compleja que esta, pero funciona con el mismo principio básico.

En este punto, podemos ver algún circuito lógico que hace el "trabajo" en un lado, y algo de almacenamiento en el otro lado. Y el almacenamiento tiene dos partes, una para el programa y otra para los datos. Pero, ¿cómo nos "movemos" realmente, entonces esos deben estar conectados de alguna manera ...

Y aquí es donde conectamos esas partes con un autobús.

Un bus son solo algunos cables que conectan las diferentes partes, y luego la lógica de control le dice a la memoria qué datos enviar a este bus, y qué parte de la CPU debe escuchar estos datos enviados. Y esto se hace con algunas líneas de control paralelas que habilitarán / deshabilitarán las diferentes partes.

...


Entonces, si toma su mcu de elección y disecciona un programa muy pequeño, y siempre que no entienda lo que está sucediendo, lo diseccionará aún más hasta que tenga un pequeño rompecabezas que pueda usarse para crear un "mcu".

Y no se olvide de leer la hoja de datos de su mcu y ver qué tipo de partes se hizo, como qué tipo de memoria, aluminio, buses, etc.

Espero que esto ayude un poco ???

Buena suerte

Johan
fuente
su estrategia de explicarlo dividiendo las instrucciones lo hizo realmente fácil ... gracias ...
VV Rao
2

Realmente no necesita saber estas cosas a menos que esté a punto de diseñar CPU usted mismo, pero todo se reduce a una gran máquina de estado implementada en hardware.

El mayor problema con este tipo de preguntas es que la respuesta es enorme y requiere varios años de cursos universitarios, por lo que cualquier respuesta que obtenga aquí solo rascará la superficie.

Si realmente desea saber qué incluye una CPU, consulte el código fuente de vhdl / verilog en: http://opencores.org/projects

Solo aprender vhdl y verilog será una tarea enorme por sí mismo, por lo que te espera una lectura larga :)

dren.dk
fuente
"gran máquina de escena", que suena como una producción de Broadway
OIO
Afortunadamente, las respuestas que estas personas habían dado no me hacen rayar la superficie como usted ha mencionado, en lugar dejado claro .. De todas formas, gracias amigo ..
VV Rao
2

Quiero decir, ¿son estos 1 y 0 convertidos en el voltaje lógico correspondiente (5v y 0) por DAC?

No, no es un DAC. Los 1 y 0 nunca existen realmente. Son solo una abstracción matemática que utilizamos para facilitar la programación. Los voltajes digitales reales pueden ser de 5 V, 3.3 V o 1 V, dependiendo del hardware. En última instancia, una computadora es solo lógica digital. La memoria almacena los 1 y los 0 como lógica digital, un circuito lógico digital los transfiere de la memoria al procesador, el procesador es un circuito lógico digital que puede sumar, restar o comparar números binarios, etc.

¿Cómo funciona este pequeño pedazo de sílice

Silic a es vidrio, una mezcla de silicio y oxígeno. Fichas están hechas de pura silícico en , con impurezas añadidas en lugares específicos para que todos los transistores.

Entiendo que cada IC está hecho de puertas lógicas

Los circuitos integrados digitales están hechos de puertas lógicas, no circuitos integrados analógicos.

Entonces, ¿cómo responden estos transistores a varias combinaciones de 5v y 0v?

Lea sobre el ejemplo más simple, el inversor CMOS .

endolito
fuente
Usted ha explicado que DAC no se usa, 1 y 0 son solo abstracciones matemáticas que usamos para facilitar la programación. ¿Puedes agregar un poco más de detalles sobre esto con referencia al "Compilador"? el compilador convierte el lenguaje de alto nivel a 1 y 0. Usted dijo que estos 1 y 0 se almacenan en la memoria como lógica digital, un circuito lógico digital los transfiere de la memoria al procesador. ¿Cuál es el nombre del dispositivo que realiza esta función? ? Y nuevamente, la entrada del procesador será de 5v o 0v. Entonces, ¿qué dispositivo convierte el 1 y 0 de la memoria (en realidad del compilador) en 5v y 0v?
VV Rao
1
@Vicky: No hay conversión de "1" a 5 V. "1" y "0" son solo etiquetas que le damos a los voltajes altos y bajos cuando hacemos matemáticas con números binarios. Para una lógica simple de bajo nivel que no funciona con números binarios, es más común llamarlos "H" (alto) y "L" (bajo).
endolito el