Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf ·...

70
Copyright © 2005-2017 INTI, Salvador E. Tropea Instituto Nacional de Tecnología Industrial FPGAs Libres: Hardware, simulación y síntesis Disertante: Salvador E. Tropea Centro de Micro y Nanoelectrónica (CMNB)

Transcript of Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf ·...

Page 1: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Instituto Nacional de Tecnología Industrial

FPGAs Libres:Hardware, simulación y síntesis

Disertante: Salvador E. TropeaCentro de Micro y Nanoelectrónica (CMNB)

Page 2: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Breve introducción y terminología

Page 3: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Breve introducción y terminología

FPGA (Field Programmable Gate Array), el representante dominante de la “Lógica Programable”

• Circuitos integrados reconfigurables• Pueden realizar cualquier función digital• Se basan en lógica combinacional (LUTs) y flip-flops• La lógica y su interconexión es reconfigurable• Usualmente se describe el circuito usando un HDL• Principales fabricantes:

• Xilinx• ALTERA (Intel)

• Medianos: Microsemi y Lattice

Page 4: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Breve introducción y terminología

HDL (Hardware Description Language), un código que sirve para describir circuitos (normalmente digitales)

• Permite describir el circuito propiamente dicho y también verificarlo.• Se parecen a los lenguajes de programación, pero describen circuitos (compuertas y flip-flops)• Los más populares:

• Verilog (migrando a SystemVerilog)• VHDL

Page 5: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Breve introducción y terminología

Verilog (Verification Logic)• Se parece al lenguaje C• Dominante en la costa oeste de USA (Silicon Valley)• Compacto, aunque peligroso• Norma IEEE 1364

VHDL (Very High Speed Integrated Circuit HDL)• Con raíces en el ADA (DoD)• Dominante en la costa este de USA y Europa (también en el ámbito académico y gubernamental local)• Autodocumentado, verborrágico• Norma IEEE 1076

Page 6: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Breve introducción y terminología

Sintetizar: Convertir el código HDL en un circuito• FPGA: en la configuración de los elementos lógicos internos (bitstream)• Esta información usualmente se almacena en una memoria.

Simular: Convertir el código HDL en un programa• El programa puede ser código nativo o interpretable• Al HDL del circuito se agrega un HDL que simula los componentes externos, inyecta estímulos y verifica los resultados (testbench).• Permite verificar el funcionamiento

Page 7: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Breve introducción y terminología

Kit de desarrollo: Circuito electrónico con la FPGA y accesorios útiles para validar nuestro diseño.

• El diseño final podría usarlo• O bien diseñamos un circuito que agregue/quite la funcionalidad de nuestro diseño• El fabricante usualmente provee el circuito esquemático para que podamos usarlo como base para nuestro diseño

Page 8: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Breve introducción y terminología

Lo más común es usar un kit de desarrollo propietario• En muchos casos vendido por el fabricante, aunque diseñado por un tercero.• Solo parte de la información de diseño se encuentra disponible

Lo más común es usar el software propietario que provee el fabricante

• El software tratará de mantenernos cautivos mediante características propietarias difíciles de portar. Inclusive violando estándares• Solo algunos detalles internos son conocidos• El software impone limitaciones arbitrarias

Page 9: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

La opción que nos da libertad

Page 10: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

La opción que nos da la libertad

Software Libre: El software que nos da la libertad de copiarlo, estudiarlo, modificarlo, etc.

