Hace un tiempo hice esta pregunta sobre la conexión de una memoria RAM estática a una fpga con el fin de crear un búfer de cuadros vga que quería hacer como un pequeño proyecto de pasatiempo. 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 Sé lo suficiente como para mirar el proyecto que quiero construir de nuevo :)
Estoy pensando en usar este chip de memoria , ya que parece ajustarse a mis requisitos. La hoja de datos indica que puedo leer un byte de datos cada 10 ns y que tengo que configurar la dirección un mínimo de 10 ns antes de querer leer los datos. Tiene un tiempo de "retención de datos por cambio de dirección" de 3 ns.
Esto implica para mí que, suponiendo un reloj de 10 ns, simplemente puedo configurar las líneas de dirección en cada ciclo de reloj y volver a leer los datos de la dirección anterior. Que la salida de datos será válida en o antes del próximo 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 leerlo.
¿Es esto algo razonable (establecer la dirección al mismo tiempo que leo los datos de la dirección anterior)? Al mirar la hoja de datos parece que sí.
Esto es lo más rápido que funcionaría, también podría usar un reloj más lento si llevar el tiempo al límite de esta manera fuera un problema, solo quería entender si había entendido la hoja de datos correctamente.
Asumo que estás viendo el "Ciclo de lectura No. 1". Sí, esa es la interpretación correcta de la hoja de datos.
Ahora debe preocuparse por el lado de la FPGA, que tiene sus propios tiempos de configuración/retención y retrasos. Si tiene suficiente margen de frecuencia en el FPGA, no necesita preocuparse mucho 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 necesita ser microgestionado, por lo que es útil comenzar a pensar en estos problemas ahora. Sugiero completar el lado HDL de su proyecto (lea esos informes de tiempo) antes de finalizar su diseño de hardware.
Operar una interfaz externa de 100 MHz en familias de FPGA económicas probablemente requerirá algo de cuidado. Sin embargo, puede comenzar bajo y lento, como unas pocas decenas de MHz, antes de mojarse los pies.
Con respecto a las simulaciones, construir su propio modelo SRAM sería una experiencia de aprendizaje útil: las comprobaciones de tiempo se pueden simular como se describe en este enlace
Alternativamente, el archivo VHDL de Hamburgo tiene algunos modelos de SRAM que pueden ser útiles y/o instructivos.
Una vez que haya construido su banco de pruebas y lo haya hecho funcionar 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 obtendrá algo útil al final.
Parece que entiendes bastante bien el lado de SRAM, así que no tocaré eso.
Viniendo 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 absorberá 800 MB/s, es casi seguro que necesitará canalizar su diseño para lograr el cierre de tiempo.
Considera calcular 2x+1. Son dos operaciones, una multiplicación y una suma. Si intenta realizar ambas operaciones en un solo ciclo de reloj, la señal puede tardar 20 ns (valor sacado de la nada por conveniencia) en atravesar tanto el multiplicador como el sumador. Sin embargo, si lo canalizó para que la multiplicación ocurra en una etapa y se alimente a un flip flop, y luego la adición ocurra 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 llegue. propagarse de un flip flop al siguiente.
Recomendaría comenzar MUCHO más lento, si tiene un tiempo de acceso de 10 ns, comenzaría con algo mucho más seguro, como accesos de 100 ns. Solo asegúrese de que puede leer y escribir un patrón de bits en la RAM y luego repetir ese patrón en un osciloscopio. Una vez que sabe que puede leer y escribir en la RAM correctamente, entonces comienza a agregar sus etapas de canalización, mientras mantiene los accesos de 100 ns. Este paso es solo para asegurarse de que los datos se propaguen a través de la canalización correctamente, ya que es muy fácil perderse una etapa. Su objetivo aquí es agregar suficientes etapas para que el informe de tiempo indique que es factible un ciclo de reloj de 10 ns ("lograr el cierre de tiempo" en el lenguaje). Una vez que tenga suficientes etapas en la tubería y estén funcionando correctamente, aumente la velocidad de su reloj.
Profesor Falken
gestión
Profesor Falken
Juan Burton
gestión
gestión
Juan Burton
Profesor Falken
ajs410