Escolar Documentos
Profissional Documentos
Cultura Documentos
Disegno delle
maschere
maschere
La presente dispensa è stampabile e riproducibile esclusivamente per gli scopi didattici dei corsi del Politecnico di
Milano e dell'Università di Verona; ogni altro uso deve essere preventivamente autorizzato dagli autori.
Figura 1.1. Flusso di progettazione.
Febbraio 2000 Una descrizione di questo tipo è del tutto indipendente dal tipo di strumenti di
progettazione assistita da calcolatore (strumenti di CAD) che si utilizzano – in effetti, è
indipendente dal fatto che tali strumenti vengano utilizzati oppure no.
Il committente del progetto fornisce delle specifiche del sistema da progettare – sia in
termini funzionali (che cosa il sistema deve fare) sia in termini non funzionali (i vincoli
temporali, i limiti di consumo di potenza, ecc.). Quello che descrive è essenzialmente il
comportamento del sistema, unitamente ai vincoli non funzionali. Dalle specifiche
2
INTRODUZIONE INTRODUZIONE
funzionali, il progettista digitale deduce uno schema “ad alto livello” che definisce la funzionamento del sistema (a un dato livello di astrazione – funzionale, logico, elettrico)
architettura in termini di unità funzionali (es. unità aritmetiche, multiplexer, contatori…) in risposta a opportuni insiemi di stimoli d’ingresso (vettori d’ingresso): analizzando i
e di registri, collegati fra loro mediante percorsi di dati e segnali di controllo; lo schema risultati della simulazione, il progettista verifica se essi coincidono con i valori attesi e
“architetturale” che si ottiene viene spesso indicato come schema RTL (Register Transfer quindi se il risultato della sintesi è corretto. La simulazione – oltre che essere compiuta a
Level). Dalla descrizione formale RTL si deriva – sulla base tipicamente di vincoli non diversi livelli – può fornire anche informazioni di vario tipo: ad esempio, riferendosi al
funzionali, quali tempo di elaborazione, costo (in genere riassunto in termini di porte livello di porta logica, si può fare una simulazione “logica”, considerando che tutti i
logiche) ecc. – il progetto logico, che fornisce una rete di porte logiche o componenti di componenti siano ideali e introducano ritardo nullo (in questo caso i risultati ottenuti
comparabile complessità (bistabili, ecc.) opportunamente interconnessi: si noti che a riguardano solo i valori logici delle uscite e prescindono dall’influenza dei ritardi) oppure
questo livello si è persa ogni visibilità non solo del comportamento, ma anche delle si possono introdurre anche le caratteristiche temporali dei componenti e dei segnali e
funzionalità svolte e del flusso di controllo. ottenere quindi anche un’analisi temporale dei risultati. La parte del flusso di
progettazione rilevata in grigio nella figura 1.1, considerando le attività di CAD, si
A ogni passaggio da un livello di astrazione più elevato a uno inferiore corrisponde
un’azione di sintesi, che nel più tradizionale progetto “manuale” viene compiuta dal modifica come viene indicato in figura 1.2:
progettista senza il supporto di strumenti informatici: una sintesi non è solo una
trasformazione da un livello a un altro, ma comporta anche una aggiunta di informazione.
Si può anche vedere un passo di sintesi come la trasformazione da una specifica (iniziale
o intermedia) a una implementazione (completa o intermedia). Si consideri ad esempio il
passaggio da uno schema a livello “trasferimento fra registri” (RTL), costituito da registri,
unità funzionali e strutture di interconnessione, a uno schema a livello di porta logica: lo
schema iniziale fornisce una descrizione della architettura del sistema, e da tale specifica
si deduce una struttura logica. Nel corso del passaggio si compiono delle scelte (ad
esempio, il tipo di “forma” logica scelta, la famiglia di porte logiche, le fasi di
ottimizzazione e di conseguenza le relative scelte di merito) che corrispondono ad
altrettanti incrementi di informazione. Nelle fasi di sintesi si può ricorrere a strumenti di
sintesi automatica, che realizzano il passo richiesto applicando opportuni criteri di
ottimizzazione; oggi si tende a non esigere più uno strumento di sintesi “monolitico”, che
dalle specifiche comportamentali produca le maschere d’integrazione senza alcun
intervento del progettista, ma si preferisce piuttosto prevedere un’interazione col
progettista stesso che, da un livello all’altro, può scegliere fra diversi stili di progetto,
differenti cifre di merito rispetto a cui ottimizzare, diversi vincoli non-funzionali da
introdurre.
Al termine di ogni passo di sintesi, si presenta evidentemente la necessità di verificare in
qualche modo che il risultato della sintesi – il progetto, sia pure parziale, così ottenuto –
sia congruente con la specifica da cui la sintesi è stata effettuata; se il progetto ha
complessità anche limitata (e la complessità dei moderni sistemi digitali non è affatto
limitata!) una verifica “manuale” affidata alla buona volontà e all’intuito del progettista è
del tutto insufficiente. Oggi, la verifica di correttezza della sintesi viene normalmente
compiuta mediante simulazione, utilizzando strumenti di CAD che “simulano” il
3 4
INTRODUZIONE INTRODUZIONE
Definizione iniziale
descrizione di hardware” (HDL);
dell’architettura
• la libreria di modelli;
• i “vettori di ingresso” (cioè le configurazioni degli ingressi per cui si vogliono valutare
Descrizione in un le reazioni del sistema)
linguaggio formale
e si ricavano le risposte (livelli logici alle uscite, eventualmente temporizzazioni e altri
parametri). Si identifica subito il principale problema della “verifica per simulazione”, e
Simulazione ad alto cioè la necessità di determinare un insieme di vettori di ingresso sufficiente a garantire la
livello
correttezza del progetto – o più propriamente la rispondenza del progetto alle specifiche.
A meno che il sistema non sia molto piccolo, una simulazione esaustiva è ovviamente
Sintesi logica
improponibile in termini di tempo di calcolo; peraltro, è pressoché impossibile garantire
floorplanning
che il sottoinsieme di vettori d’ingresso effettivamente adottato sia sufficiente a ”coprire”
tutte le situazioni possibili e quindi a fornire la richiesta garanzia. In genere, il progettista
Librerie,
Analisi statica modelli di deve identificare sulla base della propria esperienza l’insieme di situazioni che giudica
delle Simulazione a livello logico
componenti più “critiche” ai fini della sollecitazione del sistema; alcuni casi ben noti di circuiti
temporizzazioni
digitali anche di notevole diffusione che hanno mostrato – una volta già inseriti sul
mercato – di essere afflitti da errori di progetto sono dovuti proprio a una fase di verifica
Layout guidato dalle per simulazione che non ha sollecitato tutti i possibili percorsi di attivazione all’interno
$VVHU]WHP temporizzazioni
del sistema.
Analisi statica Oltre ai diversi livelli di astrazione che si sono finora citati, è possibile anche che il
delle progettista affronti il sistema digitale partendo da differenti viste: queste sono state
3DUDP
temporizzazioni
(OHWWU
schematizzate molto utilmente da Gajski nel cosiddetto “diagramma a Y”, mostrato in
figura 1.3:
Verifica tecnologica
post-layout Vista strutturale
Vista
comportamentale
/LYHOOR DUFKLWHWWXUDOH
Al processo di produzione
Livello logico
/LYHOOR JHRPHWULFR
Figura 1.2. Flusso di progettazione con verifica.
5 6
INTRODUZIONE INTRODUZIONE
Viste e livelli sono ortogonali fra di loro: A livello architetturale e a livello logico, la sintesi si muove da una vista
comportamentale a una strutturale, mentre a livello geometrico ci si muove dalla vista
• la vista comportamentale (behavioral) descrive le funzioni indipendentemente dalla
strutturale (lo schema delle porte logiche) alla vista fisica (il layout).
implementazione;
Il ricorso a strumenti automatici di simulazione e di sintesi rende evidente
• la vista strutturale descrive il modello come interconnessione di componenti;
l’indispensabilità di un linguaggio formale per la descrizione dei circuiti digitali: in
• la vista fisica riguarda gli oggetti fisici di un progetto (es., i transistori). effetti, un formalismo rigoroso risulta utile anche indipendentemente dalle attività di
Modelli di sistemi digitali a diversi livelli possono essere osservati sotto diverse viste. Ad CAD – ad esempio, per garantire che un circuito anche di grande complessità sia
esempio, a livello architetturale la vista comportamentale di un circuito indica l’insieme accompagnato da una documentazione completa che resti leggibile e comprensibile a un
di operazioni compiute e le dipendenze fra di esse; la vista strutturale precisa invece gruppo di progetto che può cambiare nel tempo o a una vasta utenza del progetto stesso
l’interconnessione dei principali blocchi funzionali (unità funzionali, registri etc.) che voglia integrare il circuito in un proprio sistema. La definizione di linguaggi per la
componenti del sistema. A livello logico, invece, la vista comportamentale di un circuito descrizione di hardware ha coinvolto gli studiosi del settore oramai da diversi decenni: si
sequenziale sincrono è data dal diagramma degli stati, mentre la vista strutturale dello sono distinte due diverse tendenze – estendere un linguaggio di programmazione
stesso circuito consiste nella interconnessione di porte logiche e bistabili. La sintesi può esistente, in modo da supportare le esigenze del progetto hardware, oppure introdurre un
ora essere considerata come un insieme di trasformazioni fra due viste assiali. Così, la linguaggio specifico (sia pure allineato con le caratteristiche dei linguaggi di
sintesi a livello architetturale genera una vista strutturale di un modello a livello programmazione recenti) di cui le esigenze della progettazione hardware siano le
architetturale; si assegnano le funzioni del circuito a operatori (risorse), di cui si principali linee guida. Un esempio della prima tendenza è stato Hardware-C, definito
determinano le interconnessioni insieme alla temporizzazione dell'esecuzione delle nell’ambito dell’Università di Stanford; i linguaggi della famiglia HDL oggi di maggiore
operazioni. (Questa fase è detta in genere sintesi ad alto livello). La sintesi a livello logico diffusione (adottati dai più noti pacchetti CAD) seguono invece la seconda tendenza, e
genera poi una vista strutturale di un modello a livello logico, determinando la struttura sono in particolare Verilog e VHDL. Verilog ha origini essenzialmente commerciali;
del circuito costituito da porte logiche. Infine, la sintesi geometrica è il progetto fisico del VHDL nasce da un progetto del ministero della difesa americano (il progetto VHSIC -
circuito: tipicamente, nel caso dei circuiti microelettronici produce il layout del circuito Very Hign Speed Integrated Circuits) di cui costituiva appunto il linguaggio di
stesso. Rifacendosi allo schema di figura 1.3, un percorso di sintesi può essere descrizione hardware, ed è stato definito in moo da rispondere a un certo numero di
schematizzato come in figura 1.4: requisiti essenziali. In questo corso, si farà riferimento a VHDL, che a livello europeo è
diventato de facto lo standard: prima di affrontarlo, nel prossimo capitolo, vale la pena di
Vista strutturale considerare le principali differenze fra un linguaggio del grupo HDL e un normale
Vista
comportamentale linguaggio di programmazione in relazione alle differenze esistenti tra la realizzazione
/LYHOOR DUFKLWHWWXUDOH
automatica del software e la progettazione di circuiti digitali . Si consideri per esempio la
Livello logico scrittura in C dell'algoritmo per il calcolo del massimo comune divisore (GCD).
#include <stdio.h>
int gcd(int xi, int yi)
/LYHOOR JHRPHWULFR {
int x, y, temp; main()
{
x = xi; int xi, yi, ou;
y = yi;
while (x > 0){
if (x <= y){ scanf("%d %d", &xi, &yi);
temp = y; ou = gcd(xi, yi);
9LVWD ILVLFD y = x;
x = temp; printf("%d\n", ou);
} }
Figura 1.4. Percorso di sintesi sul "diagramma a Y". x = x - y;
7 8
INTRODUZIONE INTRODUZIONE
9 10
INTRODUZIONE INTRODUZIONE
dello hardware. Con un linguaggio HD deve infatti essere possibile specificare le Nel prossimo capitolo, si definiranno le principali caratteristiche del linguaggio VHDL.
caratteristiche della macchina virtuale che eseguirà l'algoritmo che nella progettazione
software è predefinita (microprocessore + sistema operativo + ambiente di sviluppo)
mentre nella progettazione hardware viene definita durante la realizzazione dell'algoritmo 1.2 INTRODUZIONE AL VHDL
stesso.
VHDL riprende alcuni concetti di ADA: in particolare, adotta la filosofia “specification-
Questo è il motivo per cui sono stati ideati dei linguaggi appositi le cui caratteristiche and-body”, che distingue (e separa) esplicitamente la specifica – che rappresenta le
principali possono essere così riassunte. interfacce di un componente – dal corpo del componente stesso. Ciò consente di associare
Una prima caratteristica che un linguaggio HD deve mostrare è la capacità di a un’unica specifica più corpi, che rappresentano altrettante viste o anche diversi progetti
rappresentare adeguatamente la concorrenza. Le varie parti di un circuito o di un sistema alternativi. Le alternative che si riferiscono a un’unica funzione devono riferirsi a
digitale operano in modo essenzialmente concorrente - si può dire che la simultaneità di un'unica interfaccia esplicita, e poter essere indicate con un nome univoco. La possibilità
esecuzione fra le varie parti è la regola, mentre la sequenzializzazione deve essere di creare alternative deve valere a tutti i livelli di astrazione: le diverse viste possono
“forzata” e controllata opportune unità di controllo. La normale esecuzione di un essere riassunte nei seguenti termini:
programma software avviene invece su un processore singolo che esegue in modo La vista comportamentale deve supportare descrizioni algoritmiche o procedurali.
sequenziale il programma (anche là dove esiste nella CPU un grado di parallelismo L’ordinamento lineare delle istruzioni in una descrizione comportamentale indica la
questo viene mascherato all’utente, come si vedrà più avanti). normale sequenza di elaborazione: occorrono quindi appositi costrutti di controllo per
Un secondo requisito di un linguaggio HD è la possibilità di rappresentare in qualche modificare la sequenza “di default”. Per definizione, la descrizione puramente behavioral
modo la informazione strutturale relativa a un circuito - identificare ad esempio i non deve implicare una struttura architetturale o circuitale.
collegamenti fra le porte d’ingresso di un’unità aritmetica e la porta di uscita di un L’approccio architetturale invece deve supportare la descrizione di un progetto circuitale
registro: questo deve essere possibile a diversi livelli di astrazione - un linguaggio HD con tecniche non procedurali. La struttura viene implicata usando condizioni di tipo
deve essere capace di supportare descrizioni gerarchiche del sistema digitale, in modo da logico per controllare l'esecuzione di ogni singola istruzione. La semantica del linguaggio
supportare sia un flusso di progetto top down (come quello ideale introdotto prima) sia un deve
progetto bottom-up. Il linguaggio deve anche supportare un progetto modulare; ed essere
• permettere espressioni di controllo parallele, concorrenti e sequenziali
strutturato in modo che una modifica interna a un'unità del progetto non richieda una
ricompilazione dell'intero progetto. Sempre in un’ottica di modularità, il linguaggio deve • consentire la valutazione di condizioni parallele in punti che possono essere
consentire il riuso di unità di progetto precedentemente create - quindi costruzione e uso determinati sulla base di transazioni (handshake implicito), eventi (handshake
di librerie. esplicito) o periodicità (clock implicito).
La possibilità di muoversi a vari livelli di astrazione è il terzo requisito dei linguaggi HD. La descrizione architetturale deve implicare una struttura. Il progettista può facilmente
separare flusso di controllo e flusso di dati. La logica del flusso di controllo viene
Un quarto punto riguarda la necessità di fornire (almeno in alcuni casi) precisi vincoli
rappresentata dalle condizioni poste sull'esecuzione di ogni istruzione; l'istruzione
temporali: questo è indispensabile per simulare sistemi reali, ai cui componenti siano
eseguita rappresenta il flusso dei dati. La sequenza “puro comportamento/architettura/
associati sia ritardi inerziali sia ritardi di trasporto, come anche per potere sincronizzare
pura struttura” deve essere vista come un tutto continuo.
fra loro diverse parti di un circuito o diversi sottosistemi (ciò implica, fra l’altro, la
possibilità di definire dei clock). La descrizione strutturale deve
Infine, il quinto (ma non certo meno importante) requisito riguarda la possibilità di • permettere l'identificazione delle unità strutturali usate e dei loro connettivi;
supportare descrizioni rispondenti alle diverse viste del sistema, come prima definite. In • estendersi su più livelli di astrazione;
particolare, occorre supportare sia viste comportamentali, sia viste strutturali, e ciò
• fornire solo informazioni sull'interconnessione fra i componenti, senza associare
indipendentemente dal livello di astrazione cui si opera.
11 12
INTRODUZIONE INTRODUZIONE
contenuto comportamentale ai componenti stessi. facilmente il funzionamento interno di un modello senza modificarne le viste esterne,
La principale astrazione hardware VHDL è la design entity, che consente quella associare a una vista esterna più soluzioni interne, ecc.
separazione fra interfaccia e funzione indicata prima. Una design entity consta di una Ogni oggetto in VHDL deve appartenere a un tipo e non può cambiare il tipo cui
interfaccia - che descrive la “piedinatura” del modulo mediante le porte (che definiscono appartiene. Esistono quattro famiglie di tipi:
i canali di comunicazione fra design entity e mondo esterno) e fornisce altri parametri (ad
1) scalari: interi, in virgola mobile, tipi fisici e tipi enumerati;
esempio, le caratteristiche temporali) necessari per usare il modulo – e di un corpo o body
che descrive l’organizzazione e/o il comportamento (a seconda dello stile adottato) del 2) compositi (tabelle e record)
modulo stesso. A un’interfaccia possono corrispondere più corpi diversi, ognuno dei quali 3) accesso (puntatori)
rappresenta una diversa realizzazione o mette in luce un diverso aspetto progettuale (dà
4) files.
cioè una diversa “vista” dell'entità). Così, ad esempio, un corpo può descrivere il
comportamento, un altro la struttura scomposta in interconnessione di sottocomponenti, Gli oggetti possono appartenere a tre classi: costanti, variabili, segnali. Le costanti hanno
un terzo il funzionamento in termine di trasferimenti a livello RT. un valore fissato una volta per tutte - eventualmente, dopo una fase di inizializzazione. Le
variabili hanno un valore che può essere modificato con un’istruzione di assegnamento. I
Una design entity può riferirsi a un modulo di complessità qualunque, dalla porta logica a
segnali sono caratteristici della descrizione hardware: modellano infatti l’informazione
un intero calcolatore. L’interfaccia contiene informazione comune ai corpi alternativi; una
che passa su un collegamento, un bus ecc. Per mettere in evidenza la differenza fra
parte di tale informazione - la specifica di porte (ports) e generici (generics) è visibile
variabili e segnali, si considerino dapprima due variabili A e B: si può scrivere A=B e
esternamente.
successivamente modificare A e/o B - una variabile è infatti per sua natura dinamica
Passando a un livello di astrazione più elevato, una design entity precedentemente (corrisponde al contenuto di una parola di memoria). Un segnale invece riflette una realtà
specificata può essere a sua volta usata come componente a livello di astrazione più strutturale ed è per natura statico, ed esiste indipendentemente dalla sua zona di visibilità.
elevato: l'interfaccia deve corrispondere a quella del componente (l'informazione visibile La notazione A <= B stabilisce un collegamento definitivo fra i due segnali; se B cambia,
esternamente viene usata per le verifiche di consistenza). anche A potrà risultare modificato (eventualmente dopo opportune verifiche di
VHDL è un linguaggio orientato a librerie:, una volta che un testo sorgente è stato realizzabilità), ma il segnale mantiene la propria “storia”, cioè l’insieme di informazioni
compilato correttamente, il risultato viene inserito in una libreria gestita dal library che lo pilota.
manager del VHDL. Il linguaggio è organizzato sulla base di unità di progetto (design Il VHDL supporta cinque tipi di unità di progetto: tre di questi sono tipi di unità di
units) compilabili separatamente: la compilazione portata a buon fine di un file VHDL progetto primarie e due tipi di unità secondarie. Una unità primaria descrive quello che
aggiunge alla libreria corrente una o più unità di progetto. Si possono introdurre più unità viene fatto da una '”scatola nera”, mentre una unità secondaria descrive come viene fatto.
di progetto in un unico file; non si può spezzare un'unità di progetto unica su più files. Le unità di progetto esistenti in VHDL sono:
L’unità compilata correttamente viene inserita nella libreria di lavoro, gestita dal
compilatore VHDL: il progettista lavora sulla propria libreria referenziandone - a seconda 1) dichiarazioni di entità (entity declaration);
della necessità - altre (precostituite, o contenenti i modelli generali o oggetti di utilità 2) architetture (architecture);
generale) dette librerie delle risorse.
3) configurazioni (configuration);
La descrizione hardware viene vista come un insieme di modelli e di algoritmi che i
4) dichiarazioni di pacchetto (package declaration);
modelli usano. Il modello è costituito da una vista esterna (che mostra le sue connessioni
col resto del mondo) e da una vista interna (che ne descrive la realizzazione). 5) corpi di pacchetto (package body).
Un modello VHDL corrisponde alla già citata entità: la sua vista esterna è la Nel seguito si indicheranno brevemente sintassi e caratteristiche delle unità di progetto e
dichiarazione di entità, la vista interna costituisce l’architettura. Ognuna delle due parti è si presenteranno alcuni aspetti rilevanti che differenziano VHDL da altri linguaggi di
una unità di progetto. È ragionevole separare le diverse unità per poter modificare programmazione; per uno studio più approfondito si rimanda ai testi specifici riguardanti
13 14
INTRODUZIONE INTRODUZIONE
XI end nome_dell'architettura;
15 16
INTRODUZIONE INTRODUZIONE
17 18
INTRODUZIONE INTRODUZIONE
19 20
INTRODUZIONE INTRODUZIONE
dovremmo affermare che non può funzionare, dato che si usa il segnale sel prima di La parte dichiarativa dichiara la variabile locale temp; la parte istruzioni contiene due
avergli assegnato un valore; entra qui in gioco il concetto di concorrenza. L’istruzione di istruzioni sequenziali, e precisamente l’assegnamento di variabile (temp :=…) e
assegnamento condizionato che dà valore a sel viene eseguita tutte le volte che a o b l’istruzione if then else. La sensitivity list è esplicita e contiene due segnali - a e b - che
cambiano valore (a e b ne sono la sensitivity list): solo in tal caso il segnale sel viene a coincidono con le due porte d’ingresso; le porte creano segnali che possono poi essere
sua volta modificato. A sua volta, l’assegnamento selezionato viene eseguito solo quando usati come segnali d’ingresso (dualmente si opera con le porte di uscita e con le porte
sel cambia valore - sel è la sua sensitivity list. Si ha quindi la garanzia di corretta inout).
esecuzione indipendentemente dall’ordine in cui le istruzioni sono scritte. Consideriamo ora come creare una descrizione sequenziale dello stesso multiplexer per
cui si è fornita prima una descrizione concorrente; si vedrà dapprima una descrizione
1.2.5 Lo stile di descrizione sequenziale formalmente corretta ma che porterebbe a una simulazione errata, e poi una descrizione
Una descrizione sequenziale presuppone l’esecuzione seriale delle istruzioni,, come nei corretta.
normali linguaggi di programmazione. Le sezioni sequenziali sono incluse in istruzioni Per ambedue le soluzioni la dichiarazione di entità è la stessa:
process - l’istruzione process in sé è di tipo concorrente: può trovarsi all’interno di entity mux is
un’architettura e definisce regioni dell’architettura all’interno delle quali tutte le istruzioni port (i0, i1, i2, i3, a, b: in t_wlogic;
q: out t_wlogic);
sono sequenziali. end mux;
21 22
INTRODUZIONE INTRODUZIONE
considerato come il prossimo evento sul segnale muxval (non essendosi specificati ritardi, Una descrizione comportamentale del GCD, direttamente derivata dalla sua descrizione in
l’evento diventerà ativo al prossimo delta di simulazione): al momento di eseguire linguaggio C, è la seguente:
l’istruzione successiva, il valore usato per muxval sarà l’ultimo che vi è stato propagato - Library IEEE;
use IEEE.STD_LOGIC_1164.ALL
non quello dell’inizializzazione; muxval avrà quindi un valore “spazzatura” che
entity GCD is
cambierà solo dopo l’esecuzione di tutte le istruzioni sequenziali nel processo. port ( CLOCK, RESET : in bit;
XI,YI : in UNSIGNED (SIZE-1 downto 0);
Una realizzazione corretta si genera definendo muxval non come un segnale (che chiede OU : out UNSIGNED (SIZE-1 downto 0)
assegnamenti di segnale) ma come una variabile: );
end gcd;
architecture better of mux is
begin architecture BEHAVIORAL of GCD is
process (i0, i1, i2, i3, a, b) begin
variable muxval: integer; process
begin variable X, Y,TEMP : UNSIGNED (SIZE-1 downto 0);
muxval:=0; begin
if (a=’1’) then wait until CLOCK = '1';
muxval:=muxval+1; X := XI;
end if; Y := YI;
if (b=’1’) then while (X > 0) loop
muxval:=muxval+2; if (X <= Y) then
end if; TEMP:=Y;
if (a=’1’) then Y := X;
case muxval is X:=TEMP;
when 0=> end if;
q<=i0 after10 ns; X := X - Y;
when 1=> end loop;
q<=i1 after10 ns; OU <= Y;
when 2=> end process;
q<=i2 after10 ns; end behavioral;
when 3=>
q<=i3 after10 ns; Si può evidenziare come il VHDL proponga una soluzione per gli aspetti tipici della
when others =>
progettazione hardware.
null;
end case;
end process; • Ingresso/uscita. La definzione dell'interfaccia del dispositivo viene espressa mediante
end better; le porte di ingresso e uscita riportate nella dichiarazione della ENTITY.
In questo caso, all’esecuzione della prima istruzione la variabile muxval riceve • Ampiezza delle variabili. Utilizzando il tipo array di BIT è possibile definire
immediatamente il valore 0; dato che si tratta di una variabile, non si pone il problema di esattamente l'ampiezza delle variabili e dei segnali. Inoltre, in questo esempio,
effettuare l’assegnamento solo dopo un opportuno ordinamento temporale. Il nuovo l'utilizzo del tipo UNSIGNED permette di specificare che le operazioni avverranno tra
valore è immediatamente utilizzabile per le istruzioni successive, che provocano a loro numeri in modulo, dato che l'algoritmo del GCD non funziona per numeri negativi.
volta assegnamenti immediati; al momento di eseguire l’istruzione case, muxval ha
• Operatori e operandi. Tutte gli operatori utilizzati sono descritti nel package
sicuramente assunto il valore corretto.
STD_LOGIC_1164 e sono associati a componenti di libreria predefiniti che verranno
utilizzati durante la sintesi.
1.2.6 Riassunto
• Temporizzazione. Il segnale esplicito di CLOCK e la presenza dell'istruzione WAIT,
Lo stile di descrizione sequenziale si avvicina maggiormente allo stile di descrizione permettono di sincronizzare il circuito prodotto con la frequenza di questo segnale.
utilizzato nei linguaggi di programmazione. Ritornando all'esempio del GCD descritto in
• Elementi di memoria. Gli elementi di memoria vengono associati alle variabili in base
C, è quindi ora possibile darne la descrizione in VHDL e verificare che gli aspetti tipici
al modo in cui l'algoritmo è stato descritto. Per esempio, visto che alla variabile X
della progettazione hardware, elencati nell'introduzione, siano esprimibili in VHDL.
23 24
INTRODUZIONE INTRODUZIONE
viene assegnato il suo valore precedente meno Y, nel circuito sintetizzato, alla (prototipo che tradizionalmente veniva realizzato nel corso del progetto) mediante un
variabile X deve essere associato un registro dell'ampiezza di SIZE bit. prototipo software, più facilmente realizzabile e modificabile; Nel caso di un circuito
integrato, la tradizionale prototipazione - che, per motivi di costo, è inevitabilmente
• Esecuzione delle istruzioni. Avendo descritto l’algoritmo del GCD con il costrutto
processo, è stata scelta una rappresentazione sequenziale del comportamento che è effettuata con “logica sparsa” o comunque con tecnologie differenti da quella finale -
fornisce in realtà informazioni meno precise di quelle che si possono ottenere mediante
particolarmente adatta alla descrizione di algoritmi. Si nota infatti che la descrizione
una simulazione, a patto che il modello interno dei componenti (in particolare, per quanto
del GCD in VHDL è molto simile alla descrizione in linguaggio C. Il VHDL ha
riguarda ritardi, comportamento elettrico ecc.) sia sufficientemente fedele.
permesso di utilizzare questo tipo di descrizione, ma permette anche di rappresentare,
per esempio a livello RT, lo stesso circuito mediante componenti interagenti (registri, La verifica di un progetto basata su simulazione consente inoltre di:
multiplexer, sommatori, etc.). É quindi possibile rappresentare in VHDL l’interazione
• controllare condizioni di errore;
tra componenti concorrenti, tipica dei circuiti elettronici, descrivendo al contempo il
loro comportamento mediante sequenze di istruzioni. • variare i ritardi in modo da controllare condizioni “di caso pessimo”;
• Sincronizzazione tra i moduli. L’algoritmo del GCD è stato descritto a livello di • verificare i valori attesi secondo le specifiche dell'utente;
astrazione comportamentale con un unico modulo. I programmi di sintesi possono • inizializzare il circuito simulato in uno stato arbitrario;
tradurre questa rappresentazione in descrizioni a livello RT ed a livello logico
• controllare in modo preciso la temporizzazione di eventi asincroni (es.: interrupt);
composte da entità interagenti. Queste descrizioni possono essere rappresentate
nuovamente in VHDL, in stile strutturale, e la sincronizzazione tra i moduli è garantita • fornire un ambiente per la successiva verifica dei guasti (testing) del circuito simulato.
dal segnale di CLOCK esplicitamente modellato. Vale la pena di notare che non tutte queste operazioni potrebbero, in genere, essere
compiute sul sistema fisico (o comunque non potrebbero essere compiute in modo
economicamente accettabile); quindi la simulazione è indispensabile per identificare il
1.3 LA SIMULAZIONE LOGICA: CENNI INTRODUTTIVI comportamento del sistema anche in tali situazioni.
Una volta descritto in un linguaggio formale, un sistema digitale può essere simulato Quando si voglia operare una verifica del progetto basata su simulazione, si presentano
mediante un opportuno programma; come si è già accennato, la simulazionecostituisce la tre problemi correlati:
forma più diffusa di verifica del progetto, sia essa in termini logici o coinvolga anche gli
• come generare gli stimoli d'ingresso;
aspetti temporali. La simulazione di un sistema digitale può essere ricondotta allo schema
generale di figura 1.5: • come verificare che i risultati ottenuti siano corretti;
• come garantire (o in quale misura) che gli stimoli applicati forniscano una verifica
Stimoli e controllo Programma di Risultati “completa”.
simulazione
Gli stimoli d'ingresso sono abitualmente organizzati in una sequenza di casi di prova
(test), ognuno dei quali deve verificare un certo aspetto del comportamento del modello. I
risultati sono considerati corretti quando corrispondono a quelli previsti nelle specifiche.
Modello interno
È importante rilevare la differenza fra generazione dei test per la verifica del progetto (lo
scopo è l'identificazione degli errori di progetto) e generazione dei test per
l'identificazione dei guasti fisici in un sistema prodotto (lo scopo è verificare l’integrità
fisica del prodotto). Molto spesso, in ambedue i casi si opera a livello logico; infatti, la
Figura 1.5. Schema generale della simulazione. maggior parte dei guasti fisici possono essere modellati mediante guasti logici, il cui
effetto sul comportamento del sistema è ben definito. Si può basare il test per un certo
La simulazione spesso sostituisce la realizzazione di un prototipo hardware del circuito
25 26
INTRODUZIONE INTRODUZIONE
guasto sulla differenza di comportamento fra il sistema in cui il guasto è presente e il data-flow o strutturali, ma non algoritmiche.
sistema sano. Per esempio, si riprenda l'entity del full adder descritta in VHDL nel seguente modo:
Mentre in genere i modelli di guasto logico rendono i guasti numerabili, e la qualità del entity SOMMATORE is
port ( A,B,CIN; in BIT;
test (cioè dell’insieme di stimoli adottati per il collaudo) può essere valutata come O,COU: out BIT);
rapporto fra numero di guasti rilevati dal test e numero totale di guasti nel modello end SOMMATORE;
(copertura di guasto), al contrario lo spazio degli errori di progetto non è ben definito, e La sua descrizione in formato .blif è la seguente:
l'insieme degli errori di progetto non è numerabile: è quindi impossibile sviluppare .model SOMMATORE
algoritmi di generazione dei test per la verifica del progetto o definire misure rigorose .inputs A B CIN
.outputs O COUT
della qualità per i test stessi. La verifica del progetto mediante simulazione ha gravi .end
limiti. la produzione degli stimoli d'ingresso è una procedura euristica, basata sull'intuito
Si noti che, tutte le parole chiave del formato .blif iniziano con un punto, non c'è
e l'esperienza del progettista; se un sistema “passa” la verifica, si è dimostrato solo che il
distinzione tra lettere maiuscole e minuscole, il modello si conclude con la parola chiave
progetto è corretto rispetto ai casi di test applicati - cioè si dimostra una correttezza
.end e nessuna network è associta a questo modello. Ossia, questo modello non fornisce
parziale (e non è in genere possibile dimostrare la completezza del test). Nonostante
una corrispondenza tra ingressi ed uscite che deve essere fornita mediante la tabella delle
questi limiti, la simulazione è uno strumento molto utile ed efficace per il collaudo di un
verità del full adder. Infine, tutti i segnali in formato .blif sono di tipo BIT.
progetto (di fatto, l'unico di uso comune oggi).
Se si crea il file di testo sommatore.blif con la descrizione del modello, è possibile
utilizzare SIS per eseguire i comandi di base (in grassetto)2:
1.4 LA PROGETTAZIONE AUTOMATICA: IL PROGRAMMA SIS UC Berkeley, SIS 1.3
(compiled 31-Dec-98 at 11:17 AM)
La teoria della progettazione digitale descritta nei prossimi capitoli sarà esemplificata, sis> read_blif sommatore.blif
quando possibile, con l'ausilio del programma SIS di Berkeley. La scelta di questo Il modello del sommatore viene caricato in memoria.
programma è dovuta in primo luogo alla possibilità di usarlo in maniera libera su diverse sis> print_stats
SOMMATORE pi= 3 po= 2 nodes= 2 latches= 0
architetture hardware/software (unix, windows, ecc). Inoltre, pur essendo dotato di una lits(sop)= 0
interfaccia utente molto rudimentale, permette di eseguire tutte le fasi di ottimizzazione
Il modello in memoria si chiama SOMMATORE, ha 3 bit di ingresso (pi), 2 bit di uscita
logica per circuiti combinatori, sequenziali sincroni e asincroni. Programmi commerciali
(po), 0 elementi di memoria (latches) e la rete associata è composta da 2 nodi
di sintesi automatica risultano indubbiamente più semplici da usare, ma nascondono
(nodes) a cui non sono associate equazioni poiché il numero di letterali (lits),
all'utente la maggior parte delle operazioni di sintesi effettuate. Il capitolo 8 riprenderà
calcolato in somma di prodotti (sop), è zero.
comunque l'utilizzo del VHDL, brevemente introdotto in questo capitolo, facendo
sis> write_blif
riferimento ad un qualsiasi compilatore/simulatore commerciale di questo linguaggio. .model SOMMATORE
.inputs A B CIN
Il programma di progettazione SIS si basa sulla descrizione testuale di componenti .outputs O COUT
(model) su cui si possono eseguire operazioni di ottimizzazione. Il concetto di .names O
.names COUT
componente è equivalente a quello di design-entity del VHDL. .end
La descrizione di un modello, come descritto nel seguito, può essere gerarchica e si basa La lettura del modello ha quindi fatto sì che SIS creasse una network in cui le uscite sono
sul formato .blif (Berkeley Logic Interchange Format). Ogni componente è identificato da poste a zero come si vede stampando sullo schermo il modello corrente.
un nome, l'elenco degli ingressi e delle uscite e da una rete di nodi (network) che descrive sis> quit
la relazione tra gli ingressi e le uscite.
Riferendosi al VHDL, si può dire che il formato .blif permette di dare descrizioni di tipo
2 è possibile avere la descrizione di ogni comando eseguendo help nome_comando.
27 28
INTRODUZIONE INTRODUZIONE
3
I file di libreria sono ricercati da SIS nelle directory elencate nella variabile OPEN_PATH il cui
valore può essere modificato col il comando set interno a SIS.
29 30