¿Por qué se usan los relojes en las computadoras?

22

Como sé, un reloj controla todas las operaciones lógicas, pero también limita la velocidad de una computadora porque las puertas tienen que esperar a que el reloj cambie de bajo a alto o de alto a bajo dependiendo del componente. Si no se incorporara un reloj, las puertas cambiarían tan rápido como pudieran cuando se les diera la orden, entonces ¿por qué eso no aumentaría la velocidad de las computadoras y por qué se usan los relojes?

Skyler
fuente
No tengo tiempo para una respuesta adecuada, pero al nivel más básico, por lo que todas las cosas digitales marchan al ritmo del mismo baterista. Busque síncrono vs. asíncrono.
Matt Young
posible duplicado de señales de reloj en computadoras y máquinas , (y esa pregunta se cerró como una pregunta no real ...)
amadeus
Para una gama limitada de tareas, las computadoras analógicas pueden ser más rápidas que las digitales.
Nick Alexeev
1
¡Entonces saben qué hora es! (lo siento, no pude resistir)
Scott Seidman

Respuestas:

32

Los relojes se usan en computadoras por la sencilla razón de que la mayoría, si no toda, la circuitería es lógica secuencial sincrónica .

En un circuito sincrónico, un oscilador electrónico llamado reloj genera una secuencia de pulsos repetitivos llamada señal de reloj que se distribuye a todos los elementos de memoria en el circuito.

Ahora, eso puede no parecer satisfactorio y concedido, razonablemente se preguntaría "¿por qué se utilizan circuitos sincrónicos en las computadoras?" pero esa es una pregunta fácil de responder también:

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

Un área activa de investigación es la computación asíncrona, donde la mayoría de los circuitos, si no todos, es lógica secuencial asíncrona .

Alfred Centauri
fuente
La pieza de Wikipedia sobre lógica secuencial asincrónica es bastante breve; podría haber sido útil distinguir entre la lógica que no tiene un reloj único pero puede garantizar que las entradas de los circuitos no causen condiciones de carrera o, en el peor de los casos, que las salidas de cualquier circuito cuya entrada pueda haber tenido una condición de carrera no serán usado.
supercat
Creo que vale la pena señalar que había una computadora completamente asíncrona construida por Jacek Karpiński que se llamaba KAR-65. Lamentablemente no puedo encontrar nada al respecto en inglés.
elmo
6

Imagine que tiene un entero de 8 bits que se envía desde la memoria a una ALU para un cálculo y (al menos para este ejemplo) que el circuito de memoria proporciona las señales en las 8 líneas de datos antes de que la ALU las requiera y en momentos ligeramente diferentes.

El uso de un reloj aquí garantizaría que las 8 líneas de datos tuvieran el valor correcto para el número entero que se representa para un ciclo de reloj y que la ALU "recopilará" esos datos dentro del mismo ciclo de reloj.

Me doy cuenta de que probablemente esa no sea la mejor descripción, esencialmente sin un reloj que garantice que la consistencia de los datos sería mucho más difícil de lo que cualquier posible aumento en la velocidad haría que valiera la pena, se encontrarían con muchos problemas de condición de carrera.


fuente
6

Un circuito como una unidad de lógica aritmética tomará un par de números como entradas y producirá un número como salida. Puede garantizar que dentro de un período de tiempo, todos los bits de la salida hayan alcanzado sus estados finales correctos, pero la cantidad de tiempo real para que los bits de salida sean válidos podría variar considerablemente en función de una variedad de factores.

Sería posible construir una ALU con una entrada "válida" y una salida "válida", y especificar que siempre que la entrada "válida" sea baja durante una cantidad de tiempo suficiente antes de que se realice un cálculo, y las entradas de datos contienen el los valores deseados antes de que la entrada "válida" suba, la salida "válida" no aumentará hasta que los bits de salida sean correctos. Tal diseño probablemente requeriría aproximadamente el doble de circuitos que una ALU convencional [básicamente tendría que hacer un seguimiento de si cada bit era "conocido" como cero o "conocido" como uno; su salida "válida" se volvería verdadera una vez que se conociera el estado de cada bit de salida].

Para empeorar las cosas, permitir que las partes de una CPU que serían capaces de ejecutarse más rápido solo sea útil si no están esperando todo el tiempo para que las partes más lentas se pongan al día. Para que eso suceda, debe haber lógica para decidir qué parte de la máquina está "adelantada" en un momento dado y seleccionar un curso de acción basado en eso. Desafortunadamente, ese tipo de decisión es una de las más difíciles para la electrónica. Decidir de manera confiable cuál de los dos eventos sucedió primero generalmente solo es fácil si se puede garantizar que nunca habrá "llamadas cerradas". Supongamos que un secuenciador de memoria está manejando una solicitud de la unidad de procesamiento # 1 y la unidad # 1 tiene otra solicitud pendiente después de eso. Si la unidad n. ° 2 envía una solicitud antes de que se complete la primera solicitud del n. ° 1, la unidad de memoria debe manejar eso; de lo contrario, debe manejar la siguiente solicitud de la unidad n. ° 1. Eso parecería un diseño razonable, pero termina siendo sorprendentemente problemático. El problema es que si hay un momento en el tiempo tal que una solicitud recibida antes de ese momento se procesará de inmediato, y una solicitud recibida después de eso tendrá que esperar, la cantidad de tiempo requerida para determinar si una solicitud supera el plazo será aproximadamente inversamente proporcional a la diferencia entre el momento en que se recibió la solicitud y la fecha límite. El tiempo requerido para que la unidad de memoria determine que una solicitud del n. ° 2 superó la fecha límite en un femptosegundo podría exceder sustancialmente la cantidad de tiempo que se hubiera requerido para atender una segunda solicitud de la unidad n. ° 1, pero la unidad no puede atender solicite hasta que decida cuál atender primero.

Hacer que todo funcione con un reloj común no solo elimina la necesidad de que los circuitos determinen cuándo la salida de un cálculo es válida, sino que también permite que se eliminen las "llamadas cerradas". Si todo en el sistema funciona con un reloj de 100Mhz, no cambia la señal en respuesta a un reloj hasta 1ns después del borde del reloj, y todo lo que sucederá en respuesta a un borde del reloj ocurre dentro de 7ns, entonces todo lo que sucederá antes de un el borde del reloj particular "ganará" por al menos 3ns, y todo lo que no va a suceder hasta después de un borde del reloj "perderá" por al menos 1ns. Determinar si una señal tiene posibilidades antes o después del reloj, cuando se garantiza que no está "cerca", es mucho más fácil que determinar cuál de las dos señales temporizadas arbitrariamente ocurre primero.

Super gato
fuente
4

Los sistemas digitales pueden ser síncronos o asíncronos . En sistemas asíncronos, la salida puede cambiar en cualquier momento dado, diferente de los sistemas síncronos, que dependen del reloj para cambiar sus salidas.

La mayoría de los sistemas digitales son sincrónicos (aunque pueden tener algunas partes asincrónicas) porque el proyecto y el análisis de defectos se pueden hacer con mayor facilidad, ya que las salidas solo pueden cambiar con el reloj.

He copiado esto bastante de Digital Systems: Principles and Applications, 10th edition by R. J. Tocci et al.

gabrieljcs
fuente
3

Bueno, si está diseñando un sistema síncrono, tiene una frecuencia de reloj objetivo y diseña la lógica para completar todos los cálculos durante un ciclo dentro de un período de reloj. Esto también significa que debe incorporar un margen de seguridad para permitir diversas condiciones, como baja tensión de alimentación, alta temperatura y un chip "lento". Los chips síncronos están diseñados para que la ruta lógica más larga (cálculo más lento) termine a tiempo en todas estas condiciones adversas. Como resultado, cuando las condiciones no son terribles, tendrá mucho más tiempo / margen entre cuando la lógica complete su operación y el siguiente reloj bloquee el resultado. Debido a que (generalmente) no puede cambiar la frecuencia de su reloj, pierde esta velocidad.

