ECP5 is a great FPGA, it was reversed in Trellis, it’s bigger than ICE40 that was reversed before in icestorm project. And it have lots of cool stuff like
multipliers
serdes
25klut min (85 max)
and lots of memory bits
But ECP5 board available on the web are little bit expensive (if you have nothing to do with it ;). Even the OrangeCrab will be about 80$ minimum (but with DDR3 and USB on it).
There is a rumor on the web that this leds display board include an ECP5 :
It’s really interesting, because this board cost only $15 ! With the dual SDRAM (M12L16161A) provided and its dual gigabit ethernet phy (Boardcom B50612D B1KMLG). For this low-cost price I order one of course.
I just received it and if we remove the sticker we see a Lattice ECP5 ( LFE5U-25F-6BG256C).
We can then load a simple blinker bitstream with openFPGALoader. But first, we have to synthesize one. Trabucayre gave me a simple blinker project I added to the BLP (Blinking Led Project).
This project require yosys, nextpnr and trellis to be installed. Installations instructions are given on trellis repository.
$ git clone --recursive https://github.com/SymbiFlow/prjtrellis
$ cd prjtrellis/libtrellis
$ cmake -DCMAKE_INSTALL_PREFIX=/usr .
$ make
$ sudo make install
J’en avait déjà parlé dans les colonnes de ce blog. Une nouvelle société produit un FPGA nommé Trion T8. Ce FPGA est la base d’une petite carte de développement proposée par les HongKongais de XIPS Technology sur le site crowdsupply.
Évidemment je n’ai pas résisté à participer à la campagne. Quelques manifestations à HongKong et quelques déboire avec Fedex puis Mondial Relais, voici enfin le kit tant attendu arrivé chez moi.
Le kit est arrivé dans un énorme carton, mais c’est presque habituel dans ce genre de cas. J’avais pris sans les headers soudés mais ils sont tout de même fournis. J’ai juste eu à les souder moi même.
Au branchement une led rouge qui semble être celle de l’alimentation s’allume. Les 4 LED oranges se mettent elles à compter en binaire.
Dans les messages noyau nous avons la traditionnelle interface ttyUSB0 du FTDI :
$ dmesg
[97997.987953] usb 3-1: USB disconnect, device number 11
[97997.988359] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[97997.988397] ftdi_sio 3-1:1.0: device disconnected
[98000.296737] usb 3-1: new high-speed USB device number 12 using xhci_hcd
[98000.445226] usb 3-1: New USB device found, idVendor=0403, idProduct=6014, bcdDevice= 9.00
[98000.445231] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[98000.445233] usb 3-1: Product: Single RS232-HS
[98000.445235] usb 3-1: Manufacturer: FTDI
[98000.446052] ftdi_sio 3-1:1.0: FTDI USB Serial Device converter detected
[98000.446118] usb 3-1: Detected FT232H
[98000.446278] usb 3-1: FTDI USB Serial Device converter now attached to ttyUSB0
J’avais déjà reçu la license de la part de Efinix et Xips technology, du coup mon blinking led design était près à télécharger. Le bitstream est au format *.hex et se flash super facilement avec le Efinity programmer (tools -> programmer).
Par contre ma led ne clignote pas, je pense avoir encore quelques soucis avec les configs d’I/O et de PLL pour l’instant. Je doit encore me former à l’Efinity Interface Designer de Efinix qui est assez déroutant par rapport aux autres IDE.
[edit 28/01/2022]
Il est possible de charger le bitstream avec openFPGALoader sans problème de nos jours :
$ openFPGALoader -b fireant counter/outflow/counter.hex
Jtag frequency : requested 6.00MHz -> real 6.00MHz
Parse file DONE
Detail:
Jedec ID : ef
memory type : 40
memory capacity : 14
00
Detail:
Jedec ID : ef
memory type : 40
memory capacity : 14
flash chip unknown: use basic protection detection
Erasing: [==================================================] 100.00%
Done
Writing: [==================================================] 100.00%
Done
Wait for CDONE DONE
Arrow propose un kit de développement nommé AnalogMax pour 80$ environ. L’entreprise qui fabrique la carte est Trenz Electronic qui réalise également le kit gowin.
Le FPGA est relativement gros et la carte possède un certain nombre de périphérique analogiques sympathique comme un détecteur de fumée, un capteur de température, quelque canaux ADC et DAC ainsi que des GPIO.
Au branchement du kit sur l’usb on a juste la led verte allumée. L’appuie sur le bouton à droite allume une des huit leds de la rangée, et l’appui sur l’autre bouton allume l’autre led rouge et inscrit un message sur l’uart (115200):
Je viens donc de recevoir ma carte petite abeille (littlebee) munie d’un FPGA du chinois GOWIN.
La carte produite et vendue par la société allemande Trenz Electronic permet de se faire la main avec le composant pour moins de 40€ (un peu plus avec les frais de ports UPS …).
Branchement
Au branchement à la sortie du carton les huit leds rouge s’allument ainsi qu’une led verte que je suppose de «power».
Les messages noyau nous donnent deux ports séries ttyUSBx :
$ dmesg [630417.919258] usb 3-1: new high-speed USB device number 35 using xhci_hcd [630418.059577] usb 3-1: New USB device found, idVendor=0403, idProduct=6010 [630418.059581] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [630418.059583] usb 3-1: Product: Dual RS232-HS [630418.059584] usb 3-1: Manufacturer: FTDI [630418.060116] ftdi_sio 3-1:1.0: FTDI USB Serial Device converter detected [630418.060155] usb 3-1: Detected FT2232H [630418.060352] usb 3-1: FTDI USB Serial Device converter now attached to ttyUSB0 [630418.060499] ftdi_sio 3-1:1.1: FTDI USB Serial Device converter detected [630418.060528] usb 3-1: Detected FT2232H [630418.060648] usb 3-1: FTDI USB Serial Device converter now attached to ttyUSB1
Si on se connecte au port série ttyUSB1 on obtient un affichage de la résolution du problème des philosophes.
Philosopher 0 [P: 3] THINKING [ 750 ms ] Philosopher 1 [P: 2] HOLDING ONE FORK Philosopher 2 [P: 1] EATING [ 450 ms ] Philosopher 3 [P: 0] STARVING nabled Philosopher 4 [C:-1] HOLDING ONE FORK get back, Philosopher 5 [C:-2] EATING [ 375 ms ]
Il est probable que nous ayons ici un RISC-V dans le tiroir.
La connexion d’un terminal sur le port ttyUSB0 ne donne rien par contre.
IDE
Voila pour le déballage, maintenant il va falloir installer les outils pour faire clignoter ces leds !
FireAnt est un kit de développement «de la taille d’un pouce» concu par la société Xips Technology et permettant de se faire la main sur le FPGA Trion T8 de la société Efinix.
Et bien sûr un LDO pour l’alimentation 3v3 à partir de l’USB
Efinix est une toute nouvelle société qui propose des petits FPGA gravés en 40nm. Pour les tout petits FPGA de leur gamme, la société propose ce qu’elle appelle un MPM pour «Mask Programmable Memory» -> la possibilité de figer le design en usine et de ne plus avoir à configurer le FPGA à chaque démarrage.
Un IDE permettant de faire la synthèse, le placement-routage et le bitstream est fourni «gratuitement». À condition de posséder un kit de développement (J’ai beau négocier, ils ne veulent pas me le donner tant que je n’aurais pas reçu le kit 😉 ).
Bref, il n’est pas encore question d’outils libres pour ces FPGA pour l’instant. Cependant, ça fait du bien de voir de nouveaux acteurs dans le domaine des FPGA «physique».
La société chinoise SiPeed propose un kit de développement permettant d’évaluer le FPGA chinois EG4S20BG256 produit par Anlogic. Le kit peut être commandé pour une vingtaine de dollars sur le site de vente en ligne Seeed spécialisé dans les kits de développement en électronique «grand public».
Au branchement du kit Debian/Linux détecte un convertisseur USB-JTAG de chez Anlogic:
$ sudo dmesg -c [30017.300586] usb 3-2: new full-speed USB device number 5 using xhci_hcd [30017.441796] usb 3-2: New USB device found, idVendor=0547, idProduct=1002 [30017.441801] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [30017.441804] usb 3-2: Product: USB-JTAG-Cable [30017.441807] usb 3-2: Manufacturer: Anlogic
L’environnement de développement est disponible en téléchargement (~100Mo) sous forme d’une archive rar ici. Le fichier se décompresse avec la commande unrar:
$ unrar x ../TD_RELEASE_SEPTEMBER2018_RHEL.rar
Il faut ensuite mettre en exécutable le répertoire bin:
$ chmod +x bin/*
Et on peut ensuite lancer l’IDE:
$ cd bin ; ./td -gui
La fenêtre suivante s’ouvre alors :
C’est l’environement de développement le plus simple à installer que j’ai pu voir depuis que je bricole des FPGA. Même si la procédure d’installation est quand même étrange (un obscure .rar à télécharger puis à décompresser).
Pour synthétiser un premier design on va avoir besoin d’un minimum de documentation sur la schématique de la carte ainsi que sur le pinout du FPGA. On trouvera les schémas du kit en format pdf ici.
On trouve des exemples de code pour le kit sur github, notamment pour faire clignoter une led. La base du Hello World en électronique.
Pour tester la led qui clignote on crée un nouveau projet avec le fpga EG4S20BG256. On ajoute ensuite le source pour la led se trouvant dans le répertoire Tang_FPGA_Examples/0.LED/src/led.v
L’extension du fichiers de contrainte est en *.adc pour l’exemple de led le fichier se trouve dans le répertoire Tang_FPGA_Examples/0.LED/constraint/io.adc
Une fois les deux fichiers ci-dessus ajouté à notre projet on peut lancer la procédure complète pour générer le bitstream en double-cliquant sur l’icône «Generate Bitstream» dans l’encart «FPGA Flow» de l’ide.
La génération du bitstream est très rapide. Pour le télécharger ensuite dans le FPGA il faut bien sûr que le kit soit connecté à l’usb.
Le configurateur se lance en allant dans le menu Tools -> Download.
Chez moi j’ai du lancer l’ide en sudo pour éviter un plantage fatal, à ce moment. Le configurateur se présente comme ci-dessous :
Il faut ajouter le fichier bitstream au moyen du bouton de gauche «Add» puis cliquer sur la ligne du tableur pour «dégriser» le bouton «run», qui permet de télécharger le bitstream pour configurer le FPGA.
Pour conclure, je pensais beaucoup plus souffrir à mettre en route ce kit à la documentation majoritairement en chinois. Mais la note de blog de JAEB et le projet d’exemples sur github m’ont beaucoup aidé à faire clignoter cette led tricolore rapidement. À l’avenir il faudra regarder si ce FPGA est vraiment nouveau ou si ça n’est pas une copie d’un constructeur bien connu. On doit pouvoir vérifier ça avec le bitstream généré.
Au bout de quelques temps, la licence du logiciel expire. Il n’est plus possible de synthétiser avec. Un site chinois donne le truc pour que ça remarche. Pour éviter ce piratage, il semble être maintenant possible d’utiliser Yosys pour la partie synthèse !