09 abril 2018

La primera FPGA con soporte Open-Source - Parte 2

En nuestra entrada anterior hablamos sobre como el proyecto IceStorm ahora permite desarrollar soluciones con las FPGA ICE40 con herramientas 100% Open-Source.

En esta entrada vamos a preparar nuestro entorno de desarrollo para sintetizar nuestro primer circuito en la FPGA ICE40.

Preparando el Entorno de Desarrollo

Para esta entrada requerimos que utilices una distribución de Linux, es importante que te asegures que tu distribución tenga instaladas las herramientas de desarrollo. La forma en que se instalan las herramientas de desarrollo varía de distribución en distribución, si obtienes errores al momento de instalar puede deberse a que alguna biblioteca de desarrollo no está instalada en tu sistema. Las herramientas que vamos a mostrar ahora aún son relativamente "recientes" por lo que es probable que no exista un paquete pre-compilado para tu distribucipon, por lo que la solución es compilarlos desde cero.

Asegurate que tu distribución incluya al menos los siguientes paquetes de desarrollo:
  • GNU GCC
  • GNU Make
  • Python3
Las herramientas deben instalarse en el orden especificado, el no hacerlo podría provocar errores en el proceso de compilación.

Nota: Es posible que tu distribución ya incluya los paquetes que vamos a utilizar. Si no deseas compilar todo desde cero, intenta buscar los siguientes paquetes utilizando la herramienta de gestión de paquetes incluída en tu distribución:
  • icestorm
  • yosys
  • arachne-pnr
  • icarus-verilog (o iverilog)
  • gtkwave
Si decides seguir este camino, puedes ir directamente a la tercera entrada de esta serie de blog.

Instalando IceStorm

IceStorm es la herramienta de generación de bitstream y configuración de la FPGA ICE40.

Clona el repositorio y entra al directorio de fuentes con los siguientes comandos:
git clone https://github.com/cliffordwolf/icestorm.git icestorm
cd icestorm
El directorio de instalación por defecto es "/usr/local". Si deseas instalar en otra ubicación, debes de editar el archivo "config.mk".
nano config.mk
Por ejemplo en mi caso, yo prefiero que se instalen en la ubicación "/usr", por lo que cambio la línea:
PREFIX ?= /usr/local
Por:
PREFIX ?= /usr
Ahora estámos listos para compilar e instalar:
make -j$(nproc)
sudo make install

Instalando Arachne-PNR

Arachne-PnR es la herramienta para rutear automáticamente los componentes en la FPGA. Para instalarlo seguimos un procedimiento similar al de IceStorm.

Clonamos el repositorio y entramos al directorio de fuentes:
git clone https://github.com/cseed/arachne-pnr.git arachne-pnr
cd arachne-pnr
Para este sofware si queremos cambiar el directorio de instalación debemos de editar el archivo "Makefile":
nano Makefile
De nuevo, para este caso cambiamos la línea:
PREFIX ?= /usr/local
Por:
PREFIX ?= /usr
Ahora estamos listos para compilar e instalar:
make -j$(nproc)
sudo make install

Instalando Yosys

Yosys nos permitirá pasar de nuestros archivos de Verilog a una salida lista para rutear por arachne-pnr. El procedimiento es muy similar a los anteriores:

Clonamos el repo y nos cambiamos al directorio de fuentes
git clone https://github.com/cliffordwolf/yosys.git yosys
cd yosys
Si deseamos cambiar la ruta de instalación editamos el archivo "Makefile".
nano Makefile
Buscamos la línea:
PREFIX ?= /usr/local
Por:
PREFIX ?= /usr
Ahora estamos listos para compilar e instalar:
make -j$(nproc)
sudo make install

Instalando Icarus-Verilog

Icarus es un intérprete de Verilog que permite hacer "bancos de pruebas" y simulaciones. Como mencionamos en el artículo anterior para desarrollar en FPGA es "sano" realizar simulaciones antes de sintetizar el código ya que es un proceso que puede ser bastante lento.

Para instalarlo clonamos el repo y cambiamos al directorio de fuentes:
git clone git://github.com/steveicarus/iverilog.git
cd iverilog
Luego generamos el archivo de configuración con autoconf:
sh autoconf.sh
Para preparar el proyecto y establecer el directorio de instalación lo hacemos a través del mismo script de configuración.
./configure --prefix=/usr
Compilamos e instalamos con el siguiente comando:
make -j$(nproc)
sudo make install

Instalando GTKWave

GTKWave es un software para visualizar las señales generadas en los bancos de prueba simulados con Icarus-Verilog. Para compilarlo seguimos el siguiente procedimiento.

Descargamos el código fuente de la siguiente dirección:
Descomprimimos el archivo de código y accedemos al directorio de código fuente:
tar -xzf gtkwave-3.3.89.tar.gz
cd gtkwave-3.3.89
Ejecutamos el archivo autogen.sh para actualizar las dependencias de compilación locales
sh autogen.sh
Para preparar el proyecto y establecer el directorio de instalación lo hacemos a través del mismo script de configuración como en el caso de Icarus Verilog.
./configure --prefix=/usr
Por último compilamos e instalamos:
make -j$(nproc)
sudo make install

Probando el entorno de desarrollo

Primero asegurémonos de conectar nuestra iCE-40HK8K Breakout Board.

Para probar que todo está funcionando bien, vamos a regresar a la carpeta de código fuente de IceStorm y vamos a cambiar a la carpeta "examples/ice
cd "examples/hx8kboard"

Una vez ahí ejecutamos el siguiente comando
make

Esperamos unos segundos... Hasta que aparesca un mensaje como el siguiente:
// Reading input .asc file..
// Reading 8k chipdb file..
// Creating timing netlist..
// Timing estimate: 6.09 ns (164.22 MHz)
Ese mensaje es la estimación de la velocidad máxima a la cual podría correr nuestro circuito dentro de la FPGA.

Para configuruar nuestra FPGA simplemente ejecutamos el siguiente comando:
make prog
Esperamos unos segundos y deberíamos ver un contador binario mostrarse en los LEDs de la FPGA.

Concluyendo

En esta entrada hemos instalado las herramientas mínimas necesarias para poder configurar nuestra FPGA Lattice iCE40 y hemos cargado uno de los ejemplos a nuestra FPGA.

Para la próxima entrada vamos a seguir el flujo completo de trabajo para poder asociar cada herramienta a cada paso específico del desarrollo en FPGAs.

¡Mantente al Pendiente!

No hay comentarios: