Didattica

Didattica di Tutanum

Logica e architettura

Sequenziale e memoria

Nella pagina sui circuiti combinatori abbiamo imparato a progettare reti di porte capaci di sommare, scegliere e confrontare, e ora conviene ripartire da una verità scomoda che suona così, cioè che finora i circuiti hanno risposto solo mentre gli ingressi erano presenti, e che da questa pagina in poi impareranno a ricordare. Finché tieni premuto un interruttore la lampada si accende, appena lo lasci la lampada si spegne, e questo comportamento da fantasma, che vive soltanto nel presente, va benissimo per calcolare una somma istantanea, mentre diventa inaccettabile per una macchina che deve eseguire un programma, perché un programma è una storia fatta di passi, ognuno dei quali si appoggia ai risultati dei passi precedenti, e strappare il filo significherebbe ricominciare ogni volta dal principio. Tanenbaum lo dice con parole misurate, e cioè che la memoria serve a conservare sia le istruzioni da eseguire sia i dati su cui quelle istruzioni lavorano, e noi possiamo aggiungere che senza questa capacità di trattenere il passato ogni calcolatore si ridurrebbe a uno strumento che riparte da zero a ogni istante, incapace persino di contare fino a dieci senza dimenticarsi del sette.

Il trucco che trasforma un circuito da sprovveduto a membro a tutti gli effetti della famiglia si chiama feedback, parola inglese che unisce le idee di ritorno e di risposta, e indica semplicemente il filo che riporta un'uscita indietro, fin dentro un ingresso. Finora questo filo mancava, e ogni porta guardava soltanto il mondo esterno, mentre un circuito con un'uscita riciclata in ingresso scopre di possedere una storia, perché il valore che emette in questo istante dipende da ciò che è successo un attimo fa, e proprio questa dipendenza dal passato è la sostanza stessa della memoria. Il gioco ha un pericolo, da rispettare fin dal primo giorno, dato che un anello d'invertitori con un numero dispari di giri rimbalza da solo tra zero e uno centinaia di milioni di volte al secondo, e questa oscillazione selvaggia scalda i transistor senza costrutto e non trattiene nulla, un po' come un pendolo senza attrito che oscillerebbe all'infinito senza fermarsi mai a segnare un'ora. Per ottenere una memoria serve un anello che sappia starsene fermo in uno dei suoi due stati possibili e attenda il comando dell'esterno, e questa saggia fermata si conquista scegliendo con cura le porte e il modo di incrociarle.

Il primo circuito della storia che riesce a trattenere un bit si chiama latch SR, dove la S ricorda la parola inglese set, che qui significa impostare, e la R ricorda reset, che significa azzerare, ed è costruito con due porte NOR, ognuna con l'uscita collegata a un ingresso dell'altra. Ogni porta ha un ingresso libero, quello che chiameremo S per la porta in alto e R per quella in basso, e il circuito offre due uscite, Q e la sua gemella complementare, che si indica con la Q soprassegnata da una lineetta e che qui chiameremo Q negata. La tabella di verità si racconta in quattro mosse, senza bisogno di righe e di colonne, e cioè che quando S e R valgono entrambi zero il circuito resta nello stato in cui si trova, che sia Q acceso oppure spento, perché ognuna delle due porte riceve il valore dell'altra e lo rilancia identico, come due persone appoggiate a una parete che si sostengono a vicenda. Quando S sale a uno per un istante la sua NOR si vede imporre un uno in ingresso e risponde con uno zero, e questo zero, viaggiando verso la porta in basso, la spinge ad accendere Q a uno, e il nuovo stato, una volta che S è tornato a zero, si mantiene da solo, perché ognuna delle due porte legge l'altra e conferma. Quando a salire è R succede il percorso speculare, e cioè che Q viene riportato a zero e anche questo zero resta scritto dopo che R è tornato a zero, e in definitiva il circuito si ricorda quale dei due comandi è stato toccato per ultimo.

Resta la combinazione scomoda, quella in cui S e R valgono uno insieme, e in quel caso entrambe le porte NOR si vedono un uno in ingresso e spingono le rispettive uscite a zero, il che viola il patto di famiglia per cui Q e Q negata devono sempre valere l'una l'opposto dell'altra. Il guaio arriva quando i due comandi tornano a zero, perché il circuito deve decidere in un lampo verso quale dei due stati stabili correre, e la scelta dipende da dettagli fisici troppo sottili per essere governati, come il ritardo leggermente diverso delle due porte, per cui chi toglie il proprio comando per ultimo ha la meglio e trascina il latch nel proprio stato. Gli ingegneri, pragmatici come sono, hanno risolto il problema alla radice, vietando proprio la combinazione e progettando i circuiti successivi in modo che S e R restino per sempre lontani dall'alzarsi insieme, e questa voglia di sostituire il divieto a un controllo impossibile guida tutta l'evoluzione che stiamo per raccontare.

Il primo miglioramento riguarda il quando, perché nella vita reale vogliamo che la memoria ascolti i comandi soltanto nei momenti che decidiamo noi, e per questo davanti al latch SR si collocano due porte AND, una sul cammino di S e una sul cammino di R, con un ingresso aggiuntivo in comune chiamato abilitazione, che in inglese si dice enable e che nei vecchi schemi risponde anche al nome di strobe. Quando l'abilitazione vale zero le due AND producono zero qualunque cosa facciano S e R, il che equivale a tenere il latch con le orecchie chiuse, e quando sale a uno lascia passare i comandi fino a convincerlo. Con questo accorgimento il circuito smette di essere schiavo del caso e diventa un dispositivo disciplinato, che ascolta soltanto quando gli viene chiesto, e l'ingresso di abilitazione, come vedremo tra poco, assumerà il nome definitivo di clock, la parola inglese per orologio che nella giovane elettronica italiana è rimasta tale e quale.

Per estirpare del tutto lo stato vietato basta un'osservazione furba, e cioè che S e R possono alzarsi insieme soltanto se li comandi in modo indipendente, mentre se li leghi l'uno all'altro diventano nemici giurati, e nasce così il latch D, che ha un ingresso solo, chiamato D come data, cioè dato, e dentro di sé una porta NOT che fabbrica il complemento di D e lo consegna al comando R. Quando D vale uno e l'abilitazione è alta, S riceve uno e R riceve zero, per cui il latch si carica di uno, e quando D vale zero accade il percorso speculare, con R che riceve uno e S zero, e il latch si svuota, e siccome R vale sempre l'opposto di S la combinazione proibita diventa semplicemente irraggiungibile, come una stanza alla quale è stata murata la porta. Questo circuito, che campiona il valore presente sul suo ingresso soltanto mentre l'abilitazione resta alta e poi lo custodisce, è una memoria a un bit vera e propria, e Tanenbaum osserva che una realizzazione diretta chiede undici transistor, mentre versioni più raffinate, di comprensione meno immediata, scendono a sei, e questi due numeri ti danno la misura di quanto silicio costi la facoltà di ricordare.

Il latch D resta comunque un animale a commutazione di livello, espressione che significa che continua a seguire l'ingresso per tutto il tempo in cui l'abilitazione rimane alta, e se durante quel tempo D cambia più volte anche la memoria cambia più volte, il che nelle macchine grandi genera confusione, perché centinaia di registi vicini dovrebbero muoversi a comando singolo e invece rischiano di procedere sfalsati. La soluzione si chiama flip-flop, un circuito gemello che si lascia convincere dal valore di D in un istante solo, nell'attimo esatto in cui l'abilitazione compie la transizione da zero a uno, detta fronte di salita, oppure da uno a zero, detta fronte di discesa, e per questo si dice a commutazione sul fronte. L'analogia che conviene tenere in tasca è quella del flash della fotocamera, perché il latch somiglia a un otturatore tenuto aperto per tutta la durata del livello alto, durante il quale ogni movimento del soggetto entra nella foto, mentre il flip-flop somiglia allo stesso flash che spara la luce in un millesimo di secondo e congela la scena in un istante preciso, sicché il livello alto del clock diventa il tempo di posa e il fronte diventa lo scatto. Nei libri la differenza si riconosce dai simboli, dato che vicino all'ingresso di clock del flip-flop compare un piccolo triangolo che ricorda la punta della freccia dello scatto.

Storicamente, prima che i progettisti imparassero a fabbricare porte sensibili al fronte con un piccolo ritardo interno usato come trappola temporale, si sono ingegnati in un'altra maniera, collegando due latch D in cascata e dando ai due abilitazioni lo stesso clock con uno dei due capovolto, in modo che nella prima metà del ciclo il primo ascolta mentre il secondo è chiuso, e nella seconda metà il primo si chiude e il secondo apre copiando in uscita ciò che il primo ha raccolto. Questa architettura prende il nome di master-slave, cioè padrone e schiavo, dove il primo latch comanda e il secondo obbedisce, e il suo merito era di spezzare il percorso diretto tra ingresso e uscita, impedendo che un valore appena arrivato attraversasse tutto il circuito nel mezzo di un ciclo e provocasse le cosiddette corse, situazioni in cui segnali che dovrebbero attendere il turno si precipitano invece avanti e scombinano i conti. Oggi i flip-flop veri sono costruiti con artifici più raffinati che sfruttano i ritardi delle porte, e il nome padrone e schiavo è scomparso dai cataloghi, mentre l'idea di spezzare il cammino in due fasi rimane il modo naturale di ragionare sul funzionamento di ogni circuito sequenziale ben educato.

Una volta in mano il flip-flop il passo verso i numeri interi è puro lavoro di pazienza, perché allineando trentadue flip-flop D uno accanto all'altro e dando a tutti lo stesso clock si ottiene un registro, una cassettiera che custodisce una parola intera di trentadue bit e la aggiorna tutta in una volta sola, e nei cataloghi dei componenti si trovano già pronti chip che rinchidono otto flip-flop con il clock in comune, i quali si prestano a essere accoppiati due a due per comporre registri da sedici bit, esattamente come Tanenbaum descrive. Se poi invece di alimentare ogni ingresso D da un piedino esterno colleghi l'uscita Q di ogni flip-flop all'ingresso D del vicino di destra, la fila smette di essere una cassettiera e diventa un registro a scorrimento, detto shift register in inglese, nel quale ogni colpo di clock sposta ogni bit di una posizione verso destra, proprio come i passeggeri di un treno a ogni stazione avanzano di un vagone. Inserendo un uno da un capo si vede la lucetta accendersi sulla prima uscita, poi spegnersi lì e riaccendersi sulla seconda, poi sulla terza, e così via fino all'altra estremità, dove il bit, completato il viaggio, esce e lascia il posto a uno zero, e questo corteo ordinato di lucette che si spostano torna utile quando, nei moduli futuri, dovremo far viaggiare i dati da un registro all'altro e moltiplicare i numeri per vie traverse.

Il contatore binario è il terzo figlio della famiglia, e conta da zero in su servendosi dello stesso riporto delle addizioni. Il modo più comodo per immaginarlo è una fila di flip-flop nei quali ognuno riceve in ingresso il proprio stato rovesciato, così a ogni colpo di clock cambia sempre, e il clock del vicino di sinistra arriva dall'uscita del primo, per cui il secondo scatta soltanto quando il primo passa da uno a zero, e via di questo passo. Per vederlo concretamente proviamo il contatore a tre bit, partendo da zero zero zero. Al primo colpo il bit di destra, quello meno significativo, scambia e diventa uno, mentre i due fratelli dormono, ottenendo zero zero uno. Al secondo colpo il bit di destra torna a zero e il suo passaggio da uno a zero sveglia il bit centrale, che sale a uno, e la parola diventa zero uno zero. Al terzo colpo il bit di destra risale a uno e la parola è zero uno uno. Al quarto colpo il bit di destra ricade a zero, trascina con sé il centrale, il quale cadendo sveglia il bit più significativo di sinistra, e la parola diventa uno zero zero. Proseguendo si ottengono uno zero uno, uno uno zero, uno uno uno e poi, all'ottavo colpo, il crollo a catena di tutti e tre riporta tutto a zero zero zero, pronto per ricominciare il giro. La scoperta che ripaga lo sforzo è un ritmo nascosto, perché il bit meno significativo scambia stato a ogni colpo di clock, quello centrale scambia a ogni due colpi, e il più significativo scambia a ogni quattro, ossia una volta ogni otto, come le lancette di un orologio, delle quali i secondi avanzano a ogni battito, i minuti a ogni sessanta e le ore a ogni tremilaseicento.

Questo ritmo a scaletta rende il contatore anche un divisore di frequenza, perché se imbocchi nel primo flip-flop un clock veloce e leggi l'uscita dell'ultimo stadio trovi un'onda che scambia una volta sola ogni otto colpi, il che significa che il ritmo è stato diviso per otto, e ogni stadio intermedio divide per due. Ecco il segreto degli orologi al quarzo di tutti i giorni, dato che al loro interno vibra un quarzo tagliato per oscillare trentaduemilasettecentosessantotto volte al secondo, un numero scelto apposta perché è una potenza di due, la quindicesima, sicché quindici stadi di contatore che dividono per due in cascata consegnano alla fine un impulso esatto al secondo, e quel battito lento comanda il motorino che muove le lancette. Il calcolatore usa lo stesso trucco in grande, prendendo un quarzo veloce e ricavando da esso, con catene di divisori sempre più lunghe, i ritmi lenti di cui hanno bisogno i dispositivi pigri, e la prossima volta che guardi un orologio da polso puoi sorridere pensando che dentro ci sono quindici contatori in fila che spremono il tempo.

Facciamo un passo indietro e guardiamo il paesaggio intero, perché latch, registri e contatori sono casi particolari di un'idea più grande, che i progettisti chiamano macchina a stati finiti, espressione che suona solenne e indica invece qualcosa di familiare. Un semaforo stradale ne è l'esempio più comodo, dato che si trova sempre in uno stato tra rosso, verde e giallo, possiede una memoria che gli ricorda in quale stato si trova in questo momento, e a ogni colpo del suo orologio interno compie una transizione, passando dal verde al giallo dopo un certo tempo, dal giallo al rosso dopo pochi secondi e dal rosso al verde dopo molti, e l'elenco di questi passi possibili, detto tabella delle transizioni, descrive il semaforo meglio di qualunque altra frase. Un distributore automatico si racconta allo stesso modo, con stati che ricordano quanti soldi gli hai consegnato e transizioni che aggiungono il valore di ogni moneta inserita, fino allo stato finale in cui la somma basta e la lattina cade. La lezione, che vale un tesoro, è che ogni macchina dotata di memoria finita si può descrivere con un elenco di stati e con le regole che dicono come e quando passare dall'uno all'altro, e progettare un circuito sequenziale significa prima disegnare questa storia di stati e transizioni e poi tradurla in flip-flop e porte con un lavoro quasi meccanico.

Per custodire migliaia di miliardi di bit serve un'organizzazione più spigolosa della semplice fila, e questa organizzazione prende la forma di una matrice, con le celle disposte in righe e in colonne come le caselle di una scacchiera gigante, e con un decoder degli indirizzi, cioè quel decodificatore che accende una sola linea tra tante, il quale spezza il numero della parola desiderata in due coordinate, una per la riga e una per la colonna, così che tutte le celle della riga scelta si affaccino sulla linea corrispondente e il punto di incrocio tra riga e colonna individui la parola voluta. Il chip che racchiude questa città di celle offre verso l'esterno dei piedini raggruppabili in tre famiglie, e cioè i piedini di indirizzo, sui quali arriva il numero della parola desiderata, i piedini di dati, lungo i quali viaggiano i bit letti o scritti, e i piedini di controllo, che dicono al chip se deve prestare attenzione, se deve leggere oppure scrivere e quando può presentare il risultato sulle linee. Nei chip grandi la strage dei piedini si ferma grazie a un espediente elegante, dato che il numero di riga e il numero di colonna arrivano in tempi diversi sugli stessi piedini, prima l'uno e poi l'altro, segnalati da due impulsi di controllo chiamati strobo della riga e strobo della colonna, e questo risparmio di metallo fa stare nella custodia milioni di celle in più, come osserva Tanenbaum mostrando una memoria di quattro parole da tre bit comoda in quattordici piedini contro i venti necessari a otto flip-flop scollegati.

I libri distinguono due religioni nella costruzione delle celle, e la prima è la RAM statica, detta SRAM, dove RAM sta per random access memory, memoria ad accesso casuale, nome fuorviante nato per abitudine e ormai troppo radicato per essere cambiato. Nella statica ogni bit vive dentro un piccolo circuito con sei transistor che si regge da solo, come le due porte NOR del latch, e mantiene il valore indefinitamente finché l'alimentazione è presente, con tempi di accesso di pochi nanosecondi, al prezzo di una stanza spaziosa per ogni bit. La seconda religione è la RAM dinamica, detta DRAM, dove la cella è un'osteria minima composta da un transistor e da un condensatore minuscolo, che viene caricato per ricordare un uno e scaricato per ricordare uno zero, e questa essenzialità regala una densità enorme, dato che in un dato spazio stanno circa sei volte più bit di una statica, con un conto da pagare, perché la carica elettrica scivola via lentamente e dopo qualche millisecondo il ricordo svanirebbe. Per questo la RAM dinamica esige un refresh, cioè un ripasso periodico nel quale un circuito ausiliario legge ogni cella e la riscrive identica prima che il condensatore si sia svuotato, un po' come ripetere a mente una lista della spesa ogni tanto per non dimenticarla. I numeri decidono il destino dei due tipi, perché la statica è più veloce, più ingombrante e più cara, e per questo vive nelle cache vicino al processore, mentre la dinamica è lenta, capiente ed economica, con un prezzo per bit che resta una piccola frazione di quello della sorella, e per questo costruisce la memoria centrale, e Tanenbaum ricorda che la capacità dei chip raddoppia grossomodo ogni diciotto mesi, una regolarità celebre con il nome di legge di Moore.

Tutte le memorie incontrate finora perdono il ricordo quando manca la corrente, e per tanti impieghi questa fragilità è intollerabile, per cui è nata una famiglia di chip detta ROM, sigla di read-only memory, cioè memoria di sola lettura, nella quale i bit sono scolpiti una volta per sempre. La ROM più antica viene mascherata direttamente in fabbrica, con una maschera fotografica che decide durante la produzione quali celle valgano uno, e conviene soltanto quando se ne ordinano migliaia di esemplari identici, altrimenti si usavano le PROM, programmabili una volta sola dal cliente, nelle quali il cliente bruciava uno per uno i fusibili corrispondenti agli uno voluti, con un dispositivo chiamato programmatore e una tensione più alta del solito. Il passo seguente si chiama EPROM, cancellabile, e si riconosce a occhio perché nella parte superiore della custodia si vede una finestrella di quarzo trasparente, attraverso la quale un bagno di luce ultravioletta per circa quindici minuti azzera tutti i bit riportandoli al valore uno, rendendo il chip riscrivibile e amato nei laboratori di sviluppo. Meglio ancora vanno le EEPROM, cancellabili elettricamente con impulsi applicati direttamente, senza finestrella né lampada, persino mentre il chip resta saldato sul circuito, e dalla EEPROM deriva la memoria flash, cancellabile però a blocchi interi anziché a byte singoli, capace di grandi capacità sulle schede delle macchine fotografiche, con accessi intorno ai cinquanta nanosecondi e penalizzata da un limite di circa centomila cancellazioni dopo il quale le celle si consumano. Nei chip ROM di ogni epoca vive il firmware, parola che unisce il caldo del hardware alla leggerezza del software e indica i programmi che fanno funzionare il lettore di schede, la lavatrice o la caldaia, programmi scritti nella pietra del silicio che il computer esegue ogni volta che si sveglia.

Tutti questi abitanti della scheda ballano al ritmo di un unico direttore, il clock del sistema, che è un circuito in grado di emettere un'onda quadra con impulsi di larghezza definita a intervalli regolarissimi, e la distanza tra la fine di un impulso e l'inizio del successivo si chiama ciclo di clock. Il metronomo più fidato che l'ingegneria conosca è l'oscillatore a quarzo, costruito intorno a una lamina di quarzo tagliata con precisione, e il quarzo possiede una proprietà chiamata piezoelettricità, per cui se lo deformi genera una piccola tensione elettrica e, viceversa, se gli applichi una tensione si deforma, e sfruttando questo abbraccio tra meccanica ed elettricità un circuito fa vibrare la lamina alla sua frequenza naturale, che dipende dallo spessore e dal taglio e resta stabile al punto che le variazioni di temperatura la scalfiscono appena, ed è proprio questa stabilità a permettere al quarzo di battere il tempo con una precisione che le ruote dentate di un orologio meccanico non sognano nemmeno. Tanenbaum cita frequenze di clock comprese tra uno e cinquecento megahertz, cicli cioè da mille fino a due nanosecondi, e chi ha bisogno di più riferimenti dentro un ciclo intercetta il clock con circuiti dai ritardi diversi per ottenere segnali sfasati che offrono altri fronti utili. La precisione del quarzo garantisce che tutti i flip-flop della macchina, dalle cache ai contatori, ricevano il medesimo battito, sicché migliaia di milioni di transistor muovano i loro passi all'unisono come una compagnia di ballo.

