[Xilinx] [Basys3] Hacia la implementación de FPGAs de Xilinx en apio/Icestudio

177 views
Skip to first unread message

Obijuan

unread,
May 23, 2026, 3:03:48 AMMay 23
to FPGAwars: explorando el lado libre
El objetivo principal de FPGAwars es el de acercar el ecosistema de las FPGAs Libres al público en general. El ecosistema privativo se conoce desde los años 80, y está muy avanzado, pero no es de nuestro interés

Desde que comenzamos el proyecto allá por el 2015 hemos avanzado mucho. Y las FPGAs Libres han avanzado muchísimo. Se empezó soportando sólo las ice40 de Lattice...y el ecosistema ha aumentado mucho desde entonces

Ahora ya por fin, podemos entrar en las grandes ligas. El trabajo del proyecto openXC7[1] es impresionante. Han hecho ingeniería inversa de las FPGAs de Xilinx (serie 7) y tienen implementadas las herramientas libres

He estado evaluando estas herramientas durante varios meses, y mi conclusión es que están lo suficientemente maduras como para usarse en entornos universitarios/investigación

Nuestro objetivo es acercarlo a la gente. Ponérselo fácil. La mayoría de las veces, hacer algo fácil es difícil. Pero es muy importante hacerlo

Me he propuesto incluir las FPGAs de Xilinx en apio primero y Icestudio después, para que sea extremadamente fácil para la gente usarlo

En esta issue de apio he puesto el roadmap (en inglés):

El viaje va a ser muy muy muy largo, pero es el momento de comenzarlo

Es el momento de acercar este patrimonio tecnológico de la humanidad a la gente
¡Vaaaamos!



SaturnoZmarte

unread,
May 25, 2026, 5:07:57 AMMay 25
to fpga-wars-explora...@googlegroups.com
Tengo una FPGA Artix-7 XC7A100T (Wukong Board) y tengo previsto tener una Artix-7 XC7A200T. ¿Estas FPGAs estarán accesibles en los programas que nombras? ¿Tienes alguna lista de las FPGAs que se admitirán?

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/006b3617-c029-4f84-957f-e3b51e28b66bn%40googlegroups.com.

Obijuan

unread,
May 26, 2026, 6:43:47 AMMay 26
to FPGAwars: explorando el lado libre
Hola,

Los modelos de Artix7 que están soportados por la comunidad los puedes ver en este enlace:


Los modelos que indicas, A200T y A100T parece que sí están soportados. Cualquiera de esas FPGAs se pueden incluir en las herramientas libres

De momento, las pruebas de viabilidad las estoy haciendo con la Artix xc7a35tcpg236, que es la que tiene la tarjeta Basys 3, y sistema operativo linux. Una vez que se tenga esto funcionando, es cuando ya se podrá ampliar al resto de models y sistemas operativos

Cualquier desarrollador ya puede usar las herramientas libres de la comunidad. En lo que yo estoy trabajando es en incluirlas en apio y Icestudio para que sea extremadamente fácil su uso, sin tener que tener los conocimientos de un developer

Ya tengo casi he terminado el hito FASE0.1: aislar los ejecutables y dependencias de todas las herramientas, para usarlas en Linux sin necesidad de compilarlas ni de utilizar Nix

Os iré informando

Saludos, Obijuan
El lunes, 25 de mayo de 2026 a las 11:07:57 UTC+2, saturn...@gmail.com escribió:
Tengo una FPGA Artix-7 XC7A100T (Wukong Board) y tengo previsto tener una Artix-7 XC7A200T. ¿Estas FPGAs estarán accesibles en los programas que nombras? ¿Tienes alguna lista de las FPGAs que se admitirán?

SaturnoZmarte

unread,
May 26, 2026, 9:58:05 AMMay 26
to fpga-wars-explora...@googlegroups.com
Ok, gracias por tu trabajo, veo que mis FPGAs son compatibles. Como soy un neófito en las herramientas libres para FPGA (solo he usado Vivado), espero tu trabajo. También espero que al final produzcas un manual que podamos seguir los que no tenemos una base tan sólida como la tuya. Un saludo.

Jo mo

unread,
May 27, 2026, 1:53:49 PMMay 27
to FPGAwars: explorando el lado libre
Ola Juan, 

This roadmap looks crazy, at least for a linux noob as i am ! 
But i wish you plenty of success on this journey and will try to help if i can ( at least during testing phases) !
Thanks a lot for your efforts on breaking the difficulty barriers for the access of these technologies to the newcomers. 

