Tra la metà degli anni ’90 e l’inizio dei 2000, l’accelerazione grafica 3D su PC ha segnato una discontinuità netta rispetto al rendering software. La serie 3dfx Voodoo è stata fondamentale non solo per le prestazioni grafiche che la contraddistinguevano, ma soprattutto perché ha introdotto un nuovo modo di far comunicare direttamente i giochi con l’hardware: utilizzava infatti una pipeline dedicata, cioè un insieme di operazioni interne progettate esclusivamente per elaborare la grafica 3D in modo efficiente, e un’API proprietaria chiamata Glide, che permetteva ai giochi di accedere quasi direttamente alla scheda video, riducendo i passaggi intermedi e migliorando velocità e qualità visiva.
A distanza di 30 anni (3dfx ha lasciato un ricordo indelebile), un progetto indipendente dimostra che quell’architettura può essere ricostruita integralmente utilizzando FPGA moderni. Non si tratta di emulazione, ma di una replica che espone in modo trasparente le complessità interne della GPU originale.
3dfx Voodoo: una pipeline lineare con oltre 400 registri
Il progetto SpinalVoodoo ricostruisce la Voodoo 1 partendo da un presupposto chiave: l’intera GPU può essere descritta come una lunga sequenza di stadi, una pipeline grafica lineare in cui ogni fase elabora i dati prima di passarli alla successiva. Il lavoro svolto riproduce in modo accurato l’architettura originale, in cui i triangoli – cioè le primitive geometriche di base della grafica 3D – passano attraverso diverse unità specializzate: una per la configurazione iniziale (setup), una per la rasterizzazione, che converte le forme in pixel e una per l’applicazione delle texture, ovvero delle immagini che definiscono l’aspetto delle superfici.
La complessità emerge osservando il numero di registri coinvolti: oltre 400 registri di configurazione governano il comportamento del chip. Ogni registro rientra in una specifica categoria, ciascuna con un comportamento distinto: alcuni funzionano come code FIFO (First In, First Out), cioè gestiscono i dati in ordine di arrivo; altri operano come latch temporanei, mantenendo un valore stabile fino a quando non viene aggiornato; altri ancora eseguono automaticamente conversioni tra diversi formati numerici, ad esempio tra interi e valori in virgola mobile.
È una struttura che rendeva la 3dfx Voodoo molto più di un acceleratore “semplice”. Ogni modifica allo stato interno può influenzare immediatamente il rendering, senza buffer intermedi che isolino le operazioni.
SpinalHDL e modellazione dell’hardware
L’intera implementazione è realizzata con SpinalHDL, un linguaggio di descrizione hardware (RTL, cioè Register Transfer Level) basato su Scala. A differenza di Verilog o VHDL, permette di progettare circuiti complessi utilizzando un livello di astrazione più elevato, facilitando la scrittura e la gestione del codice, pur mantenendo un controllo preciso sul funzionamento e sui dettagli dell’hardware.
Nel caso della 3dfx Voodoo, SpinalHDL permette di definire ogni registro insieme alle sue proprietà: indirizzo, modalità di accesso e comportamento temporale.
Il risultato è una descrizione compatta e implementabile, che può essere effettivamente caricata su dispositivi FPGA reali. Il progetto utilizza una parte rilevante delle risorse disponibili su piattaforme come DE-10 Nano, arrivando a impiegare circa il 70% della logica programmabile totale.
Prestazioni, frequenze e limiti fisici
Raggiungere una replica funzionale non implica automaticamente ottenere le stesse prestazioni del chip originale. Uno dei vincoli principali è la frequenza di clock. La Voodoo 1 lavorava tipicamente intorno ai 50 MHz: l’implementazione FPGA ha dovuto affrontare problemi di timing closure per avvicinarsi a quel valore.
Le prime versioni del progetto operavano a frequenze molto più basse, intorno ai 12,5 MHz, prima di essere ottimizzate fino a raggiungere valori comparabili all’hardware originale.
Un altro limite riguarda la memoria. Le GPU Voodoo si basavano su un accesso estremamente rapido alla RAM dedicata, mentre gli FPGA moderni utilizzano memorie con latenza più elevata.
Per compensare, il progetto introduce componenti aggiuntivi come cache interne, non presenti nell’hardware originale, per adattarsi alle caratteristiche delle memorie attuali.
Ricostruzione hardware e valore tecnico
La reimplementazione della Voodoo in FPGA rappresenta un caso concreto di reverse engineering applicata a sistemi complessi. Non si limita a preservare una tecnologia storica, ma ne espone i meccanismi interni con un livello di dettaglio altrimenti difficilmente accessibile.
La possibilità di osservare e modificare ogni componente, dal rasterizer alla gestione delle texture, rende il progetto uno strumento di studio per comprendere l’evoluzione delle GPU. Il passaggio da architetture a funzioni fisse a modelli programmabili emerge con chiarezza analizzando il lavoro svolto dall’autore di SpinalVoodoo.
La Voodoo, in questa forma, non è solo un oggetto nostalgico ma una piattaforma concreta per esplorare le basi della grafica 3D. Il materiale pubblicato su GitHub permette di analizzare il progetto nel dettaglio, studiarne l’architettura e il funzionamento, modificarlo in base alle proprie esigenze e utilizzarlo come base per sviluppi futuri o per sperimentazioni su FPGA.