• Las FPGAs son casi tan viejas como el movimiento de S.L. (primer mitad de los '80)• Sin embargo recién en 2015 se logró cerrar el ciclo de diseño

Hardware Libre: Una extrapolación del concepto de S.L. llevado al hardware

• Hardware que podemos copiar, estudiar, modificar, etc. Con la salvedad que nadie nos va a regalar los componentes• Idealmente, el hardware libre debería tener toda su información de diseño disponible y en formatos usables con S.L.

Page 11: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

La opción que nos da la libertad

Tomaremos como base dos proyectos de importancia y disponibles en español. FPGALibre:

• Impulsado por nuestro laboratorio desde 2005

• http://fpgalibre.sf.net/ FPGA Wars (por Star Wars)

• Nacido en España• http://fpgawars.github.io/

Page 12: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Hardware libre

Page 13: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Hardware Libre

Existe gran cantidad de diseños disponibles en internet Hay empresas que venden kits de desarrollo con FPGAs bajo esta modalidad. Por ejemplo:

• Ej: OLIMEX https://www.olimex.com/Products/FPGA/

Existen proyectos comunitarios dedicados a difundir herramientas de S.L. que incluyen SL y HL A continuación dos ejemplos, uno nacional y otro de España

Page 14: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Hardware Libre: FPGALibre

S2Proto Xilinx Spartan II (50/100/150) 1536/2400/3456 LUT4/FF 32/40/48 kib BRAM PQ208 (TQFP) PCB 2 capas Conf: JTAG Obsoleta

Page 15: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Hardware Libre: FPGALibre

S3Proto Xilinx Spartan 3E (1600) 29.504 LUT4/FF 648 kib BRAM FG320 (BGA) PCB 4 capas Conf: JTAG

Page 16: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Hardware Libre: FPGALibre

Kéfir I Lattice iCE40HX4K 7.680 LUT4/FF 128 kib BRAM TQ144 (TQFP) PCB 2 capas Conectores Arduino

FPGA económica Conf: SPI

Page 17: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Hardware Libre: FPGALibre (cable)

MILK Cable de configuración Lado PC: USB Dos canales

• SPI• RS-232• JTAG• I2C• Otros

Tensiones 1 a 5 V

Page 18: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Hardware Libre: FPGAWars

IceZum Alhambra Lattice iCE40HX1K 1.280 LUT4/FF 64 kib BRAM TQ144 (TQFP) PCB 4 capas Conectores Arduino

FPGA económica Conf: USB (SPI incluida)

Page 19: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Hardware Libre: Otros ejemplos Lattice:

• ICEHat, iCE5LP4K http://hackaday.com/2016/11/05/give-your-rpi-a-cool-fpga-hat/

• ICEd1, iCE40HX1K https://hackaday.io/project/6636-iced-an-arduino-style-board-with-ice-fpga

• CAT Board1, iCE40HX8K https://hackaday.io/project/7982-cat-board• eCow-Logic pico-ITX1, iCE40HX1K http://opencores.org/project,ecowlogic-pico

• MyStyorm1, iCE40HX4K https://folknologylabs.wordpress.com/2016/08/17/the-lull-before-the-storm/

Xilinx:• PHR, UTN FRC, Spartan 3A 200 http://opencores.org/project,phr• Mimas/Saturn, Spartan 6 https://numato.com/products/fpga-boards/xilinx-spartan6/

• Arduino FPGA shield 2, Spartan 6 http://hackaday.com/2014/03/05/a-low-cost-arduino-fpga-shield/

• Papilio2,3, Spartan 6 http://papilio.cc/• Mojo2, Spartan 6 https://embeddedmicro.com/mojo-v3.html

1 El sitio indica que son hardware libre, pero no hay una manera obvia de obtener la información de diseño2 Diseño basado en herramientas propietarias3 No hay manera obvia de obtener TODOS los archivos de diseño

Page 20: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

El flujo de desarrollo con FPGA

Page 21: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Descripción del circuito en HDL

Descripción del banco de

pruebas en HDL

Simulación

Errores de sintaxis

Errores funcionales

¿Correcto?

NO

Error detectado

NO

SI

SI

Visor de formas de onda

Síntesis

Page 22: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Descripción en HDL

Simulación

Correcciones

Síntesis ¿Correcto?

NO

SI

Transferir a la placa

¿Correcto?NO

¡Éxito!

SI

Page 23: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Descripción en HDLDescripción

en HDL Simulación

Correcciones

Síntesis ¿Correcto?

NO

SI

Transferir a la placa

¿Correcto?NO

¡Éxito!

Page 24: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Descripción en HDL

Usualmente los editores de las IDEs no son los mejores Recomendación: usar alguno que ya usemos para otras cosas. Preferentemente que cumpla:

• Tener resaltado de sintaxis para nuestro HDL• Permitir ejecutar comandos desde el mismo • Recolectar errores y permitir saltar a ellos• Que ayude en el indentado• Que posea templates de código• Que permita buscar entidades, constantes, etc. (por ejemplo usando ctags)

Page 25: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Descripción en HDL

Un editor con estas características, con soporte para VHDL es el SETEdit (disponible en FPGALibre)

• El soporte para Verilog es experimental

http://fpgalibre.sourceforge.net/editor.html

Page 26: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

SimulaciónDescripción

en HDL Simulación

Correcciones

Síntesis ¿Correcto?

NO

SI

Transferir a la placa¿Correcto?

NO

¡Éxito!

Page 27: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Simulación

Los HDLs más usados son:• VHDL• Verilog

Los simuladores de S.L. más usados para estos lenguajes son:

• GHDL• Icarus Verilog

No son los únicos

Page 28: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

SimulaciónVHDL: GHDL

Page 29: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Simulación VHDL: GHDL

Muy completo y estricto con respecto al estándar Disponible para Linux (distro), Windows y Mac OSX http://ghdl.free.fr Convierte nuestro testbench en un ejecutable

• Lo puede hacer trabajando como frontend de GCC (el compilador del proyecto GNU)

Es de línea de comandos, pero fácil de usar• El viernes hay un tutorial con un ejemplo• Apunte en con ejemplos: http://fpgalibre.sourceforge.net/simul.html

Page 30: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Simulación VHDL: GHDL

Uso del GHDL en 3 pasos simples:• En el primer paso le informamos cuáles son los fuentes del circuito y la verificación.• En el segundo le pedimos que analice y elabore.• En el tercero que ejecute la simulación

1) ghdl ­i TODOS_LOS_FUENTES2) ghdl ­m ENTIDAD_TOP_LEVEL3) ghdl ­r ENTIDAD_TOP_LEVEL ­­wave=ondas.ghw Si introducimos algún cambio volvemos al punto 2 Para agregar nuevos fuentes lo hacemos con ­i

