Culler-7
# Culler-7

Il Culler 7 era un minicomputer sviluppato dalla Culler Scientific Systems prodotto a partire dal 1986 e venduto nel Regno Unito e in Giappone in decine di unità.

Il sistema era basato su un'architettura decoupled access execute (DAE), Glen Culler fu il progettista capo del computer e venne assistito nello sviluppo da Bob Pearson, John Richardson, Mike McCammon, e Dave Probert. Il progetto venne avviato nel gennaio del 1983. Il sistema utilizzava l'architettura Harvard modificate ed era formato da due "macchine". La macchina A si occupava dell'esecuzione del programma vero e proprio con il controllo di flusso sui dati, la macchina X si occupava invece delle operazioni in virgola mobile. Le due macchine erano separate e quindi potevano lavorare in parallelo. La macchina A era dotata di 33 registri mentre la macchina X ne aveva 8. Infine il sistema utilizzava con due memorie scratchpad da 4 KB (chiamata XYMEM). Le memorie contenevano gli stessi dati, di fatto quindi era come fosse una sola memoria a doppia porta, questo permetteva accessi indipendenti alla memoria da parte di tutte e due le macchine.

Il progetto prevedeva anche un disegno multiprocessore con un processore di controllo e fino a quattro processori d'esecuzione. La memoria principale (formata da SRAM) poteva essere partizionata in pagine che potevano essere visibili globalmente o localmente. Il programma in esecuzione conteneva istruzioni per la macchina X spesso associate a istruzioni per la macchina A. Le istruzioni X potevano essere eseguite in un singolo ciclo o richiedevano più cicli mentre tutte le istruzioni A erano eseguite in un solo ciclo di clock.

Le istruzioni X e A erano caricate/eseguite appena possibile, serie di istruzioni XXXX o AAAA potevano essere il risultato di una singola istruzione caricata. Quando le istruzioni venivano caricate le prime due erano eseguite mentre le altre vengono messe in attesa. Durante l'esecuzione di un'istruzione X più istruzioni A potevano essere eseguite.

Le macchine X e A trasmettevano i dati tramite buffer. La macchina A caricava i dati della macchina X dentro un buffer FIFO di 3 parole e prelevava i risultati da un buffer di una parola. L'inserimento delle istruzioni A nel flusso di istruzioni non poteva essere arbitrario, il sistema garantiva la sincronizzazione. Quando la macchina X non aveva dati ingresso si fermava in attesa di istruzioni dalla macchina A. La macchina A quando rilevava che il buffer FIFO della macchina X era pieno si fermava in attesa che il buffer si svuotasse parzialmente. La macchina A e X utilizzavano una pipeline a tre stadi caricamento/decodifica/esecuzione.

Il compilatore/programmatore doveva occuparsi di disporre le istruzioni correttamente, errori di posizionamento delle istruzioni potevano produrre blocchi nel sistema.

