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?