Page 31: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

SimulaciónVerilog: Icarus Verilog

Page 32: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Simulación Verilog: Icarus Verilog

Muy completo Disponible para Linux (distro), Windows y Mac OSX http://iverilog.icarus.com/ Convierte nuestro testbench en un lenguaje interpretable Es de línea de comandos, pero fácil de usar

• El viernes hay un tutorial con un ejemplo Es posible usarlo para simulación mixta (VHDL + Verilog) ya que es capaz de generar código VHDL

Page 33: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Simulación Verilog: Icarus Verilog

Uso del Icarus Verilog en 2 pasos simples:• En el primer paso compilamos el Verilog a vvp assembly• En el segundo lo simulamos con vvp

1) iverilog ­o ARCH_SALIDA TODOS_LOS_FUENTES2) vvp ARCH_SALIDA Siempre volvemos a compilar, no es incremental como con el GHDL Tener en cuenta que las posibles formas de onda se indican en el testbench

Page 34: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Simulación Verilog: Icarus Verilog

Es posible pedirle a Icarus Verilog que genere código VHDL en lugar de vvp assembly: iverilog ­t vhdl ­o SALIDA.VHDL FUENTES El archivo SALIDA.VHDL contendrá las entidades VHDL equivalentes. De esta manera es posible lograr cierto grado de simulación mixta. El VHDL resultante es útil únicamente a los fines de simulación, no se supone que sea código mantenible.

Page 35: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Visor de formas de onda: GTKWave

Descripción del circuito

en HDL

Descripción del banco

de pruebas en HDL

Simulación

Errores de sintaxis

Errores funcionales

¿Correcto?

NO

Error detectado

NO

SI

SI

Visor de formas de

onda

Síntesis¿Correcto?

