Soy muy nuevo en diseño digital (mi fondo es software). Estoy tratando de hacer uso de algunos bloques de RAM en un FPGA Xilinx, y quiero saber cuáles son los métodos habituales para configurar las señales de control de RAM w.r.t. el reloj.
Actualmente tengo un solo reloj utilizado por todos mis diseños. La memoria RAM puede realizar una lectura / escritura en cada flanco ascendente, y quiero usarla a esa velocidad. Por supuesto, las señales de control deben establecerse un tiempo antes del borde ascendente del reloj. Me imagino que hay algunas maneras de hacer esto:
- Establezca las señales en el borde descendente del reloj.
- Establezca las señales en el borde ascendente. La herramienta de síntesis es lo suficientemente inteligente como para saber lo que quiero, conoce el tiempo de configuración requerido y se encarga de todo.
- Establezca las señales en el borde ascendente. La herramienta de síntesis no es lo suficientemente inteligente, pero puedo hacer cosas divertidas con restricciones de tiempo para configurar las señales con la suficiente antelación.
- Use dos relojes ligeramente desfasados, establezca las señales en el borde ascendente del reloj principal.
- ¿Algunos otros enfoques?
¿Cuáles de estos son posibles, cuáles son realmente buenos o se usan generalmente, y existen ventajas o desventajas para ayudar a elegir entre ellos?
Editar: estoy usando VHDL simple por razones de portabilidad, y no estoy usando CoreGen o primitivos específicos de Xilinx. Sin embargo, estoy siguiendo la documentación de Xilinx y escribo el VHDL de modo que las herramientas puedan inferir el tipo de RAM correcto ("Pautas de codificación de RAM HDL en UG687 si alguien está interesado). Las herramientas parecen estar haciendo esto correctamente.