ULX3S

Ho mais je me rend compte que je n’avais encore rien écrit sur la carte ULX3S commandée l’été dernier. Il faut dire que les délais d’approvisionnement étant ce qu’ils sont aujourd’hui la carte a tout de même mis presque six mois à arriver. J’ai donc eu tout le temps de passer à autre chose.

Donc oui, après m’être posé la question, j’ai opté pour l’ULX3S au détriment de l’orangecrab. La carte, conçue par le Hackerspace Radiona de Zagreb (croatie) arrive dans un petit carton muni de quelques accessoire «pmod» pour ajouter un second port HDMI, des USB et autres header he10.

L’ULX3S et ses adaptateurs «pmod»

La carte a tout ce qu’il faut pour faire une console de jeux 🙂 Mais pour le moment, on va surtout s’intéresser à la sortie HDMI, après avoir déballé la bête.

Mise en route

Un guide de mise en route est donné sur le github officiel. Pour démarrer la carte il suffit de brancher l’ordinateur sur l’usb de gauche.

Branchement de l’usb pour programmer la carte (src : quickstartguide)

Ce qui a pour effet d’allumer quelques leds de toutes les couleurs

\o/ plein de LEDs multicolors

et de monter un driver tty sur le pc host :

$ dmesg
[1956889.190788] usb 1-1.1.2: new full-speed USB device number 16 using xhci_hcd
[1956889.300502] usb 1-1.1.2: New USB device found, idVendor=0403, idProduct=6015, bcdDevice=10.00
[1956889.300504] usb 1-1.1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[1956889.300506] usb 1-1.1.2: Product: ULX3S FPGA 85K v3.0.8
[1956889.300507] usb 1-1.1.2: Manufacturer: FER-RADIONA-EMARD
[1956889.300508] usb 1-1.1.2: SerialNumber: E20000
[1956889.308375] ftdi_sio 1-1.1.2:1.0: FTDI USB Serial Device converter detected
[1956889.308401] usb 1-1.1.2: Detected FT-X
[1956889.308597] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB0

N’oublions pas que le FPGA est un ECP5, il y a donc tous les outils opensource disponibles pour développer avec. De plus, radiona fournie la toolchain précompilé pour la carte, il n’y a plus qu’à la télécharger et l’installer comme expliqué dans le manuel (424Mo pour un pc x64).

$ cd /opt/
$ mkdir ulx3s
$ cd ulx3s/
$ wget https://github.com/YosysHQ/oss-cad-suite-build/releases/download/2022-03-17/oss-cad-suite-linux-x64-20220317.tgz
$ tar xf oss-cad-suite-linux-x64-20220317.tgz

Si on veut faire clignoter vite vite vite, dans relancer de synthèse on peut tout simplement cloner le projet «blink» et télécharger le bitstream. À titre personnel je préfère utiliser openFPGALoader (avant même d’en tester un autre ;).

$ cd /opt/ulx3s
$ git clone https://github.com/ulx3s/blink.git
$ cd blink/
$ tree
.
├── blink_12f.bit
├── blink_45f.bit
├── blink_85f.bit
├── blinky.v
├── blinky.ys
├── LICENSE
├── Makefile
├── README.md
└── ulx3s_v20.lpf

0 directories, 9 files
$ openFPGALoader -bulx3s  blink_85f.bit
Jtag probe limited to 3MHz
Jtag frequency : requested 6000000Hz -> real 3000000Hz
ret 0
Open file: DONE
Parse file: DONE
Enable configuration: DONE
SRAM erase: DONE
Loading: [==================================================] 100.00%
Done
Disable configuration: DONE

Le résultat n’est pas une LED qui clignote, mais 6 LEDs multicolors qui clignotent (qui compte en binaire).

Le projet blink fourni un makefile pour reconstruire le bitstream si l’on veut tester la toolchain :

$ export PATH=/opt/ulx3s/oss-cad-suite/:$PATH
$ make ulx3s.bit
$ openFPGALoader -bulx3s ulx3s.bit

Et voila \o/, c’est tout pour la prise en main !

La suite

La suite va consister à adapter le projet HdmiCore pour la sortie HDMI de la carte.

Ressources

1 réflexion sur « ULX3S »

  1. Bonjour Fabien,

    Merci pour cet article, j’attends impatiemment la suite ( Hdmi ? 😉 )

    Pour la petite histoire je me souviens de ton article (choix entre Ulx3s et OrangeCrab)
    J’ai aussi choisi une ulx3.

    Etant un pur softeux, autodidacte du fpga (en mode hobby) je suis un vrai padawan, je n’ai pas le niveau pour participer à l’effort collectif et ce que je raconte doit tjs être mis sous le filtre du débutant.
    Voilà pour le disclaimer !

    Je vais tout de même évoquer la manière dont j’essaye de travailler.

    Mon OS: Windows !! Mais avec WSL2 ; et Visual Studio code “branché” sur WSL2

    (wsl2 c’est bien, mais pas d’accès à l’usb, il m’arrive donc de passer par linux, mais aujourd’hui je programme le fpga depuis l’ESP32 de la carte, connectée en wifi sur mon réseau, donc plus besoin d’ openFPGALoader par exemple)

    Je dev avec Amaranth (anciennement nMigen) et je teste avec cocotb.

    Des choses très simples avec quelques fois un core cpu au centre, architecture “retro”.

    J’utilise comme toi ce qui est proposé dans le manuel https://github.com/emard/ulx3s/blob/master/doc/MANUAL.md#precompiled-opensource-tools-for-all-platforms
    à savoir la bien complète : Oss Cad Suite : https://github.com/YosysHQ/oss-cad-suite-build.

    Et un petit mot de la fin: clairement, mes débuts “fpga” avec les outils propriétaires étaient un “enfer”, puis j’ai revu ma copie et je suis passé en mode “opensource” et “communauté”, c’est vraiment plus “sympa”.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

*