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.
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.
Ce qui a pour effet d’allumer quelques leds de toutes les couleurs
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
- Un dépot github de radiona donne une foule de liens pour commencer
- Les dépots github de l’ulx3s.
- Plein de projets d’exemples, notamment pour le HDMI
- Le schéma de l’ulx3s
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 ».