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.

Parallax_Propeller_Image4.jpg

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à.

homotix

PCBONLINE

PropDieDiagram.jpg

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.

Parallax_Propeller_BASE.jpg

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.

Parallax_Propeller_Image1.jpg

Nota:Le informazioni sono tratte dalla rivista FIRMWARE - Novembre 2006 - Autore - Diego Francescato

Elenco revisioni
07/08/2010 Emissione preliminare