Une FIFO, un synchroniseur, un tampon pour absorber les pauses dans un flux de données... Ces composants reviennent dans les projets FPGA. Leur fonctionnement paraît simple, mais leur écriture demande de traiter les cas limites et de vérifier le résultat. Avec COLIBRI, le CERN met à disposition une bibliothèque de composants VHDL réutilisables pour éviter de recommencer ce travail à chaque projet. Le code est accessible sur GitLab.
Des composants déjà utilisés au CERN
Dans une publication du 18 septembre 2026, le CERN présente une bibliothèque de plus de 100 composants RTL écrits en VHDL-2008. COLIBRI est née d'un besoin interne : partager les composants entre équipes et faciliter leur utilisation sur des FPGA de fabricants différents. L'équipe chargée de l'acquisition de données de LHCb a été la première à l'adopter. Selon le CERN, la bibliothèque est désormais utilisée dans plus de dix projets, dont certains hors de l'organisation. Présentation du CERN.
COLIBRI regroupe des mémoires et des FIFO, des composants de communication, des interfaces de bus comme AXI ou Avalon, ainsi que des blocs pour UART, I²C et SPI. La bibliothèque comprend aussi des fonctions pour les fichiers de simulation, à côté des composants synthétisables. On peut parcourir le dépôt par fonction. Documentation du dépôt.
Choisir une FIFO selon son besoin
Prenons le cas des FIFO. COLIBRI distingue les versions synchrones, avec une seule horloge, des versions asynchrones, utilisées entre deux domaines d'horloge. Certaines acceptent aussi des largeurs de données différentes en entrée et en sortie. La documentation explique leurs modes de lecture et précise quelles versions utilisent les ressources RAM du FPGA. Ces détails permettent de choisir un composant en comprenant ses contraintes. Documentation des mémoires.
L'indépendance vis-à-vis des fabricants demande toutefois un travail concret sur le code. Pour certaines mémoires, COLIBRI possède plusieurs implémentations adaptées aux règles de synthèse des outils. Les auteurs expliquent qu'une écriture unique ne permettait pas à tous les compilateurs de reconnaître correctement les primitives matérielles. Ces variantes restent décrites en VHDL et peuvent être simulées sans dépendre d'un modèle propriétaire du fabricant. Implémentations des mémoires.
Vérifier le niveau de test de chaque bloc
Le CERN décrit une méthode qui associe des bancs de test auto-vérifiants et, lorsque c’est possible, des tests de vérification formelle. Un banc de test auto-vérifiant compare les résultats de la simulation aux valeurs attendues. Il signale les erreurs sans qu’il soit nécessaire d’examiner chaque chronogramme à la main. Démarche présentée par le CERN.
La documentation précise le niveau de vérification de chaque bloc. stream_buffer, par exemple, a une simulation, un banc de test auto-vérifiant et une vérification formelle. Les autres blocs n’ont pas tous les mêmes tests. État des tests des blocs communs.
Intégrer COLIBRI dans son projet
Pour intégrer COLIBRI, les auteurs indiquent de compiler les fichiers VHDL dans une bibliothèque nommée colibri, en activant VHDL-2008. Le dépôt contient également des fichiers d'intégration pour Vivado et Quartus, ainsi que pour Hog et FuseSoC. La licence par défaut est la CERN Open Hardware Licence, version 2.0, variante faiblement réciproque ; certains fichiers peuvent préciser une autre licence. Instructions d'intégration et licence.
Pour apprendre, stream_buffer constitue un bon point d'entrée. Sa documentation décrit deux modes : en mode skid, les données passent directement en fonctionnement normal ; en mode pipeline, elles sont enregistrées, avec au moins un cycle de latence. Étudier ce bloc avec son banc de test permet d'observer ce qui se passe lorsque le destinataire cesse temporairement d'accepter les données. C'est un exercice concret pour comprendre le contrôle de flux et le compromis entre latence et découpage des chemins combinatoires. Fonctionnement de stream_buffer.
