Métodos para la configuración de datos RAM antes del reloj

1

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:

  1. Establezca las señales en el borde descendente del reloj.
  2. 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.
  3. 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.
  4. Use dos relojes ligeramente desfasados, establezca las señales en el borde ascendente del reloj principal.
  5. ¿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.

    
pregunta FusterCluck

3 respuestas

2

No es necesario usar el otro borde, o cambiar de fase el reloj.

Simplemente configure los datos en el flanco ascendente, y luego el siguiente flanco ascendente lo registrará en la memoria (según la opción 2).

La ejecución del análisis de tiempo estático le informará de cualquier infracción de retención / configuración. Pero si agrega restricciones de forma de onda adecuadas a su reloj (es decir, frecuencia, servicio), el instalador hará todo lo posible para cumplir con los requisitos de tiempo.

Esta es la base fundamental del diseño síncrono. Cada registro registra en el mismo borde al mismo tiempo, por lo que teóricamente los datos del último ciclo en cualquier entrada de registro siempre se cargarán en el ciclo actual. Esto se logra principalmente mediante el uso de arquitecturas de reloj de árbol H de baja inclinación, donde la distancia desde la fuente del reloj a cualquier registro es más o menos la misma longitud con los mismos retrasos, por lo que, en teoría, todos los registros deben sincronizarse al mismo tiempo.

Los datos tardarán un poco más en llegar (ya que tienen retraso de propagación DFF y retraso de enrutamiento) antes de llegar al siguiente registro, lo que significa que la entrada de un registro cambiará en algún momento después del borde del reloj que lo configuró arriba (y con suerte antes del borde que se supone que debe cargarlo).

    
respondido por el Tom Carpenter
0

Probablemente no voy a responder las 5 preguntas secundarias, pero responderé a tu pregunta principal

  

Quiero saber cuáles son los métodos habituales para configurar las señales de control de RAM w.r.t. el reloj

El método habitual es que el fabricante tenga una nota de aplicación bastante detallada sobre la sincronización con su interfaz RAM. por ejemplo, una búsqueda rápida en Google encontró esta nota de la aplicación para un QDR II SRAM utilizando un virtex-5.

Normalmente, estas interfaces se crean mediante un editor de núcleo. Este editor le dirá qué interfaces y opciones están permitidas. Estos podrían ser parámetros opcionales como el tamaño de bloque, la cantidad de bits de datos, etc. Igual de importante que una buena nota de aplicación le dirá las limitaciones del núcleo.

Parece que quieres hacer esto a mano, pero hay un par de ventajas al crear instancias de un bloque.

  1. Está aprovechando el conocimiento de los diseñadores de chips e ingenieros de aplicaciones de la compañía

  2. El bloque ya se encargará del tiempo, la configuración, las reservas, los múltiples relojes, etc., siempre y cuando se mantenga dentro de sus limitaciones y no lo alimente con basura

  3. El bloque ya conoce todos los tipos de bloque disponibles en el silicio objetivo y hará todo lo posible para mantener una huella pequeña o una velocidad rápida (que a veces es otra configuración)

  

Puedo hacer cosas divertidas con restricciones de tiempo para configurar las señales con la suficiente antelación

Si usted es un nuevo diseñador digital, hay muchos problemas para alterar el tiempo. Recuerde que las herramientas de sincronización / holgura / configuración / retención, etc. están ahí para ayudarlo. Es posible que esto no le muerda ahora, pero podría ser un problema si el diseño cambia un poco y, de repente, su LUT se coloca en otra porción b / c, cambió la configuración de tiempo pero no las restricciones de ubicación.

Como con la mayoría de las reglas, estas son reglas a menos que realmente sepas lo que estás haciendo, entonces son pautas.

    
respondido por el Bageletas
0

Siempre trabajas de forma síncrona, y el flanco ascendente solo. Recuerde que para escribir puede usar un solo reloj, pero para leer necesita al menos dos, uno para proporcionar la dirección y el segundo para leer los datos

    
respondido por el Claudio Avi Chami

Lea otras preguntas en las etiquetas