Big hug my friend.

Obijuan

unread,
May 28, 2026, 2:14:19 AMMay 28
to FPGAwars: explorando el lado libre
Thanks Joaquim!

Back in 2003, when I was a phD student, my dream was to use the xilinx FPGAs from linux using only opensource software... But it was completely impossible... and i thought that it will never happern. I stopped using FPGAs...
... Until 2015. In 2015, the opensource FPGAs were born, thanks to claire wolf. Only the lattice ice40 FPGAs were supported but it was amazing. So I started to learn it, document it and making it accesible for my students. FPGAwars, apio and Icestudio were born. The opensource FPGA ecosystem (that in spanish we translated as "FPGAs libres") was grown by the community. More FPGAs, more examples, more tools, more people...  
In 2024 the openXC7 project was born.... to support Xilinx FPGAs!! I've waited two years for it to be stable enough. In 2026, I've tested it and discover, to my pleasure, that is very stable, and it is ready to be used at the university, both for research and educational projects. My dream came true!!! That's the reason why I am now so excited about it. Not every day your dreams come true :-). 

The only problem is that the tools are for developers, and are a little bit hard to install for plain users... but that is exactly my goal as a professor. That is why I am working on that

Best regads, Obijuan

Obijuan

unread,
May 29, 2026, 1:26:15 PMMay 29
to FPGAwars: explorando el lado libre
Ya tengo la toolchain lista para Linux! Fases 0.1 y 0.2 completadas!!

Se encuentran en este repositorio: https://github.com/FPGAwars/tools-openxc7

Los ejemplos los voy a poner en este repositorio: https://github.com/Obijuan/Learn-Basys-3-board-OpenFPGA
En su Readme he puesto las instrucciones para instalar la toolchain (todavía sin apio)
He creado un instalador en la shell

Es todavía una version muy preliminar. Funciona en mi Linux, pero es muy posible que aparezcan bugs

Sería genial si lo podeis probar. El resultado es que se debe generar el fichero ledon.bit, con el bitstream (y si tenéis la placa basys3 entonces lo podréis cargar)
Para probarlo seguid las instrucciones de aquí:


La siguiente fase es integrar estas toolchains en apio, para poderlas instalar con `apio packages install`

Saludos, Obijuan




luis luis luis

unread,
May 31, 2026, 10:28:17 AMMay 31
to fpga-wars-explora...@googlegroups.com
ok, he logrado encender un led con mi FPGA  A7 Lite xc7a200tfbg484. ¡Gracias!

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

luis luis luis

unread,
May 31, 2026, 11:38:09 AMMay 31
to fpga-wars-explora...@googlegroups.com
Planteo una duda: En Vivado uso las llamadas IPs, bloques de código de propiedad intelectual. ¿Como puedo usar algo equivalente con herramientas libres?

Fernando Mosquera

unread,
May 31, 2026, 1:30:01 PMMay 31
to fpga-wars-explora...@googlegroups.com
Hola Luis:

En general tienes las IP y primitivas.
Las IPs pueden ser gratuitas o de pago.
Normalmente las IPs gratuitas hacen uso de las prinitivas.
Las Primitivas son funciones que son especificas del modelo de la FPGA, en este caso Artix7.
Un ejemplo basico de Primitiva es la creacion de PLLs, es decir, generar partiendo del reloj base que lleva la placa FPGA, otros relojes usando el PLL de la FPGA.
Hay mas prinitivas y todas estan documentadas para el modelo Artix7.

Ahora bien, para que el toolchain Open Source funcione minimamente bien, ha de llevar implementado la primitiva del pll y alguna otra mas, cuantas mas implemente mas cerca del IDE real mucha mejor implementacion.

Si ahora hablamos del IceStudio, tu puefes generar tus propios bloques y en ellos incluir una llamada a la primitiva que quieras usar, eso si, asegurate de que el toolchain admite esa primitiva.

Generar IPs en IceStudio seria eso, generar uno o mas bloques con la solucion. IP se refiere a Intelectual  Property lo cual seria contrario la filosofia de IceStudio, que es open aource no propietario.

Espero haber resuelto todas tus dudas sobre este tema. 

Un abrazo

Fernando Mosquera