Page 36: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Visor de formas de onda: GTKWave

Los bancos de prueba deben verificar el funcionamiento de nuestro circuito automáticamente. Idealmente se debería recurrir a un visor de formas de onda solo cuando los bancos de prueba reportan un error que no es evidente. GTKWave soporta el formato VCD (Verilog) y GHW (GHDL) http://gtkwave.sourceforge.net/

Page 37: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Visor de formas de onda: GTKWave

Page 38: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

SíntesisDescripción

en HDL Simulación

Correcciones

Síntesis ¿Correcto?

NO

SI

Transferir a la placa¿Correcto?

NO

¡Éxito!

Page 39: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Síntesis: Introducción

Las primeras FPGAs datan de 1985 Alliance VLSI CAD comenzó en 1990 (síntesis ASICs) iverilog comenzó en 1998 GHDL comenzó en 2003 Sin embargo no fue hasta 2015 que aparecieron sintetizadores completos y libres. El mayor problema es que los fabricantes de FPGAs no ofrecen documentación sobre los detalles internos de las mismas.

Page 40: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Síntesis: Pasos

La síntesis para FPGAs involucra las siguientes tareas:• Análisis del HDL para convertirlo en un circuito (síntesis propiamente dicha)• Mapeo tecnológico (usando los recursos del dispositivo de destino)• Place (selección de los recursos a usar en forma individual, cuáles usaremos en concreto)• Route (interconexión de los recursos seleccionados)• Generación de la configuración a usar por la FPGA (bitstream)

Page 41: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Síntesis: Yosys (Yosys Open SYnthesis Suite)

