No tengo ningún conocimiento práctico sobre circuitos electrónicos. Actualmente soy un programador de software de alto nivel y recién empiezo a aprender sobre hardware de computadoras y electrónica.
Básicamente, entiendo que cada dispositivo tiene su propia frecuencia interna pero usan una frecuencia externa para comunicarse con otros dispositivos como la CPU y viceversa a través de un "bus".
Y sé que la placa base también tiene su propio reloj.
Lo que no puedo darme cuenta es cómo estos dispositivos pueden comunicarse entre sí si tienen un reloj diferente y cómo sucede exactamente esta comunicación. ¿Qué es un ciclo de reloj y qué tiene que ver el "reloj de la placa base" con él? ¿Qué sucede si uso una CPU de 1000 Mhz con una memoria de 1333 Mhz?
Todas las explicaciones de internet varían y no son muy claras. Sé que cuando empiece a estudiar ingeniería eléctrica desde el principio todo esto se aclarará automáticamente, pero por ahora necesito tener una idea precisa de cómo funciona todo.
Hay dos formas diferentes en que los chips de una placa base se comunican entre sí: comunicación síncrona y comunicación asíncrona.
La mayoría de las placas base tienen un generador de reloj que controla una señal de reloj global que sincroniza la memoria, la CPU y algunos otros chips. Se prueba que la llamada "memoria DDR3-1333" funciona hasta 166,7 Mhz. Cuando se conecta a una placa base que funciona con un reloj de memoria de 100 MHz, esa memoria en realidad funciona a 100 Mhz y funciona bien con una CPU con un reloj de memoria de 100 MHz. (Esa memoria no tiene un reloj interno de 166,7 MHz). Si alguien cambiara la frecuencia del reloj global (la mayoría de las placas base modernas permiten que una persona cambie fácilmente la frecuencia con una configuración de BIOS), entonces la memoria se ejecutaría a cualquier frecuencia que el generador de reloj envíe al chip de memoria.
Me recuerda a los neumáticos de un automóvil de 130 mph. En realidad, no funcionan a 130 mph todo el tiempo. Algo más controla la velocidad real a la que se mueve la llanta, y la llanta está diseñada para manejar cualquier velocidad que se le solicite, siempre que esa velocidad no supere las 130 mph.
Por una variedad de razones, muchos dispositivos en una placa base típica funcionan a una velocidad de reloj diferente de la señal de reloj global de la placa base similar a un metrónomo.
Algunos de esos dispositivos, como muchas CPU modernas, tienen un oscilador interno sincronizado en fase para oscilar a cierta frecuencia que es una proporción fija de pequeños números enteros en relación con la señal de reloj global de la placa base.
Otros de esos dispositivos, como el chip del reloj en tiempo real , tienen su propio oscilador de cristal completamente independiente del oscilador de cristal conectado al generador de reloj. (La relación de sus frecuencias a menudo no es un número racional y, a veces, se desvía lentamente).
Si bien algunos investigadores han construido CPU sin reloj , casi todas las CPU comerciales son completamente síncronas o globalmente asíncronas localmente síncronas (GALS).
Cuando dos dispositivos con diferentes osciladores (o dos dominios de reloj diferentes en un chip GALS) necesitan transferirse datos entre sí, entiendo que las 3 técnicas más populares para el cruce de dominios de reloj son:
Bueno, en general, para que dos chips se comuniquen entre sí, existe un acuerdo sobre la frecuencia a la que se ejecutará la interfaz. Para su caso de memoria, la interfaz de memoria se ejecutaría a 1333 MHz, y mientras que la CPU solo funciona a 1 Ghz, la interfaz de memoria en ese chip de CPU está diseñada para funcionar a 1333 MHz.
A partir de ahí tienes dos problemas interesantes. Imagínese si la interfaz de memoria fuera de 1 GHz pero la CPU fuera solo de 100 MHz. Quizás este sistema solo necesite un acceso lento a la memoria para que no use todo su potencial, si necesitara ese ancho de banda de memoria, simplemente podría traer un bus interno mucho más amplio desde la CPU a su controlador de memoria. Digamos que internamente mueve datos a 256 bits, pero el bus de memoria externa tiene solo 32 bits de ancho. Solo como ejemplo.
Esto también trae a colación otra cuestión de dominio de reloj cruzado. Si sus relojes son todos múltiplos sincrónicos entre sí derivados de una fuente común, digamos que el oscilador de la CPU, esto no es un problema. Pero si, en cambio, los relojes se ejecutan en no múltiplos o de otro modo asíncronos entre sí, puede encontrarse con problemas de dominio de reloj cruzado. Aquí debe usar las técnicas adecuadas para garantizar que los datos y los comandos se muevan limpiamente de un dominio de reloj a otro o podría terminar con datos faltantes o corruptos o problemas de metaestabilidad.
Consulte CDC o cross clock domain como término de búsqueda para obtener más información al respecto.
Ignacio Vázquez-Abrams