Strutturalmente la CAM-8 e' costituita da una griglia tridimensionale
di moduli connessi ad anello in ogni direzione (toro tridimensionale). Ogni
modulo contiene le risorse necessarie alla gestione di una parte
(detta SETTORE) dello spazio in cui si svolge la simulazione.
In altre parole un modulo e' un sistema di calcolo completo e indipendente
che puo' lavorare da solo opure in collaborazione con altri moduli.
La struttura base e' detta BOX ed e' costituita da 8 moduli. In
pratica si tratta di una motherboard con otto slot per altrettante schede
modulo, la motherboard gestisce il supporto meccanico ed elettrico, le
comunicazioni tra moduli e tra moduli e computer di controllo (Host
) tramite un bus dedicato (indicato con TBUS); dispone infine
di un FrameGrabber con relativo ingresso per
telecamera, e di una scheda VGA per controlare direttamente un monitor
grafico.
Disponendo di piu' di un box e' possibile collegarli tra loro per realizzare
una macchina piu' grande. La versione attualmente disponibile nel laboratorio
di dipartimento e' costituita da un solo box ad otto moduli.
La CAM-8 realizza le proprie elaborazioni tramite il modello degli Automi
Cellulari. Di conseguenza considera lo spazio di simulazione suddiviso
in una griglia regolare di celle. Nella attuale versione ogni cella e'
costituita da 16 bit di memoria, ordinati con indici da 0 a 15.
Raggruppando idealmente tutti i bit (di ogni cella) che hanno lo stesso
indice si ottiene un Layer. Nel caso intuitivo di uno spazio
bidimensionale si puo' identificare un layer con un piano avente un solo
bit per ogni cella. Nel complesso vi saranno quindi 16 piani (layer).
I 16 layer sono indipendenti tra loro e possono essere traslati l'uno
rispetto all'altro tramite un comando detto KICK.
Mediante una operazione di kick una cella alle coordinate (x,y) ha la
possibilita' di osservare il contenuto di uno o piu' layer di un'altra cella
posta alle coordinate (n,m).
Nella documentazione relativa a questa fondamentale operazione si fa riferimento
al modello dei piani in scorrimento (rispetto alla griglia delle celle fissa).
In realta' questa rappresentazione puo' creare della confusione, nel corso
di una operazione di kick non vi e' infatti nulla che si sposti fisicamente
ma semplicemente viene svolto un opportuno indirizzamento nella memoria che
contiene le celle (modificando degli opportuni registri indice).
Questo significa che la velocita' con la quale la cella (x,y) puo' accedere al
contenuto della cella (x+1,y), per esempio, e' identico al tempo
occorrente per osservare la cella (x+1000,y).
Cio' che e' importante ricordare e' che per ogni cella si hanno a disposizione
unicamente 16 bit. Di conseguenza se in un certo momento si richiede di
poter accedere ad uno o piu' bit di un'altra cella e' necessario
dedicare un uguale numero di layer (tra i 16 dati) per "trasportare"
l'informazione desiderata.
Per esempio:
Supponiamo di avere una immagine a 4 bit per ogni pixel.
Supponiamo poi che in un certo passo della elaborazione si debba confrontare
ogni pixel dell'immagine con il pixel ad esso adiacente verso destra e
verso sinistra.
Sia l'immagine conservata nei layer 8,9,10 e 11; le operazioni per
realizzare il confronto sono le seguenti:

Il terzo passaggio e' un elemento chiave per comprendere l'architettura
CAM. Si ricordi che un Automa Cellulare e' costituito da una uniforme
distribuzione nello spazio di un unico Automa a Stati Finiti, e che un
qualunque A.S.F. e' caratterizzato da uno stato di partenza (o attuale),
da una serie di regole di transizione, da una serie di stati intermedi,
ed eventualmente da uno o piu' stati di arrivo.
Nella CAM lo stato di ogni cella e' determinato dal valore
dei suoi 16 bit.
In virtu' del rigido determinismo delle regole dell'A.S.F. la CAM prima
di iniziare l'elaborazione crea una tabella di look-up (detta appunto
Look-Up Table, e indicata con la sigla LUT) nella quale
si fa corrispondere ogni combinazione di 16 bit (stato della cella) con
il nuovo valore che deve assumere la cella stessa.
Il quarto passaggio e' quindi realizzato come segue: Serialmente ogni modulo
scansiona le celle del suo settore e per ognuna di esse compone un indirizzo
a 16 bit mediante alcuni bit della cella stessa ed altri di celle diverse
(prelevati in accordo con i kick impostati). Con tale indirizzo accede alla
LUT e da essa ricava i nuovi 16 bit con i quali viene riscritta l'intera
cella (viene riscritta la cella si badi bene, i kick non hanno alcuna funzione
in questa fase).
Ricapitolando: per ogni bit di una cella (o meglio per ogni layer nello
spazio) esiste un registro, i 16 registri complessivamente indicano il
modo di composizione dell'indirizzo con il quale accedere alla LUT. Per
esempio considerando la generica cella (x,y) si puo' ottenere un indirizzo
utilizzando il primo bit della cella a destra (x+1,y), il secondo e il
terzo dalla cella (x.y-3), il quarto dalla cella (x,y+10) e i restanti
dodici dalla cella stessa (x,y). Questi 16 bit, letti nell'ordine indicato,
identificano una riga della LUT che contiene i nuovi 16 bit della cella
(x,y).