
Silicio FPGA de código abierto
Aegis es una FPGA completamente de código abierto, desde el silicio.
Los esfuerzos de FPGA de código abierto han logrado enormes avances: proyectos como Project IceStorm y Apicula realizan ingeniería inversa de formatos de bitstream propietarios, OpenFPGA y FABulous generan tejido FPGA abierto a partir de descripciones de arquitectura, y GateMate de Cologne Chip comercializa una FPGA con una cadena de herramientas completamente de código abierto. Mientras que estos proyectos abordan cada uno una pieza del rompecabezas, Aegis es una FPGA de código abierto integral, de extremo a extremo: generación de tejido, síntesis, ubicación y enrutamiento, empaquetado de bitstream, simulación y tapeout, todo reside en un solo proyecto, diseñado desde cero para código abierto. Desde HDL hasta GDS, nada está detrás de un muro propietario.
El proyecto genera dispositivos FPGA parametrizados con bloques LUT4, BRAM, DSP, SerDes y gestión de reloj, junto con todo lo necesario para sintetizar diseños de usuario en ellos y tapear el tejido mismo a una fundición a través de PDK abiertos y servicios de lanzadera como wafer.space.
Un dispositivo Aegis compacto orientado a GF180MCU a través de wafer.space
| Recurso | Cantidad |
|---|---|
| Tejido | 23 x 23 bloques (529 total) |
| LUT4 (CLB) | 437 |
| BRAM (128x8) | 46 bloques |
| DSP18 (18x18 MAC) | 46 bloques |
| Bloques de E/S | 92 (25 bidir conectados) |
| SerDes | 0 |
| Bloques de reloj | 1 (4 salidas) |
| Pistas de enrutamiento | 1 por borde |
nix build .#luna-1 # Generar IP (SV, JSON, chipdb, techmap)
nix build .#luna-1-tapeout # RTL completo a GDS para envío a fábrica
Un dispositivo Aegis más grande orientado a Sky130.
nix build .#terra-1 # Generar IP (SV, JSON, chipdb, techmap)
nix build .#terra-1-tapeout # RTL completo a GDS para envío a fábrica
Cada dispositivo obtiene una cadena de herramientas FPGA completa a través de la salida tools:
# Sintetizar un diseño Verilog a celdas Aegis
yosys -c synth.tcl # usando $tools/share/yosys/aegis/*_cells.v + *_techmap.v
# Ubicar y enrutar en el tejido
nextpnr-aegis-terra_1 --json design_mapped.json --write design_pnr.json
# Empaquetar en un bitstream
terra_1-pack --pnr design_pnr.json --output design.bin
# Simular con el bitstream cargado
terra_1-sim --bitstream design.bin --cycles 1000 --vcd waves.vcd
La tubería de tapeout sintetiza el tejido FPGA en celdas estándar del PDK:
nix build .#terra-1-tapeout
ls result/
# terra_1_synth.v - netlist a nivel de compuerta (Yosys)
# terra_1_final.def - diseño ubicado y enrutado (OpenROAD)
# terra_1.gds - GDS2 para envío a fábrica
# terra_1_layout.png - render del diseño
# timing.rpt - análisis de tiempos
# power.rpt - informe de potencia
Soporta PDKs GF180MCU (wafer.space) y Sky130.
Requiere Nix con flakes habilitados.
# Construir el paquete predeterminado (aegis-ip-tools)
nix build
# Construir IP de Terra 1
nix build .#terra-1
# Ejecutar el ejemplo de blinky como verificación
nix build .#checks.$(nix eval --raw nixpkgs#system).terra-1-blinky
# Entrar al shell de desarrollo
nix develop
Imágenes multi-arquitectura preconstruidas están disponibles desde GitHub Container Registry:
docker pull ghcr.io/midstall/aegis-terra_1:latest
# Ejecutar con el directorio de diseño montado
docker run -v $(pwd):/workspace -it ghcr.io/midstall/aegis-terra_1:latest
Las imágenes están etiquetadas por SHA de git y versión de lanzamiento (por ejemplo, :v1.0.0).
Para construir localmente con Nix:
nix build .#terra-1-docker
docker load < result
Descargar paquetes .deb desde GitHub Releases (amd64 y arm64):
sudo dpkg -i aegis-terra-1_*.deb
Esto instala aegis-pack, aegis-sim, nextpnr-generic, envoltorios
específicos del dispositivo (terra_1-sim, terra_1-pack, nextpnr-aegis-terra_1),
y archivos de soporte en /usr/share/aegis/.
Para construir localmente con Nix:
nix build .#terra-1-deb
El tejido FPGA se genera con ROHD (un framework HDL en Dart) y produce SystemVerilog sintetizable. La arquitectura sigue convenciones al estilo Xilinx:
La configuración se carga a través de una cadena de registros de desplazamiento serie: bloques de reloj -> bloques de E/S -> bloques SerDes -> bloques de tejido (orden fila-principal).
OpenFPGA - Un generador de IP FPGA de código abierto de la Universidad de Utah. Dada una descripción de arquitectura XML, genera Verilog sintetizable para un tejido FPGA completo junto con herramientas de bitstream e infraestructura de autoprueba. Probado en silicio a través del programa POSH de DARPA.
FABulous - Un framework FPGA embebido (eFPGA) de código abierto de la Universidad de Manchester. Genera tejido FPGA personalizado a partir de configuración basada en CSV e integra Yosys y nextpnr. Probado en silicio con más de 12 tapeouts en nodos desde TSMC 180nm hasta CMOS 28nm.
| Recurso | Cantidad |
|---|
| LUT4 | ~2880 |
| BRAM (128x8) | 128 bloques |
| DSP18 (18x18 MAC) | 64 bloques |
| Pads de E/S | 224 |
| SerDes | 4 |
| Bloques de reloj | 2 (8 salidas) |
| Pistas de enrutamiento | 4 por borde |