webFPGA: Herramientas web para la Alhambra-II

58 views
Skip to first unread message

Obijuan

unread,
Feb 9, 2026, 4:33:23 AMFeb 9
to FPGAwars: explorando el lado libre
Hola, 

Estoy haciendo pruebas con webUSB[1] que permite acceder a los dispositivos USB desde el navegador. En principio desde cualquier plataforma, incluidos los teléfonos móviles

Estoy empezando por lo más básico: acceder al chip FTDI de la Alhambra-II para hacer cosas sencillas como resetear la placa o leer un byte de su memoria flash

El acceso al FTDI lo estoy implementando directamente desde javascript. Sé que hay proyectos [2] que han portado el openFPGALoader, y otras herramientas a webassembly lo usan también desde navegadores. Yo lo estoy haciendo "a pelo" en javascript para aprender bien webusb y así poder hacer rápidamente aplicaciones web sencillitas

Esta es una de las primeras pruebas. Lo estoy probando desde un móvil:

webFPGA-Alhambra-II-01.jpg

Es necesario conectar al móvil un cable OTG, luego se encufa la Alhambra-II directamente
En este vídeo he hecho una primera demo con los resultados. El reset de la FPGA ya funciona y también la lectura del identificador de la memoria flash y la lectura de un byte de cualquier dirección


La webapp de pruebas está accesible desde este enlace


Esto abre muchas posibilidades. La que tengo en la cabeza es la de grabar directamente bitstreams en la FPGA desde nuestras webs, para que sea muy fácil y rápido hacer pruebas. Por ejemplo, se podría crear una página donde se carguen los diferentes diseños de ordenadores retro que tenemos: zx-spectrum, amstrad, defender, space invaders...  De hecho en un repo de github se pude meter el código fuente y que automáticamente se generen los bitstream que luego aparecen en la webapp

También para hacer pruebas de la placa y comprobar si funciona bien: la conectas al movil, accedes a la webapp, grabas el bitstream de pruebas y compruebas si todo funciona (así detectas si los leds funcionan, los botones, etc... sin tener que instalar ningún software para sintetizar. Todo desde la webapp)

Como es una webapp, también se puede utilziar desde cualquier ordenador. PERO, aquí habrá que ir refinando y añadiendo instruciones específicas

* El navegador tiene que soportar webusb. Desgraciadamente firefox no lo tiene de momento, por lo que no se puede usar
* Yo lo he probado con Chrome, pero en princpio cualquier otro navegador que lo soporte valdría (no lo he probado con edge, ni con ninguna máquina windows)
* Con Chromium no he conseguido tampoco que funcione de momento. Tiene webnusb, pero no consigo darle los permisos para acceder al usb... (ni idea de por qué no va...)
* El movil que uso es un Android, con el chrome. Aquí funciona sin tener que hacer nada adicional. NO lo he probado con los iphones
* Desde un Chrome/Edge en Windows tampoco lo he probado. Debería funcionar, pero hay que probarlo y tal vez el usuario deba hacer algúna configuración previa (como por ejemplo tener los drivers instalados previamente)
* Desde Linux con Chrome funciona. PERO al conectar la Alhambra se carga automáticamente el módulo del kernel que controla el FTDI, por lo que se apodera de él y la webapp no puede abrirlo. Previamente hay que desinstalar el módulo con el comando "sudo modprobe -r ftdi_sio". Luego la webapp ya sí que puede acceder al hardware

Os iré comentando las pruebas. Cuando tenga una biblioteca javascript de acceso al hardware más madura lo meteré en un repositorio de FPGAwars. De momento voy a hacer el desarrollo (en abierto por supuesto) en mi cuenta de github

Saludos, Obijuan

Carlos Venegas

unread,
Feb 9, 2026, 9:39:02 AMFeb 9
to fpga-wars-explora...@googlegroups.com
Buenas Juan! estas cosas están super bien y abren muchas posibilidades.

Por si te sirve para abrirte camino o esquivar algunas piedras hace tiempo mandé algunos experimentos:

Está hecho con javascript puro también, migré un código C de Jesús que es una genialidad para con bitbanging poder grabar en la ram de la fpga en la Alhambra a través del FTDI.

Me he pegado bastante con el webusb si te atrancas con algo comentalo y estaré encantado de si está en mi mano ayudar.

Sobre iOs no hay soporte, en móviles solo chrome en Android pero aún así es muy prometedor y el futuro va hacia ahí  y posiblemente es algo que cambiará.

Seguiremos viendo tus avances!


--
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/eba3810d-cbd1-4f4b-9d07-add45bdef181n%40googlegroups.com.

Maximiliano Simonazzi

unread,
Feb 9, 2026, 6:28:39 PMFeb 9
to FPGAwars: explorando el lado libre
Obijuan, lamentablemente Firefox no tiene ni va a tener (ni tienen intenciones por el momento) soporte para la api de web serial por cuestiones de autenticacion y seguridad, ya que como se encuentra en este momento, cualquier atacante remoto podria ejecutar instrucciones mediante la api sin necesidad de autenticar.

De todas formas, si sos como yo que usa Firefox, existe una extension que podes poner para ejecutarlo con firefox y lo mejor es que es de codigo abierto

Maximiliano Simonazzi

unread,
Feb 9, 2026, 6:28:43 PMFeb 9
to FPGAwars: explorando el lado libre
Mala mia, pense que era WebSerial pero es WebUSB.

