Introduzione ai Dispositivi Logici Programmabili

annuncio pubblicitario
Insegnamenti di
Sistemi Elettronici Dedicati 1
(Corso di Laurea in Ingegneria Elettronica)
Sistemi Elettronici Digitali1
(Corso di Laurea Specialistica in Ingegneria delle Telecomunicaizoni)
Introduzione ai
Dispositivi Logici Programmabili
Edizione 2004
Rodolfo Zunino
1. Generalità sui Dispositivi logici programmabili
I dispositivi logici programmabili, o PLD (Programmable Logic Devices) sono stati introdotti
negli anni ’70. Il primo dispositivo programmabile era privo di memoria ed è stato proposto da
Signetics, che lo denominò Field Programmable Logic Array (FPLA).
Sono dispositivi elettronici digitali che permettono la realizzazione di funzioni combinatorie o
sequenziali o, nello stesso circuito integrato, sia combinatorie sia sequenziali. Il loro avvento è
dovuto ad una forte richiesta dal mercato di maggior flessibilità. È infatti tendenza costante del
mercato dell’elettronica di vasto consumo una crescente richiesta di vera e propria customizzazione,
ovvero capacità di realizzare circuiti che soddisfino le specifiche esigenze applicative del cliente.
In questo senso gli ASIC (circuiti application-specific progettati e realizzati in VLSI
attraverso fusione di chip appositi) offrono la massima specificità ma comportano costi di sviluppo,
realizzazione e testing sempre più proibitivi.
I PLD offrono un compromesso tra qualcosa di personalizzato per ogni utente e un costo di
sviluppo accessibile anche a budget limitati. I dispositivi logici programmabili hanno tre pregi
fondamentali:
• alta flessibilità;
• veloce tempo di sviluppo;
• limitato carico computazionale.
Un dispositivo PLD generico, nella sua verisone più semplice, comprende una matrice di porte
AND seguita da una di porte OR, con collegamenti programmabili fra di esse.
Un PLD supporta un numero di semplici funzioni logiche non concatenate, che l'utente può
strutturare per realizzare una specifica funzione più complessa. La fase di progetto del circuito
aviene mediante un software che tipicamente automatizza le fasi di calcolo (es. sintesi di reti
combinatorie attraverso mappe di Karnaugh), ed un opportuno dispositivo ‘programmatore’ che
‘incide’ sul dispositivo PLD il circuito digitale risultante. Questo tipicamente avviene attraverso
l’attivazione o meno (mediante fusibili o anti-fusibili) di corto circuiti nella matrice di connettività.
Gli ingressi sono applicati alla matrice di AND, che effettua i prodotti logici; questi diventano
a loro volta ingressi della matrice OR che produce le uscite desiderate combinando i suoi ingressi.
2. Dispositivi logici programmabili elementari
2.1 PAL (Programmable Array Logic)
La prima famiglia di dispositivi logici programmabili è il PAL (Programmable Array Logic),
che usa semplicemente le leggi di De Morgan per sintetizzare ciruciti combinatori. Un PAL è
costituito da una matrice di connettività e da alcuni AND programmabili, mentre la matrice OR è
fissa.
Una caratteristica strutturale di questa famiglia è la struttura elementare, poiché non vi sono
fusibili per la programmazione delle connessioni della matrice di porte OR.
Per accrescere la flessibilità dei PAL, sono stati introdotti i PAL a macrocelle, in essi le uscite
possono essere programmate in modo da soddisfare le esigenze più comuni: dirette, complementate,
combinatorie e con registro. Aumentando le funzioni aumentano anche i costi e la potenza dissipata,
per ridurre la quale si impiega la tecnologia CMOS.
2
Il dispositivo è una rete logica combinatoria: manca la parte sequenziale, ovvero manca la
memoria. Le sigle dei PAL forniscono informazioni sulle caratteristiche dei dispositivi.
Generalmente sono costituite da una prima parte numerica N1, un codice letterale CL, una
seconda parte numerica N2 ed un suffisso S. In pratica generalmente si scrive:
PAL N1 CL N2 S
Il significato dei termini è il seguente:
•
•
•
•
•
PAL: indica che il dispositivo è un Programmable Array Logic; l’indicazione eventuale
PALC indica che è realizzato in tecnologia CMOS;
N1: è il numero di ingressi della matrice AND programmabile, ovvero il numero di ingressi
possibili, dato dal max numero di pin di input;
CL: codice di 1+ lettere che caratterizza elettricamente le uscite. H = l’uscita attiva alta; L
= uscita attiva bassa, P = polarità dell’uscita programmabile, C = uscite complementari, R =
registri (flip flop) in output.
N2: numero delle uscite.
S: suffisso che dà informazioni su velocità e potenza dissipata
Pregi:
• basso costo;
• facile implementazione.
Difetti:
• alto numero di fili;
• limitato numero di ingressi;
• rete combinatoria;
• numero di porte logiche limitato a danno del calcolo.
3
2.2 PLA (Programmable Logic Array)
La seconda famiglia è il PLA (Programmable Logic Array), in cui sono stati aggiunti in uscita
dei Flip Flop; gli effetti di questa modifica sono la creazione di una macchina a stati finiti e
l’aumento degli ingressi e delle uscite.
La struttura di base è a matrice AND e a matrice OR, entrambe programmabili come riportato
in figura.
I nomi dei PLA non hanno corrispondenza con la struttura; nei data-sheet sono indicati spesso
con le dimensioni della matrice I x P x O, dove:
•
•
•
I : indica il numero massimo degli ingressi
P : massimo numero di termini prodotto, compresi quelli di controllo;
O : massimo numero delle uscite.
Per esempio, il dispositivo FPLA PLS153 (della Signetics, F sta per Field PLA) ha le seguenti
dimensioni: 18 x 42 x 10. Esso ha infatti 18 ingressi (di cui 8 propriamente detti e 10 uscite che
possono essere programmate come ingressi), 42 termini di prodotto (32 utilizzabili nella matrice
OR e 10 per il controllo dei buffer three state), 10 uscite.
Pregi:
• aumento del numero di uscite (molto importante il numero dei PIN).
Difetti:
• grossa inefficienza, dovuta ai tanti collegamenti logici, che si paga in area di silicio.
4
2.3 GAL (Generic Array Logic)
Con l’avvento dei MOS, in particolare dei CMOS, e con l’implementazione di funzioni già
fatte
(es. addizionatori, shift, XOR) si occupa una minor area di silicio e quindi, a parità di area di
connettività, si ha del risparmio poichè si aggiungono componenti più piccoli e più efficienti.
Nasce così la terza famiglia, i GAL (Generic Array Logic), che sono dispositivi
riprogrammabili, infatti è possibile cancellarli elettricamente.
La struttura d’uscita è a macrocelle programmate che consentono una grande flessibilità.
L’uscita è ottenuta attraverso un buffer tristate abilitato da un segnale prodotto dalla matrice di
connettività.
Si possono effettuare connessioni di reazione fra uscite ed ingressi, per realizzare macchine
sequenziali; il prelevamento del segnale può avvenire dal registro o dopo il buffer tristate o
dall’uscita dello stato adiacente.
•
Pregi:
aumento della potenza di calcolo.
Difetti:
• inefficienza delle matrici di connettività;
• progressivo allontanamento dal dispositivo.
5
2.4 CPLD (Complex Array Logic Devices)
CPLD è un acronimo che sta per "Complex Programmable Logic Device". Idealmente potete
immaginarli come dispositivi che contengono un elevatissimo numero di elementi di logica
combinatoria e sequenziale, che potete collegare fra loro "via software" come più preferite per
ottenere la funzione desiderata.
Le CPLD uniscono la velocità della logica cablata alla potenza e comodità di microprocessori
e DSP. Purtroppo non esiste per i Flip-Flop l’equivalente delle mappe di Karnaugh per le
macrocelle e quindi non esiste un modo per standardizzare ed estendere il tutto anche ad altri
dispositivi. Il passo successivo sono i CPLD (Complex Programmable Logic Devices).
Questi ultimi sono un’evoluzione dei dispositivi quali PAL, PLA, GAL e sono caratterizzati da:
• connessioni globali;
• logica concentrata.
Rispetto ai PAL, PLA e GAL:
• hanno dimensioni maggiori;
• le celle disponibili sono più complesse.
Hanno diversi aspetti positivi:
• dimensioni ridotte;
• elevata velocità;
• struttura regolare e facilmente programmabile;
• flessibilità su ingressi ed uscite;
• si intercombina non più in funzione di porte logiche, ma di microcelle.
Il mercato richiede flessibilità e customizzazione, tuttavia il tempo di sviluppo è diminuito
solo per chi produce i CPLD, mentre è aumentato per chi li usa, perchè il dispositivo è più
complesso da programmare.
La soluzione è quindi quella di creare un’interfaccia software il più user-friendly possibile.
Il passo logico fondamentale è dato dal fatto che il CPLD non descrive più i bit, ma il
comportamento (flusso dati).
6
3. I Microcontrollori
Sono dispositivi logici digitali in cui la funzione di programmabilità è supportata da una
architettura Von Neumann fissa, e quindi sono assimilabili a semplici processori. Possiamo dire che
assomigliano molto più a un DSP che un FPGA; infatti anche nei microcontrollori (spesso indicati
con la notazione µC) la piedinatura è fissa. Inoltre, rispetto alle CPU, condividono lo spazio di
indirizzamento della memoria con lo spazio delle periferiche.
Date le ridotte prestazioni, i µC coprono una fetta di mercato molto diversa da quella dei DSP,
dove prevale la potenza di calcolo tpicamente orientata al Signal Processing. I µC spesso, anzi quasi
sempre, sono utilizzati per applicazioni di controllo.
Il linguaggio più indicato per programmare i microcontrollori è il linguaggio Assembler, di
solito estremamente povero, avendo al più qualche decina di diversi opcode e quindi di livello
molto basso. Sono peraltro disponibili alcune versioni di ambienti di sviluppo con linguaggi di più
alto livello come il C, ma la prassi normale di realizzazione di applicazioni SW per µC evolve
normalmente in Assembly.
Ci si potrebbe allora chiedere come mai esistono i microcontrollori, se occupano una fetta
marginale di mercato, le potenzialità dei DSP o degli FPGA La risposta risiede nel rapporto
costo/prestazioni offerto dai µC. I microcontrollori, infatti, hanno un costo molto ridotto (5-14$
circa), e possono rappresentare un buon compromesso laddove un DSP è eccessivo come potenza di
calcolo ed un FPGA è troppo oneroso in termini di costo del componente.
Un microcontrollore è in sostanza un dispositivo elettronico che, opportunamente
programmato, è in grado di svolgere diverse funzioni in modo autonomo, essenzialmente gestisce
delle linee di input e di output in relazione al programma in esso implementato.
Esistono diverse famiglie di dispositivi in grado di svolgere queste funzioni come ad esempio
lo Z80, ST6 e il più evoluto 8088; in questa sezione ci occuperemo dei più semplici dispositivi oggi
in commercio, i PIC prodotti e distribuiti dalla Microchip.
3.1 - I Microcontrollori della famiglia PIC
La figura seguente esplicita in breve le parti essenziali costituenti un PIC.
7
Questa architettura è molto vecchia (paragonabile a quella di un 8086). Si tratta di una scelta
architetturale intenzionale, dovuta al fatto che il µC deve svolgere solo quattro operazioni
importanti (come si vede in figura). Spicca la la possibilità di prendere ingressi analogici. Il
convertitore A/D serve sostanzialmente per ricevere dati da sensori.
L’architettura di questi dispositivi segue semplicemente la famosa macchina di Von
Neumann, con la sola differenza che, come nei DSP, si implementa anche l’architettura Harvard
(due bus), con la semplice motivazione che la memoria dei programmi deve essere indipendente
dalla memoria dati. Questi dispositivi implementano al loro interno un vero e proprio
microprocessore completo di CPU, RAM, Timer e numerose linee di IN/OUT.
Il costo di un PIC si aggira dai 4$ ai 15$. In commercio si trovano diversi modelli a seconda
della complessità e delle funzioni implementate, alcuni dispositivi si differenziano anche per la
quantità di memoria disponibile, per la quantità di Timer a disposizione.
Gli ambienti di sviluppo professinali possono ragiungere anche un costo di circa 2000$, e sono
costituiti dai seguenti pacchetti, di costi e funzionalità decrescenti:
•
•
•
ICE Æ In Circuit Emulator
ICD Æ In Circuit Debugger (il debugger costa circa 200$).
Programmatore hardware, che non costa nulla perché è disponibile in versione free in rete
(ovviamente tutto a livello hw).
A differenza dei microprocessori più evoluti nei PIC il programma è contenuto all'interno in
un'apposita area di memoria (non volatile) e viene eseguito ciclicamente, anche la RAM per i dati
volatili è all'interno dello stesso dispositivo, alcuni dispongono di aree dati non volatili e riscrivibili
(EPROM).
Lo stadio di IN/OUT è già implementato all'interno ed alcuni dispongono già di interfacce per
segnali analogici, per comparatori o per comunicazioni seriali.
3.3 - Alcuni esempi di utilizzo dei PIC
Prendiamo come esempio i PIC 18. Questi
particolari PIC hanno la PWM (Pulse Width
Modulation), un tipo di modulazione in cui è la
larghezza (durata) degli impulsi che varia in
funzione dell’informazione e periodo e ampiezza
degli impulsi sono mantenuti costanti.
Questi PIC vengono prevalentemente usati per
controllare motori in corrente continua; infatti, se
colleghiamo dei MOS a ponte di Wheatstone (v.
figura a lato), possiamo controllare la velocità del
motore.
Vcc
A
B
B
A
GND
8
Cosa serve per iniziare?
Fondamentalmente il modo di procedere è uguale per tutti i PIC e si suddivide in una parte di
programmazione e in una parte di utilizzo all'interno del circuito elettronico scelto come di seguito
descritto:
1. Stesura del programma tramite un editor di testo (il blocco note oppure WordPad di
Windows in quanto il file deve contenere solo testo e nessuna formattazione e si avrà cura
quindi di salvarlo in modalità "solo testo").
2. Compilazione tramite un compilatore che ha il compito di trasformare le istruzioni
mnemoniche (cioè fatte di parole) in codice direttamente eseguibile dalla CPU del
microcontrollore.
3. Programmazione del PIC la quale avviene tramite un apposito circuito elettronico
(programmatore) sul quale viene installato il microcontrollore e che viene interfacciato al
PC tramite porta seriale o parallela. Nei sistemi più evoluti si parla di programmazione
InCircuit ovvero direttamente sul circuito elettronico di funzionamento del PIC. In questo
modo si evita di dover ogni volta togliere il PIC dal circuito di lavoro per inserirlo nel
programmatore.
In figura possiamo osservare lo schema elettrico del programmatore:
4. Per poter inviare il programma al PIC (tramite il programmatore) occorre un apposito
software in grado di gestire i segnali di comunicazione tra PC e programmatore leggendo il
file generato dal compilatore. Il semplicissimo programma idoneo a questo scopo è di
pubblico dominio e si chiama ICPROG.
5. A questo punto vi serve un microcontrollore PIC, nelle fotocopie (in inglese) allegate a
queste dispense abbiamo, come modello, un PIC 16C5X (la X sta ad indicare che vi sono
diversi modelli dello stesso).
9
3.4 - Un esempio pratico di utilizzo dei microcontrollori
Un esempio di utilizzo di microcontrollori potrebbe essere il progetto di un termostato per
controllare la temperatura di un forno. Lo schema a blocchi potrebbe essere il seguente:
sensor
Resistore
termico o
serpentin
on
off
relais
Display
Blocco di
condizionamento
del segnale
Blocco
attuatore
Alla rete elettrica
220 V – 50 Hz
Convertitore
A/D
BUS dati
PIC
Trasmission
e dati
•
•
Il sensore è un banalissimo trasduttore di temperatura che si trova in commercio a basso
costo. E’ possibile utilizzare come trasduttore di temperatura (per risparmiare ulteriormente)
anche un transistor collegato a diodo.
Il blocco di condizionamento rappresenta una circuiteria di interfacciamento dal blocco di
traduzione del segnale fisico e il blocco di conversione A/D. Questo è fondamentale perché
10
•
•
•
•
spesso i segnali in uscita ai trasduttori sono delle tensioni molto piccole, mentre l’ingresso
del convertitore A/D solitamente richiede tensioni di qualche ordine di grandezza più
elevato.
Il microcontrollore rappresenta il cuore del sistema in oggetto. Essendo programmabile
possiamo gestire via software tutto quello che vogliamo fare con le stringhe di bit
rappresentanti il dato di temperatura proveniente dal convertitore A/D. Sarà questo blocco,
tramite il programma assembler opportunamente progettato per il problema, a dare il segnale
al blocco attuatore. Inoltre dovrà fornire i dati di temperatura ad un blocco visualizzatore ed
a un blocco trasmettitore
Il blocco attuatore spesso è rappresentato da un relais, opportuno dispositivo per
interfacciare controlli a piccoli segnali con controlli a grandi segnali (il piccolo segnale
eccita una bobina che sarà responsabile della chiusura/apertura di un deviatore metallico, il
quale farà passare il grande segnale).
Il blocco di lettura è stato specificato come display. Ovviamente questo blocco può essere
un comune PC, oppure un altro tipo di visualizzatore.
Il blocco di trasmissione dati, opzionale come il blocco di lettura, è spesso un modem.
11
Scarica