Estoy creando una computadora casera y estoy atascado en cómo diseñar / abordar el manejo de solicitudes de datos entre dos secciones diferentes. Lo estoy creando a partir de la mayoría de los chips lógicos de la serie 74HCxxx.
Tengo una CPU homebrew que se ejecuta a 1Mhz y tiene un bus a la RAM. Tiene 32 líneas de dirección y 32 líneas de datos junto con un reloj y líneas de lectura. Por lo tanto, se coloca una dirección en las líneas de dirección y si la línea de lectura es alta, se espera que los datos apropiados se coloquen en las líneas de datos inmediatamente. Si la lectura es baja, entonces la CPU también coloca un valor en las líneas de datos y la memoria debería actualizarse en el siguiente reloj. Todo muy simple y funciona porque la SRAM es comparativamente rápida (~ 50ns) y satisface fácilmente las necesidades de tiempo de la CPU (1000ns).
Ahora he creado una pieza de hardware separada que es un controlador de video. Funciona a 12.587 MHz para emitir una señal VGA de baja resolución. Internamente tiene alguna memoria SRAM que almacena los datos para mostrar. Esto funciona bien por sí solo.
Pero no tengo idea de cuál es el enfoque correcto para que la CPU pueda enviar datos al controlador de video. Quiero que el controlador de video se asigne a la memoria, por lo que cuando la CPU escriba en un rango definido de direcciones de memoria, el controlador de video notará esto y tomará el nuevo valor y lo almacenará internamente. Sería bueno poder leer también desde la memoria del controlador de video, pero eso es opcional.
Soy un programador y no tengo capacitación en ingeniería eléctrica, por lo que esto puede ser trivial para otros pero no es obvio para mí. ¿Debo estar viendo los buffers FIFO? ¿Necesito una interfaz complicada entre los dos? Mi preocupación es que van a diferentes velocidades de reloj y, por lo tanto, ¿a veces se enfrentarán en el tiempo?