Hace unos días, implementé un soft-core unpipelined de varios ciclos en un FPGA. Funcionó a las mil maravillas. El FSM bellamente orquestó FETCH & DECTE > OPER1 > OPER2 > OPER3 > ALU- > MEMORY- > REG WB- > PC UPDATE- > FETCH- > DECODE- > ......
Ahora deseo transformarlo en una CPU canalizada.
Aunque estoy al tanto de los principios, como dividir la ruta de datos en etapas más pequeñas y ensuciarla con pestillos de tuberías, los temas de tiempo me han sorprendido, especialmente aquellos relacionados con las instrucciones de carga / almacenamiento.
La etapa MEMORY es claramente la etapa más lenta. Si se necesitan 100 ns para completar cualquiera de Lectura / Escritura, simplemente me aseguraré de que en cada otra etapa se realicen 100 ns (aunque podrían completarse mucho más rápido) para equilibrar la tubería.
Y ahora la pregunta.
¿Estaré en lo cierto al marcar simplemente cada etapa a 10 MHz, incluyendo el escenario de memoria Y marcar la interfaz de memoria (controlador de memoria y SRAM) a 50 Mhz? El 50Mhz garantiza que la etapa de MEMORIA pueda terminar sus actividades antes de que llegue la siguiente etapa de 10 Mhz.
La interfaz de memoria (controlador) reside dentro de la CPU. Por lo tanto, la CPU debe recibir 50 Mhz como entrada más escalada internamente a 10Mhz para sincronizar las etapas. Y, por supuesto, el 50Mhz va al controlador de memoria.
En este caso, ¿qué debo documentar como el reloj de la CPU? 10 Mhz o 50 Mhz? ¡Entiendo que el rendimiento y la latencia general de la tubería tienen 10 Mhz como base, pero el reloj de entrada a la CPU tal como lo ve el usuario es de 50 Mhz!