En un lugar donde trabajaba había dos campos de diseñadores de FPGA. Un campo al que llamé simular, simular, simular o cubos. El otro campamento fue todo sobre diseño.
Los chicos en cubos usaron un simulador como modelsim, ellos desarrollarían un diseño inicial a través de métodos de codificación y / o bloques en la suite de diseño. Luego lo simularían y encontrarían las cosas que no funcionarían, luego cambiarían el código. Este proceso se repitió varias veces hasta que crearon un diseño que funcionó.
El campo de diseño (que preferí) diseñaría la forma de onda en papel (o papel digital como visio), exactamente lo que se requería. Luego sube con un diagrama lógico. Este es un proceso de auto-documentación. Luego el diagrama se tradujo al código (el código y el diagrama eran 1: 1 si había algo en el diagrama, había un proceso para ello en el código). Luego se simuló y la forma de onda de simulación se comparó con la forma de onda diseñada en el papel, y se esperaba que fuera la misma.
Terminé haciendo ambas cosas, a veces me metía en el modo de cubos, y no era muy divertido. Descubrí que a veces perdía de vista mi objetivo. Por ejemplo, cambiaría un estado en una máquina de estado, y el cambio se trasladaría al siguiente estado, luego tendría que arreglarlo. Terminé pasando más tiempo que pensando en ello.
¿En qué campamento prefieres estar? Creo que debe haber un diseño riguroso, hacer lo que funcione para usted, pero creo que cuanto más detallado y riguroso sea su diseño, menos problemas tendrá a la larga. Di algunos ejemplos de lo que es posible, es posible que no se ajusten a la estructura organizativa de su lugar de trabajo. La razón por la que los detalles de diseño y la planificación cuidadosa son tan útiles es porque te obliga a pensar qué estás haciendo. Facilita la depuración. Desarrollar un flujo de trabajo de diseño que permita que esto suceda.
Además, familiarícese realmente con las herramientas de simulación y escriba buenos bancos de pruebas que probarán todas las condiciones que podría experimentar el dispositivo simulado. Esto, por supuesto, necesita ser equilibrado con el tiempo. Por ejemplo, escriba el código ADC HDL que simulará el dispositivo en sus simulaciones.
La herramienta más valiosa para tener en el diseño de FPGA (en mi opinión) es un buen procedimiento de prueba que le permitirá probar completamente su diseño y ejecutarlo a través de sus pasos. No se puede esperar que un diseño de FPGA "solo funcione" requiere un esfuerzo para asegurarse de que todas las piezas funcionen. Si detecta errores, vuelva a la simulación y el diseño y aprenda cuáles son las diferencias entre un FPGA simulado y una RTL. Esto se debe principalmente a la experiencia, pero si el diseño funciona en simulación pero no en hardware, debe averiguar por qué hay una diferencia.
Algunas cosas clave que aprendí:
1) Desinfecte sus entradas, el reloj y los circuitos de reinicio deben estar limpios o puede obtener metastablity propagándose a través de su sistema. Saber qué es un sincronizador de doble rango. Hay muchas topologías diferentes para los circuitos de reinicio, sé cómo usarlos (hay un gran artículo en la web, aunque no lo tengo a mano).
2) Obtenga los requisitos del diseño por adelantado y luego diseñe alrededor de ellos. Si las personas que te rodean no te dan requisitos definidos, entonces crea algunos por tu cuenta.
3) La caja de herramientas de punto fijo de Matlab es excelente para simular sistemas de control y aplicaciones DSP, pero es posible que no tenga acceso a eso. Es una excelente manera de probar un diseño antes de codificar.
4) El diseño es lo primero, luego la codificación, luego la simulación.
5) Escrito con firmeza, también mantenga los nombres de las señales consistentes en el esquema de PCB y HDL. (esta es también la razón por la que prefiero VHDL en lugar de verilog.