Resta da capire come i chip si colleghino tra loro senza impazzire, e la risposta è il bus, un fascio di linee condivise che porta indirizzi, dati e segnali di controllo, dove però una regola d'oro vieta a due chip di parlare insieme, perché se uno spinge un uno e l'altro spinge uno zero sulla stessa linea la tensione si scontra e nasce un conflitto elettrico. Per rispettare la regola esistono i dispositivi a tre stati, nei quali l'uscita può valere zero, uno oppure niente, e quest'ultima condizione, detta stato di alta impedanza, equivale a staccare il filo con una pinza tagliafili, con la differenza pratica che la connessione si ripristina in pochi nanosecondi rialzando un segnale di controllo. Il componente che applica questa magia si chiama transceiver, contrazione inglese di trasmettitore e ricevitore, e sta tra il chip e il bus collegando l'uno all'altro soltanto nei momenti consentiti. Per decidere chi deve rispondere a ogni richiesta entra in scena la decodifica degli indirizzi, e l'analogia che aiuta è quella di una città in cui il bus è la strada principale e ogni chip è un palazzo con il suo numero civico, così quando il processore scrive un indirizzo sulle linee dedicate, il circuito decodificatore legge il numero, riconosce il palazzo e suona soltanto il campanello giusto, mentre tutti gli altri chip restano in alta impedanza, con le finestre al buio, e soltanto il chiamato apre la porta e pone i propri dati sul bus.

A questo punto puoi raccogliere i pezzi sparsi sul tavolo e vederli diventare una macchina, perché collegando allo stesso bus un processore, dei chip di memoria e qualche dispositivo di ingresso e di uscita, ognuno dotato del proprio transceiver e della propria decodifica, si ottiene un calcolatore elementare e già completo, nel quale il processore pone un indirizzo sulle linee dedicate, alza i segnali di controllo che ordinano la lettura, il chip di memoria riconosciuto apre le sue uscite a tre stati e consegna la parola richiesta, e l'intera danza si ripete per scrivere e per dialogare con il mondo esterno. Le istruzioni di un programma sono numeri custoditi nelle celle della memoria, i dati sono altri numeri nelle celle accanto, e il processore li preleva, li elabora e li riscrive a ritmo di clock, e questa immagine, già quasi intera, merita una pagina tutta per sé perché possa essere esplorata per bene, con i suoi registri interni, il suo contatore dei passi e il suo ciclo di lavoro scandito dal battito del quarzo.

La teoria del sequenziale, per quanto raccontata con calma, resta carta finché la provi con le mani, quindi adesso lascia il libro sul tavolo e vieni a giocare con cinque esperimenti, alcuni dentro il simulatore del browser, due con carta e penna e l'ultimo con uno strumento di misura vero, ordinati dal più semplice al più articolato.

Il primo esperimento si svolge nel simulatore di porte logiche del browser, per esempio quello libero di CircuitVerse, dove puoi costruire un latch SR con due porte NOR incrociate esattamente come raccontato all'inizio della pagina. Predispone due interruttori per S e R entrambi sullo zero, osserva che l'uscita Q si ferma in uno dei due stati stabili a caso, poi porta S a uno per un istante e ritorna a zero, e guarda Q accendersi e restare acceso da solo, come una lampadina con la memoria. Ripeti poi con R e osserva lo spegnimento che permane, e infine prova la combinazione sfortunata con entrambi a uno, ammirando come le due uscite si azzerino insieme e il circuito diventi indeciso sul da farsi quando li riporti a zero, il che ti darà una comprensione con le mani di quanto sia saggio vietare proprio quella combinazione.