Yosys es un sintetizador de código Verilog creado por Clifford Wolf (http://www.clifford.at/yosys/) Utiliza el Berkeley ABC para resolver varios aspectos combinacionales (https://people.eecs.berkeley.edu/~alanmi/abc/)

Su desarrollo comenzó en 2012 Resuelve la síntesis propiamente dicha y el mapeo tecnológico. Sin embargo, la falta de información impedía realizar el resto de los pasos. Era posible usar Yosys para reemplazar algunos de los pasos de las herramientas de Xilinx

Page 42: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Síntesis: iCE40

La empresa SiliconBlue Technologies comienza a trabajar en 2006 en el desarrollo de FPGAs (ex-Actel/Xilinx entre otros) En 2008 lanza su primer línea con tec. de 65 nm A mediados de 2011 introduce las iCE40 (40 nm) FPGAs de bajo costo, gracias a un diseño muy simple y minimalista La empresa fue adquirida por Lattice Semiconductors a fines de 2011 http://www.latticesemi.com/Products/FPGAandCPLD/iCE40.aspx

Page 43: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Síntesis: Proyecto IceStorm

A principios de 2015 sale a la luz un proyecto de Clifford cuyo objetivo es el análisis de la arquitectura interna de las iCE40 Este proyecto logra documentar dicha estructura y como crear un bitstream para iCE40 Se crean las herramientas necesarias para crear y transferir bitstreams http://www.clifford.at/icestorm/

Page 44: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Síntesis: Arachne-PNR

El último eslabón faltante en la cadena era el de Place & Route Con la información de IceStorm “Cotton Seed” crea dicha herramienta https://github.com/cseed/arachne-pnr El 27/5/2015 Clifford anuncia que ya existe un tool-chain completo.

Page 45: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Síntesis: Limitaciones y ventajas

Solo para iCE40LP384/1K/4K/8K y iCE40HX1K/4K/8K Solo Verilog

• Frontend experimental con traductor de VHDL propietario• 2 frontends experimentales p/VHDL (uno basado en GHDL)

Soporte básico para lógica de 3 estados Síntesis menos eficiente que las herramientas del fabricante Ventaja importante:

• Muchísimo más rápido, ej:• Síntesis 4'10” vs 50”• Transferencia 1'6” vs 6”

Page 46: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Síntesis: Uso básico para iCE40HX4K-TQ144

yosys -p 'synth_ice40 -top TOP_LEVEL -blif synth.blif' FUENTES arachne-pnr -d 8k -P tq144:4k -o prj.asc -p CONSTRAINTS.pcf synth.blif icepack prj.asc prj.bin

Primero se sintetiza el código Verilog y se lo mapea a los recursos de la iCE40 (LUTs, Cys, FFs, etc.)

• El resultado se guarda en un .BLIF Luego Arachne realiza el place & route para la iCE40 indicada y genera un bitstream en ASCII El icepack convierte el bitstream a su forma binaria

Page 47: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

TransferenciaDescripción

en HDL Simulación

Correcciones

Síntesis ¿Correcto?

NO

SI

Transferir a la placa¿Correcto?

NO

¡Éxito!

Page 48: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Transferencia a la FPGA

Depende mucho de la placa y la FPGA que use. Usualmente involucra un “cable” (circuito conectado a la PC)

• En algunos casos incluido en la placa (p.e. IceZum Alhambra)

En Altera y Xilinx lo más común es usar protocolo JTAG Las iCE40 usan SPI Hay muchos “cables” basados en chips de FTDI (principalmente FT2232H, como el caso de MILK)

• El FT2232H soporta JTAG y SPI

Page 49: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Transferencia a la FPGA: Xilinx

Aún no es posible completar la síntesis con SL, por lo que necesitamos ISE o Vivado Por esta razón no tiene mucho sentido reemplazar el Xilinx iMPACT.

• Aunque si evitar usar su interfaz gráfica para automatizar el proceso

iMPACT Helper es una herramienta que facilita el uso de iMPACT desde Makefiles

• Incluye soporte para FT2232H• http://fpgalibre.sourceforge.net/hard.html

Page 50: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Transferencia a la FPGA: iCE40

El proyecto IceStorm cubre esta necesidad El comando iceprog realiza la transferencia Funciona con cualquier memoria SPI que soporte los comandos modernos para averiguar su disposición interna Si nuestro bitstream es prj.bin:

• iceprog prj.bin El FT2232H tiene 2 canales, si el canal usado para configurar la FPGA es el B usamos:

• iceprog ­I B prj.bin Usa la libftdi que a su vez usa libusb

Page 51: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Otras herramientas de más alto nivel

Page 52: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Apio

Es una herramienta de línea de comandos Su objetivo es simplificar el flujo de desarrollo mediante comandos simples Solo soporta IceStorm (iCE40) Es la base de Apio-IDE y icestudio Basada en PlataformIO (http://platformio.org/) https://github.com/FPGAwars/apio Paquetes Debian/Ubuntu disponibles en FPGALibre

Page 53: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Apio

Para tener una idea, este sería el flujo Se asume que en el directorio actual están los fuentes Verilog a sintetizar

1) apio init -b PLACA2) apio examples -f EJEMPLO_CONSTRAINT3) apio build4) apio upload

Page 54: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Apio-IDE

Es un entorno completo Utiliza Apio por debajo (solo IceStorm) https://github.com/FPGAwars/apio-ide Paquetes Debian/Ubuntu disponibles en FPGALibre Es un plug-in de la IDE Atom

• Tiene todas las ventajas de Atom• Incluye botones para llamar a Apio sin usar la línea de comandos

Page 55: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Apio-IDE

Botones p/Apio

Archivos de nuestro proyecto

Editor de texto

Mensajes

Page 56: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

icestudio

Herramienta gráfica que permite ingresar diagramas en bloques. Permite ingresar bloques de código Verilog para cualquier cosa que no esté en bloques ya existentes. Utiliza Apio como base https://github.com/FPGAwars/icestudio Paquete Debian/Ubuntu disponible en FPGALibre

Page 57: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

icestudio

Page 58: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

xil_project.pl

Herramienta de línea de comandos que permite crear Makefiles para síntesis Soporta:

• ISE (Xilinx) • ICECube2 (Lattice)• IceStorm (iCE40)