From: fpga-wars-explora...@googlegroups.com <fpga-wars-explora...@googlegroups.com> on behalf of luis luis luis <mercuri...@gmail.com>
Sent: Sunday, May 31, 2026 10:37:52 AM
To: fpga-wars-explora...@googlegroups.com <fpga-wars-explora...@googlegroups.com>
Subject: Re: [Xilinx] [Basys3] Hacia la implementación de FPGAs de Xilinx en apio/Icestudio
 

luis luis luis

unread,
Jun 1, 2026, 4:49:58 AMJun 1
to fpga-wars-explora...@googlegroups.com
ok, estoy intentando con ayuda de IA sustituir las IPs de Vivado a "zona libre". Tengo 3 IPs: 2 memorias y 1 reloj...a ver si funciona..un saludo

Fernando Mosquera

unread,
Jun 1, 2026, 7:28:49 AMJun 1
to fpga-wars-explora...@googlegroups.com
Hola Luis,

El tema de las memorias IP es algo bastante complejo.
En general se supone que la toolchain ha de reconocer, es decir inferir, cuando creas una memoria tipo BRAM.
En Vivado tu puedes generar la memoria BRAM de dos maneras:

  1. modo universal, es decir usando por ejemplo verilog y que el Vivado la infiera automáticamente
  2. Mediante una IP, esto hace que la BRAM sea mas rapida y con un rendimiento mayor, pero este codigo HDL generado será exclusivo para el modelo de FPGA que estes usando.

Existen por ejemplo otro tipo de memorias BRAM especiales, por ejemplo , de doble puerto, con lectura y escritura en ambos puertos o con lectura y escritura en un puerto y lectura solo en el segundo.
Todo eso se puede hacer tambien por IPs o con codigo Verilog puro, pero por mi experiencia es mas efectivo usar las IPs porque optimizan mas la implementacion de estas memorias.

Como suelo trabajar con varias FPGAs de diferentes fabricantes, Altera, Xilinx, Lattice y Gowing, me gusta mas compatibilizar el codigo HDL de mis proyectos y soy partidario de minimizar el uso de IPs y usar codigo universal que al fin y al cabo se aproxima mas a la filosofia Open Source.

Un Abrazo
Fernando Mosquera




Sent: Monday, June 1, 2026 3:49:41 AM

Carlos Venegas

unread,
Jun 1, 2026, 8:36:56 AMJun 1
to fpga-wars-explora...@googlegroups.com
Hola Luis, como bien ha dicho Fernando lo ideal al menos en mi forma de pensar es hacer el código lo más universal posible y que sea el sintetizador el que decida como implementar ene l caso de necesitar una primitiva concreta.

En el caso de las memorias, solo debes seguir unas reglas y si lo haces yosys o el sintetizador de turno identificará el patrón y colocará la ip consecuente en función de la arquitectura, si lo haces así tu código será portable prácticamente sin esfuerzo de una fpga a otra.

Hay un punto importante que entender en el flujo de generar el bitstream yo cuando lo entendí mi cabeza hizo click y dio un salto cuántico.

Cuando sintentizamos con yosys hay 2 fases, en la primera yosys sintetiza el código a un sistema genérico suyo que es igual para cualquier fpga, es como si tuviera su propia FPGA digámoslo así un modelo mental con el que puede representar el circuito, así que en esta fase cualquier diseño orientado a cualquier fpga acaba en el mismo formato.

En la segunda fase ya hace la traducción de su representación común al netlist de la arquitectura concreta para cada fpga (dice si yo he indentificado esto como una memoria voy a ver si esta fpga que me dices que vas a usar tiene un bloque tipo "memoria" en la que pueda mapearlo....)

Y y sabiendo que esto ocurre, es ver como hacer que yosys entienda tu código y en esa primera fase lo etiquete como una memoria. Así que como básicamente la memoria la representarás como un array, lo importante  es :

1. El array como tal

Declara un array 2D de reg (Verilog) o un signal de tipo array (VHDL):

reg [WIDTH-1:0] mem [0:DEPTH-1];
type ram_t is array (0 to DEPTH-1) of std_logic_vector(WIDTH-1 downto 0);
signal mem : ram_t;

Profundidad potencia de dos ayuda al empaquetado pero no es obligatoria.

2. Escritura siempre síncrona

El puerto de escritura tiene que estar dentro de un proceso de reloj. Una escritura asíncrona impide el mapeo a BRAM por completo (los EBR de iCE40, por ejemplo, solo tienen escritura registrada):

always @(posedge clk)
    if (we) mem[waddr] <= wdata;

