Corso di microprogrammazione: componenti circuitali

microprogrammazione

Il nostro corso di microprogrammazione ormai è diventato più pratico di quanto non fosse all’inizio, ve ne sarete accorti. Da un lato questo è successo perché abbiamo messo buona parte delle basi teoriche utili e certamente tutte quelle che servono; dall’altro, invece, perché le vostre richieste ci hanno portato all’analisi più puntuale di tutto ciò che riguarda l’hardware. Oggi, quindi, cominciamo a parlare in maniera più precisa di alcuni componenti circuitali. Così saremo in grado di mettere le mani su diversi tipi di dispositivi e fare la programmazione. Siete pronti?

Al giorno d’oggi tutti i circuiti digitali sono composti da una serie di dispositivi facilmente reperibili commercialmente e che formano la struttura di un sistema embedded. Vediamo adesso quali sono i più importanti partendo dai

dispositivi programmabili

I circuiti in questione possono essere utilizzati per diversi scopi, tra cui:

  • integrazione di logica di collegamento (la cosiddetta glue logic);
  • memorizzazione di dati;
  • realizzazione di circuiti combinatori sequenziali ad alto grado di complessità;
  • programmazione “a bordo scheda” (ISP);
  • protezione da copia.

Di seguito riportiamo alcuni diagrammi di tipologie di dispositivi programmabili molto diffusi:

Quella che abbiamo appena visto è una memoria di sola lettura programmabile, altrimenti nota con il nome di PROM (che sta per Programmable Read Only Memory).

Questo dispositivo, invece, prende il nome di Programmable Array Logic (PAL) ed è, in qualche modo, il dispositivo duale rispetto al seguente

ovvero dispositivi FPLA (Field Programmable Logic Array).

Esistono, come ben sappiamo, memorie volatili e memorie non volatili. Le seconde vengono tipicamente impiegate nella memorizzazione di programmi o di dati. È anche possibile che vengano impiegate nella realizzazione delle cosiddette LUT (Look-Up Table), delle quali abbiamo già parlato; si tratta di tabelle di ricerca nelle quali l’ingresso (input) è una variabile mentre l’uscita (output) è una funzione di quella variabile. Le abbiamo utilizzate per caratterizzare i dispositivi  e pertanto vale la pena adesso di suddividere non soltanto la tecnologia impiegata ed i dispositivi che possono essere descritti tramite questa tabelle ma anche il tipo di accesso.

PROM

Le memorie di sola lettura programmabili (PROM) sono anche dispositivi la cui programmazione può essere alterata; esistono due ulteriori tipi di memoria programmabili di sola lettura che prendono il nome di EPROM (in cui la lettera “E” sta per Erasable) e memorie EEPROM (Electrically Erasable). La distinzione tra queste due ulteriori tipologie di memoria sta nel meccanismo tramite il quale può avvenire la modifica del dato scritto e, di conseguenza, la riprogrammazione delle stesse. Le prime vengono trattate con l’utilizzo di radiazione ultravioletta e pertanto sono programmabili tramite un opportuno programmatore.
Le seconde, invece, possono essere cancellate e quindi riprogrammate in maniera elettrica, ovvero attraverso pilotaggio e livelli di tensione opportuni. Esistono dispositivi a doppio elettrodo di gate, infatti, dei quali quello “sepolto” dallo strato di ossido funge da elettrodo di controllo per l’intera struttura ed è proprio lì che viene memorizzato il dato. Tramite l’applicazione di una polarizzazione inversa, quindi, è possibile alterare il dato, eliminare quello presente e poi scriverne uno, eventualmente, diverso.

Consideriamo una memoria ST M27C1001 (1 Mbit, 128 x 8).

