Avete mai pensato a un FPGA all’interno di un Commodore 64? A quanto pare, Jürgen Müller non solo ci ha pensato, ma lo ha anche realizzato! I microprocessori come il 6502 a 8 bit di MOS Technologies hanno raggiunto l’apice della popolarità negli anni ’80 e ’90. Una variante moderna del design originale è ancora disponibile e funziona fino a 14 MHz. Il 65F02 è un sostituto del processore compatibile con 6502 pin e funziona a 100 MHz.
Il PCB compatibile con DIP a 40 pin del 65F02 si inserisce direttamente in una basetta progettata per un IC a 40 pin. Il lato superiore ha l’FPGA Spartan-6, la memoria flash, gli switch di configurazione e un LED. Il lato inferiore della scheda contiene condensatori di disaccoppiamento, regolatori e traslatori di livello logico.
Il numero “65F02” si adatta perfettamente al lignaggio del 6502. Quando MOS Technology ha sviluppato per la prima volta il 6502, ha concesso in licenza il progetto ad altri produttori di chip. Alcuni di questi avevano varianti nel processo produttivo. Successivamente, è emerso il 65c02, che era una versione CMOS. Quel particolare stile è ancora disponibile oggi dal Western Design Center (WDC), gli ultimi resti dell’azienda MOS originale. Quel chip, tuttavia, funziona “solo” fino a 14 MHz. Un po’ lento rispetto alle velocità di clock di oggi, ma velocissimo rispetto all’originale da 2 MHz.
Internamente il 65F02 funziona a 100 MHz. Tuttavia, l’accesso al bus esterno funziona più lentamente per ospitare bus di sistema che non sono pronti per 40 anni di progressi nell’elaborazione. Inoltre, 65F02 esegue il mirroring della memoria video esterna sulla RAM veloce interna per velocizzare le operazioni video.
Progettare una RAM per sistemi più vecchi ha rappresentato una sfida. Il 6502 originale aveva un bus di indirizzi a 16 bit, il che significa che poteva accedere solo a 64 kilobyte di spazio di memoria. Di conseguenza, la maggior parte dei computer ha implementato il cambio di banco per indirizzare più memoria. Tuttavia, ogni produttore di computer ha adottato approcci diversi che hanno portato a scelte realizzative molto differenti tra loro.
Il Commodore 64 utilizzava un 6502 modificato con pin I/O dedicati alla selezione dei banchi. L’Apple II, d’altra parte, utilizzava “Switch sofware” che potevano riconfigurare la mappa della memoria interamente dal software. Quindi, per adattarsi al cambio di banco, 65F02 deve avere implementazioni specifiche per la macchina quando si desidera più di 64K di RAM. (Anche con i progressi di oggi, ci sono ancora dei compromessi quando si lavora con hardware a 8 bit).
Cos’è un FPGA?
Tutto molto bello fin qui, ma non tutti sanno cosa sia un FPGA e quali siano le potenzialità che offre.
FPGA è l’acronimo di Field Programmable Gate Array. È un dispositivo logico programmabile, ovvero un dispositivo hardware elettronico formato da un circuito integrato le cui funzionalità logiche di elaborazione sono programmabili e modificabili tramite opportuni linguaggi di descrizione hardware.
Esistono diversi tipi di FPGA, che comprendono sia dispositivi programmabili una sola volta, sia dispositivi riprogrammabili più volte. I primi, detti OTP (One Time Programmable), sono costituiti da componenti il cui stato di funzionamento cambia in modo permanente dopo le modifiche, permettendo di mantenere la configurazione allo spegnimento del dispositivo (tipicamente modifiche fatte meccanciamente sul circuito, come la rottura di ponticelli). Alla seconda categoria appartengono i dispositivi basati su tecnologia SRAM (Static Random Access Memory), i quali devono essere riprogrammati ad ogni accensione, avendo una memoria di configurazione volatile.
Volendo fare un confronto, i circuiti FPGA sono elementi che presentano caratteristiche intermedie rispetto ai dispositivi ASIC (Application Specific Integrated Circuit) e rispetto a quelli con architettura PAL (Programmable Array Logic). L’uso di componenti FPGA comporta alcuni vantaggi rispetto agli ASIC: si tratta infatti di dispositivi standard che non vengono programmati in fabbrica (dispositivi vergini), pertanto la casa madre può produrre su larga scala a basso prezzo. La loro genericità li rende adatti a un gran numero di applicazioni. Essendo programmati direttamente dall’utente finale, i tempi di progettazione e verifica mediante simulazioni e prova sul campo sono molto ridotti. Il grande vantaggio rispetto agli ASIC è che permettono di apportare eventuali modifiche o correggere errori semplicemente riprogrammando il dispositivo.
Un FPGA, dal canto suo, viene utilizzato per implementare un sistema digitale. E qui, alcuni, sono subito pronti a tirare in ballo i microcontrollori. Vero è che un semplice microcontrollore può essere utilizzato per il medesimo scopo, soprattutto perché i microcontrollori sono generalmente economici e facili da inserire in un PCB. Un FPGA, chiaramente, è un dispositivo funzionale, ma non adatto a tutti gli impieghi: richiede generalmente più potenza e ha un layout topologicamente più complesso per via della circuiteria esterna. Ma perchè allora conviene utilizzarlo? La risposta è duplice: flessibilità e velocità.
La possibilità di avere blocchi logici configurabili lascia aperte moltissime strade in fatto di hardware. Non si esauriscono mai i timer o gli UART finché ci sono elementi logici disponibili per crearne altri. Essere in grado di riconfigurare il progetto in un secondo momento, può estenderne il ciclo di vita, cosa tutt’altro che da sottovalutare di questi tempi dominati dall’eccessiva obsolescenza programmata. Secondo poi, un microcontrollore esegue le istruzioni una alla volta, in modo ciclico e sequenziale. Non è prevista alcuna parallelizzazione delle informazioni (Pipeline). Una struttura FPGA, invece, consente la parallelizzazione, il che è utile per operazioni come l’elaborazione grafica, decisamente pesante da implementare su un processore sequenziale. Gli FPGA hanno anche più opzioni I/O ad alta velocità rispetto a un tipico microcontroller come LVDS e transceiver con capacità di oltre 10 Gbps per i protocolli come l’HDMI.
Müller ha reso disponibili tutti i file di progettazione di 65F02. Per lo schema e il PCB, ci sono i file Eagle. Se volete modificare il codice FPGA avrete bisogno di Xilinx WebISE 14.7. E per programmare l’FPGA, Müller ha utilizzato lo stesso hardware di programmazione utilizzato nel progetto TinyFPGA. Se volete, potete dare un’occhiata sito di Müller per tutti i dettagli.