Simplifica el reuso de bloques (bibliotecas) Abstrae detalles particulares de la placa/FPGA usados Utiliza iMPACT Helper para transferir a la FPGA http://fpgalibre.sourceforge.net/sintesis.html#tp18

Page 59: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

xil_project_wz.pl

Herramienta gráfica para:• Configurar xil_project.pl en forma gráfica• Recolectar, filtrar y mostrar errores de síntesis (usando SETEdit)• Transferir a la FPGA

Facilita el uso al: • Mostrar fotos de las placas soportadas• Mostrar ayuda de las placas soportadas (usando páginas web)

• Mostrando las bibliotecas disponibles Ejemplo paso a paso:http://fpgalibre.sourceforge.net/Kefir/ejemplos/capsense/xil_project_pap/0LEEME/index.html

Page 60: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

xil_project_wz.pl: ejemplo de proyecto

Page 61: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

¿Cómo instalar las herramientas?

Page 62: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Instalación simplificada

En Windows y Mac OSX se deben seguir las instrucciones de cada paquete. GHDL, iverilog y gtkwave están en Debian/Ubuntu/etc. En sistemas compatibles con Debian GNU/Linux (por ejemplo Ubuntu) se puede usar el repositorio de FPGALibre Las instrucciones de como hacerlo: http://fpgalibre.sourceforge.net/ice40.html#tp22

• Agregamos el repositorio a los conocidos por nuestro sistema• Instalamos el/los paquetes como cualquier otro del sistema.

Page 63: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Instalación simplificada

Agregando el repo a un Debian:# curl -sSL http://fpgalibre.sf.net/debian/go | sh

Agregando el repo a un Ubuntu:$ curl -sSL http://fpgalibre.sf.net/debian/go | sudo sh

Para instalar las herramientas de síntesis p/iCE40:# apt-get install fpga-icestorm yosys arachne-pnr

Para instalar APIO (incluye las de síntesis):# apt-get install apio

Para instalar icestudio:# apt-get install icestudio

Page 64: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Instalación simplificada

Para instalar xil_project:# apt-get install xiltools

Nota: Las líneas que comienzan con $ son ejecutadas por un usuario normal, las que comienzan con # por el root

Page 65: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

¿IceStorm es comparable con las

herramientas propietarias?

Page 66: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Kéfir I + Lattuino

Implementación de Arduino UNO usando la placa Kéfir I La CPU es un soft-core (libre) Se programa desde la IDE de Arduino http://fpgalibre.sf.net/Lattuino/

Más detalles en la charla de soft-cores

Page 67: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Resultados de la síntesis

iCECube2 (2017.01) [4'10”]• Synplify Pro L-2016.09L+ice40

VHDL• LUT4s: 2253/3520 (64%) • DFFs: 722/3520• Fmáx: 25,11 MHz (constraint 24 MHz)

Verilog• LUT4s: 2273/3520 (65%)• DFFs: 723/3520• Fmáx: 25,05 MHz (constraint 24 MHz)

BRAMs: 20/20

Page 68: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Resultados de la síntesis

IceStorm [50”]• Yosys (0.7+207) ABC (1.01) Arachne (0.1+203+5)

Verilog• LUT4s: 2285/7680 (30%)• DFFs: 639/7680• Fmáx: 28,58 MHz (unconstrained)• BRAMs: 21/32

VHDL: no soportado (yet ;-)

Page 69: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Resultados de la síntesis

…. Coooomoooo??!!!• LUT4s: 2253/3520 (64%) ← iCECube2• LUT4s: 2285/7680 (30%) ← IceStorm

Las bondades del software libre

Page 70: Instituto Nacional de Tecnología Industrialfpgalibre.sourceforge.net/SASE2017/FPGAs_Libres.pdf · HDL (Hardware Description Language), un código que sirve para describir circuitos

Copyright © 2005-2017 INTI, Salvador E. Tropea

Av. Gral. Paz 5445

(1650) San Martín

Buenos Aires, Argentina

+54-11-4724-6000 int. 6919

[email protected]

¡Muchas Gracias!