¿La megafunción altera ROM tiene un retraso de inicio?

Estoy tratando de hacer una CPU de ciclo único muy simple en VHDL. Mi código de máquina está almacenado en una ROM creada por Altera MegaWizard. La primera palabra que se almacena en esta ROM es 0x1111. Después de escribir un banco de pruebas para la CPU, descubrí que hay un retraso inicial de 1 ciclo al leer desde esta ROM. ¿Es esto normal y hay alguna forma de solucionarlo? ¿Importaría este retraso en mi CPU?

Respuestas (1)

Dependiendo de cómo haya configurado los ajustes de MegaWizard, esto es de esperar. Si la ROM está contenida en un bloque de RAM, siempre hay al menos 1 ciclo de latencia de lectura. Básicamente, afirma la dirección en t=0, luego, en el siguiente ciclo de reloj ( t=1), la dirección se carga en los registros de direcciones en BRAM. Luego, los datos aparecen en la salida de datos de la memoria listos para registrarse a las t=2.

Si usa un MLAB, las entradas de dirección se pueden especificar para que no se registren, lo que significa que los datos están listos para registrarse, t=1pero esto puede reducir el FMAX del sistema, porque ha eliminado el ciclo de reloj de canalización.


La latencia puede o no ser un problema dependiendo de cómo diseñe su CPU. Como se trata de una latencia fija (siempre será de 1 ciclo), puede tener esto en cuenta en el diseño de su CPU agregando canalización a la instrucción y obtención de datos, por ejemplo, obtenga la siguiente instrucción mientras procesa la actual.

Estoy haciendo una CPU de un solo ciclo, por lo que no hay canalización. En MegaWizard no puedo seleccionar MLAB, solo M9K está disponible y el resto está atenuado.
@gilianzz probablemente no esté disponible debido al tamaño de la memoria: los MLAB son muy pequeños. Hay otra opción que es hacer que la memoria se ejecute al doble de la frecuencia de la CPU: tener un reloj habilitado en la CPU, lo que significa que no está sincronizado durante el ciclo en el que se cargan los registros de direcciones.