come abbiamo mostrato, sono visibili, molto chiaramente:

  • gli ingressi A0-A16, che vengono utilizzati per selezionare la locazione di memoria della flash alla quale accedere;
  • le linee di dati Q0-Q7, ovvero quelle di accesso alla locazione selezionata in fase di programmazione o di lettura;
  • l’ingresso di Enable (E’), del quale abbiamo parlato spiegando che la selezione del dispositivo avviene se questo segnale è basso mentre se la linea è alta, il dispositivo resta inerte;
  • l’uscita di Enable (G’), cioè l’abilitazione alla lettura della locazione precedentemente selezionata;
  • la linea di Program (P), che permette di abilitare selettivamente la programmazione nella locazione selezionata;
  • Vpp, ovvero la tensione di programmazione;
  • le linee Vss e Vcc che fungono da alimentazione del dispositivo (polarizzazione).

Come per tutti i dispositivi, per conoscerlo e poterlo utilizzare, abbiamo bisogno di studiare con grande attenzione quello che viene richiamato e spiegato all’interno del datasheet. Una delle questioni più importanti quando parliamo di memorie, indipendentemente dal tipo di memorie di cui stiamo parlando, è la modalità di accesso, comprensiva di tutti i tempi caratteristici. Vediamoli, quindi, per questo caso:

come si può facilmente vedere tramite la figura, viene dapprima imposta la locazione di memoria ed attivata l’abilitazione. La successiva operazione è l’abilitazione della lettura. Il dato è disponibile soltanto dopo un tempo indicato come tAVQV oppure tGLQV. Il dato viene acquisito sul fronte di salita del segnale G’.

Flash

Il nome di questo tipo di memoria suggerisce già perché siano interessanti ma è importante analizzare il dettaglio per capirne la destinazione d’uso più opportuna. Con questo spirito, prima di tutto bisogna specificare che si tratta di dispositivi che possono essere cancellati e programmati nuovamente in maniera elettrica non soltanto tramite l’utilizzo di un opportuno programmatore ma anche all’interno del circuito. Questo aspetto permette l’utilizzo come memorie di massa ma anche la programmazione ISP. Rispetto alle memorie di cui abbiamo appena parlato, queste hanno un numero di cicli di programmazione più basso. In genere, possono essere organizzate in parole della lunghezza di almeno 8 ed al massimo 16 bit; l’accesso ai dati può essere seriale ma anche parallelo.
Vengono, di solito, suddivise in pagine per permettere l’allocazione e la gestione di aree separate per i dati e per i programmi; praticamente quasi tutti i microcontrollori ed i microprocessori di ultima generazione sono dotati di questo e di memorie e vengono utilizzate per la memorizzazione del firmware ma anche per la memorizzazione di dati di scambio. Inevitabilmente, man mano che passa il tempo, la dotazione aumenta in termini di quantità di memoria disponibile.

Per comodità, anche in questo caso, consideriamo un esemplare, l’AMD 29F04 (4 Mbit, 512 k x 8, parallela)

in questa immagine vengono mostrati:

  • ingressi di indirizzo, utilizzati per selezionare la locazione di memoria cui accedere;
  • linee di dati, per accedere alla locazione selezionata in una modalità di lettura oppure scrittura;
  • Chip Enable;
  • Output Enable;
  • Write Enable;
  • Vss, Vcc.

Per maggiore chiarezza, viene qui di seguito riportato lo schema blocchi del dispositivo

EEPROM

È vero, abbiamo già spiegato che esistono, però non siamo andati molto nel dettaglio dal punto di vista delle caratteristiche funzionali. Abbiamo detto che sono dispositivi che possono essere cancellati e riprogrammati in maniera elettrica grazie ad un opportuno ciclo di programmazione. Dobbiamo dire ancora, però, che vengono organizzate, tipicamente, in parole della lunghezza di 8 o 16 bit e sono, tipicamente, ad accesso seriale. I principali protocolli utilizzati per l’interfacciamento sono:

  • Microwire;
  • I2C;
  • SPI.

Come per i casi precedenti, vediamo anche qui un esempio grazie all’M95040 della ST (512 x 8 bit, SPI).

ed al suo diagramma a blocchi

