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:
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
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 icestormEl 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.mkPor ejemplo en mi caso, yo prefiero que se instalen en la ubicación "/usr", por lo que cambio la línea:
PREFIX ?= /usr/localPor:
PREFIX ?= /usrAhora 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-pnrPara este sofware si queremos cambiar el directorio de instalación debemos de editar el archivo "Makefile":
nano MakefileDe nuevo, para este caso cambiamos la línea:
PREFIX ?= /usr/localPor:
PREFIX ?= /usrAhora 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 yosysSi deseamos cambiar la ruta de instalación editamos el archivo "Makefile".
nano MakefileBuscamos la línea:
PREFIX ?= /usr/localPor:
PREFIX ?= /usrAhora 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 iverilogLuego generamos el archivo de configuración con autoconf:
sh autoconf.shPara preparar el proyecto y establecer el directorio de instalación lo hacemos a través del mismo script de configuración.
./configure --prefix=/usrCompilamos 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.
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.89Ejecutamos el archivo autogen.sh para actualizar las dependencias de compilación locales
sh autogen.shPara 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=/usrPor ú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 progEsperamos 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!
Comentarios