No son completamente paradigmas lógicos asíncronos que existen, por ejemplo, uno que estoy familiarizado con la lógica es la convención NULL. Usando trazos amplios para describir lo que está sucediendo, el circuito lógico puede identificar cuándo se ha completado un cálculo y puede crear efectivamente sus propias señales de "reloj". Esto permite que el circuito funcione tan rápido como pueda y tiene algunos beneficios moderados de potencia y EMI. Desafortunadamente, paga una penalización por la naturaleza asincrónica en términos de densidad de diseño y rendimiento superior. Además, si bien las herramientas de software para el diseño y la validación síncronos son maduros, gran parte del diseño y la validación para los diseños asíncronos sigue siendo manual, lo que resulta en un mayor esfuerzo requerido para diseñar y construir un diseño asíncrono.

Esto también descuida por completo el caso de que a veces se necesita un reloj para que una aplicación específica sea una referencia de tiempo. Por ejemplo, su tarjeta de sonido no puede funcionar de forma asíncrona porque necesita actualizar el ADC o DAC a una frecuencia de muestreo específica y precisa o el audio se distorsionará.

W5VO
fuente
1

Si no se incorporara un reloj, las puertas cambiarían tan rápido como pudieran cuando se les diera la orden, entonces ¿por qué eso no aumentaría la velocidad de las computadoras y por qué se usan los relojes?

En pocas palabras: porque los humanos no son seres súper inteligentes, y tienen que tomar atajos para hacer posible el diseño de circuitos de mil millones de elementos.

Cuando los señores de nuestra máquina ascienden, es muy posible que se deshagan del reloj, superen minuciosas molestias como hacer que un circuito sin reloj sea fabricable a pesar de la variación del proceso, y aprovechar algunas ganancias de velocidad.

Para ampliar un poco: las cosas discretas y predecibles son más fáciles de analizar y diseñar racionalmente. Como gran beneficio adicional, se autocorrigen (en este caso, el tiempo se corrige automáticamente). Esta es la razón por la que usamos la lógica digital en primer lugar. (Del mismo modo, en la programación, a menudo usamos enteros en lugar de coma flotante, estructuras de control familiares en lugar de goto-spaghetti e idiomas con unas pocas reglas claras en lugar de lenguajes muy "flexibles" donde nunca estás seguro de lo que sucederá hasta que se ejecute el código)

Aleksandr Dubinsky
fuente
Incluso más allá del hecho de que la lógica síncrona es más fácil de diseñar, una computadora que funciona con un reloj de 10MHz generalmente se diseñará de modo que en cualquier lugar donde tenga que determinar si el evento X ocurre antes que Y, uno o ambos eventos se retrasarán como es necesario tener una relación particular con el reloj maestro para que los eventos nunca sucedan simultáneamente. Además, en los pocos casos en que sería posible la acción simultánea, será aceptable agregar un retraso fijo de dos o tres ciclos para obligar a una o ambas señales a una relación de reloj fijo.
supercat
Si el diseño fuera asíncrono, uno podría encontrar que un 99% aleatorio de instrucciones toma 5ns, 0.9% toma 10ns al azar, 0.09% toma 30ns, 0.009% 100ns, 0.0009% 300ns, 0.00009% 1us, 0.000009% 3us, etc. sin garantía firme de cuánto tiempo puede tomar el sistema para resolver una ambigüedad de tiempo. En la mayoría de los casos, tener un rendimiento que es subóptimo pero predecible es mejor que el rendimiento que es en promedio más rápido pero tiene variaciones impredecibles que a veces son severas.
supercat
@supercat 1) ¿No se puede diseñar un circuito donde nunca ocurran eventos simultáneos? (al menos si las entradas son lo suficientemente regulares) 2) ¿No se puede diseñar un circuito donde no importa si ocurren eventos simultáneos?
Aleksandr Dubinsky
Si se conoce el tiempo relativo de dos eventos, uno puede evitar que sucedan simultáneamente al retrasar uno u otro. Cuanto más exactamente se conozca su sincronización relativa, menos demora será requerida. Si no se conoce el tiempo relativo, es posible resolver dos eventos que podrían ocurrir simultáneamente en una indicación de lo que sucedió primero, pero para minimizar el comportamiento del peor de los casos, uno debe aceptar algunos compromisos bastante severos en el mejor de los casos. Los compromisos que serían necesarios para que una computadora sin reloj funcione sería peor que usar un reloj.
supercat