Interfaz estática de RAM a fpga

5

Hace tiempo, pregunté a esta pregunta sobre la interfaz estático a un fpga para los fines de un buffer de cuadro vga que quería hacer como un pequeño proyecto de hobby. Me quedó claro en ese momento que el proyecto era demasiado difícil para mi nivel de conocimiento (ya que básicamente soy un programador de c ++ y sabía poco sobre electrónica) pero desde entonces he creado algunos proyectos más pequeños basados en cpld, así que ahora siento que Sé lo suficiente como para ver el proyecto que quiero volver a construir :)

Estoy pensando en usar este chip de memoria , ya que parece cumplir con mis requisitos. La hoja de datos indica que puedo leer un byte de datos cada 10 ns y que debo configurar la dirección como mínimo 10ns antes de que quiera leer los datos. Tiene un tiempo de "Retención de datos por cambio de dirección" de 3 ns.

Esto me implica que, asumiendo un reloj de 10 ns, simplemente puedo configurar las líneas de dirección en cada ciclo de reloj y leer los datos de la dirección anterior. Que la salida de datos será válida en o antes del siguiente reloj de 10 ns, y seguirá siendo válida durante al menos 3 ns después de que cambie la dirección, por lo que es seguro leerla.

¿Es esto algo razonable? (configurar la dirección al mismo tiempo que leo los datos de la dirección anterior). De mirar la hoja de datos parece.

Esto es lo más rápido que funcionaría, también podría usar un reloj más lento si empujar el tiempo al límite, ya que esto era un problema, solo quería entender si había entendido la hoja de datos correctamente.

    
pregunta John Burton

3 respuestas

3

Supongo que estás viendo "Leer el ciclo n. ° 1". Sí, esa es la interpretación correcta de la hoja de datos.

Ahora tiene que preocuparse por el lado FPGA, que tiene sus propios tiempos de configuración / espera y demoras. Si tiene suficiente margen de frecuencia en el FPGA, no necesita preocuparse por esto más allá de las limitaciones de tiempo básicas; Las herramientas abstraerán las cosas hasta cierto punto. Pero eventualmente encontrará algo que debe ser microgestionado, por lo que es útil comenzar a pensar en estos temas ahora. Sugiero completar el lado HDL de su proyecto (lea los informes de tiempo) antes de finalizar el diseño de su hardware.

La operación de una interfaz externa de 100 MHz en el presupuesto de las familias FPGA probablemente requerirá un poco de cuidado. Sin embargo, puedes comenzar lento y lento, como algunas decenas de MHz, antes de que realmente te mojes los pies.

    
respondido por el mng
2

Con respecto a las simulaciones, construir su propio modelo SRAM sería una experiencia de aprendizaje útil: se pueden simular las verificaciones de tiempo como se describe en este enlace

Alternativamente, el archivo Hamburg VHDL tiene algunos modelos de SRAMs que pueden ser útiles y / o instructivas.

Una vez que haya construido su banco de pruebas y lo haya puesto a trabajar en su código HDL, también puede generar una lista de redes post-PAR y usarla en el banco de pruebas. Este modelo tendrá algunos retrasos reales modelados (y requisitos de tiempo), lo que le dará cierta confianza de que está obteniendo algo útil al final.

    
respondido por el Martin Thompson
2

Parece que entiendes bastante bien el lado de la SRAM, así que no voy a tocar eso.

Si viene de CPLD, que no tienen muchas chanclas, es posible que no esté familiarizado con la canalización. Esencialmente, es el acto de insertar flip flops en la ruta lógica para reducir el tiempo del ciclo. Teniendo en cuenta que su FPGA consumirá 800 MB / s, es casi seguro que tendrá que canalizar su diseño para lograr el cierre de la sincronización.

Considera calcular 2x + 1. Se trata de dos operaciones, una multiplicación y una suma. Si intenta realizar ambas operaciones en un solo ciclo de reloj, es posible que se requieran 20 ns (valor extraído del aire para mayor comodidad) para que la señal se abra paso a través del multiplicador y el sumador. Sin embargo, si lo canalizó para que la multiplicación se produzca en una etapa y se alimente a un flip flop, y luego la adición se realice en una segunda etapa, entonces puede reducir su período de reloj a 10 ns, ya que solo se necesitan 10 ns para que la señal se active. propagarse de un flip flop al siguiente.

Recomendaría comenzar WAY más lento, si tiene un tiempo de acceso de 10 ns, entonces comenzaría con algo mucho más seguro, como los accesos de 100 ns. Solo asegúrese de que puede leer y escribir un patrón de bits en la RAM y luego hacer eco de ese patrón en un alcance. Una vez que sepa que puede leer y escribir en la memoria RAM correctamente, entonces comienza a agregar las etapas de la tubería, mientras mantiene los accesos 100ns. Este paso es solo para asegurarse de que los datos se están propagando a través de la canalización correctamente, ya que es muy fácil estar fuera en una etapa. Su objetivo aquí es agregar suficientes etapas para que el informe de temporización indique que es factible un ciclo de reloj de 10 ns ("lograr el cierre de la temporización" en el lenguaje). Una vez que tenga suficientes etapas en la tubería y estén funcionando correctamente, aumente la velocidad de su reloj.

    
respondido por el ajs410

Lea otras preguntas en las etiquetas