9 votos

Cómo conseguir un diseño de FPGA que definitivamente va a trabajar en hardware real

Acabo de empezar el aprendizaje de lógica digital con diseño de FPGA, y han sido la construcción de un montón de proyectos. La mayoría de las veces (ya que soy un noob), tengo un diseño que simula a la perfección (de Comportamiento de la simulación), pero no sintetizar correctamente.

Entonces, mi pregunta es "¿cuáles son los pasos de diseño que puedo incorporar en mi flujo de trabajo, que se asegurará de que tengo un trabajo de diseño que va a trabajar a la derecha en mi FPGA ?"

Tengo dos áreas principales donde espero aconsejar, pero esto es absolutamente basado en un muy estrecho punto de vista de la mina como un principiante, y más son bienvenidos :

  • Lo que todos los pasos (ver RTL esquemática, post síntesis de simulación, ...) debo emprender el aprendizaje de las mejores prácticas.
  • Lo que todas las cosas debo tener en cuenta al diseñar la lógica (es decir FSM o circuitos secuenciales) para evitar resultados inesperados.

Estoy usando una Xilinx Spartan 6 FPGA, y Xilinx ISE Design suite para mi trabajo.

15voto

laptop2d Puntos 331

En un lugar en el que trabajó había dos campamentos de los diseñadores FPGA. Uno de los campamentos llamé a simular, simular, simular o s en cubos. El otro campamento fue todo sobre diseño.

La s en cubos chicos utilizaron un simulador como modelsim, iban a venir para arriba con un diseño inicial a través de los métodos de codificación y\o bloques en el diseño de la suite. Entonces van a simular y encontrar las cosas que no funcionan, a continuación, cambie el código. Este proceso fue reiterado varias veces hasta que vino para arriba con un diseño que trabajó.

El diseño de campamento (que he preferido) sería el diseño de la forma de onda en el papel (o papel digital como visio), exactamente lo que se requiere. Luego vienen con un diagrama de la lógica. Este es un auto-documentar el proceso. A continuación, el diagrama fue traducido a código (el código y el diagrama es de 1:1 si había algo en el diagrama, no fue un proceso en el código). Entonces fue simulado, y la simulación de la forma de onda se comparó con el diseño de la forma de onda en el papel, y se espera que sea el mismo.

Terminé haciendo las dos cosas, a veces me metía en s, cortado en cubos de modo, y que no era muy divertido. He encontrado que he perdido de vista mi objetivo, a veces. Por ejemplo, me gustaría cambiar de un estado en un estado de la máquina, y el cambio de la ondulación hacia abajo hasta el siguiente estado, entonces tendría que arreglar eso. Me pasé más tiempo de pensar en ello.

En que campo ¿te gustaría estar? Creo que hay que ser riguroso diseño, hacer lo que funciona para usted, pero creo que el más detallado y riguroso que están en el diseño, el menos de los problemas que puede tener en el largo plazo. Me dio algunos ejemplos de lo que es posible que no se ajuste a la estructura organizativa de su lugar de trabajo. La razón por la que el detalle del diseño y la planificación cuidadosa es muy útil, es que te obliga a pensar sobre lo que estás haciendo. Esto hace que sea fácil de depurar. Desarrollar un diseño de flujo de trabajo que permite que esto suceda. También, conseguir realmente familiarizado con las herramientas de simulación y escribir bien testbenches que pondrá a prueba todas las condiciones que el dispositivo simulado puede experimentar. Por supuesto, esto tiene que ser equilibrada con el tiempo. Por ejemplo, escribir ADC código HDL que simulará el dispositivo en sus simulaciones.

La herramienta más valiosa a tener en diseño de FPGA (en mi opinión) es un buen procedimiento de prueba que te permitirá poner a prueba su diseño y ejecución a través de sus pasos. Un diseño de FPGA no se puede esperar que "trabajar" se requiere un gran esfuerzo para asegurarse de que todas las piezas de trabajo. Si se detectan errores, a continuación, volver a la simulación y el diseño y aprender cuáles son las diferencias entre una simulación de la FPGA y RTL. Que principalmente viene con la experiencia, pero si el diseño funciona en la simulación, pero no en el hardware, entonces usted necesita para encontrar la razón de por qué hay una diferencia.

