Running Doom on Our Custom CPU and Going Viral
L'équipe a conçu un processeur personnalisé au niveau des portes logiques, l'a connecté à des périphériques, a adapté le code source du jeu et l'a déployé sur une FPGA pour l'exécuter en temps réel. Pour gérer la faible capacité et la latence variable de la DDR3 par rapport à la BRAM, ils ont ajouté des caches instructionnel et données, un arbitre mémoire et des mécanismes de writeback et d'invalidation pour masquer les délais. L'interface matérielle a exigé l'usage du générateur MIG, des traversées de domaines d'horloge, des FIFO et des wrappers de protocole, ainsi que l'implémentation de périphériques MMIO pour l'affichage HDMI, le timer, la sortie debug et la saisie clavier. Le portage a révélé de nombreux bugs (hazards, writebacks manquants, corruptions) et des particularités matérielles comme la mémoire non initialisée qui ont été corrigées; après des optimisations matérielles et logicielles (augmentation d'horloge, amélioration du fetch, instructions de multiplication, écriture directe dans la BRAM d'affichage et réglages du cache) et la correction d'un problème lié à l'optimisation du compilateur, le programme est passé d'environ 0,7 FPS à 15–20 FPS. Ils prévoient maintenant des améliorations plus profondes comme l'exécution hors ordre, de meilleurs schémas d'accès mémoire et éventuellement un GPU ou une FPGA plus grande pour atteindre 30 FPS et porter des jeux plus exigeants.