A differenza di quanto visto nei dispositivi già analizzati, questo viene gestito, per l’appunto, in maniera seriale. Avremo quindi:

  • clock seriale;
  • serial data input;
  • serial data output;
  • chip select, che seleziona il dispositivo;
  • write protect, ovvero l’abilitazione alla scrittura del dispositivo;
  • hold, una linea di controllo di flusso di dati utilizzato solo se il dispositivo necessita di rallentare le comunicazioni;
  • Vss e Vcc.

I cicli di lettura sono i seguenti:

mentre quelli di scrittura sono

Si vede facilmente che, in entrambi i casi, il ciclo viene suddiviso in tre distinte fasi che prevedono prima di tutto la ricezione dell’istruzione e quindi la qualifica del fatto che si voglia effettuare un’operazione di lettura piuttosto che di scrittura. Successivamente viene ricevuto l’indirizzo di memoria sul quale effettuare l’operazione per poi eseguire la stessa e quindi scrivere, o trasmettere, il dato.

Seriale o parallelo?

Non basta certamente dire che esistono due metodi per comunicare con le memoria, bisogna analizzarli!
In generale, è giusto fare le seguenti considerazioni: comunicare in maniera seriale significa avere un basso pin count, il che implica una semplicità circuitale notevole ed anche uno scarso ingombro. La bassa capacità implica anche un basso costo e così la velocità di accesso resta contenuta. Questo qualifica le comunicazioni seriali come ottime nei casi in cui si vogliano utilizzare per la memorizzazione di dati di configurazione, e quindi non dati che evolvono nel tempo, soprattutto se con una certa frequenza. Diciamo che potremmo pensarli come dati statici. D’altronde, le memorie EEPROM non vengono certo utilizzate come memorie di massa.
Quando parliamo di comunicazioni in parallelo, lo sappiamo bene, certamente il primo vantaggio è nei tempi di comunicazione ed elaborazione dei dati. Comunicare in parallelo significa lavorare più velocemente. Questo vuol dire anche che possiamo contare su una più rapida esecuzione delle istruzioni. Tutto questo si va ad affiancare all’alta capacità di immagazzinamento dei dati e, quindi, alla possibilità di memorizzare dati in grandi quantità.
Questi vantaggi delineano un tipo di memoria che non ha destinazioni d’uso preferenziali e, per questo motivo, possiamo pensare di adoperarle sempre.

SRAM

Inauguriamo la seconda parte di questa puntata, in cui cercheremo di parlare di memorie temporanee. Come il nome suggerisce, stiamo parlando di dispositivi che non servono per l’archiviazione ma per tenere dati la cui utilità non è illimitata.
Quella di cui parliamo è la M628032 della ST (256 kb, 32 k x 8).

Anche qui sono disponibili ed accessibili le connessioni di cui abbiamo parlato fino a questo momento. Nella prossima immagine, invece, vediamo il diagramma a blocchi.

Con la figura che segue vediamo il ciclo di lettura della memoria, composto da un periodo di tempo in cui viene impostato l’indirizzo della locazione di memoria per poi abilitarla. Una volta abilitata alla lettura, il dato viene reso disponibile ad intervalli differenziati dalla abilitazione oppure dalla vettura. L’acquisizione avviene sul fronte di salita del segnale G’.

Di seguito la tabella con i tempi caratteristici:

Per quanto riguarda, invece, il ciclo di scrittura, dopo l’impostazione dell’indirizzo e l’abilitazione alla scrittura il dato è scrivibile dopo un certo intervallo di tempo, come in figura, ed effettivamente scritto sul fronte di salita del segnale W’.

Ed ecco i tempi caratteristici del ciclo di scrittura:

Fanno capitolo a parte le memorie ad accesso casuale di tipo dinamico, il cui acronimo è DRAM (Dynamic Random Access Memory). Sono di maggiore capacità ed a più basso costo rispetto a quelle statiche, sebbene risultino più complesse da gestire, dal momento che il contenuto della memoria non è statico, per l’appunto, ma deve essere sottoposto a cicli di refresh regolari in maniera tale da avere il dato sempre disponibile. Poichè esiste questa complicazione, questo tipo di memorie viene previsto soltanto all’interno di sistemi embedded, e di una certa complessità.

