DHow2 - L1

41
POLITECNICO DI MILANO VHDL: una breve VHDL: una breve introduzione introduzione DRESD DRESD H H ow ow T T o (DHow2) – L1 o (DHow2) – L1 DRESD Team [email protected]

Transcript of DHow2 - L1

Page 1: DHow2 - L1

POLITECNICO DI MILANO

VHDL: una breve VHDL: una breve introduzioneintroduzione

DRESDDRESD HHow ow TTo (DHow2) – L1o (DHow2) – L1

DRESD Team

[email protected]

Page 2: DHow2 - L1

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.)

Page 3: DHow2 - L1

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

Page 4: DHow2 - L1

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

Page 5: DHow2 - L1

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

Page 6: DHow2 - L1

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

Page 7: DHow2 - L1

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

Page 8: DHow2 - L1

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

Page 9: DHow2 - L1

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

Page 10: DHow2 - L1

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

Page 11: DHow2 - L1

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

Page 12: DHow2 - L1

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

Page 13: DHow2 - L1

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.

Page 14: DHow2 - L1

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

Page 15: DHow2 - L1

15

Un primo esempio…Un primo esempio…

Page 16: DHow2 - L1

16

Sommare due numeri interi positiviSommare due numeri interi positivi

Page 17: DHow2 - L1

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

Page 18: DHow2 - L1

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

Page 19: DHow2 - L1

19

Half adderHalf adder

X

Y

S

CHA

XY

S

C

X Y S C0 0 0 00

00

00

1 111 1

11

Page 20: DHow2 - L1

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

Page 21: DHow2 - L1

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

Page 22: DHow2 - L1

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

Page 23: DHow2 - L1

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

Page 24: DHow2 - L1

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.

Page 25: DHow2 - L1

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

Page 26: DHow2 - L1

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

Page 27: DHow2 - L1

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

Page 28: DHow2 - L1

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

Page 29: DHow2 - L1

29

E in VHDL?E in VHDL?

Page 30: DHow2 - L1

30

Complichiamo un pò il problema...Complichiamo un pò il problema...

Page 31: DHow2 - L1

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

Page 32: DHow2 - L1

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;

Page 33: DHow2 - L1

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

Page 34: DHow2 - L1

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

Page 35: DHow2 - L1

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;

Page 36: DHow2 - L1

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

Page 37: DHow2 - L1

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

Page 38: DHow2 - L1

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!!

Page 39: DHow2 - L1

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

Page 40: DHow2 - L1

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

Page 41: DHow2 - L1

41

QuestionsQuestions