Programación FPGA, donde comenzar


29

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)?


3
Si está familiarizado con la programación C / C ++, entonces debe elegir Verilog , en lugar de VHDL. La sintaxis de Verilog es similar a C.
m.Alin

1
@ m.Alin Recién estoy comenzando y descubrí que no importa si se parece a C, porque descubrí que la parte más difícil no era la sintaxis, sino la diferencia de conceptos. La semántica ni siquiera se
parece

El cambio más grande que encontré de C / C ++ / Java / etc. es que los módulos que escribes (equivalente, supongo que a las unidades de traducción) están puramente controlados por eventos. En C, simplificado a un principio básico, un programa compilado llevará a cabo la línea 1 de su código, luego la línea 2, luego 3, luego 4, etc. No existe tal cosa en Verilog / VHDL, es un poco como dibujar una imagen : este pin de entrada se conecta a module1_input, module1_output alterna el estado cada vez que module1_input se pone alto. En lugar de if(condition)eso when(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.
CharlieHanson

Respuestas:


40

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í.


Muchas gracias por esta respuesta detallada, realmente me ayudó a ver cómo puedo proceder. Lamentablemente, tampoco tengo amigos que puedan ayudarme. ¡Pero me salvaste de muchos problemas y una vez más muchas gracias!
Anila

55
Excelente respuesta
Assad Ebrahim

De vuelta en la escuela, aprendimos C ++ antes de aprender VHDL. Estaba teniendo muchos problemas para entenderlo, pero el punto cuando todo hizo clic fue cuando entendí que todo sucede en tiempo real y en paralelo (paralelo, no asíncrono como nodejs). El desarrollo de software sigue un flujo secuencial, pero en HDL, todo sucede a la vez (la mayoría de las veces). Si tiene algo como "x = 1; y = 2; y = x; x = y", en SW, al final y será igual a 1, en HDL, tiene una condición de carrera ya que tanto x como y tratarán de cambiar el uno al otro al mismo tiempo. Solo recuerda esto y la vida podría ser más fácil para ti.
PGT

@PGT Deberá esperar que el valor de y sea diferente de 1 si 'y' es accesible para múltiples procesos que se ejecutan en un solo núcleo o múltiples núcleos, lo que puede imponer su autoridad en un proceso más débil.
Adithya

1

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.


-1

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.


En Europa se usa VHDL, en los Estados Unidos Verilog. No es cierto en absoluto ...
Matt Young

De hecho, aprendí Verilog y soy del Reino Unido. También es el idioma que se enseña en uno de los módulos que hice en la universidad (también en el Reino Unido).
Tom Carpenter
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.