Pourquoi utiliser des solutions basée sur le FPGA alors qu’il existe d’autres solutions éprouvées, comme le Raspberry Pi ? Un utilisateur lambda finira forcément par se poser laquestion. Pour y répondre nous devons tout d’abord nous intéresser au fonctionnement du FPGA.
La technologie FPGA, une réplication du materiel d’origine
La technologie FPGA a pour objectif de ne pas reposer sur de l’émulation mais plutot une réplication du matériel d’origine.
En effet le code des Cores FPGA se basent sur les circuits matériels réels (avec les ajustements habituels pour la compatibilité FPGA), et l’on doit donc plutot parler de réplication du matériel d’origine plutôt que de simulation.
Toutefois si l’on veut être complètement honnête, il est difficile de trouver un noyau qui puisse vraiment être qualifié de réplique : la plupart des noyaux sont basés sur des recréations plus ou moins fonctionnelles plutôt que sur des recréations de circuits réels. Les cœurs de processeur les plus utilisés, le Z80 (T80) et le MC68000 (TG68K), sont de pures émulations fonctionnelles, et non des réplications.
Mais cette situation évolue chaque jour et l’objectif reste de faire évoluer les cores pour se rapprocher au maximum d’une vrai réplication du matériel d’origine.
Les avantages du FPGA
Pour revenir à la question initiale, alors pourquoi utiliser une solution à base de FPGA ?
Eh bien, la réplication d’un système via FPGA est fondamentalement différente de l’émulation sur un processeur. Les émulateurs traditionnels sur les processeurs exécutent le code de manière séquentielle. Il s’agit d’une méthode d’émulation compliquée car le matériel réel comporte de nombreuses puces et elles fonctionnent toutes en parallèle. Le CPU, la puce vidéo/logique, la puce audio, l’arbitre de mémoire fonctionnent tous en même temps.
Un émulateur traditionnel doit donc s’occuper de toutes ces parties et essayer d’émuler tout en même temps en “courant” rapidement d’une puce à l’autre. Cela nécessite beaucoup de puissance CPU pour émuler même un vieil ordinateur rétro lent. Parfois, même un processeur moderne fonctionnant à 100 fois la vitesse de l’ordinateur rétro n’est pas suffisant, donc l’émulateur doit soit utiliser l’approximation, sauter l’émulation de certaines parties moins importantes, ou prendre en charge certains taches standards du système émulé.
Prenons un émulateur bien connu, UAE, émulant un Amiga. Sur un Raspberry Pi 3, vous pouvez exécuter des benchmarks de CPU Amiga et obtenir des chiffres fous comme 100 fois le processeur 68000 d’origine. Vous pouvez donc supposer que vous avez un Amiga émulé qui est 100 fois plus rapide qu’un vrai. Mais si vous exécutez différents types de démos ou de jeux, vous obtiendrez une vidéo hachée. Par exemple, si vous jouez à la célèbre démo Spaceballs “State of The Art”, vous remarquerez que la vidéo devient hachée à certains moments, tandis qu’un véritable Amiga 600 avec une vitesse de processeur 1x lit toute la démo sans difficulté. C’est ainsi que fonctionnent les émulateurs traditionnels sur Raspberry Pi.
la réplication d’un système via FPGA fonctionne très différemment de l’émulation traditionnelle sur le CPU. Un FPGA est un vaste éventail de déclencheurs simples et d’autres logiques, comme n’importe quelle autre puce/CPU. La seule différence est que des puces/processeurs spécifiques ont ces pilotes et cette logique attachés en permanence, tandis que le FPGA vous permet de les câbler comme vous le souhaitez. Un HDL (hardware description language) spécial décrit comment connecter toutes ces cellules/déclencheurs logiques. Tout dans FPGA fonctionne en parallèle comme dans les puces/dispositifs d’origine. Par conséquent, le FPGA est assez proche du matériel d’origine. Le FPGA n’a pas besoin de hautes fréquences pour émuler des ordinateurs rétro ; il fonctionne à des fréquences beaucoup plus basses que celles requises par les émulateurs traditionnels. Puisque tout dans le FPGA fonctionne en parallèle, il n’y a aucun problème à gérer toute utilisation possible du système émulé. Les développeurs utilisant des FPGA se concentrent généralement sur la partie spécifique pour la faire fonctionner correctement, et cela fonctionnera comme il se doit dans tous les scénarios possibles.
En utilisant un FPGA, vous pouvez voir une vidéo fluide pendant toute la lecture la même démo de référence, “State Of the Art”, comme sur le matériel d’origine.
Alors, pourquoi ne pas créer tous les émulateurs sur des FPGA ?
La réponse est : la programmation FPGA n’est pas si simple.
Tout d’abord cela nécessite de connaitre parfaitement l’achitecture du matériel d’origine que l’on essaie de répliquer. Ce matériel étant rarement documenté de manière complète, cela nécessite une travail long et complexe pour réussir à parfaitement appréhender le système.
De plus sur FPGA Chaque bit fonctionne en parallèle, donc le développeur doit aussi penser en parallèle :). Ce qui est simple à gérer avec un CPU ne l’est pas nécessairement via un FPGA, et l’inverse est également valable.
En résumé
Vous l’aurez compris, l’utilisation d’un fpga pour répliquer un système d’origine a de vrais avantages mais cela demande également un travail colossal ce qui explique que les cores permettant de recréer ces systèmes sortent progressivement. Mais la bonne nouvelle est que le MiSTer est une solution basée sur le FPGA qui a aujourd’hui atteint un niveau de maturité avancé et propose un grand nombre de cores qui nous permettent déjà de reproduire de nombreuses machines (consoles, ordinateurs bornes d’arcade etc…)
Et l’offre de cores continue à s’améliorer un peu plus chaque jour 🙂