¿Por qué aparentemente no hay demora en la lectura de un block ram?

Estoy tratando de aprender Verilog y tenía curiosidad por saber por qué la RAM de bloque de mi FPGA parece proporcionar los datos que solicito al instante. Esperaba que hubiera una cierta cantidad de relojes que tendría que esperar antes de que mis resultados estuvieran disponibles.

En la CPU de una computadora tradicional, los únicos datos disponibles de inmediato son los que están almacenados en un registro, ¿correcto? Los datos almacenados en cachés o en RAM tendrían que buscarse en un registro antes de que puedan operarse, ¿verdad? ¿Estos objetos de ram de bloque solo se implementan a través de registros en el chip?

Gracias

Abra las especificaciones de su RAM de bloque FPGA y mire los diagramas de tiempo.
"En la CPU de una computadora tradicional, los únicos datos disponibles de inmediato son los que están almacenados en un registro, ¿correcto?" Incorrecto. Por ejemplo, una memoria caché L1 puede proporcionar datos al final de un solo ciclo de reloj.

Respuestas (1)

¿Instanciaste una IP generada primitiva o la inferiste con una matriz?

IP normalmente tiene una opción para la salida registrada o no.

Si es un primitivo o inferido, usted decide si registrarlo (proceso cronometrado) o no en su RTL. La primitiva suele ser una salida asíncrona, excepto los atributos específicos del proveedor que puedan estar asociados con ella.

Como @EugeneSh. dijo: La hoja de datos le dirá todo lo que necesita saber.

Los datos almacenados en cachés o en RAM tendrían que buscarse en un registro antes de que puedan operarse, ¿verdad?

No es necesario registrar una señal para operar con ella... Depende de la situación. Para leer la memoria, probablemente lo haría.

¿Estos objetos de ram de bloque solo se implementan a través de registros en el chip?

Puede optar por "empujar" la memoria en los registros durante la síntesis, pero, si tiene RAM disponible, normalmente usaría la RAM (y la herramienta también implementaría de forma predeterminada de esa manera ... especialmente si usó un primitivo). La hoja de datos le dirá cuánta RAM tiene y cómo está organizada. El informe de síntesis le dirá cómo se implementó.

Para hacer la vida más fácil, simplemente inferiría RAM con una matriz.

Estoy usando IP generada. ¿Puede explicar qué quiere decir con "registrado"? ¿Proporcionar una entrada de reloj significa que está "registrado" en ese reloj?
En términos de IP generada, generalmente hay una opción para "registrarse" a través de la GUI, que esencialmente envuelve la RAM y coloca un registro en la salida... o podría ser una asignación manual a un atributo. Cuando digo "registrar", me refiero a un flip-flop no transparente (D-FF), que usa un reloj para mover (registrar) el valor. es decir, desde su salida de RAM a una "señal de ciclo de reloj posterior", aparentemente, su salida o la señal en la que desea operar