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

21

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 baja a alta o de alta a baja según el componente. Si no se incorporara un reloj, las puertas cambiarían tan rápido como podrían cuando se les diera la orden, ¿por qué no aumentaría la velocidad de las computadoras y por qué se usan los relojes?

    
pregunta skyler

6 respuestas

30

Los relojes se usan en las computadoras por la sencilla razón de que la mayoría, si no toda la circulación, es lógica secuencial síncrona .

  

En un circuito síncrono, 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 usan los circuitos síncronos en las computadoras?" pero esa es una pregunta fácil para responder también:

  

La principal ventaja de la lógica síncrona es su simplicidad. La lógica   Las puertas que realizan las operaciones en los datos requieren una cantidad finita.   Tiempo para responder a los cambios en sus entradas. Se llama   retardo de propagación. El intervalo entre pulsos de reloj debe ser largo.   suficiente para que todas las puertas lógicas tengan tiempo para responder a los cambios   y sus salidas "se asientan" en valores lógicos estables, antes de la próxima   se produce el pulso del reloj. Mientras se cumpla esta condición (ignorando ciertas   otros detalles) se garantiza que el circuito es 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, si no todos los circuitos, son lógica secuencial asíncrona .

    
respondido por el Alfred Centauri
6

Imagine que tiene un entero de 8 bits enviado desde la memoria a una ALU para un cálculo y (al menos en 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 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 fue la mejor descripción, esencialmente sin un reloj que garantice la consistencia de los datos sería mucho más difícil de lo que cualquier posible aumento en la velocidad haría que valga la pena, se encontraría con muchos problemas de condición de carrera.

    
respondido por el Dan Nixon
6

Un circuito como una unidad 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 cierto período de tiempo, todos los bits de la salida habrán alcanzado sus estados finales correctos, pero la cantidad real de tiempo para que los bits de salida se conviertan en válidos puede variar considerablemente según 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 un período de tiempo suficiente antes de que se realice un cálculo, y los datos las entradas contienen los valores deseados antes de que la entrada "válida" sea alta, la salida "válida" no será alta hasta que los bits de salida sean correctos. Un diseño de este tipo 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 aquellas partes de una CPU que serían capaces de ejecutarse más rápido para hacerlo, solo será útil si no están esperando todo el tiempo para que las partes más lentas puedan ponerse al día. Para que esto suceda, debe haber lógica para decidir qué parte de la máquina está "adelante" en un momento dado en el tiempo, y seleccionar un curso de acción basado en eso. Desafortunadamente, ese tipo de decisión es una de las más difíciles de hacer para la electrónica. Decidir de manera confiable cuál de los dos eventos que ocurrieron primero es generalmente 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 # 2 envía una solicitud antes de que se complete la primera solicitud de # 1, la unidad de memoria debe manejar eso; de lo contrario, debería manejar la siguiente solicitud de la unidad # 1. Eso parece un diseño razonable, pero termina siendo sorprendentemente problemático. El problema es que si hay algún 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 requerido para determinar si una solicitud supera la fecha límite será aproximadamente inversamente proporcional a la diferencia entre el momento en que se recibió la solicitud y el plazo. El tiempo requerido para que la unidad de memoria determine que una solicitud de # 2 superó la fecha límite en un femptosegundo podría exceder sustancialmente la cantidad de tiempo que se habría requerido para atender una segunda solicitud de la unidad # 1, pero la unidad no puede atender cualquiera de las dos solicitudes hasta que decida a cuál de ellas dar servicio primero.

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

    
respondido por el supercat
4

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

La mayoría de los sistemas digitales son síncronos (aunque pueden tener algunas partes asíncronas) 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 bastante de Digital Systems: Principles and Applications, 10th edition by R. J. Tocci et al.

    
respondido por el gabrieljcs
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 (el cálculo más lento) termine a tiempo bajo todas estas condiciones adversas. Como resultado, cuando las condiciones no son terribles, tendrá mucho más tiempo / margen entre cuando la lógica completa su operación y el siguiente reloj encierra el resultado. Debido a que (normalmente) no puede cambiar su frecuencia de reloj, pierde esta velocidad.

Hay paradigmas de lógica completamente asíncronos que existen, por ejemplo, uno con el que estoy familiarizado es la lógica de convención NULA. Utilizando 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 sea posible, y tiene algunos beneficios modestos de energía y EMI. Desafortunadamente, usted paga una multa por la naturaleza asíncrona 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íncrona están maduras, gran parte del diseño y la validación de los diseños asíncronos siguen siendo manuales, lo que conlleva un mayor esfuerzo para diseñar y construir un diseño asíncrono.

Esto también ignora por completo el caso de que a veces necesitas 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á.

    
respondido por el W5VO
1
  
    

Si no se incorporó un reloj, las puertas cambiarían tan rápido como podrían cuando se les diera la orden, ¿por qué 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 nuestros amos de la máquina ascienden, es muy posible que se deshagan del reloj, superen los pequeños detalles como hacer que un circuito sin reloj se pueda fabricar a pesar de la variación del proceso y aprovechen algunas ganancias de velocidad.

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

    
respondido por el Aleksandr Dubinsky

Lea otras preguntas en las etiquetas