|
ultimo aggiornamento 7 agosto 2010 |
|
Il multicontrollore
Propeller è un integrato prodotto dalla Parallax inc. che può gestire
direttamente un’uscita video VGA, videocomposito, una tastiera, un mouse, e
molto altro.
Il processore si presenta come un integrato nel package 40dip o 44qfn in cui vi
sono ben otto processori RISC a 32 bit indipendenti, tutti uguali, sincronizzati
dallo stesso clock che può arrivare alla frequenza massima di 80MHz.
Gli otto processori, chiamati COG, condividono le risorse comuni del
Propeller quali registri di I/O e timer, mentre l’accesso alla memoria RAM/ROM
avviene tramite un HUB che sincronizza le richieste dei singoli COG.
Si può definire il Propeller, con il termine multicontrollore. I vantaggi di
questa architettura sono molteplici. L’assenza di vincoli o di strutture
predefinite lascia ampio spazio al progettista che può costruire l’applicazione
con la massima libertà.
Al vostro nuovo progetto serve una porta di comunicazione seriale? Si può
dedicare un COG alla gestione della comunicazione ed utilizzare due pin di I/O
qualsiasi per le linee seriali.
Dovete aggiungere una seconda seriale? Un secondo COG può eseguire lo stesso
codice (non una copia!), utilizzando altri pin di I/O.
Questi esempi, se pur banali, rendono perfettamente l’idea di come in un sistema
che prevede l’utilizzo di diversi microcontrollori, ognuno dedicato ad una
particolare funzione, si possa ridurre drasticamente la complessità utilizzando
un solo Propeller suddividendo la funzioni tra gli otto COG, utilizzando la RAM
dell’HUB per la condivisione dei dati.
L’ARCHITETTURA DEL PROPELLER
L’architettura del Propeller è riportata nella figura sotto. Gli otto COG condividono i
registri di I/O digitale e il system counter. Ricevono lo stesso clock di
sistema e accedono alle risorse condivise RAM/ROM e configurazione tramite l’HUB.
IL COG
Il COG è un processore RISC a 32bit con 2KB di RAM organizzata in 512 registri
da 32 byte La memoria RAM del COG può essere utilizzata indifferentemente sia
per memorizzare codice che per memorizzare dati.
Gli ultimi 16 registri della
memoria sono riservati per i registri di configurazione delle periferiche del
COG: due contatori, due PLL, una periferica video e i registri per il controllo
degli I/O delle porte digitali.
Ogni COG può eseguire codice memorizzato nella
RAM interna senza interagire con altri COG oppure accedere al codice condiviso
memorizzato nella RAM dell’HUB.
Il clock di ogni COG può raggiungere gli 80MHz. Considerando che per eseguire ogni istruzione sono necessari quattro cicli di
clock, ogni COG del Propeller può lavorare a 20Mips massimi.
Utilizzando tutti
gli otto COG alla massima frequenza il Propeller può raggiungere
complessivamente 160Mips.
L’HUB
L’HUB coordina l’accesso alle risorse mutuamente esclusive del Propeller da
parte dei singoli COG.
Il meccanismo di accesso si basa sulla tecnica del round robin: ogni processore periodicamente (ogni due cicli di clock di sistema) può
eseguire un accesso esclusivo alle risorse.
La tecnica non è ottimizzata perché
i COG ricevono l’abilitazione ad accedere alla memoria esterna anche quando non
ne hanno bisogno ritardando invece l’accesso agli altri COG.
Questa scelta però
semplifica moltissimo la sincronizzazione tra i vari COG e rende il
funzionamento deterministico poiché si può calcolare esattamente la latenza
minima e massima per l’accesso da parte di un COG alle risorse comuni.
LE RISORSE COMUNI
I pin di input/output
Tutti i pin di I/O sono condivisi tra gli otto COG che possono accedere in ogni
istante alle porte del multicontrollore.
Ogni COG ha al suo interno i propri
registri di configurazione per definire la direzione, input o output, e lo
stato, alto o basso, dei singoli pin.
La gestione degli ingressi non costituisce
un problema poiché tutti i COG accedono solo in lettura ai registri di I/O.
Per
evitare conflitti nella configurazione e nelle scritture dei registri di uscita
si applicano delle regole di composizione per definire lo stato dell’uscita in
funzione del valore assegnato da ogni COG.
Quando almeno un COG configura un pin
di I/O come output il pin diventa un output senza considerare la configurazione
degli altri COG.
Lo stato di un pin di output si ottiene combinando in OR le
definizioni dei singoli COG. Perciò lo stato di un pin di output condiviso sarà
alto quando almeno un COG lo configura alto.
Il system clock
Il clock di sistema del Propeller può essere generato in tre modi diversi:
tramite un oscillatore RC interno, oppure tramite un oscillatore con quarzo
esterno che può essere seguito da un PLL in grado di incrementare la frequenza
fino a 16 volte.
Il clock di sistema viene fornito direttamente agli otto COG
pertanto per raggiungere 80MHz con il PLL abilitato si deve utilizzare un quarzo
di 5Mhz.
L’HUB invece riceve il clock diviso per due e a questa frequenza esegue
la scansione degli accesi dei COG alla memoria.
Il system counter
Tra le risorse comuni accessibili da tutti i COG in ogni istante c’è anche il
system counter.
Si tratta di un contatore a 32 bit incrementato alla frequenza
di clock del sistema accessibile solo in lettura.
Il system counter non viene
mai azzerato e può essere utilizzato per inserire ritardi o temporizzazioni nei
processi in esecuzione nei COG.
LE RISORSE CONDIVISE
La memoria RAM/ROM
La memoria inclusa nel Propeller comune a tutti i COG è di 64Kbyte.
I primi
32KByte sono occupati da una memoria RAM che può essere utilizzata come memoria
condivisa per il codice applicativo, come memoria dati per l’applicazione o come
memoria di scambio dati tra gli otto COG.
A questo proposito i COG possono
utilizzare il registro di lock dell’HUB.
Tramite i lock bit si possono creare dei semafori per coordinare l’accesso alle
aree comuni e garantire l’integrità dei dati condivisi.
I 32KByte superiori
dello spazio d’indirizzamento sono occupati da una memoria ROM che contiene il
codice di startup, tabelle di funzioni matematiche (Seno, logaritmo
anti-logaritmo) e la descrizione di un set di caratteri utilizzabili per la
visualizzazione su display grafico. Questa memoria contiene anche l’interprete
dello Spin il linguaggio di programmazione del Propeller.
Nota:Le informazioni sono tratte dalla rivista FIRMWARE - Novembre 2006 - Autore - Diego Francescato
Elenco revisioni | |
07/08/2010 | Emissione preliminare |