memory_dff es la pasada que absorbe ese flip-flop de escritura dentro de la celda de memoria.

3. La lectura decide a qué recurso vas

Este es el punto más importante para "no acabar en lógica":

  • Lectura síncrona (dirección o salida registrada) a  puerto de lectura de BRAM. Es lo que quieres en iCE40, cuyos EBR solo soportan lectura síncrona.
always @(posedge clk)
    rdata <= mem[raddr];

Lectura asíncrona
(combinacional) a LUTRAM/distributed RAM donde exista, o lógica de registros si no. En iCE40 esto no cabe en EBR y aquí es donde todo es una locura porque te implementa la memoria como registros encadenados y ya no es solo área sino que piensa que todo eso es retardo de la señal al pasar por toda la cadena (esto es lo típico de decir, pero si mi diseño no tiene nada y no llego casi  ni a 12Mhz!).
assign rdata = mem[raddr];   // evita esto 

4. Comportamiento read-during-write

Si lees y escribes la misma dirección en el mismo proceso, el orden de las asignaciones no bloqueantes define la semántica (read-first / write-first), y Yosys la propaga a la celda. Si mezclas estilos de forma ambigua puede acabar duplicando lógica de bypass o, peor, no infiriendo nada.

always @(posedge clk) begin
    if (we) mem[addr] <= din;
    dout <= mem[addr];   // read-first (dato viejo) por la semántica NBA
end

5. Inicialización portable

Para ROM o contenido inicial usa initial + $readmemh/$readmemb, no primitivas:

initial $readmemh("init.hex", mem);

(EBR de iCE40 admite init; SPRAM no.)

Qué rompe la inferencia o fuerza lógica. Escritura asíncrona; reset síncrono/asíncrono de todo el array (suele degradarlo a registros); acceso bit a bit que mezcla el direccionamiento de palabra; puertos de ancho mixto no soportados por el destino; más puertos de los que tiene el BRAM físico; y combinar la memoria con lógica que exige acceso por bit individual.

Para VHDL todo esto pasa por el plugin ghdl-yosys-plugin, con los mismos patrones (proceso rising_edge(clk), array de signal). ¿Apuntas en concreto a los EBR del iCE40 o quieres algo genuinamente neutro entre familias? La respuesta cambia un poco según si puedes asumir lectura síncrona.


Espero que te valga!

luis luis luis

unread,
Jun 2, 2026, 3:36:35 AMJun 2
to fpga-wars-explora...@googlegroups.com
Gracias, muy interesante. Me he encontrado con un segundo problema (como no, las FPGAs sin problemas no serian tan divertidas): Me gusta más VHDL que Verilog pero a veces necesito incorporar en el proyecto algún fichero en .v o .sv. Vivado admite bien la mezcla pero yosys creo que necesita un plugin GHDL convertidor y complica el proceso. (Os recuerdo que solo soy un aficionado, no estoy tan preparado como vosotros, pido vuestra paciencia). Un saludo.

Ismael Perez Mesa

unread,
Jun 4, 2026, 3:41:14 PMJun 4
to fpga-wars-explora...@googlegroups.com
Hola, a todos

He realizado el pedido de una Alhambra II y mientras estoy a la espera de recibirla, me gustaría preguntar dónde puedo adquirir (USA) algún kit (o más de uno si es que hay varios), para desarrollar, aprender, explorar, etc ?

Muchas gracias

luis luis luis

unread,
Jun 10, 2026, 6:30:47 AMJun 10
to FPGAwars: explorando el lado libre
eltiti...@gmail.com. no conozco tu nivel ni si ya lo conoces. Aunque sea de otra FPGA es una buena base:   https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki

Obijuan

unread,
Jun 19, 2026, 12:12:56 PM (8 days ago) Jun 19
to FPGAwars: explorando el lado libre
Ya tenemos una nueva versión de apio [1]  (Version 1.5.0) con soporte preliminar de la Basys3 en Linux

El siguiente paso es integrarlo en Icestudio. Este paso es muy importante, y es un gran salto hacia adelante. Será la primera placa de Xilinx que se pueda utilizar gráficamente utilizando únicamente herramientas libres. Y de una manera ,muy muy fácil

