¿Por qué los microcontroladores necesitan un reloj?

29

¿Por qué es necesario procesar las instrucciones en intervalos de tiempo establecidos (es decir, con el uso de un reloj)? ¿No se pueden ejecutar de forma secuencial, inmediatamente después de que se haya completado la instrucción anterior?

Una analogía para la necesidad de relojes en microcontroladores resultaría particularmente útil.

    
pregunta M-R

8 respuestas

29

Un ejemplo ilustrativo o dos pueden ayudar aquí. Eche un vistazo al siguiente circuito hipotético:

simular este circuito : esquema creado usando CircuitLab

Supongamos que el inicio A y B son altos (1). La salida del AND es por lo tanto 1, y como ambas entradas al XOR son 1, la salida es 0.

Los elementos lógicos no cambian su estado al instante: hay un pequeño pero significativo retraso de propagación a medida que se maneja el cambio en la entrada. Supongamos que B baja (0). El XOR ve el nuevo estado en su segunda entrada instantáneamente, pero la primera entrada todavía ve el "obsoleto" 1 desde la puerta AND. Como resultado, la salida se eleva brevemente, pero solo hasta que la señal se propaga a través de la puerta AND, lo que hace que ambas entradas al XOR sean bajas y que la salida vuelva a bajar.

La falla no es una parte deseada de la operación del circuito, pero fallas de este tipo sucederán cada vez que haya una diferencia en la velocidad de propagación a través de diferentes partes del circuito, debido a la cantidad de lógica, o incluso a la longitud de los cables.

Una forma realmente fácil de manejar eso es poner un flipflop desencadenado por el borde en la salida de su lógica combinatoria, como esto:

simular este circuito

Ahora, las fallas que ocurren están ocultas del resto del circuito por el flip-flop, que solo actualiza su estado cuando el reloj pasa de 0 a 1. Siempre que el intervalo entre los flancos ascendentes del reloj sea lo suficientemente largo para que las señales Se propagan a lo largo de las cadenas lógicas combinatorias, los resultados serán fidedignamente deterministas y sin errores.

    
respondido por el Nick Johnson
20

Siento que muchas de estas respuestas no están exactamente en la pregunta central. El microcontrolador tiene un reloj simplemente porque ejecuta (y está controlado por) lógica secuencial .

  

En la teoría de circuitos digitales, la lógica secuencial es un tipo de circuito lógico cuya salida depende no solo del valor presente de sus señales de entrada sino de la secuencia de entradas pasadas, el historial de entradas. Esto contrasta con la lógica combinacional, cuya salida es una función de solo la entrada actual. Es decir, la lógica secuencial tiene estado (memoria) mientras que la lógica combinacional no lo tiene. O, en otras palabras, la lógica secuencial es una lógica combinatoria con la memoria.

También:

  

La principal ventaja de la lógica síncrona es su simplicidad. Las compuertas lógicas que realizan las operaciones en los datos requieren un tiempo finito para responder a los cambios en sus entradas. Esto se llama retraso de propagación. El intervalo entre los pulsos de reloj debe ser lo suficientemente largo como para que todas las compuertas lógicas tengan tiempo para responder a los cambios y sus salidas se "asienten" en valores lógicos estables, antes de que se produzca el siguiente pulso de reloj. Siempre que se cumpla esta condición (ignorando algunos otros detalles), se garantiza que el circuito será estable y confiable. Esto determina la velocidad máxima de funcionamiento de un circuito síncrono.

    
respondido por el Peter
15

Respuesta corta: los gerentes desean una PRUEBA de función simple y comprobable antes de comprometer a millones (o más) dólares en un diseño. Las herramientas actuales, simplemente no dan a los diseños asíncronos esas respuestas.

Los microcomputadores y microcontroladores suelen utilizar un esquema de temporización para asegurar el control de tiempo. Todas las esquinas del proceso tienen que mantener la temporización en todos los efectos de voltaje, temperatura, proceso, etc. en las velocidades de propagación de la señal. Hay no las puertas lógicas actuales cambian instantáneamente: cada compuerta cambia según el voltaje que se suministra, la unidad que recibe, la carga que conduce y el tamaño de los dispositivos que se utilizan para crearla. (y, por supuesto, el nodo del proceso (tamaño del dispositivo) en el que está hecho, y qué tan rápido se está ejecutando ESTE proceso --- ESTO pasa a través de la fábrica). Para llegar al cambio "instantáneo", tendría que usar la lógica cuántica, y eso supone que los dispositivos cuánticos pueden cambiar al instante; (No estoy seguro).

