Un setaccio numerico elettronico con trenta ATtiny412

Questo setaccio numerico elettronico ricrea con microcontroller moderni un progetto del 1982. Il principio è semplice: scartare i candidati impossibili per un’equazione quadratica usando aritmetica modulo primi piccoli. Trenta ATtiny412, uno per modulo, filtrano i numeri e un Raspberry Pi Pico li clocca e verifica i sopravvissuti. L’autore è KB Sriram.

L’idea di filtrare i numeri con l’hardware è molto più vecchia del software. Il primo setaccio numerico, costruito nel 1928 dal matematico D. H. Lehmer, usava 19 catene di bicicletta montate su un albero comune. Il setaccio a ingranaggi del 1932 è superato dalla versione moderna di circa 100 volte.

Come funziona il setaccio con trenta ATtiny412

Ogni ATtiny412 gestisce un solo modulo e conserva in memoria un pattern ripetuto di accetta-o-rifiuta. Tutti i chip condividono una linea open-drain: qualsiasi chip che rifiuta la tira a basso, quindi la linea resta alta solo quando nessun chip ha rifiutato. Il Raspberry Pi Pico genera il clock condiviso e fa avanzare simultaneamente tutti i trenta microcontroller nei loro pattern.

Modulo con microcontroller ATtiny412 su scheda.
Un modulo basato su ATtiny412.

Solo quando tutti i microcontroller restano silenziosi il Pico esegue il test matematico, molto più lento. Il sistema passa quasi tutto il tempo a rifiutare numeri rapidamente invece di calcolarli. A piena velocità l’hardware moderno valuta circa 500.000 candidati al secondo.

  • Ogni ATtiny412 gestisce un solo modulo primo.
  • I chip condividono una linea open-drain per il rifiuto.
  • Il Raspberry Pi Pico genera il clock condiviso.
  • Il test matematico lento scatta solo sui sopravvissuti.
  • I moduli si caricano via I2C.

Le build, il firmware e i numeri misurati

Il firmware ATtiny412 è in C compilato con avr-gcc, nella cartella avr/ di ogni build. Il codice host per il Pico sta nella cartella rpi/. La build 01 usa un runtime CircuitPython e risolve l’equazione y^2 – 2x^2 = 4001, con tre moduli hardcoded, avanzati da un pulsante e un buzzer sulla linea condivisa.

La build 02 passa a MicroPython, carica i moduli via I2C e li clocca a 50 kHz dal PIO del Pico. Con questa build il setaccio ha fattorizzato il numero 5.283.065.753.709.209. La build 04 qualifica i moduli prima della spedizione, con immagine diagnostica e controllo dei pin di header dal Pico.

La build 05 monta trenta schede su backplane in stripboard, fa un self-check via I2C prima di un run e misura il timing REQ-to-VOTE con tutte e trenta montate. La build 06 resta su backplane in stripboard e aggiunge i benchmark storici: catene di bicicletta 1928, macchina a ingranaggi 1932, DLS-127 del 1970, fino a 500 kHz. I trenta ATtiny412 sono cloccati fino a 500 kHz.

Per chi vuole rifare il progetto, il repository di KB Sriram raccoglie il codice delle build, con il firmware avr-gcc e il codice host per il Pico. La scheda di sviluppo mini basata su RP2040 copre il ruolo del Pico, con microcontrollore RP2040 dual-core, USB-C e GPIO multipli. Per il montaggio su stripboard servono i trenta ATtiny412 e la backplane.

Nel 2001 Daniel J. Bernstein descrisse un algoritmo che genera direttamente i candidati sopravvissuti. Il setaccio originale del 1982 usava banchi di ROM e contatori per rifiutare i candidati. La stessa architettura, filtro veloce più verifica lenta, è sopravvissuta per decenni.


Fonte: https://github.com/kbsriram/a-tiny-sieve

Lascia un commento

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

Menu