Configuración de los datos antes de la subida: ¿cuál es la mejor práctica?

2

Soy un novato, jugando con una RAM de bloque de puerto único muy simple (en un FPGA en realidad).

Su tiempo de 'lectura' es estándar -

i) Una dirección en la entrada de RAM se bloquea en un primer flanco ascendente del reloj (llama a este borde 'uno').

ii) Los datos almacenados en esta dirección aparecen entonces en la salida del ariete en el siguiente flanco ascendente ('dos')

Ahora, obviamente, para el paso 'i' necesito asegurarme de que mi dirección esté configurada y estable antes (y durante un tiempo de espera después) del borde ascendente "uno".

Mi pregunta simple es: ¿cuál es la práctica habitual de cuándo hacer esto?

Podría configurar la dirección con un flanco ascendente completo (borde 'cero') antes de que sea necesario para enganchar en el borde 'uno', pero de alguna manera esto se siente ineficiente ya que parece que estoy tomando al menos 3 bordes ascendentes para obtener datos fuera de mi memoria RAM.

Alternativamente, podría configurar mis direcciones en el flanco descendente del reloj, inmediatamente antes de que sean necesarias en el flanco ascendente "uno". Pero he leído que el uso de relojes ascendentes y descendentes en los diseños tampoco es un enfoque completamente típico.

¿Qué es lo mejor? ¿He entendido mal algo básico?

    
pregunta Walloon

1 respuesta

4
Los

FPGA están generalmente diseñados con 0 tiempos de espera.

Eso significa que puede configurar la dirección en el ciclo de reloj # 1, y la RAM emitirá los datos deseados en el ciclo # 2. Si la dirección cambia en la transición al ciclo 2, no violará el tiempo de espera (porque el tiempo de espera mínimo es 0).

  

Podría configurar la dirección con un flanco ascendente completo (borde 'cero') antes de que sea necesario para enganchar en el borde 'uno', pero de alguna manera esto se siente ineficiente ya que parece que estoy tomando al menos 3 bordes ascendentes para obtener datos fuera de mi memoria RAM.

Esto es básicamente lo que estoy diciendo que hagas.

Hay una latencia de 2 ciclos para configurar la dirección y leer la salida, pero el rendimiento es potencialmente de una lectura por ciclo, porque puedes cambiar la dirección de cada ciclo y obtener nuevos datos en cada ciclo.

    
respondido por el The Photon

Lea otras preguntas en las etiquetas