La lógica sincronizada hace que PRUEBA que la sincronización en todo el procesador funcione en las variables de voltaje, temperatura y procesamiento esperadas. Hay muchas herramientas de software disponibles que ayudan a medir este tiempo, y el proceso de red se denomina "cierre de tiempo". El cronometraje puede (y, según mi experiencia, ) toma entre 1/3 y 1/2 de la potencia utilizada en un microprocesador.

Entonces, ¿por qué no un diseño asíncrono? Hay pocas, si las hay, herramientas de cierre de tiempo para soportar este estilo de diseño. Hay pocas, si las hay, herramientas de ruta y lugar automatizadas que puedan manejar y administrar un gran diseño asíncrono. En todo caso, los administradores NO aprueban nada que no tenga una PRUEBA de funcionalidad sencilla y generada por computadora.

El comentario de que el diseño asíncrono requiere "una tonelada de" señales de sincronización, que requirieron "muchos más transistores", ignora los costos de enrutamiento y sincronización de un reloj global, y el costo de todos los flip-flops de ese sistema de reloj requiere Los diseños asíncronos son, (o deberían ser), más pequeños y más rápidos que sus contrapartes cronometradas. (Uno simplemente toma la ruta de señal más lenta de UNO y la usa para enviar una señal de "listo" a la lógica anterior).

La lógica asíncrona es más rápida, ya que nunca tiene que esperar un reloj que deba extenderse a otro bloque en otro lugar. Esto es especialmente cierto en las funciones de registro a lógica a registro. La lógica asíncrona no tiene múltiples problemas de "configuración" y "retención", ya que solo las estructuras de sumidero finales (registros) tienen esos problemas, a diferencia de un conjunto de lógica canalizada con flip-flops intercalados para espaciar los retrasos de propagación lógica hasta la sincronización fronteras

¿Se puede hacer? Ciertamente, incluso en un billón de diseño de transistores. ¿Es más difícil? Sí, pero solo porque demostrar que funciona en un chip completo (o incluso en un sistema) es mucho más complicado. Obtener el tiempo en papel es razonablemente directo para cualquier bloque o subsistema. Conseguir que la sincronización se controle en un sistema automatizado de ubicación y ruta, es mucho más difícil, ya que las herramientas NO están configuradas para manejar el conjunto potencial mucho mayor de restricciones de sincronización.

Los microcontroladores también tienen un conjunto potencialmente grande de otros bloques que se interconectan con señales externas (relativamente) lentas, agregadas a toda la complejidad de un microprocesador. Eso hace que el tiempo sea un poco más complicado, pero no mucho.

Lograr un mecanismo de señal de "bloqueo" de "primero en llegar" es un problema de diseño del circuito, y existen formas conocidas de lidiar con eso. Las condiciones de carrera son un signo de 1). mala práctica de diseño; o 2). Señales externas que entran en el procesador. La sincronización realmente introduce una condición de carrera de señal contra reloj que está relacionada con las violaciones de "configuración" y "espera".

Yo, personalmente, no entiendo cómo un diseño asíncrono podría entrar en una condición de carrera detenida, o cualquier otra . Esa podría ser la limitación de mi , pero a menos que ocurra al ingresar datos en el procesador, NUNCA debería ser posible en un sistema lógico bien diseñado, e incluso entonces, ya que puede sucede a medida que las señales ingresan, usted diseña tratar con eso.

(Espero que esto ayude).

Todo lo dicho, si tienes el dinero ...

    
respondido por el John Beck
10

Los microcontroladores necesitan usar un reloj porque deben poder responder a eventos que pueden ocurrir en cualquier momento, incluso casi simultáneamente con otros eventos externos o eventos generados por los controladores, y con frecuencia tendrán varios circuitos que necesitan para saber si un evento X precede a otro evento Y. Puede que no importe si todos esos circuitos deciden que X precedió a Y, o que todos esos circuitos decidan que X no precede a Y, pero a menudo será crítico que si alguno de los circuitos decide que X precedió a Y, entonces todos deben hacerlo. Desafortunadamente, es difícil asegurar que los circuitos dentro de un tiempo limitado alcancen un consenso garantizado en cuanto a si X precede a Y, o incluso a un consenso sobre si han alcanzado o no un consenso. La lógica síncrona puede ayudar enormemente con eso.

