Reloj: CPU clock vs Pipeline Clock Vs Memory Access Clock

0

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!

    
pregunta Raj

1 respuesta

1

No, sería normal cronometrar la CPU a 50MHz. O duplique el reloj de entrada a 100MHz, por ejemplo, si el diseño es lo suficientemente rápido.

Ahora sabe que la etapa de memoria toma 5 ciclos de reloj, por lo que detiene la CPU cuando no puede hacer nada porque está esperando la memoria. Luego hay una ventaja obvia al compilar su código para minimizar los accesos a la memoria y su penalización de velocidad asociada, por ejemplo, utilizando registros siempre que sea posible.

En una etapa posterior, puede agregar memoria caché, que "revisa" todas las transacciones de memoria y satisface todas las que pueda de una memoria rápida pequeña, quizás en 2 ciclos en lugar de 5. Donde la memoria caché no contiene los datos, tiene una "falta de caché" y la memoria principal procede de forma normal. La lógica en el controlador de la memoria caché decide si también almacenar los datos de la memoria principal, por lo que la memoria caché la tendrá la próxima vez ...

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas