Soy desarrollador de software (C, C ++, Objective-C, Java ...) y estoy interesado en aprender a programar FPGA. Ahora la pregunta puede parecerle simple, pero tómese el tiempo para ayudarme con esto, ya que estoy un poco atrapado en este momento. Mi empresa me ha pedido que me familiarice con la tecnología y trabaje en un producto de red. Mi pregunta es por dónde empezar? Después de algunas investigaciones descubrí que podía elegir entre VHDL y Verilog, nunca he usado ninguno de ellos. ¿Hay algún especialista que pueda sugerirme dónde debo comenzar? ¿Aprender un idioma, conocer los componentes de hardware y luego el producto de celosía? ¿O comenzar directamente con el producto Lattice (mientras leo que los métodos de programación son muy diferentes entre los proveedores de FPGA)?
fuente
if(condition)
esowhen(condition)
. La mayoría de los IDE de FPGA incluso tienen una entrada de diseño gráfico, como si lo estuvieras dibujando en papel.Respuestas:
El diseño digital no tiene mucho en común con el desarrollo de software (tal vez excepto que la sintaxis de Verilog se parece un poco al lenguaje C pero solo se ve). Por lo tanto, es muy difícil responder adecuadamente a este tipo de preguntas. Pero como un tipo que recorrió un camino desde el desarrollo de software hasta el diseño de hardware, lo intentaré. Mirando hacia atrás, así es como me habría aconsejado si supiera lo que sé ahora:
Empezar desde el principio
Olvídate de todo sobre el desarrollo de software. Especialmente lenguajes de programación. Esos principios no se aplican en el diseño digital. Probablemente sería fácil para un tipo que diseñó una CPU programarlo en ensamblador o incluso en C, pero un programador de ensamblador no podrá diseñar una CPU.
En su camino de aprendizaje, no intente resolver lo que parece ser un problema fácil con su conocimiento actual del software. Uno de los ejemplos clásicos es un "bucle for". Aunque puede escribir un bucle for en, por ejemplo, verilog, sirve para diferentes propósitos. Se utiliza principalmente para la generación de código. También puede ser un ciclo for como lo ven los desarrolladores de software, pero no será bueno para otra cosa que no sea simulación (es decir, no podrá programar FPGA de esa manera).
Entonces, para cada tarea que desee abordar, no piense que sabe cómo hacerlo, haga una investigación en su lugar: consulte libros, ejemplos, pregunte a personas más experimentadas, etc.
Aprenda hardware y lenguaje HDL
Los lenguajes HDL más populares son Verilog y VHDL. También hay proveedores específicos como AHDL (Altera HDL). Dado que esos lenguajes se usan para describir componentes de hardware, todos se usan más o menos para expresar lo mismo de una manera similar pero con una sintaxis diferente.
Algunas personas recomiendan aprender Verilog porque se parece a C. Sí, su sintaxis es una mezcla de C y Ada, pero no facilita que un desarrollador de software se apoye. De hecho, creo que incluso puede empeorarlo porque habrá una tentación de escribir C en Verilog. Esa es una buena receta para pasarlo muy mal.
Teniendo eso en mente, recomendaría mirar desde el VHDL. Aunque Verilog también está bien siempre que se tenga en cuenta lo anterior.
Una cosa importante a tener en cuenta es que debe comprender lo que está expresando con ese idioma. Qué tipo de hardware se "describe" y cómo funciona.
Por esa razón, le recomiendo que obtenga un libro sobre electrónica en general y un buen libro como este: HDL Chip Design (también conocido como un libro azul).
Consigue un simulador
Antes de comenzar a hacer cualquier cosa en hardware y usar cualquier característica específica del proveedor, etc., consiga un simulador. Estaba comenzando con un Verilog, y usé Icarus Verilog junto con GTK Wave. Esos son proyectos gratuitos de código abierto. Ejecute ejemplos que ve en los libros, practique diseñando sus propios circuitos para probarlos.
Consigue una placa de desarrollo
Cuando tenga ganas de seguir adelante, obtenga una placa de desarrollo. Si sabe que su empleador quiere ir con Lattice, obtenga la junta de Lattice.
Los métodos de programación son muy similares, pero hay detalles que son diferentes. Por ejemplo, diferentes herramientas, diferentes opciones, diferentes interfaces. Por lo general, si tiene experiencia con un proveedor, no es difícil cambiarlo. Pero probablemente desee evitar esta curva de aprendizaje adicional.
También me aseguraría de que la placa venga con componentes que está planeando usar o que sea extensible. Por ejemplo, si desea diseñar un dispositivo de red como un enrutador, asegúrese de que la placa tenga Ethernet PHY o que se pueda extender a través de, digamos, un conector HSMC, etc.
Los tableros generalmente vienen con una buena referencia, guía de usuario y ejemplos de diseño. Estudiarlos.
Leer libros
Necesitarás leer libros. En mi caso, no tenía amigos que conocieran el diseño digital, y este sitio tampoco era muy útil debido a una cosa simple: ni siquiera sabía cómo formular mi pregunta. Todo lo que se me ocurrió fue como "Uhm, chicos, hay algo dcfifo y escuché algo sobre los desafíos de cruce de dominios de reloj, ¿qué es y por qué mi diseño no funciona?".
Yo personalmente comencé con estos:
Los vendedores de FPGA tienen muchos libros de cocina con las mejores prácticas. Estúdialos junto con diseños de referencia. Aquí hay uno de Altera, por ejemplo.
Regrese con preguntas más específicas.
Mientras revisa sus libros, simula un diseño, parpadea algunos LED en su placa de desarrollo, lo más probable es que tenga muchas preguntas. Asegúrese de no ver una respuesta a las de la página siguiente del libro o en línea (es decir, en el foro específico de Lattice) antes de preguntarlas aquí.
fuente
Como alternativa, puede utilizar algunas técnicas de síntesis de alto nivel, como Vivado HLS de Xilinx y la solución OpenCL de Altera. Tal vez esto aliviará su curva para aprender lenguajes de descripción de hardware, considerando su experiencia en software.
fuente
Primero aprenda los conceptos básicos de diseño digital. Máquina Mealy / Moore, lógica combinatoria, tabla de verdad, mapa de Karnaugh, etc. Comience a crear un diseño simple en esquemas (contador de 7 segmentos) y luego aprenda un HDL. En Europa se usa VHDL, en los Estados Unidos Verilog. Finalmente, el tiempo es importante, tenga en cuenta que las señales tienen retrasos que son componentes instantáneos y dependientes de la temperatura y cada señal tiene otro retraso.
Libro para leer: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379
El conocimiento perfecto de la sintaxis del lenguaje es para luego comprender primero el diseño digital y los problemas.
fuente