Démo coding sur silicium pur : implémenté avec seulement 4 000 portes, sans CPU ni mémoire
(a1k0n.net)- Dans le concours de démo Tiny Tapeout 8, deux démos ASIC capables de produire des graphismes VGA et un audio 1 bit ont été réalisées avec seulement environ 4 000 portes logiques
- La première est une intro dans le style traditionnel de la demoscene, avec damier 3D, fond étoilé, texte défilant et musique, implémentée comme une pure machine à états sans CPU ni RAM
- La seconde est une animation Nyan Cat, utilisant du VGA 640x480 et un audio synchronisé sur la vidéo, avec presque tout le circuit intégré dans une seule tile
- Tous les effets visuels et sonores sont générés directement par des circuits logiques en Verilog, avec un minimum de ressources pour reproduire la musique, via notamment synthétiseur à ondes triangulaires et impulsionnelles, bruit LFSR, DAC sigma-delta
- La fabrication a été interrompue à cause de la faillite d’Efabless, mais les puces ont ensuite été récupérées et il a été confirmé qu’elles fonctionnaient parfaitement sur le matériel réel
Démo d’intro TT08
- Composition graphique comprenant un champ d’étoiles en arrière-plan, un damier 3D, un texte défilant ondulant et des effets d’ombre
- Résolution VGA de 1220x480, horloge à 48 MHz
- Génération vidéo en convertissant via Verilator en C++, puis rendu dans une fenêtre SDL
- 293 bascules et un total de 3 374 cellules utilisés, au plus près de la limite de surface
- L’encodage de la police consommait beaucoup de surface logique, donc les valeurs de couleur ont été abandonnées au profit d’un motif de bandes diagonales
- Sans ROM, l’encodage des données est exprimé directement par des portes logiques
- La pipeline de synthèse Yosys convertit la table de vérité en cellules standard
- Une simplicité algorithmique selon l’adresse est plus avantageuse pour réduire la surface que la complexité des données
- Le scroller sinusoïdal est implémenté par rotation vectorielle sans table
- Génération d’une trajectoire circulaire avec la méthode du symplectic integrator de Minsky
- La projection du plan en damier est réalisée en arithmétique à virgule fixe
- Le module
recip16calcule l’inverse de la coordonnée y pour effectuer la transformation de perspective - Le motif de couleur est généré par opération XOR, avec variation de la hauteur du plan sur le rythme de la batterie
- Le module
Détails graphiques
- L’effet d’ombre projette le texte défilant dans le repère du plan et décale les bits de couleur
- Le fond étoilé (Starfield) génère des nombres pseudo-aléatoires par ligne de balayage avec un LFSR
- Combiné à un compteur de frames pour déterminer position et vitesse des étoiles, avec variation de la longueur de traîne sur le timing de la caisse claire
Synthèse musicale
- Une structure répétitive ABACABAD minimise la duplication de portes logiques
- Trois canaux
- Bruit + décroissance exponentielle (caisse claire)
- Arpège en onde carrée (mélodie/accords)
- Onde triangulaire + décroissance exponentielle (kick/basse)
- Sortie audio via DAC sigma-delta
- Implémentation simple en sortant le bit de retenue de l’accumulateur au lieu d’un PWM
- Reprise de la progression d’accords du morceau Crooner (C64 SID)
- Basé sur une gamme de 8 notes, sur 2 octaves, avec arpèges au niveau du bit
- Rythme swing obtenu en alternant des tempos de 15 et 25 ticks
Retour d’expérience
- La séparation des horloges audio et vidéo a provoqué un désalignement entre musique et image
- Le choix de la résolution non standard 1220x480 a entraîné une baisse de qualité d’affichage sur LCD
- L’effet de dithering paraît naturel sur CRT, mais la capture numérique produit des distorsions
Démo Nyan Cat
- Réalisée juste avant la date limite de Tiny Tapeout 8, avec VGA 640x480 et audio synchronisé à 60 Hz
- Extraction des frames et de la palette depuis le GIF d’origine, puis conversion avec dithering en RGB222
- Réutilisation du fond étoilé basé sur LFSR
- Les données musicales ont été obtenues en analysant un fichier MIDI puis remappées sur une gamme de 8 notes
- Utilisation de seulement deux canaux : basse/kick et mélodie
- Application d’une enveloppe à décroissance exponentielle au début de chaque frame (60 Hz)
- La mélodie est générée par une onde impulsionnelle à cycle utile de 25 %
- Ajustement de la fréquence par sélection des bits de poids fort selon l’octave
- Ajout d’un filtre passe-bas pour ajuster le timbre
Fabrication et résultats
- Tiny Tapeout 8 a été lancé en fabrication en septembre 2024, puis interrompu à cause de la faillite d’Efabless
- Une nouvelle équipe opérationnelle a récupéré et distribué les puces au second semestre 2025
- Lors des tests sur puce réelle, tous les designs ont fonctionné correctement
- Seule la démo Donut a nécessité d’abaisser l’horloge à 45 MHz pour rester stable
- La démo Nyan Cat a été reproduite parfaitement sur LCD comme sur CRT
- Présentée dans un live YouTube de Bitluni
Conclusion
- Après plus d’un an d’attente, confirmation d’une démo tournant parfaitement sur silicium réel
- Un exemple d’implémentation d’effets visuels et sonores dans l’environnement Tiny Tapeout avec de purs circuits logiques, sans CPU ni RAM
- Mention de projets futurs pour développer des techniques de démo matérielle bas niveau encore plus avancées
1 commentaires
Avis Hacker News
J’ai fait des études d’informatique, mais je m’intéresse aussi à l’ingénierie informatique, donc j’aimerais vraiment construire moi-même ce genre d’architecture de rendu rétro et aller jusqu’au tape-out
C’est une structure simple mais vraiment amusante, et j’adore ce type de projet
Rien qu’avec un FPGA, on peut déjà aller très loin. Le fait de pouvoir concevoir soi-même un SoC reste toujours grisant
Par exemple, si on se dit « il me faut 9 ports I2C », il suffit de copier-coller le bloc.
Et s’il y a une opération lente en logiciel, on peut aussi créer soi-même un accélérateur matériel
Le fait que tout le monde soit connecté tend aussi à uniformiser la culture, mais c’est formidable que quelques dizaines de personnes dispersées dans le monde puissent se réunir pour un concours aussi chouette
J’aime bien l’effet où la grille pulse au rythme de la grosse caisse. C’est un détail très soigné
Je me demandais quelle était la stabilité à long terme du générateur sin/cos HAKMEM cité, alors je suis allé regarder
On trouve une vue d’ensemble ici
(apparemment, c’est stable sous des conditions arithmétiques exactes)
Par coïncidence, c’est aussi lié à la vidéo sur l’intégration de Verlet publiée la semaine dernière
J’ai vu cette vidéo aussi dans les recommandations YouTube, et je l’ai trouvée assez plaisante
Ça me rappelle mes années à l’université — cette phrase me revient : « le matériel et le logiciel sont logiquement équivalents »
Travail vraiment impressionnant. Je faisais souvent de la demoscene en JS avant, surtout sur dwitter, mais là on est à un tout autre niveau
Grâce à ce commentaire, je viens aussi de découvrir que TinyTapeout était de retour
J’aimerais essayer de faire un FPAA avec Tiny Tapeout, mais je doute que ça tienne dans la surface allouée
Comme des formulations du type « No x, no y, just z » sont souvent utilisées par ChatGPT, on dirait que même les utilisateurs ordinaires commencent à les reprendre
Ça me rappelle l’époque où je réparais des flippers dans une école professionnelle. De très bons souvenirs
Vraiment génial !
En regardant l’Open Shuttle actuel, je vois qu’il faut 20 $ pour utiliser dans un projet la licence SRAM de 4 KB
En contrepartie, l’interface Wishbone Bus est incluse