Algunas cosas importantes que he aprendido:
1) Desinfectar sus entradas, el reloj y el reset circuitos deben ser limpios o usted puede conseguir metastablity de propagación a través de su sistema. Saben lo que es un sincronizador de rango dual es. Hay muchos diferentes topologías para restablecer los circuitos, saber cómo usarlos (no es un gran artículo en el web, no lo tengo a mano).
2) Obtener los requisitos del diseño frontal y, a continuación, diseño alrededor de los. Si la gente de tu alrededor no te den definido los requisitos, luego vienen con algunos en su propio.
3) de Matlab punto fijo caja de herramientas es ideal para la simulación de sistemas de control y las aplicaciones de DSP, pero podría no tener acceso a eso. Es una gran manera de probar un diseño antes de código.
4) Diseño viene primero, después de la codificación, a continuación, la simulación.
5) establecimiento inflexible de tipos, también hay que tener nombres de señales consistentes en pcb esquemático y hdl. (esta es también la razón de que me gusta mucho VHDL más de verilog.

6voto

silverbolt Puntos 18

Cosas principales que son:

  • Cuidado de codificación para evitar no synthesizable estructuras
  • Minimizar los niveles lógicos para mejorar el rendimiento de temporización (hacer lógica entre registros tan simple como sea posible)
  • prueba, prueba, prueba, para asegurarse de corrección funcional y comprobar aspectos como sin inicializar regs y desconecta los cables
  • síntesis y verificación de la síntesis de los registros de las advertencias, asegúrese de que las advertencias no indican problemas (I. e. Eliminado de advertencia de registro podría ser intencional (no usar un módulo de salida) o no intencional (olvidó conectar el módulo de salida/error/etc.))
  • asignación y comprobar el mapa de informes para la utilización de cifras, asegúrese de que la FPGA no es demasiado completo
  • el lugar y la ruta y el calendario de análisis, asegúrese de que su diseño se ejecutará en la velocidad de reloj

Yo he tenido varios en lugar de diseños complejos funcionan correctamente (o al menos en su mayoría correctamente) en la primera prueba de que en un FPGA siguiendo el anterior. No hay necesidad de comprobar la RTL esquemático, que sólo muy engorroso y una completa pérdida de tiempo para los grandes diseños. Un post-síntesis de simulación sería mucho más útil.

5voto

Rob Lachlan Puntos 7880

Todos sus synthesizable código debe ser expressable como:

  • LUTs
  • Flip-flops
  • Específicos del proveedor de primitivas

Específicos del proveedor primitivas son instancias de forma explícita, o generado por el proveedor, asistente o inferida por muy específica de los modelos de codificación, por tanto, no hay ninguna ambigüedad.

En VHDL, por ejemplo, no puede usar wait for en synthesizable código. Para entender por qué, tratar de manera determinista que expresan wait for 100 ns el uso de LUTs o flip-flops. Usted no puede.

Eso no significa que no se puede implementar mediante el nombramiento de un contador con una frecuencia de reloj (con periodo que puede dividir 100 ns) y el uso de su recuento para saber cuándo es el momento. Pero el motor de síntesis de no llegar a este régimen de forma automática, usted necesita ser explícito acerca de la arquitectura en términos de lógica combinacional (puertas/LUTs) y de los registros.

Así que lo principal a tener en cuenta con el fin de generar synthesizable código, es tener una imagen relativamente clara de cómo el código se convierte en compuertas lógicas y flip flops. Que es realmente.

2voto

Graham Puntos 141

La más obvia primer paso es comprobar las advertencias.

Las herramientas de Xilinx producir archivos de registro que nos advierten acerca de cualquier cosa que podría ser, no lo que el codificador de la intención. A veces esto es molesto, cuando tienes montones de advertencias acerca de sin utilizar las señales de que sabes perfectamente bien que no están en uso. Pero a veces las capturas genuino errores. Si usted es un novato, las posibilidades de que cometer un error es mucho más alto.

Entonces usted necesita para configurar restricciones de temporización. Cómo rápidamente después de un flanco de subida de reloj de datos de la línea B, es necesario establecer? O ¿cuánto tiempo se hace de los datos de la línea B tiene que llevarse a cabo antes de que un flanco de bajada en Un reloj? Falta de tiempo le permitirá especificar todo esto. Si usted no tiene restricciones de temporización, el compilador puede asumir que usted no le preocupa y puede enrutar las señales en cualquier lugar. Si usted tiene falta de tiempo, el compilador de la obra para asegurarse de que sus señales de cumplir con las restricciones moviendo la colocación de alrededor. Y si no puede cumplir con la falta de tiempo, va a poner una advertencia.

Si tu problema es que las salidas no están haciendo lo que se puede esperar, mirar en detalle en la e/S de bloques. Cada pin de e/S tiene un poco de lógica asociada y un flip-flop. El orden en el que se especifique su lógica y las variables de estado en su código no puede hacer lo posible para que su código para que encaje en esta arquitectura, por lo que obtener un extra de retraso desde donde pasa a ser colocado. Advertencias sobre la falta de tiempo le dirá si esto ocurre (suponiendo que hayas configurado tu falta de tiempo), pero la fijación se requiere para entender el hardware y cómo su diseño de mapa en el hardware. Generalmente esto es sólo un problema cuando empiezas a golpear a altas velocidades de reloj, pero vale la pena mencionar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X