PAL, FPGA

In apertura abbiamo accennato alle memorie PAL; si tratta di elementi programmabili di complessità via via crescente per i quali si parte dalla logica della PAL16L8

 

per poter fare le seguenti considerazioni:

  • prima di tutto, si nota subito che l’uscita è memorizzata con un flip flop di tipo D;
  • lo stato dell’uscita può essere negato;
  • l’uscita viene riportata nella matrice degli ingressi.

Si può vedere facilmente che il componente risulta essere molto flessibile; ciò nondimeno la flessibilità, anche ammesso che raggiunga il suo massimo valore, non può assolutamente essere comparato con quella delle FPGA, acronimo di Field Programmable Gate Array. Si tratta di strutture straordinariamente versatili che, come il nome suggerisce, sono state ideate, concepite e realizzate allo scopo di essere facilmente programmate direttamente “sul campo”. L’operatore godrà di una straordinaria flessibilità e della possibilità di assegnare a questi dispositivi una specifica funzione progettata direttamente sulle esigenze del caso.

Un esempio di questo tipo di dispositivi è certamente la famiglia Spartan 3 di Xilinx.

dal momento che l’immagine appena vista non è del tutto rappresentativa, vediamo di seguito un diagramma a blocchi che sicuramente darà meglio l’idea della complessità e della potenza del dispositivo.

Vengono evidenziati sistemi come Flip Flop di tipo D e Multiplexer posti in rete tra loro.

Clock

Nel campo dei sistemi digitali sono certamente tra i dispositivi più importanti. La temporizzazione, la scansione degli intervalli temporali, la validazione degli eventi di trigger validi sono tutte funzioni che identificano il numero ed il tipo delle informazioni e per questo motivo essi assumono una rilevanza cruciale quando si analizza il funzionamento di un sistema comunque complesso.
Un circuito di Clock, di fatto, è un circuito instabile le cui commutazioni avvengono ad una determinata frequenza. Si tratta di un circuito che oscilla ed è tipicamente un circuito posto in retroazione positiva. Due configurazioni tipiche prevedono l’utilizzo di oscillatori RC oppure di cristalli.

Nel primo caso, quando abbiamo a che fare con applicazioni di fascia bassa, che prevedono costi contenuti, in bassa frequenza ma soprattutto in cui la precisione e la stabilità della frequenza generata non sono di importanza cruciale per il funzionamento del sistema, è possibile utilizzare una rete RC come quella che vediamo in figura

che, analizzata opportunamente, restituisce un diagramma di questo tipo

Quando viceversa ci riferiamo ad applicazioni che richiedono effettivamente caratteristiche come precisione, stabilità e ripetibilità della generazione delle frequenze, è necessario utilizzare cristalli o quarzi che godono esattamente di questo genere di proprietà. In figura vediamo una configurazione tipica

È buona norma, e vale la pena di specificarlo, che questi collegamenti siano i più corti possibili, onde evitare che ci siano fenomeni parassiti e questo accorgimento deve intendersi riferito sia alla prototipazione sia alla realizzazione del PCB.

Supervisione e Reset

Nei sistemi embedded capita molto spesso che si rendano necessarie funzioni di Reset all’accensione ovvero di controllo sulla tensione di alimentazione del circuito. Quando, infatti, questa dovesse scendere al di sotto di una soglia minima prestabilita, il circuito deve necessariamente imporre il reset al fine di garantire l’esecuzione corretta delle operazioni una volta che l’alimentazione sia tornata al corretto livello.

Se guardiamo attentamente la configurazione circuitale del MAX 6841 ci rendiamo conto che ci sono funzioni di reset previste che controllano proprio il livello di alimentazione.