Agregar un reloj a un circuito hace posible garantizar que un subsistema no experimentará ninguna condición de carrera a menos que una entrada al sistema cambie en una ventana muy pequeña en relación con el reloj, y también garantiza si la salida de un dispositivo es alimentado a otro, la salida del primer dispositivo no cambiará en la ventana crítica del segundo dispositivo a menos que la entrada al primer dispositivo cambie dentro de una ventana crítica aún más pequeña. Agregar otro dispositivo antes de ese primer dispositivo garantizará que la entrada al primer dispositivo no cambie en esa pequeña ventana a menos que la entrada al nuevo dispositivo cambie dentro de una ventana realmente muy pequeña. Desde una perspectiva práctica, a menos que uno intente deliberadamente causar un error de consenso, la probabilidad de que una señal cambie dentro de esa ventana realmente muy pequeña puede reducirse para ser más pequeña que la probabilidad de que el dispositivo sufra algún otro error incontrolable, como un golpe de meteorito .

Ciertamente, es posible diseñar sistemas totalmente asíncronos que funcionen "lo más rápido posible", pero a menos que un sistema sea extremadamente simple, será difícil evitar que un diseño se vea afectado por una condición de carrera. Si bien hay formas de resolver las condiciones de carrera sin necesidad de relojes, las condiciones de carrera a menudo se pueden resolver de forma mucho más rápida y sencilla mediante el uso de relojes de lo que sería sin ellos. Aunque la lógica asíncrona a menudo podría resolver las condiciones de carrera más rápido que la lógica sincronizada, las ocasiones en que no puede hacerlo plantean un problema importante, especialmente dada la dificultad de que partes de un sistema alcancen un consenso sobre si deben o no han alcanzado consenso . Un sistema que puede ejecutar constantemente un millón de instrucciones por sección generalmente será más útil que uno que a veces puede ejecutar cuatro millones de instrucciones por segundo, pero podría detenerse por milegundos (o más) a la vez debido a las condiciones de la carrera.

    
respondido por el supercat
6
Las

MCU son solo un ejemplo muy complejo de un circuito lógico secuencial síncrono. La forma más simple es probablemente el D-flip-flop con reloj (D-FF), es decir, un elemento de memoria de 1 bit síncrono.

Hay elementos de memoria que son asíncronos, por ejemplo el D-latch, que es (en cierto sentido) el equivalente asíncrono del D-FF. Una MCU no es más que un montón de millones de elementos básicos de memoria (D-FF) pegados con toneladas de puertas lógicas (lo que simplifico demasiado).

Ahora vamos al punto: ¿por qué las MCU usan D-FF en lugar de D-latches como elementos de memoria internos? Es esencialmente para la confiabilidad y facilidad de diseño: los latches D reaccionan tan pronto como sus entradas cambian y sus salidas se actualizan lo más rápido posible. Esto permite desagradables interacciones no deseadas entre diferentes partes de un circuito lógico (circuitos y carreras de retroalimentación no intencionales). Diseñar un circuito secuencial complejo usando bloques de construcción asíncronos es inherentemente más difícil y propenso a errores. Los circuitos síncronos evitan tales trampas al restringir el funcionamiento de los bloques de construcción a los instantes de tiempo cuando se detectan los bordes del reloj. Cuando llega el borde, un circuito lógico síncrono adquiere los datos en sus entradas, pero todavía no actualiza sus salidas . Tan pronto como se adquieren las entradas, las salidas se actualizan. Esto evita el riesgo de que una señal de salida sea realimentada a una entrada que no se haya adquirido completamente y desordene las cosas (dicho simplemente).

Esta estrategia de "desacoplar" la adquisición de datos de entrada de la actualización de salidas permite técnicas de diseño más simples, lo que se traduce en sistemas más complejos para un esfuerzo de diseño dado.

    
respondido por el Lorenzo Donati
5

Lo que estás describiendo se llama lógica asíncrona . Puede funcionar, y cuando lo hace, a menudo es más rápido y usa menos energía que la lógica sincrónica (sincronizada). Desafortunadamente, la lógica asíncrona tiene algunos problemas que impiden su uso generalizado. El principal que veo es que se necesitan muchos más transistores para implementarlo, ya que se necesita una tonelada de señales de sincronización independientes. (Los microcontroladores hacen mucho trabajo en paralelo, al igual que las CPU). Eso aumentará los costos. La falta de buenas herramientas de diseño es un gran obstáculo inicial.

Los microcontroladores probablemente siempre necesitarán relojes, ya que sus periféricos generalmente necesitan medir el tiempo. Los temporizadores y PWM funcionan a intervalos de tiempo fijos, las tasas de muestreo de ADC afectan su ancho de banda y los protocolos de comunicación asíncronos como CAN y USB necesitan relojes de referencia para la recuperación del reloj. Por lo general, queremos que las CPU se ejecuten lo más rápido posible, pero ese no es siempre el caso para otros sistemas digitales.

    
respondido por el Adam Haun
3

