¿Cómo funcionan las señales Active High y Active Low en 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 estos códigos comprensibles de la máquina luego se cargan en el microcontrolador ..

¿Cómo responde el microcontrolador a esto? Quiero decir, ¿estos 1 y 0 se convierten 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 puertas lógicas y estas puertas 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? Me refiero a cómo monitorean estas instrucciones cuando se encienden.

Por lo tanto, ciertamente tiene que haber un sistema operativo cargado en el mcu que le dice que procese y cómo procesar estas instrucciones, ¿no es así? ...

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

Puedo continuar con mi trabajo programando el mcu para diferentes tareas, pero hoy me interesó saber cómo esta máquina entiende mi código ...

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

Gracias de antemano ...

    
pregunta V V Rao

7 respuestas

6

No es necesario utilizar un DAC. Los voltajes se usan para representar 1 y 0 según la convención de que cualquier cosa por debajo de 0.8V (AKA 'baja') es cero, y cualquier cosa por encima de 2.4V (AKA 'alta') es una. Es relativamente sencillo construir circuitos que realicen la 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 es superior a 2.4V, o algo menor a 0.8V, y tiene una compuerta OR. Si requiere ambas entradas que representan 1 para generar 2.4V, tiene una puerta AND. Un inversor solo emite un alto cuando la entrada es baja, y viceversa. Puede construir puertas simples como éstas con muy 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. Los Flip-flops le permiten almacenar 1's y 0's 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 retiene un número hasta que usted carga 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. (El decremento 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 números masivos de bits. A nivel de componentes, 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 paso adicional, puede crear un sistema de lógica secuencial y combinatoria que pueda llevar a cabo operaciones en función 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. (A pesar de los núcleos microprogramados). En este punto, las combinaciones particulares de bits que coloque en el sistema de memoria pueden considerarse software en lenguaje de máquina.

    
respondido por el JustJeff
6

Obtenga el libro "Código: El lenguaje oculto del hardware y software de la computadora" por Charles Petzold . Es increíble, fácil de leer y responderá muchas de esas preguntas.

Si no puede pagar el libro de Petzold, consulte "Cómo funcionan las computadoras" por Roger Young . Cubre gran parte de lo mismo, y las versiones HTML y PDF son gratuitas.

    
respondido por el Shawn J. Goff
5

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

Ahora lo cableas de manera 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 al suelo.

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

Acabas de construir una compuerta AND. La salida solo es alta cuando ambas entradas son altas. No es perfecto de ninguna manera, ya que depende de la entrada del 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.

Luego, 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 puede que sepa que con una compuerta NAND puede construir cualquier forma de lógica. También tiene la ventaja de que la señal se almacena en búfer, lo que aumenta la capacidad del ventilador y el encadenamiento.

Los procesadores reales rara vez utilizan BJT, sino la lógica CMOS, pero se aplican los mismos principios.

    
respondido por el Thomas O
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 compuertas 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 así no ejecuta un sistema operativo. El programa que carga en él es un conjunto de instrucciones de la máquina que el PIC ejecuta continuamente. Todo el proceso se realiza por hardware.

Un procesador 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 mismo, principalmente para cargar entradas y almacenar resultados. Es posible que no vea mucho de esto en C u otro idioma, sino mucho en el ensamblaje.

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, que significa 12 + 1 = 13. El resultado se almacena en un registro en el propio procesador.

Según la arquitectura, la ALU tiene, por ejemplo, 8 bits de ancho. Se puede hacer un simple sumador de 8 bits con sumadores de 8x 1 bit unidos (usando bloques para construir un bloque más grande). Un sumador de 1 bit se puede escribir fácilmente en puertas lógicas usando álgebra booleana. Escribir un sumador de 8 bits completo de forma manual con solo usar puertas lógicas sería una gran cantidad de trabajo. Es como escribir un programa sin tener la capacidad de utilizar ninguna función o subrutina en absoluto.

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

    
respondido por el Hans
3

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

Puedes acercarte un poco más a esta respuesta si divides y conquistas, y dado que la otra respuesta intenta atacar este problema desde un punto de vista de hw Lo intentaré desde una vista de SW de alto nivel.

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

Pero empecemos por 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á pasando. Este paso se puede hacer en cualquier plataforma que uses, pero para mantenerlo simple, 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 tratas de entender cada línea de código y lo que hace.

Y luego empiezas a ver cómo se implementa cada instrucción ... Por ejemplo la 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.

  • enlace

    subl $ 4,% esp / * asigne 4 bytes de espacio de pila para las variables locales de esta función * /

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

Si ves algún tipo de " Flip-flop " para cada bit, entonces eres un poco cerca, y luego necesitamos muchos de esos. Aquí empezamos a encontrar tus ceros y unos.

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

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

Pero volvamos de nuevo a un ejemplo específico, Para entender un poco mejor la CPU podemos echar un vistazo a la ALU y 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, por supuesto, su ALU en la parte de la CPU de su MCU es mucho más compleja que esta, pero funciona con el mismo principio básico.

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

Y aquí es donde conectamos esas partes con un bus.

Un bus es 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 que se enviaron. Y esto se hace con algunas líneas de control paralelas que habilitarán / deshabilitarán las diferentes partes.

...

Así que si toma su mcu de elección y analiza un programa muy pequeño, y mientras no entiendas lo que está sucediendo, lo diseccionarás aún más hasta que tengas un bonito y pequeño rompecabezas que se puede usar para crear un "mcu".

Y no se olvide de leer la hoja de datos de su mcu y ver con qué tipo de piezas se fabricaron, como qué tipo de memoria, alu, buses, etc. etc.

Espero que esto ayude un poco ???

Buena suerte

    
respondido por el Johan
2

Realmente no necesitas saber estas cosas a menos que estés a punto de diseñar CPUs, pero todo se reduce a un enorme state-machine implementado en hardware.

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

Si realmente desea saber qué incluye una CPU, consulte el código fuente de vhdl / verilog en: enlace

El solo hecho de aprender vhdl y verilog va a ser una tarea de gran envergadura en sí mismo, por lo que te espera una larga lectura :)

    
respondido por el dren.dk
2
  

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

No, no es un DAC. Los 1s y los 0s nunca existen realmente. Solo son una abstracción matemática que utilizamos para facilitar la programación. Los voltajes digitales reales pueden ser 5 V, o 3.3 V, o 1 V, dependiendo del hardware. En última instancia, una computadora es solo lógica digital. La memoria almacena los 1s y 0s 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 trozo de sílice?

Silicona a es vidrio, una mezcla de silicona y oxígeno. Los chips están hechos de silicona pura en , con impurezas agregadas en lugares específicos para hacer 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 de circuitos analógicos.

  

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

Lea el ejemplo más sencillo, CMOS inverter .

    
respondido por el endolith

Lea otras preguntas en las etiquetas