Efectivamente no tiene soporte ni con extension. Vi un post donde usan una RP2040 para usarla como intermediario con el USB usando WebSerial, por aqui quizas sirve como prueba de concepto.

El lunes, 9 de febrero de 2026 a la(s) 6:33:23 a.m. UTC-3, Obijuan escribió:

Jo mo

unread,
Feb 10, 2026, 4:25:06 AMFeb 10
to FPGAwars: explorando el lado libre
Hola juan,

The idea of being able to load a bitstream just from a web app is really  good! 
- for giving  to the beginners in the fpga world, a quick idea of what an fpga can do!
- to quiqly test an freshly bought fpga board, without the need of having to sort out what tool to install or what command to use to be able to load a bitstream found on the web for the board.  
eg: i bought recently a Qmtech kintex board from china but have not yet tested it (didn't found the time to install the rigth tools for the rigth OS... )

So thanks for playing with this subject ;-)

Have a nice day guys

Tim Rudy

unread,
Feb 10, 2026, 10:57:35 AMFeb 10
to FPGAwars: explorando el lado libre
Amazing, Juan. Amaaaazingly cool!
  - Tim

Obijuan

unread,
Feb 11, 2026, 7:36:29 AMFeb 11
to FPGAwars: explorando el lado libre
Me estoy centrando de momento en el funcionamiento de la webapp en teléfonos móviles Android y en el acceso a la memoria flash. En el futuro quiero desarrollar aplicaciones para testeo de la placa. Es muy útil para hacer comprobaciones en los talleres de FPGA, sin tener que usar el ordenador. Me muevo puesto por puesto y puedo realizar rápidamente comprobaciones

Ya tengo la opción de borrado de un sector de 64KB de la flash funcionando


webFPGA-tool-erase.jpg

Previamente tenía grabada en la direción 0x050000 unos bytes. Al pulsar el botón de borrado (y confirmar) se comprueba que el sector se  borra (y aparecen sólo 0xFF)

En este vídeo de youtube se puede ver en acción:


La URL para probarla es esta:



Alhambra-Webtools.png


Yo siempre trabajo en abierto. Las fuentes están disponibles aquí:  https://github.com/Obijuan/Web-iceprog/tree/main/wiki/web-iceprog/webFPGA-tools

Está implementado en javascript a pelo

El siguiente paso es grabar datos en la flash. Os seguiré informando

Saludos, Obijuan



Obijuan

unread,
Feb 12, 2026, 3:57:47 AMFeb 12
to FPGAwars: explorando el lado libre
Ya tengo funcionando la grabación de bytes en la flash. En la GUI he metido la posibilidad de grabar un byte en la dirección actual, para hacer pruebas. Lo he probado desde el móvil Android y funciona muy bien:

20260212_084513.jpg

Esta la interfaz actual:

Alhambra-Webtools2.png

Si la posición actual está borrada (contiene el valor 0xFF), entonces al pulsar Graba byte se guardará el byte que está en la caja de texto (que por defecto es 0xAA)

En este vídeo se muestra en acción:


Se guarda primero el valor 0xAA (en la dirección 0x040000) y luego 0x55

Ya estoy muy cerca de grabar bitstreams en la flash
Saludos, Obijuan

Obijuan

unread,
Feb 13, 2026, 4:19:05 AMFeb 13
to FPGAwars: explorando el lado libre

¡Ya funciona la descarga de Bitstreams desde el móvil Android!!!

Esto es una herramienta tremenda para los talleres. El instructor se puede pasar puesto por puesto con su móvil, cargando bitstreams de pruebas en las Alhambras de los estudiantes para comprobar que todo funciona correctamente

Previamente hay que guardar los ficheros .bin en el móvil (descargándolos como cualquier otro archivo)

He añadido un botón para seleccionar el bitstream en el movil:

2026-02-12_01-webFPGA-bitstream-1.png

Se selecciona el bitstream a descargar y se aprieta en el botón de programar la flash que aparece una vez seleccionado:

2026-02-12_02-webFPGA-bitstream-2.png

Aparece una barra de progreso para mejorar la experiencia de usuario. Al cabo de unos segundos el bitstream ya está cargado!

2026-02-12_03-webFPGA-bitstream-3.png

En este vídeo de Youtube se muestra una demostración. Inicialmente está encendido el LED D0. Se carga el bitstream test7.bin para encender el led D7


Lo he probado también desde una tablet Androind, con Chrome y ha funcionado perfecto (os enviaré fotos en próximos posts)

Saludos, Obijuan


Obijuan

unread,
Feb 13, 2026, 4:25:36 AMFeb 13
to FPGAwars: explorando el lado libre
Se me ha olvidado porner la url de la web app:


Las fuentes están aquí:


Esta no es todavía la aplicación final. Es sólo una de desarrollo, para hacer pruebas

Saludos, Obijuan

Obijuan

unread,
Feb 14, 2026, 5:57:55 AMFeb 14
to FPGAwars: explorando el lado libre
Esta es otra nueva versión donde se pueden cargar bitstreams con sólo apretar un botón. Como ejemplo he hecho dos circuitos, uno que parpadea el LED0 y otro el LED7: blinky0 y blinky7 respectivamente. Con un botón se carga Blinky7 y con el otro Blinky0. Y ya. Es muy fácil para el usuario

Screenshot_20260214_114419_Chrome.jpg

Aquí lo podéis ver en acción:



Saludos, Obijuan

Reply all
Reply to author
Forward
0 new messages