En realidad, está viendo la MCU como una unidad completa, pero la verdad es que en sí misma está hecha de diferentes puertas y lógica TTL y RTL, a menudo FF array, todos necesitan la señal de reloj individualmente,

Sea más específico, piense simplemente en acceder a una dirección desde la memoria, esta simple tarea puede implicar múltiples operaciones, como hacer que el BUS esté disponible para las líneas de datos y las líneas de direcciones.
La mejor manera de decirlo es que las instrucciones en sí mismas se producen en pequeñas unidades de operación que requieren ciclos de reloj, combinados para ciclos de máquina , que cuenta con varias propiedades de MCU como la velocidad (FLOPS ** en MCU complicados), revestimiento de tuberías, etc.

Respuesta al comentario de OP

Para ser muy precisos, les doy un ejemplo: hay un chip llamado ALE (habilitación de bloqueo de dirección) por lo general con el fin de multiplexar el bus de dirección inferior para transmitir tanto la dirección como los datos en los mismos pines, usamos un oscilador (el intel 8051 usa un oscilador local de 11.059MHz como reloj) para buscar la dirección y luego los datos.

Como es posible que sepa que las partes básicas de MCU son CPU, ALU y registro interno, etc., la CPU (que controla s / g) envía la dirección a todos los pines de dirección 16 en el caso de 8051, esto ocurre en el instante de tiempo T1 y después de la dirección es la matriz correspondiente de almacenamiento del condensador (carga como señal) ( * mapeo de memoria * ) se activa y selecciona.

Después de la selección, la señal ALE se activa, es decir El pin ALE se hace alto en el siguiente reloj, digamos T2 ( por lo general una señal Alta pero cambia según el diseño de la unidad de procesamiento ), después de esto, los buses de direcciones inferiores actúan como líneas de datos, y los datos se escriben o leen ( dependiendo de la salida en el pin de RD / WR de la MCU).
Puede ver claramente que todos los eventos son secuenciales a tiempo

¿Qué pasaría si no usamos el reloj? Luego tendremos que usar el método de reloj asíncrono ASQC , esto hará que cada puerta dependa de la otra y puede dar lugar a fallos de hardware. , También esto mata el forro de la tubería de la instrucción, el tiempo de larga duración y el tiempo irregular para completar la tarea.
Así que es algo indeseable

    
respondido por el MaMba
2

El problema fundamental que resuelve un reloj es que los transistores no son realmente dispositivos digitales: usan niveles de voltaje analógicos en las entradas para determinar la salida y toman un tiempo finito para cambiar de estado. A menos que, como se ha mencionado en otra respuesta, ingrese a dispositivos cuánticos, habrá un período de tiempo en el que la entrada pase de un estado a otro. El tiempo que esto toma se ve afectado por la carga capacitiva, que será diferente de un dispositivo a otro. Esto significa que los diferentes tranisistores que conforman cada puerta lógica responderán en momentos ligeramente diferentes. El reloj se utiliza para "bloquear" las salidas de los dispositivos componentes una vez que se hayan estabilizado.

Como analogía, considere la capa de transporte de comunicaciones SPI (Interfaz Periférica Serial). Una implementación típica de esto usará tres líneas: Entrada de datos, Salida de datos y Reloj. Para enviar un byte a través de esta capa de transporte, el maestro configurará su línea de salida de datos y afirmará la línea del reloj para indicar que la línea de salida de datos tiene un valor válido. El dispositivo esclavo muestreará sus datos en línea solo cuando se lo indique la señal del reloj. Si no hubiera señal de reloj, ¿cómo sabría el esclavo cuándo muestrear la línea de datos en línea? Podría muestrearlo antes de que la línea fuera establecida por el maestro o durante la transición entre estados. Los protocolos asíncronos, como CAN, RS485, RS422, RS232, etc. resuelven esto utilizando un tiempo de muestreo predefinido, una tasa de bits fija y bits de encuadre (generales).

En otras palabras, hay algún tipo de Common Knowledge necesario para determinar cuándo están todos los transistores en un conjunto de puertas ha alcanzado su estado final y la instrucción está completa. En el rompecabezas (100 ojos azules) indicado en el enlace de arriba, y explicado en detalle en esta pregunta sobre Maths Stack Exchange , el 'oráculo' actúa como el reloj de las personas en la isla.

    
respondido por el Mike of SST

Lea otras preguntas en las etiquetas