Un computer a relè a 16 bit esegue Pi greco e Dijkstra

Un computer a relè a 16 bit che calcola Pi greco, la radice quadrata di 60000 e i cammini minimi di Dijkstra. Sembra un esercizio di stile, invece è una macchina vera, costruita da Peter con relè auto-mantenuti che lavorano a 24 V. La CPU è a registro accumulatore: tutte le operazioni matematiche e di load/store passano dall’ACCU. Il set di istruzioni conta 19 comandi, abbastanza per far girare algoritmi che di solito si vedono su macchine ben più generose.

Il calcolo di Pi greco a 2 cifre decimali ha richiesto poco più di 8 minuti e 1.377 istruzioni. La radice quadrata intera di 60000 è uscita a 244, cioè 1111 0100 in binario. Sono numeri che dicono due cose: la macchina è lenta, ma il progetto è completo. Infatti non si tratta di un prototipo parziale, ma di un sistema con memoria, periferiche e un display a matrice LED da 32×32 collegato in uscita.

Il program counter, il registro SR e le tre modalità di indirizzamento

Il program counter ha un adder dedicato capace solo di sommare 1. Per questo esiste il registro PC_HR: il PC modificato non può essere scritto direttamente sul proprio valore più 1, quindi serve un appoggio intermedio. Il registro SR memorizza l’indirizzo di ritorno, così le istruzioni CALL e RET gestiscono un solo livello di subroutine. Non c’è nessuno stack realizzato, e con 19 istruzioni non serve.

La CPU supporta 3 modalità di indirizzamento. Con LD X l’ACCU si carica con la parola all’indirizzo che segue l’opcode. Con LD M(X) carica il dato all’indirizzo contenuto dopo l’opcode. Con LD M(M(X)) si arriva all’indirizzamento indiretto. Quindi il programmatore ha già gli strumenti per puntatori e tabelle, non solo per sommare due numeri.

  • CPU a 16 bit con registro accumulatore ACCU
  • 19 istruzioni nel set della CPU
  • 3 modalità di indirizzamento, incluso l’indiretto M(M(X))
  • Registro SR per un livello di subroutine con CALL e RET
  • Clock composto da 4 impulsi diversi
  • Alimentazione dei relè a 24 V
  • Memoria implementata con un Arduino
  • Generatore di clock costruito con un secondo Arduino
  • Display a matrice LED da 32×32
  • Registro di I/O a 16 bit e registro di input a 16 porte

Perché il clock ha 4 impulsi e la memoria sta su Arduino

Tutti i registri realizzati con relè auto-mantenuti devono essere azzerati prima di qualsiasi scrittura. Di conseguenza il clock non è un normale clock digitale, ma è composto da 4 impulsi diversi. Questa è la parte che sorprende chi prova a rifare il progetto: la sequenza di azzeramento e caricamento va progettata insieme alla logica, non dopo.

La memoria non è a relè. La implementa un Arduino, e un secondo Arduino separato costruisce il generatore di clock. Così il progetto resta alla portata di chi ha un banco di lavoro normale: i relè fanno la parte elettromeccanica, i microcontrollori fanno il resto. Inoltre il registro di I/O è a 16 bit e il registro di input è a 16 porte.

Prima di saldare, Peter ha verificato tutto in simulazione. La simulazione del sistema completo gira nel gioco Logic World, usata per progettare il sistema e provare varianti. Poi ci sono le macro di Excel, che eseguono il codice passo-passo e mostrano registri e memoria fino a un breakpoint. Infine il codice VHDL su FPGA emula il design del sistema a relè. Chi vuole seguire lo stesso percorso trova il racconto completo nella pagina del progetto su Hackaday.io di Peter, con le prove fatte e le varianti scartate.

Per chi volesse replicare la parte di visualizzazione, un piccolo modulo OLED da 2,42 pollici con risoluzione 128×64 e interfaccia SPI o I²C può fare da pannello di stato per registri e memoria: costa poco e si collega in pochi fili, comodo per un banco di prova che deve restare economico.

Rifare questo computer a relè significa partire dal clock a 4 impulsi e dal registro accumulatore. Senza quei due pezzi il resto non gira, nemmeno con 19 istruzioni perfette. Il resto è pazienza: 24 V sui relè, diodi di ricircolo, un Arduino per la memoria e uno per il clock.


Fonte: https://hackaday.io/project/189725-homebrew-16-bit-relay-computer

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Menu