Il secondo esperimento si fa prima su carta, con una tabellina di due righe, e cioè una riga per il clock nella quale disegni quattro fronti di salita numerati e una riga per il dato D nella quale scrivi una sequenza a piacere, per esempio uno, zero, uno e uno. Il flip-flop campiona D soltanto negli istanti degli scatti, quindi scrivi sotto, nella riga di Q, i valori campionati uno alla volta, e nota che gli eventuali cambi di D avvenuti tra uno scatto e l'altro lasciano Q indifferente, perché il flash scatta solo sul fronte. Finita la tabella apri il simulatore, costruisci un flip-flop D oppure prendi quello pronto tra i componenti, collega un interruttore a D e un pulsante di clock, e rigioca la tua sequenza confrontando riga per riga, perché trovare carta e simulatore d'accordo è la prova che il modello che hai in testa è quello giusto.

Il terzo esperimento torna nel simulatore per costruire un registro a scorrimento a quattro celle, e cioè quattro flip-flop D in fila, con l'uscita Q di ciascuno collegata all'ingresso D del vicino e un unico clock che li serva tutti. Collega quattro lampadine alle uscite e tieni l'ingresso del primo flip-flop a zero, poi invia un impulso di uno nella prima cella e batti il clock quattro volte, osservando la lucetta accendersi sulla prima uscita, spostarsi sulla seconda, sulla terza e sulla quarta, per poi sparire lasciando tutto spento, esattamente come un treno con un solo passeggero che attraversa la stazione. Se hai voglia di proseguire puoi rimettere in circolo il bit che esce collegando l'ultima uscita al primo ingresso, e scoprirai che l'uno gira all'infinito, e questo girotondo è un anello registratore vero, parente dei registri di scorrimento che dentro i processori moltiplicano i numeri.

Il quarto esperimento si svolge di nuovo con carta e penna, e ti chiede di essere tu il contatore a tre bit per otto colpi di clock, partendo da zero zero zero. Disegna una tabellina con tre colonne per i bit e una riga per ogni colpo, poi riempila seguendo la regola che il bit di destra scambia sempre e che ogni bit scambia quando il suo vicino di destra passa da uno a zero, fermandoti dopo ogni colpo a controllare che il numero scritto in binario corrisponda a quello decimale atteso, cioè zero, uno, due, tre, quattro, cinque, sei e sette. Al colpo numero otto osserva la cascata che riporta tutto a zero zero zero, segnando con una freccia il percorso del riporto che dal bit meno significativo si propaga fino al più significativo, e prova poi a rifare il giro partendo da uno uno uno per vedere il crollo immediato di tutta la torre.

Il quinto e ultimo esperimento richiede uno strumento, e cioè un multimetro digitale dotato di scala di frequenza oppure un semplice telefono con un'applicazione che legga le frequenze audio, e ti propone di ascoltare il tempo. Molti orologi da polso e sveglie al quarzo battono a trentaduemilasettecentosessantotto hertz, troppo acuti per l'orecchio, e se sei fortunato puoi leggere il valore sul manuale o sulla targhetta, mentre un'alternativa più pratica è costruire tu stesso un oscillatore con una resistenza e un condensatore di valore noto secondo la formula che lega la frequenza al prodotto tra i due, alimentando il tutto con una comune batteria a nove volt e misurando la frequenza sul punto di prova. In entrambi i casi apprezza la regolarità del ritmo, che resta identico di colpo in colpo anche dopo minuti, e ricorda che durante tutti questi esperimenti con tensioni reali resta ferma una regola di sicurezza assoluta, per cui usi soltanto batterie o alimentatori a bassa tensione e tieni lontane le dita dalla presa di casa, perché la corrente della rete è un giocatore pericoloso con il quale un principiante non deve mai allearsi.

Questa pagina attinge soprattutto al terzo capitolo del libro Architettura dei calcolatori di Andrew S. Tanenbaum, dove i latch, i flip-flop, la memoria, il clock e i bus ricevono trattazione rigorosa con schemi e numeri veri, e ora che sai come un circuito impari a ricordare, come migliaia di celle si organizzino in matrici e come un quarzo tenga il tempo di tutta la compagnia, sei pronto a salire di un piano e vedere la macchina completa, con il suo processore che preleva istruzioni e il suo ciclo di lavoro scandito dal clock, motivo per cui la prossima pagina è dedicata all'architettura di Neumann e puoi raggiungerla da qui quando ti senti pronto.