Anche in questo caso, in questo secondo schema a blocchi, è evidente come la tensione di alimentazione venga comparata ad una di riferimento in maniera tale che si possa, se la prima dovesse risultare inferiore alla seconda, attivare direttamente l’uscita di reset.
Quando il livello dovesse essere corretto, invece, l’uscita attiva sarà certamente quella di reset negato, ovvero non si verifica la condizione di ripristino.
Questo specifico integrato offre anche l’opportunità di poter utilizzare un pulsante per forzare manualmente la condizione di reset.
L’abbiamo vista tante volte, implementata in alcune delle schede che meglio conosciamo, ovvero Arduino e Raspberry Pi; lì si è visto chiaramente quale fosse l’utilità di questa specifica caratteristica e pertanto è più facile intuirne i casi di utilizzo.

Watchdog

E veniamo, in ultimo, almeno per oggi, ad un argomento abbastanza utile per tutti coloro che hanno a che fare con questo genere di sistemi.
Letteralmente l’espressione che intitola questo paragrafo significa “cane da guardia“; si tratta di un sistema utilizzato per prevenire o evitare il blocco del sistema, facendo in modo da salvaguardare sia l’utente sia la scheda da situazioni di pericolo.
Dal punto di vista concettuale, questo non è altro che un timer che esegue un conto alla rovescia a partire da un valore impostato. Quando raggiunge lo zero, il dispositivo genera un reset causando il suo riavvio.
Una specie di meccanismo di shock che causa lo spegnimento ed il successivo risveglio.
Questo dispositivo può essere anche dotato di un ingresso di trigger qualora la condizione di funzionamento dovesse dipendere da un evento esterno al sistema e non già direttamente causata dal funzionamento. Se questo ingresso viene eccitato, infatti, il timer viene reimpostato ed il conteggio ricomincia.
L’idea di base è che se il sistema funziona correttamente il programma andrà a controllare periodicamente il suo watchdog prima che il conteggio si possa azzerare. Se si verifica un malfunzionamento, oppure un blocco, l’impossibilità di controllare questo indicatore porterà al riavvio del sistema esattamente come abbiamo detto in precedenza.

Saluti

Anche quest’oggi è arrivato il momento dei saluti. Non tutti gli argomenti di questo corso sono stati ancora trattati e dalla prossima puntata continueremo l’analisi dei sistemi così come preannunciato tempo fa. In particolare ci occuperemo di esaminare l’architettura di un microcontrollore, il dettaglio delle istituzioni che servono per farlo funzionare e vi proporremo, in quella occasione, alcuni esercizi molto utili. Dal momento che la puntata si è conclusa, credo sia arrivato il momento di chiedervi, come di consueto: come trovate questo corso? Vi serve? È così che volete che sia strutturato? Gli manca qualcosa? Ne modifichereste la struttura?
Come sempre, ci teniamo a precisare che questo corso è di tutti noi (oserei dire più vostro che nostro!) e pertanto è giusto che voi possiate intervenire anche per modificare, com’è stato fatto in passato, la scaletta, i singoli temi, il tenore degli argomenti e così via dicendo.

Fateci sapere che cosa ne pensate sapendo che i commenti sono il posto giusto per farlo.
Alla prossima.

 

Quello che hai appena letto è un Articolo Premium reso disponibile affinché potessi valutare la qualità dei nostri contenuti!

 

Gli Articoli Tecnici Premium sono infatti riservati agli abbonati e vengono raccolti mensilmente nella nostra rivista digitale EOS-Book in PDF, ePub e mobi.
volantino eos-book1
Vorresti accedere a tutti gli altri Articoli Premium e fare il download degli EOS-Book? Allora valuta la possibilità di sottoscrivere un abbonamento a partire da € 2,95!
Scopri di più

3 Comments

  1. Boris L. 28 giugno 2013
  2. Piero Boccadoro Piero Boccadoro 28 giugno 2013
  3. Piero Boccadoro Piero Boccadoro 28 giugno 2013

Leave a Reply