En un lugar donde trabajaba había dos campamentos de diseñadores de FPGA. Un campo que llamé simular, simular, simular o cubicado. El otro campamento era todo sobre diseño.
Los chicos cubicados usaron un simulador como modelsim, idearían un diseño inicial mediante 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 se les ocurrió 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 inventa un diagrama lógico. Este es un proceso de autodocumentación. Luego, el diagrama se tradujo a 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 papel, y se esperaba que fuera la misma.
Terminé haciendo ambas cosas, a veces entraba en el modo de cubos, y no fue muy divertido. Descubrí que a veces perdí de vista mi objetivo. Por ejemplo, cambiaría un estado en una máquina de estados, y el cambio se reduciría al siguiente estado, luego tendría que arreglar eso. Terminé pasando más tiempo que pensando en ello.
¿En qué campamento preferirías estar? Creo que debe haber un diseño riguroso, haga lo que funcione para usted, pero creo que cuanto más detallado y riguroso sea en el diseño, menos problemas tendrá a largo plazo. Di algunos ejemplos de lo que es posible, puede que no se ajusten a la estructura organizativa de su lugar de trabajo. La razón por la cual los detalles de diseño y la planificación cuidadosa son tan útiles es que te obliga a pensar en lo que estás haciendo. Facilita la depuración. Desarrolle un flujo de trabajo de diseño que permita que esto suceda. Además, familiarícese con las herramientas de simulación y escriba buenos bancos de pruebas que prueben todas las condiciones que pueda experimentar el dispositivo simulado. Por supuesto, esto debe equilibrarse 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 su ritmo. No se puede esperar que un diseño de FPGA "simplemente funcione", se 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 RTL. Eso viene principalmente con la experiencia, pero si el diseño funciona en simulación pero no en hardware, entonces debe descubrir 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 propagación de la metaestabilidad a través de su sistema. Sepa qué es un sincronizador de doble rango. Hay muchas topologías diferentes para restablecer circuitos, sepa 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 en torno a ellos. Si las personas que te rodean no te darán requisitos definitivos, inventa 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 y luego la simulación.
5) Fuertemente tipado, también mantenga los nombres de señal consistentes en el esquema de pcb y hdl. (esta es también la razón por la que prefiero VHDL a verilog.