Aujourd’hui j’ai décidé de vous parler de matériel et pas de logiciel.
Rassurez vous, pas un nième article sur l’iPad, mais plutôt sur la création de circuits numériques, et bien sûr de libre.
Nous allons aborder les points suivants :
- Intérêt et utilisation des langages de description matérielle (VHDL et Verilog)
- Logiciels propriétaires
- Les IP’s
- Exemple de solution libre : GHDL et GTKWave
- Quelques composants de base
- Site qui référence de code libre
Intérêt et utilisation des langages de description matérielle (VHDL et Verilog)
Les langages de description matérielle comme le VHDL ou le Verilog sont utilisés pour créer la plupart des composants d’électronique numérique (qui manipulent des 0 et des 1 ie des valeurs quantifiées, par opposition à l’électronique analogique qui manipule des valeurs continues comme des tensions ou des courants).
Ainsi, vos processeurs, les puces qui décodent matériellement les vidéos dans vos téléphones portables ou les puces de vos routeurs ou de vos switchs sont développées avec du code comme si c’était un programme (avec quand même des différences, rassurez-vous !).
Si pour l’industriel la création de composants s’avère très coûteuse, c’est essentiellement car les temps de développement sont assez longs et doivent être accompagnés de temps de tests très très longs : en effet lors de l’envoi en fabrication, les premières réalisations coûtent très cher (j’ai entendu parler de 1 million d’euros) et si un bug a été oublié lors de l’étape de simulation, il va falloir recommencer (et donc payer de nouveau).
Si tout se passe bien, la production en masse pourra être lancée et en vendant beaucoup, l’entreprise pourra être bénéficiaire.
Les forts coûts de développement associés à la concurrence expliquent peut-être pourquoi aucun code issu d’industrie n’est sous licence libre ; je serais curieux et surpris de voir Intel diffuser le code de ses derniers processeurs !
Pour le particulier, qui n’a pas le budget d’une entreprise ni la nécessité de produire ses circuits à grande échelle, des composants programmables (CPLD/FPGA), abordables (environ 60€ pour un petit kit de développement disposant de 100 000 portes logiques, de boutons poussoirs, de switchs, de LED’s, d’afficheurs 7 segments, port PS2, …) permettent d’implémenter son code de façon assez simple.
On pourra par exemple utiliser un FPGA pour de la robotique ou de la domotique.
Les solutions privatrices
Logiciels propriétaires
Les FPGA’s qu’on peut trouver dans le commerce sont toujours fournis avec un logiciel permettant de simuler, de synthétiser (transformer le code en portes logiques, bascules, …) puis d’implémenter (placement + routage) le circuit sur le FPGA. C’est d’ailleurs souvent la qualité de ce logiciel qui aide à vendre le composant (ce qui est souvent le cas avec le matériel).
Si ces logiciels sont souvent multi plate-forme (Windows, Mac OS, GNU/Linux), ils sont cependant toujours propriétaires.
Il existe bien un simulateur libre, GHDL, dont je parle un peu plus bas, mais pour ce qui concerne la synthèse et l’implémentation du circuit, il faudra utiliser les logiciels propriétaires fournis.
C’est forcement, pour nous libristes, une mauvais chose de devoir utiliser ces logiciels. Mais il y a selon moi, une chose bien plus mauvaise que de devoir utiliser ces logiciels pour implémenter son code : c’est que les codes des composants eux-mêmes ne sont jamais libres !
Les IP’s
Dans le domaine des circuits, on parle souvent d’IP’s. Rien à voir ici avec les adresses IP ; on parle ici d’Intellectual property qui sont en réalité des bouts de circuit (donc de code) qui réalisent des fonctions spécifiques (mémoire FIFO, module Ethernet, …).
Ces IP’s, en plus d’avoir un code fermé, sont vendues très cher.
Utilisées dans des composants dont vous n’avez pas non plus le code source, il en résulte qu’il est impossible de savoir comment sont réalisés les composants que nous utilisons ni même ce qu’ils font. Pourquoi alors les défenseurs du logiciel libre ne parlent pas plus souvent de matériel ?
Les 4 libertés fondamentales du logiciel libre ne devraient-elles pas également s’adapter au matériel que nous utilisons ? Parce que justement c’est du matériel et pas du logiciel ? Eh bien non : après tout, il y a quand même un code source derrière, pourquoi n’aurions-nous pas le droit de l’étudier comme on peut le faire pour le code source d’un logiciel libre ?
Je trouve qu’il est assez paradoxal de vouloir des logiciels libres alors que le code du matériel que l’on utilise ne l’est même pas !
Espérant en avoir alerté quelques-uns sur le sujet (un seul serait déjà bien !), nous allons maintenant voir les solutions libres qui existent (même si elles ne sont pas nombreuses…).
Les solutions libres
Exemple de solution libre : GHDL et GTKWave
GHDL est un simulateur VHDL qui utilise GCC.
Il permet entre autres d’analyser son code VHDL, de le compiler (en un binaire, pas de le synthétiser en portes logiques) puis enfin de le simuler pour en vérifier le comportement.
Contrairement aux outils propriétaires, il ne permet vraiment que de tester le code.
Vous devriez l’avoir dans les dépôts de votre distribution.
À noter que si vous devez le compiler, il vous faudra gcc-ada.
Nous allons voir comment avec un petit exemple (compteur 3 bits) simuler le composant pour voir ensuite comment visualiser le résultat sous forme de chronogramme sous GTKWave.
On va utiliser les fichiers suivant :
- countern_en.vhd qui contient l’entité, l’architecture et la configuration du compteur
- countern_en_tb.vhd qui contient les paramètres de la simulation (test bench)
À noter que j’ai eu des problèmes en utilisant des majuscules dans mes noms d’entités…
Je vous conseille donc de les écrire en minuscule.
Ensuite il suffit de faire les commandes suivantes :
On notera que ces étapes ressemblent très fortement à la compilation d’un programme classique.
C’est effectivement le cas, car comme dis précédemment, on crée un programme pour la simulation mais on ne fait pas la traduction code – portes logiques.
Ensuite, pour pouvoir visualiser graphiquement les résultats de la simulation, on va utiliser GTKWave.
Il suffit de le lancer avec comme paramètre le fichier de sortie de la simulation :
gtkwave countern_en_tb.vcd
Ensuite, on sélectionne les signaux que l’on veut visualiser, on les ajoute (append), on clique sur Zoom Fit pour ajuster le zoom et la :

Il peut donc assez facilement utiliser une solution libre pour simuler le code que l’on est en train de développer (il faudra encore cependant passer par un logiciel propriétaire si on veut implémenter ce code sur FPGA…)
Quelques composants de base
J’ai eu l’occasion de faire quelques composants de base en VHDL, je vous les mets à disposition (sous licence GPL), en espérant qu’ils serviront à quelqu’un.
On trouvera :
- Convertisseur little endian/big endian
- Accumulateur
- Mémoire RAM
- Mémoire de type FIFO
- Mémoire CAM
- Calcul de checksum
Site de référence de code libre
Même si on ne trouve pas énormément de code sous licences libres, on trouve notamment des projets sur le web (le plus souvent développés lors de thèses ou projets de fin d’études) et il y a surtout un site (le plus gros) qui regroupe du code libre : OpenCores.org
On y trouve notamment plein de choses utiles comme des cores Ethernet, des contrôleurs I2C et SPI, des fonctions de hachage (MD5, SHA1, …) ; enfin, ce qui vous facilitera la vie lors de la création de projets libres.
Références et liens :