dhow2 - l1
TRANSCRIPT
POLITECNICO DI MILANO
VHDL: una breve VHDL: una breve introduzioneintroduzione
DRESDDRESD HHow ow TTo (DHow2) – L1o (DHow2) – L1
DRESD Team
2
VHDLVHDL
VHSIC Hardware Description Language
Very High Speed Integrated Circuit
Linguaggio per la descrizione dei C.I.
Esistono tre modi per descrivere un C.I.Dataflow – Descrivere un circuito usando i gateStructural – Descrivere un circuito usando delle distinte descrizioni strutturaliBehavioral – Attraverso del codice (ifs, loops, etc.)
3
IntroduzioneIntroduzione
Il Linguaggio VHDL viene utilizzato per: Documentare, Simulare, Sintetizzare circuiti e sistemi logici.Esso è costituito da più parti alcune delle quali fanno parte integrale del linguaggio stesso, mentre altre vengono integrate da opportuni “packages” realizzati all’interno di “libraries”
User Library User Package blocchi e funzioni precedentemente sviluppati dall'utente
Vendor Library Vendor Package blocchi e funzioni sviluppati dal fornitore
Library IEEE Package STD_LOGIC_1164 Package STD_LOGIC_ARITH
Definizione variabili logiche "fisiche" Definizione di funzioni aritmetico-logiche
Library STD Package TEXTIO Package STANDARD
Operazioni su stringhe Unità di tempo, caratteri ASCII, ecc.
Library WORK Local User Package Variabili, blocchi e funzioni locali
4
Un primo esempioUn primo esempio
A <= B + C after 5.0 ns
B
C
A+
8
8
8
Aspetti introdotti:• Descrizione / documentazione• Simulazione• Sintesi Logica
5
Descrizione / DocumentazioneDescrizione / Documentazione
Una delle funzioni del VHDL è quella di descrivere / documentare il funzionamento di un sistema in modo chiare ed inequivocabileNon è detto che questo sistema debba essere realizzatoAlle volte è IMPOSSIBILE la realizzazione fisica del circuitoPotrebbe essere la descrizione di un sistema già in funzionePotrebbe essere un modo per descrivere gli stimoli da impiegare per testare un circuito
6
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 funzionamentoIl simulatore deve aver la possibilità di rappresentare una variabile come “unknown”.
SimulazioneSimulazione
7
Sintesi LogicaSintesi Logica
Passaggio tra descrizione comportamentale e descrizione a porte logicheLa sintesi avviene tramite appositi programmi che si appoggiano a librerie dove sono descritte le porte logiche da impiegare (fornite dal venditore)La sintesi è un processo delicato che deve essere opportunamente “guidato ed ottimizzato”Solo un ristretto sottoinsieme del VHDL si presta ad essere Sintetizzato automaticamente.Non tutto ciò che è scritto in VHDL è Non tutto ciò che è scritto in VHDL è sintetizzabilesintetizzabile
La restante parte è da impiegarsi per la descrizione e per la simulazione
8
Progetto in VHDLProgetto in VHDL
Può essere composto da più unità compilate e salvate in opportune librerie
Queste unità sono:EntityArchitecturePackage
Entity ed Architecture descrivono i componenti come interfaccia e come struttura interna
Package: contiene funzioni e/o grandezze di uso comune
use libreria
entity circuito is...end circutio;
architecture archi of circuito is -- istruzione concorrente 1-- istruzione concorrente 2begin
pa: process begin
-- istruzione sequenziale pa_1
-- istruzione sequenziale pa_2
-- ... end;
pb: process begin
-- istruzione sequenziale pa_2
-- ... end;
end;
Area sequenziale
Area sequenziale
Area concorrente
Struttura generale di un Struttura generale di un programmaprogramma
10
EntityEntity
Descrive un circuito solo come Interfaccia da e verso l’esterno, ne fornisce una visione “ai morsetti”
Descrive gli ingressi e le uscite di un circuito
Non fornisce alcun dettaglio sul funzionamento o sull’architettura
entity circuito isport ( a, b: in bit;
c: out bit );end entity;
Nome della entityNome delle porte
Modo delle porte (direzione)
Tipo delle porteParole riservate
circuito
a
bc
11
ArchitectureArchitecture
Descrive il funzionamento dell’”Entity” tramite:descrizione astratta (comportamentale)equazioni logico/ aritmetiche (dataflow)Interconnessione tra moduli (strutturale)
Lo stesso componente può essere descritto a più livelli di astrazione
12
Architecture: Descrizione Architecture: Descrizione comportamentalecomportamentale
Descrizione comportamentale ad alto livello di astrazione(risulta molto simile ad un algoritmo espresso secondo il classici linguaggi sequenziali (C, Fortran, Pascal, ecc..)Utile per simulare parti di circuito senza dover scendere troppo nel dettaglio del funzionamento.Utilizzo di PROCESS (con lista dei segnali di attivazione) Più operazioni agenti in parallelo risiedono in diversi “Process”Diversi processi comunicano tra loro mediante “SEGNALI” ma al loro interno lavorano mediante “VARIABILI”Al loro interno i “Processes” sono sequenzialiATTENZIONE: non tutto ciò che viene descritto al livello comportamentale risulta sintetizzabile
13
ProcessiProcessi
Un process è un'istruzione concorrente che contiene un'area sequenziale. Un processo viene eseguito parallelamente alle altre istruzioni concorrenti.
L'esecuzione del suo body può essere condizionata da una sensitivity list, una lista di segnali. La sensitivity list non si usa quando il body contiene un'istruzione wait.
In questo caso l'esecuzione viene avviata e si sospende nel modo indicato da wait.
Note:In un processo le variabili locali conservano in proprio valore nel tempo tra un'esecuzione e l'altra.
14
Architecture: descrizione Architecture: descrizione strutturalestrutturale
Descrizione Strutturale ovvero mediante blocchi tra loro interconnessi
I vari “components” devono essere già presenti in una libreria di riferimento
La dichiarazione dei “components” e’ spesso raccolta in un “package”
La “port map” indica il collegamento fisico
Vengono solitamente impiegati segnali interni
15
Un primo esempio…Un primo esempio…
16
Sommare due numeri interi positiviSommare due numeri interi positivi
17
Addizione senza segnoAddizione senza segnobit-slice a propagazione di riportobit-slice a propagazione di riporto
Un sommatore bit-slice ripple carry è strutturato in modo che il modulo in posizione i-esima:
Riceve in ingresso i bit xi e yi degli operandi
Riceve in ingresso il riporto ci del modulo precedente
Produce la somma si = xi'yi'ci + xi'yici' + xiyi'ci' + xiyici
= (xi xor yi)’ci + (xi xor yi)ci’ = xi xor yi xor ci
Produce il riporto ci+1 = xiyi + xici + yici
= xi yi + (xi xor yi)ci
Il modulo in posizione 0 ha il bit di riporto c0=0
Il riporto c0 può essere sfruttato per sommare il valore 1 Necessario per il calcolo del complemento a 2
La somma di numero ad n bit richiede un tempo pari ad n volte circa quello richiesto da un modulo di somma
ci xi yi si ci+1
0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1
18
Full Adder - expressionFull Adder - expression
Full Adder
xi yi
cici+1
si
iiiiiiiiiiiii cyxcyxcyxcyxs xi yi ci
si
iiiiiii cycxyxc 1
xi yi ci
ci+1
Full Adder
19
Half adderHalf adder
X
Y
S
CHA
XY
S
C
X Y S C0 0 0 00
00
00
1 111 1
11
20
Full AdderFull Adder
CHA
HA
Xi
Yi
Ci
S
Ci+1
Si
XY
S
CFA
i
i+1
Ci
i
i
0 0 0 00 0
00
0
11
1
Xi Yi Ci Si Ci+1
11
11
00 1
11
00
0
01
1
11
1
1 111
1
0
000
0
21
Addizione senza segno Addizione senza segno ripple-carryripple-carryPrestazioni: calcolo dei ritardiPrestazioni: calcolo dei ritardi
Il calcolo esatto del ritardo si effettua basandosi sulla seguente architettura Siano Ts e Tr i ritardi per il calcolo della somma e del riporto i-mi rispettivamente
Prestazioni: il ritardo totale per ottenere tutti i bit della somma è dato dall’espressione:
Ttot = (n-1)Tr + Ts
Il percorso critico è quindi quello del riporto
FAn-1 FA1 FA0
x0 y0x1 y1xn-1 yn-1
s1 s0
c0
cn c2 c1sn-1
22
Ripple Carry AdderRipple Carry Adder
Full Adder
x0 y0
c0
s0
Full Adder
x1 y1
c1c2
s1
Full Adder
xn-1 yn-1
cn-1cn
sn-1
Ripple-Carry Architecture
n-bit Ripple Carry
Adder
sn-1 s0
xxn-1 n-1 yyn-1 n-1 xx0 0 yy00
c0cn
Ripple-Carry Adder
23
n-bit Ripple Carry
Adder
sn-1 s0
xxn-1 n-1 yyn-1 n-1 xx0 0 yy00
n-bit Ripple Carry
Adder
s2n-1 sn
xx2n-1 2n-1 yy2n-1 2n-1 xxn n yynnxxkn-1 kn-1 yykn-1kn-1
c0cnc2n
n-bit Ripple Carry
Adder
skn-1 s(k-1)n
c(k-1)nckn
Ripple Carry Block AdderRipple Carry Block Adder
24
Addizione veloce Addizione veloce (ad anticipazione di riporto)(ad anticipazione di riporto) Funzioni di generazione e di propagazione del riportoFunzioni di generazione e di propagazione del riporto
Si basa sulle seguenti considerazioniLe espressioni di somma e riporto per lo stadio i sono:
si = xi'yi'ci + xi'yici' + xiyi'ci' + xiyici
ci+1 = xiyi + xici + yici
L’espressione del riporto in uscita può essere riscritta come:ci+1 = Gi + Pici con Gi = xiyi e Pi = xi + yi
(o anche Pi = xi yi )
Le funzioni Gi e Pi
Sono dette funzioni di generazione e propagazioneGi: se xi=yi=1, allora il riporto in uscita deve essere generato
Pi: se xi o yi=1 e ci =1, allora il riporto in ingresso deve essere propagato in uscita
Possono essere calcolate in parallelo, per tutti gli stadi, rispetto alle rispettive somme.
25
Addizione veloceAddizione velocecalcolo dei riporti in parallelocalcolo dei riporti in parallelo
L’espressione per il riporto ci+1 = Gi + Pici può essere calcolata in modo iterativo.
Sostituendo ci = Gi-1 + Pi-1ci-1 nell'espressione di c i+1 si ha:
ci+1 = Gi + Pi(Gi-1+Pi-1ci-1) = Gi + PiGi-1+ PiPi-1ci-1
Continuando con l'espansione fino a c0 si ottiene:
ci+1 = Gi + PiGi-1 + PiPi-1Gi-2 + + ... + + PiPi-1...P1G0 + + PiPi-1...P1P0c0
I riporti in uscita di ogni singolo stadio possono essere calcolati tutti in parallelo e con ritardo identico (realizzazione SOP) tramite:
le i funzioni di generazione Gi e le i funzioni di propagazione Pi
il riporto in ingresso allo stadio 0, c0
I sommatori che sfruttano il meccanismo della generazione dei riporti in anticipo sono detti Carry-Look-Ahead Adders o CLA Adders
26
CLA Logic c0cn
x0 y0xn-1 yn-1
cn-1 c1
Carry Look-Ahead Logic
x0 y0
G0 P0
c0
c1
x1 y1
G1 P1
c2
Gn-1 Pn-1
xn-1 yn-1
Carry Look-Ahead Logic: Internal architecture
Carry Look-Ahead AdderCarry Look-Ahead Adder
27
Addizione veloceAddizione veloceEsempio: prestazioni per un CLA a 4 bitEsempio: prestazioni per un CLA a 4 bit
2
x0 y0x1 y1
s1 s0
c0
c1
P0 G0
2
2
1
5 2
x2 y2
s2
c2
P1 G1 P0 G0
2
2
1
5
x3 y3
s3
c3
P2 G2P1 G1P0G0
2
2
1
5
c4
2
1P3 G3P2 G2P1G1P0G0
3
•c1=G0+P0c0
•c2= G1+P1G0+P1P0c0
•c3= G2+P2G1+P2P1G0+P2P1P0c0
•c4 = G3 + P3G2 + P3P2G1 + P3P2P1G0 + P3P2P1P0c0
c0c0c0 c0
3 3 3
c4
3
CLA logic
Full Adder
dove
Gi=xiyi
Pi=xi+yi
28
Carry Look-Ahead Logic
Full Adder
c0
s0
Full Adder
c1
s1
Full Adder
xn-1 yn-1
sn-1
cn-1 x1 y1 x0 y0
cn
x0 y0xn-1 yn-1
Carry Look-Ahead Logic
Carry Look-Ahead AdderCarry Look-Ahead Adder
29
E in VHDL?E in VHDL?
30
Complichiamo un pò il problema...Complichiamo un pò il problema...
31
VHDL – Half AdderVHDL – Half Adder
Problema: descrivere un singolo bit half adder con i segnali di carry ed enable
SpecificaIngressi e uscite sono tutti definiti da un solo bitQuando enable è alto, result è x + yQuando enable è alto, carry è uguale x and yLe uscite sono uguali a 0 quando enable è basso
xy
enable
carry
resultHalf Adder
32
Entity Half AdderEntity Half Adder
xy
enable
carryresult
HalfAdder
ENTITY half_adder IS
PORT( x, y, enable : IN BIT; carry, result : OUT BIT);
END half_adder;
33
Half Adder: CircuitoHalf Adder: Circuito
0 0 1 01 0
10
0
11
1
x y e r c
01 1
0
00
0
11
0
0 000
1
0
000
00 01 0
101 1
xy
c
r
e
34
ARCHITECTURE half_adder_a OF half_adder ISBEGIN
PROCESS (x, y, enable)BEGIN
IF enable = ‘1’ THENresult <= x XOR y;carry <= x AND y;
ELSEcarry <= ‘0’;result <= ‘0’;
END IF;END PROCESS;
END half_adder_a;
HA: Descrizione HA: Descrizione comportamentalecomportamentale
35
HA: Descrizione dataflowHA: Descrizione dataflow
ARCHITECTURE half_adder_b OF half_adder ISBEGIN
carry <= enable AND (x AND y);
result <= enable AND (x XOR y);END half_adder_b;
36
ARCHITECTURE half_adder_c OF half_adder IS
COMPONENT and2PORT (in0, in1 : IN BIT;
out0 : OUT BIT);END COMPONENT;
COMPONENT and3PORT (in0, in1, in2 : IN BIT;
out0 : OUT BIT);END COMPONENT;
COMPONENT xor2PORT (in0, in1 : IN BIT;
out0 : OUT BIT);END COMPONENT;
-- description is continued on next slide
HA: Descrizione strutturaleHA: Descrizione strutturale
Dichiarazione dei component
37
-- continuing half_adder_c description
SIGNAL xor_res : BIT; -- internal signal-- Note that other signals are already declared in entity
BEGIN
A0 : and2 PORT MAP (enable, xor_res, result);A1 : and3 PORT MAP (x, y, enable, carry);X0 : xor2 PORT MAP (x, y, xor_res);
END half_adder_c;
HA: Descrizione strutturaleHA: Descrizione strutturale
38
ArchitectureArchitecture
Tutte queste tecniche costitutive per l’Architecture possono fondersi tra loro
Una buona descrizione architetturale è il primo passo per una buona Sintesi
Non tutto ciò che è scritto in VHDL può essere sintetizzato!!
Piccola nota... Double DRIVENPiccola nota... Double DRIVEN
ARCHITECTURE arch OF circ ISSIGNAL s : BIT;BEGIN
PROCESSBEGIN
s <= operazione1;END PROCESS;
PROCESSBEGIN
s <= operazione2;END PROCESS;
END arch;
S
operazione1
operazione2
40
ReferencesReferences
The VHDL Cookbook, P. J.AshendenThe Hamburg VHDL archive:
http://tech-www.informatik.uni-hamburg.de/vhdl/
Il Linguaggio VHDL. Introduzione al linguaggio VHDL per la descrizione di sistemi digitali, Xilinx Inc.WEB-LINKS:
http://www.ashenden.com.au/designers-guide/DG.htmlhttp://www.ashenden.com.au/designers-guide/DG-intro-lectures.htmlhttp://www.ashenden.com.au/students-guide/SG.html
41
QuestionsQuestions