• HDL nel flusso di progettazione digitale • Elementi base del VHDL

Transcript

• HDL nel flusso di progettazione digitale • Elementi base del VHDL
Laboratorio di Elettronica
1
Introduzione al VHDL
• HDL nel flusso di progettazione
digitale
• Elementi base del VHDL
• Meccanismo di simulazione
• Meccanismo di sintesi
2
1
Organizzazione del corso
• Lezione 1:
– introduzione al VHDL, sintassi, metodi di
programmazione
• Lezione 2:
– uso dell’ambiente di sviluppo per FPGA –
Xilinx. Programmazione, sintesi, simulazione.
Esempio svolto su un contatore
• Lezione 3:
– descrizione e utilizzo della Spartan 3.
Programmazione, mappatura dei pin, uso del
Chipscope
3
Organizzazione del corso
• Lezione 4:
– Progetto: realizzazione e test di un
modulatore a PWM. Determinazione dei fronti
di comando per un inverter a mezzo ponte
con tempi morti di comando.
• Lezione 5:
– Progetto: - da definire – realizzazione di una
operazione aritmetica
• Lezione 6:
– Progetto: - da definire – pilotaggio di una VGA
4
2
Organizzazione del corso
• Materiale e manuali vengono resi disponibili sul
sito web
• E’ necessario, soprattutto nella fase iniziale,
leggere e capire il linguaggio di programmazione
– dedicare molto tempo per lo studio nella prima
settimana –
• Tutti i progetti saranno disponibili sul sito web, in
modo che durante l’esercitazione ci possa
essere un backup nel caso di problemi
5
Introduzione
A chi e’ dedicato?
Ai progettisti di circuiti e sistemi logici che utilizzano
sistemi CAE (Coputer Automated tools for Electronic
design)
Un po’ di storia:
1983: il dipartimento della difesa (DOD) all’interno del
progetto VHSIC (Very High Speed Integrated Circuti)
sviluppa un linguaggio di descrizione Hardware
1987:l’IEEE lo riconosce come STANDARD (1076)
1993:Il linguaggio viene migliorato con delle
integrazioni “minori”
Attualmente: A causa della attuale complessita’ dei
circuiti ha surclassato altre metodologie (schematic
capture)
6
3
Vantaggi
• Progetto di tipo “technology -independent”
– Impiegato da diversi fornitori / venditori (sia di HW
che SW)
– Facilita gli “aggiornamenti” del sistema progettato
– Documentazione del progetto e’ “STANDARD”
• Miglioramento nella qualita’ del progetto
– Consente di analizzare varie alternative
– Consente piu’ livelli di astrazione
• Verifica ad un elevato livello di astrazione
• Paragone delle prestazioni tra vari livelli di astrazione
• Integrazione tra blocchi sviluppati a vari livelli
– Riutilizzo e condivisione di blocchi gia’ sviluppati
• Miglioramento della descrizione circuitale ai bassi livelli
7
Considerazioni
• E’ meno “immediato” di uno schema digitale
• E’ sintatticamente … pesante
• Essendo uno “Standard Aperto” vi si possono
definire strutture e/o tipologie di variabili non
direttamente collegabili alla struttura del circuito
• Solo un sottoinsieme del VHDL e’ fisicamente
“sintetizzabile”
• Esistono tools di sviluppo che consentono di
ricavare descrizioni in VHDL partendo da
Schemi, Macchine a Stati Finiti, Tabelle di
verita’, ecc….
8
4
I linguaggi di descrizione dell’hardware (HDL) - 1
• hanno l’aspetto di un normale linguaggio di
programmazione (tipicamente C), per cui hanno:
– diversi tipi di dati e oggetti (costanti, variabili,
espressioni)
– operatori aritmetico/logici, istruzioni sequenziali (if,
while, for…)
– funzioni , sottoprogrammi
• hanno elementi specifici per modellare in modo efficiente
blocchi di hardware
– permettono di definire componenti e istanziarliin una
struttura gerarchica
– supportano la rappresentazione di eventi concorrenti
(cioè, operazioni che non si attivano sempre nello
stesso ordine temporale)
9
I linguaggi di descrizione dell’hardware (HDL) - 2
• sono adatti a descrivere il sistema a diversi livelli di
astrazione
– tipicamente, dal livello più alto (sistema) fino al livello
logico (rete di porte logiche)
– i sistemi tradizionali di rappresentazione di solito sono
specializzati per uno o due livelli: schemi a blocchi
⇒sistema, RTL; schemi logici ⇒livello logico; schemi
elettrici ⇒livello elettrico;
10
5
Livelli di descrizione più usati
• comportamentale (behavioral)
– Funzionalità del sistema a prescindere dall’effettiva
implementazione a livello di celle elementari
– operazioni in sequenza corretta ma senza
informazioni temporali
• RTL (Register Transfer Level o Data-Flow)
– descrizione del sistema in termini di registri, logica
combinatoria, bus e unitàdi controllo
– assegnazione delle operazioni a un determinato ciclo
di clock
• strutturale (structural)
– descrizione del sistema come rete di componenti
elementari (descritti a livello comportamentale)
– possibile analisi dettagliata dei tempi di ritardo
11
VHDL (VHSIC Hardware Description Language)
• supporta a tutti i livelli il flusso di progettazione
– sviluppo, simulazione, sintesi, testing,
documentazione
• descrizione indipendente dalla tecnologia realizzativa
– portabilitàdel progetto da una tecnologia ad un’altra
• permette la simulazione a eventi del sistema
– validazionedi sistemi complessi
• permette la sintesi automatica
– da RTL a netlist di celle (standard)
– da comportamentale a RTL (in perfezionamento)
12
6
Flusso di progetto: uso del VHDL
13
Modeling Digital Systems
• VHDL is for writing models of a system
• Reasons for modeling
– requirements specification
– documentation
– testing using simulation
– formal verification
– synthesis
• Goal
– most reliable design process, with minimum
cost and time
– avoid design errors!
14
7
Domains and Levels of Modeling
Functional
Structural
high level of
abstraction
low level of
abstraction
Geometric
“Y-chart” due to
Gajski & Kahn
15
Domains and Levels of Modeling
Functional
Structural
Algorithm
(behavioral)
Register-Transfer
Language
Boolean Equation
Differential Equation
Geometric
“Y-chart” due to
Gajski & Kahn
16
8
Domains and Levels of Modeling
Functional
Structural
Processor-Memory
Switch
Register-Transfer
Gate
Transistor
Geometric
“Y-chart” due to
Gajski & Kahn
17
Domains and Levels of Modeling
Functional
Structural
Polygons
Sticks
Standard Cells
Floor Plan
Geometric
“Y-chart” due to
Gajski & Kahn
18
9
Descrizione VHDL: concetto base
• La descrizione di un modulo in VHDL è fatta da
due elementi principali:
– un’interfaccia (entity), che definisce i terminali
di I/O e il nome del circuito
– una o più implementazioni(architecture), che
descrivono il comportamento o la struttura
interna del circuito
19
ENTITY + ARCHITECTURE - esempio
• entity, clausola port
– nomi dei terminali: A,B,…
– direzione: in,out
– tipo di dato: bit
• architecture
– parte dichiarativa (prima di
begin) in cui vengono dichiarati
segnali interni
– parte assertiva (tra begin e
end) in cui viene descritto il
comportamento del circuito
– le operazioni tra segnali (interni
e/o di I/O) e le assegnazioni
(<=) definiscono il comportamento del circuito
20
10
Segnali e processi
• gli elementi fondamentali di un modello VHDL sono i
segnali e i processi
• un processo è un blocco di codice che descrive il
funzionamento di un modulo di logica sequenziale o
combinatoria
• Processi diversi comunicano tra loro attraverso segnali
21
Segnali e processi
• un processo si attiva ed esegue la sua funzione in
risposta ad un evento (cioè, ad un cambiamento di
valore) di uno dei segnali a cui è sensibile(indicati in una
lista apposita: sensitivity list)
• in certi casi, la funzione rappresentata da un processo
può essere descritta con una assegnazione concorrente
semplice o condizionata ad un segnale
22
11
Segnali - Introduzione
Signal
….
P <= A
G <= A
S <= P
….
P, G : bit
xor B;
and B;
xor CI;
• i segnali, cioè gli oggetti dichiarati con l’istruzione signal
oppure nella clausola port della entity sono strutture
dati capaci di rappresentare forme d’onda nel tempo
• hanno associato un tipo (nell’esempio bit) e possono
avere un valore iniziale
• nella parte assertiva dell’architecture, compaiono delle
operazioni tra segnali (xor,and, …) e delle assegnazioni
(<=); gli operatori possono essere primitive del VHDL
oppure funzioni e procedure definite dall’utente
23
Segnali - Introduzione
Signal
….
P <= A
G <= A
S <= P
….
P, G : bit
xor B;
and B;
xor CI;
• a sinistra del segno di assegnazione (<=) c’èil target(che
deve essere un segnale), a destra il signaldriver
• l’assegnazione stabilisce un legame tra i suoi ingressi (i
segnalicontenuti nel driver) e la sua uscita (il target),
quindi viene attivata solo quando si ha un evento (cioèun
cambiamento di valore) di uno degli ingressi
• di conseguenza, l’ordine con cui le assegnazioni
vengono scritte all’interno dell’architecture non ha
importanza signal
24
12
Meccanismi di simulazione
• …:
– ogni evento attiva i driver e i processi che sono sensibili al
segnale soggetto all’evento; i driver calcolano il nuovo valore del
segnale target, valore (detto transazione) che viene inserito
nella coda degli eventi del simulatore
– l’esecuzione di tutti i driver sensibili all’evento causa
l’inserimento di una o più transazioni nella coda degli eventi della
simulazione; terminatala fase di esecuzione dei driver, la
simulazione salta alla transazione successiva nella coda e
aggiorna il valore del relativo segnale: se il valore aggiornato è
diverso dal valore precedente, si ha un evento, e, di
conseguenza, una nuova fase di esecuzione dei driver ad esso
sensibili; altrimenti, il simulatore salta alla transazione
successiva nella coda
25
Simulazione
• Un sistema descritto in VHDL viene solitamente
SIMULATO per analizzarne in comportamento
(simulazione comportamentale)
• Bisogna fornire degli stimoli (INPUT)
• Ed avere un sistema capace di osservare
l’evoluzione del modello durante la simulazione,
registrarne le variazioni per un’eventuale
ispezione di funzionamento
• Il simulatore deve aver la possibilita’ di
rappresentare una variabile come “unknown”.
• Package STD_LOGIC_1164
26
13
Sintesi Logica
• Passaggio tra descrizione comportamentale e
descrizione a porte logiche
• La sintesi avviene tramite appositi programmi che si
appoggiano a librerie dove sono descritte le porte
logiche da impiegare (fornite dal venditore)
• La sintesi e’ un processo delicato che deve essere
opportunamente “guidato ed ottimizzato”
• Solo un ristretto sottoinsieme del VHDL si presta ad
essere Sintetizzato automaticamente ovvero:
Non tutto cio’ che e’ scritto in VHDL e’ sintetizzabile
• La restante parte e’ da impiegarsi per la descrizione e
per la simulazione
27
Sintassi e dettagli del VHDL
28
14
Elementi Lessicali
• Il VHDL non distingue maiuscole e minuscole
• un commento inizia con – e si estende fino allafine della linea
• un identificatore per segnali, variabili, funzioni, …, inizia con un
carattere alfabetico e può contenere lettere, numeri e il carattere _
• i numeri possono essere interi o reali (se includono il punto):
–0 1 435_197 623E4
– numeri interi
–0.0 1.0 251.436 12.3E-4 – numerireali
–2#1100_0100# 16#C4# 4#301#E1 --numero196
• i caratterivannoracchiusitravirgolettesingole:
–‘A’‘a’‘*’‘1’‘0’
• Una stringa di caratteri è racchiusa tra doppie virgolette:
–“stringa”“”
• le stringhedi bit permettono di specificare in modo semplice valori
per vettori(array) di tipo binario:
–B”101100110101”O”5465”X”B35”--binario, ottale, esadecimale
29
Tipi standard
• Definiti nel package STANDARD contenuto nella libreria
STD
• Presenti implicitamente in ogni simulatore VHDL
30
15
Classi di oggetti: Costanti, variabili, segnali
• Costanti: valori fissi valutati solo una volta
• CONSTANT e: real := 2.71828;
• CONSTANT delay: time := 5 ns;
• CONSTANT index: integer;
• Variabili: valori modificabili tramite assegnazioni
– Utilizzabile solo all’interno di un processo
• VARIABLE count: integer := 0;
• VARIABLE Is High: boolean;
• Segnali: valori modificabili tramite assegnazioni
– tengono traccia di una forma d’onda
– canali di comunicazione tra i blocchi di un modello VHDL
– “eventi”in un segnale attivano la simulazione
• SIGNAL dout: std_logic_vector(7 DOWNTO 0) := B”0000_0000”;
31
Array
• Il range (intervallo di variazione dell’indice) di un array può essere
ascendente o discendente:
– SIGNAL a: bit_vector(3 downto 0); --discendente
– SIGNAL b: bit_vector(0 to 3); --ascendente
• le assegnazioni a array sono basate sullaposizione:
– b <= a; --significa:b(0) <= a(3);…; b(3) <= a(0);
– b(1 downto 0) <= a(3 downto2); -- assegnazione parziale, con
inversione dell’ordine predefinito di b; il risultato è b(1) <= a(3);
b(0) <= a(2);
– a <= (‘1’,’0’,’1’,’0’); --assegnazione tramite aggregato
– a <= B”1010”
-- assegnazione tramite stringa di bit
– a <= X”A”
--come sopra, ma in formato esadecimale
– a <= (OTHERS => ‘1’); --assegnazione dello stesso valore a tutti
gli elementidi a
– b & a -- produce(b(0),b(1),b(2),b(3),a(3),a(2),a(1),a(0))
32
16
Array: attributi
• Nel caso degli array, gli attributi forniscono
informazioni supplementari relative all’indice del
segnale
33
Espressioni e operatori standard
Operatori presenti nel package STANDARD:
• booleani: not, and nand, or, nor, xor, xnor
• relazionali: =, /=, <, <=, >, >=
• shift: sll, srl, sla, sra, rol, ror
–poco usati, hanno un comportamento non
convenzionale
• aritmetici:+, -, abs, +, -, *, /, mod, rem, **–
segnooperazioni
• concatenazione: & –concatena due array,
mettendo l’operando di destra in coda a quello di
sinistra
34
17
Dati per logica multilivello e artimetica binaria
IEEE ha creato due package per tipi di dati (e relativi operatori)
logici e aritmetici:
• STD_LOGIC_1164
– sistema a 9 stati logici
– TYPE std_logicIS (‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’);
– TYPE std_logic_vector IS ARRAY (NATURAL RANGE <>)
OF std_logic;
• NUMERIC_STD
–TYPE unsigned IS ARRAY (NATURAL RANGE <>) OF
std_logic;
–TYPE signed IS ARRAY (NATURAL RANGE <>) OF std_logic;
–unsigned interpretato come rappresentazione binaria di un
intero senza segno; signed interpretato come rappresentazione
in complemento a 2 di un intero
• STD_LOGIC_ARITH
–alternativa (preferita) a NUMERIC_STD
35
Package STD_LOGIC_ARITH
• definiscei tipi unsigned e signed (come in NUMERIC_STD)
• Ridefinisce una parte degli operatori standard per lavorare con
signed, unsigned, std_logic_vector e integer
– booleani (not, and,…): non ci sono! Per applicare gli operatori
booleani ai dati unsigned e signed bisogna prima convertirli
nel tipo std_logic_vector e poi usare glioperatori standard
– relazionali(=, /=, <,…): a differenza degli operatori relazionali
standard, questi hanno ilcomportamento corretto dal punto di
vista artimetico
– shift: operatori std sostituiti da shl(shift left) e shr(shift right)
– aritmetici: ci sono solo -(segno), abs, +, -, *; implementano
operazioni in aritmetica senza segno per i dati unsigned, in
con segno(in complemento a 2) per i dati signed
• Definisce funzioni per le conversioni di dati daun tipo all’altro
conv_signed, conv_unsigned, conv_integer,
conv_std_logic_vector
36
18
Librerie
•
•
•
Una libreria è una collezione di design units il riferimento ad una libreria
avviene attraverso nomi logici
– l’associazione tra i nomi logici e le directory che contengono le librerie è
contenuta in file di setup
– Il nome logico WORK è normalmente usato per la libreria che
memorizza le design units create dall’utente
– la libreria predefinita STD contienei packages STANDARD e TEXTIO
– la libreria IEEE contiene, tra gli altri, i package STD_LOGIC_1164 e
STD_LOGIC_ARITH
per accedere a una libreriae usare le design units in essa contenute:
– LIBRARY IEEE; --permette di accedere alla libreria attraverso il nome
--logico IEEE
– USE IEEE.STD_LOGIC_1164.ALL; --carica tutto(ALL) il contenutodel
package STD_LOGIC_1164
– USE IEEE.STD_LOGIC_ARITH.ALL; --carica tutto (ALL) il
contenutodel package STD_LOGIC_ARITH
37
Istruzioni concorrenti
Le istruzioni concorrenti sono usate all’interno delle architecture
per descrivere il comportamento dei segnali. Si
attivano(vengono eseguite) solo in seguito ad un evento su
uno dei segnali cui sono sensibili, quindi l’ordine di
esecuzione non dipende dall’ordine con cui appaiono nel
modello.
38
19
Istruzioni sequenziali
• Le istruzioni sequenziali compaiono solo all’interno di
processi; vengono eseguite nell’ordine in cui appaiono
all’interno del processo.
39
Confronto tra variabili e segnali
il processo viene eseguito quando a cambia valore (da 0 a 1,
nell’esempio sotto); nel primo caso, x prende il valore di a alla
fine del processo, per cui a y viene assegnato il valore
originale di x (cioè 0); nel secondo caso, x prende il valore di
a quando viene eseguita l’assegnazione x:=a, quindi y
assume il nuovo valore di x
40
20
Procedure e funzioni
41
Linguaggio VHDL
• Esempi
• Elementi di memoria: flip-flop, latch
• Registri
42
21
Esempi: Multiplexer 4-1
43
Esempi: Multiplexer 4-1
44
22
Sommatore: architettura behavioural
45
Sommatore ripple-carry
46
23
Sommatore ripple-carry: uso di generate
47
Multiplexer 16-1: uso di generate
48
24
Elementi di memoria: latch e flip-flop
49
Flip-Flop con reset sincrono e asincrono
50
25
Registro a N bit
51
Registro a scorrimento
52
26