La placa Basys3 es una de las que usa el departamento de electrónica de la URJC, en la Escuela de Ingeniería de Fuenlabrada (yo estoy en otro departamento),. Este año han comprado varias para usarlas en la asignatura de electrónica digital, para los estudiantes de primero del grado de Ingeniería en robótica Software. Mi idea es ofrecer a los estudiantes la posiblidad de que puedan utilizar herramientas libres en los laboratorios linux, así como en su casa. En la asignatura se utilizan las herramientas privativas de Xilinx, en máquinas windows. También tengo la idea de hacer talleres. ¿El primer taller de placas Xilinx con herramientas libres? 😃

Por ello estoy muy motivado, y necesito tener una versión de Icestudio lo antes posible, para que la instalen en todos los ordenadores linux antes de las vacaciones

Yo podría meter de una forma rápida y sucia el soporte en la versión de desarrollo actual de Icestudio, la que está en el repo develop, pero Chali me comentó que está trabajando en una nueva versión
No necesitamos que tenga más features, salvo soportar el nuevo apio. Tampoco se necesita compatiblidad hacia atrás. 
Así que se puede sacar una versión rápidoa(Icestudio 0.13?) que sea la de desarrollo junto con un soporte inicial de apio 1.x.x, y en la de desarrollo que se vayan metiendo el resto de mejoras o refactorizaciones

Yo tengo mucho sav, y me va a costar mucho no meterle mano a Icestudio... Si puedes subir charli lo que tienes en tus repos privados sería genial, para evitar colisiones

Una vez que tengamos soportada la primera placa, será muchísimo más fácil ampliarlo para otras placas
Y por supuesto hay que conseguir que también estén incluidas las plataformas Mac y Windows, aunque es un asunto complicado

Saludos, Juan


Carlos Venegas

unread,
Jun 19, 2026, 2:18:05 PM (8 days ago) Jun 19
to fpga-wars-explora...@googlegroups.com
Que gran trabajo!!


Dame un par de días máximo. Estoy estabilizando y limpiando la versión actual de desarrollo e incorporando funciones estabilizadas para esto.

Entre hoy y mañana os aviso.

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

beni...@gmail.com

unread,
Jun 19, 2026, 5:40:16 PM (8 days ago) Jun 19
to FPGAwars: explorando el lado libre
Hola Obijuan y Charliva,

Estoy deseando ver ese nuevo IceStudio y poder generar un bitfile de una placa Artix 7 de Xilinx.
Tengo varias placas Artix7 deseando formar parte de las nuevas placas que se han añadido al IceStudio. Entre ellas la Nexys 4 del cual tenemos unas 40 para usar en un Laboratorio de la asignatura del 4 curso de grado llamada "Reconfigurable Logic", la cual  impartiré  en Fall de 2026. Lo único malo es que esa asignatura es en VHDL, según el plan de estudios nosotros no enseñamos Verilog. :( 

Gracias por todo el esfuerzo que le estáis dedicando

Saludos
Fernando Mosquera

Carlos Venegas

unread,
Jun 24, 2026, 2:36:54 AM (3 days ago) Jun 24
to fpga-wars-explora...@googlegroups.com
Disculpad el retraso, pero las nuevas toolchains son mucho más exigentes que las anteriores (ya vivimos esto en la anterior stable), así que he portado varias mejoras que ya tenía hechas para la nueva versión grande para que podamos sobrevivir a este punto de equilibrio y tener algo que merezca la pena.

Por ejemplo ahora muchos ejemplos y código actual fallarán en la verificación por warnings de poca importancia, a parte de mejorar el output y la salida de mensajes de error (se acabó la pila de burbujas rojas inentendibles), iremos añadiendo opciones para poder "relajar" y no tener que reescribir los ejemplos, esto va a ahorrar muchísimo trabajo.

Os paso captura para no perder tiempo con vídeos, pero como véis en uno de los ejemplos básicos, falla el verify, en lugar de slir una pila de toasts rojos, ahora aparece una consola con el proceso del comando y el error claro y si es un error con "bypass" te sugiere y te da el enlace directo para abrir el panel de opciones y que puedas activarlo, tras eso vuelves a verifficar y todo funciona perfectamente (la opción de relax perdura, es una opción nueva de configuración):

Captura de pantalla 2026-06-24 a las 8.30.16.png

Estoy ya cerrando ultimas cosas y hoy si que será el día en el que tengáis arriba el código y versión para que podáis cerrar la integración de las xilinx, como so digo siento el retraso pero aunque no son demasiadas cosas, son las suficientes para generar un caos si no las dejo minimamente estabilizadas.

En el día lo tenéis, hoy sí que sí.

Saludos!

Reply all
Reply to author
Forward
0 new messages