Sei sulla pagina 1di 49

Il linguaggio VHDL parte 1

Corso di Architettura dei Sistemi Integrati

Il VHDL Parte 1

Introduzione
Il VHDL un linguaggio per la descrizione dellhardware, utilizzabile per la documentazione, la simulazione e la sintesi di sistemi digitali.
HDL= Hardware Description Language V = VHSIC (Very High Speed Integrated Circuits) Nel 1987 il VHDL stato adottato come standard dalla IEEE (Institution of Electrical and Electronics Engineers): VHDL-87. Nel 1993 lo standard stato revisionato dalla IEEE: VHDL-93. Ulteriori revisioni del linguaggio si sono avute nel 2000 e nel 2002 Laltro linguaggio standard per la descrizione dellhardware il VERILOG
Corso di Architettura dei Sistemi Integrati 2 Il VHDL Parte 1

A cosa serve il VHDL?


Nasce come linguaggio standard per la documentazione di sistemi digitali complessi: fornire una descrizione non ambigua di un sistema digitale, interpretabile univocamente dai vari progettisti impegnati nello sviluppo di un sistema. Il VHDL consente di simulare il sistema descritto, sia a livello funzionale sia portando in conto i ritardi del circuito. Negli anni seguenti, oltre che per la documentazione e la simulazione, il VHDL ha assunto un ruolo sempre pi importante nella fase di sintesi dei sistemi digitali. Sintesi: descrizione comportamentale di un sistema => netlist

Corso di Architettura dei Sistemi Integrati

Il VHDL Parte 1

Vantaggi della sintesi


Il progettista pu concentrarsi sulla descrizione ad alto livello del sistema, esplorando come le diverse scelte architetturali possano influire sulle prestazioni del circuito, disinteressandosi dai dettagli implementativi. Descrizione (quasi del tutto) indipendente dalla particolare tecnologia prescelta per limplementazione del circuito (cos come un programma descritto in un linguaggio ad alto livello pu essere compilato ed eseguito su piattaforme hardware differenti) Riutilizzo di blocchi complessi in pi progetti (Intellectual Properties, IP). Linguaggio perfettamente standardizzato.

Corso di Architettura dei Sistemi Integrati

Il VHDL Parte 1

Simulazione vs. sintesi


Il VHDL nato come linguaggio per la documentazione dei sistemi digitali e solo in un secondo momento sono stati introdotti i programmi di sintesi: non tutti i costrutti del VHDL sono sintetizzabili (ad esempio, le operazioni relative allaccesso su files non possono avere una diretta corrispondenza hardware). Tools differenti per sintesi e simulazione.

Corso di Architettura dei Sistemi Integrati

Il VHDL Parte 1

Obiettivi del corso


Studio del subset del VHDL da utilizzare per realizzare descrizioni standard, sintetizzabili senza problemi.

Studio dei costrutti VHDL necessari per descrivere semplici test-bench (necessari in fase di simulazione)

Corso di Architettura dei Sistemi Integrati

Il VHDL Parte 1

Entit ed architetture
La descrizione VHDL di un sistema deve includere: una definizione di entit, in cui si definiscono i terminali di ingresso/uscita del sistema una descrizione dellarchitettura, in cui si descrive la funzionalit del sistema.

Corso di Architettura dei Sistemi Integrati

Il VHDL Parte 1

Caratteristiche base del linguaggio


Il VHDL non case-sensitive: gli statements seguenti sono perfettamente equivalenti: entity eqcomp is entiTY EQcomp IS entity EQCOMP iS Il VHDL free-format: spazi, tabulazioni, ritorni a capo sono trattati allo stesso modo. Gli statements seguenti sono perfettamente equivalenti: neq <= not aux1; neq <= not aux1;
Corso di Architettura dei Sistemi Integrati 8 Il VHDL Parte 1

Entit

Una dichiarazione di entit analoga ad un simbolo in uno schema a blocchi, in cui si identificano il nome del simbolo ed i punti di collegamento con altri elementi dello schema a blocchi.

Corso di Architettura dei Sistemi Integrati

Il VHDL Parte 1

Architettura

Larchitettura descrive il funzionamento della entit. La linea 8 rappresenta la parte dichiarativa dellarchitettura, utilizzata, in questo caso, per definire un segnale interno denominato aux1. Il funzionamento dellentit eqcomp viene descritto fra le parole chiave begin ed end Operazioni di assegnazione (simbolo <= ) Le tre assegnazioni delle linee 10, 11 e 12 sono statements concorrenti.
Corso di Architettura dei Sistemi Integrati 10 Il VHDL Parte 1

Approccio gerarchico per descrivere un sistema in VHDL:

Corso di Architettura dei Sistemi Integrati

11

Il VHDL Parte 1

Entit

Corso di Architettura dei Sistemi Integrati

12

Il VHDL Parte 1

Dichiarazione di entit.
Ha lo scopo di descrivere linterfaccia di I/O del sistema. Nella dichiarazione di entit inoltre possibile definire dei parametri, che consentono di rendere pi flessibile la descrizione

entity, is, port ed end sono parole riservate del VHDL, mentre nome_entita, nome_segnale e tipo_segnale sono identificatori definiti dallutente.

Corso di Architettura dei Sistemi Integrati

13

Il VHDL Parte 1

Modi dei terminali di I/O.


Il modo descrive la direzione con la quale i dati possono essere trasferiti attraverso un terminale di ingresso o di uscita. I modi previsti dal VHDL sono 4: IN, OUT, INOUT, BUFFER

Nota: il linguaggio prevede anche il modo linkage che tuttavia serve essenzialmente per collegare il modello VHDL con modelli scritti in altri linguaggi. Questo modo non supportato in fase di sintesi
Corso di Architettura dei Sistemi Integrati 14 Il VHDL Parte 1

Modo IN

IN : Il terminale un ingresso per lentit. Il circuito che pilota il terminale (il driver) esterno allentit.
Corso di Architettura dei Sistemi Integrati 15 Il VHDL Parte 1

Modo IN

IN : Il terminale un ingresso per lentit. Il circuito che pilota il terminale (il driver) esterno allentit.

Corso di Architettura dei Sistemi Integrati

16

Il VHDL Parte 1

Modo OUT.

OUT : Il terminale una uscita per lentit. Il driver interno allentit. Il valore di un terminale di questo tipo non pu essere letto allinterno dellentit.
Corso di Architettura dei Sistemi Integrati 17 Il VHDL Parte 1

Modo OUT.

OUT : Il terminale una uscita per lentit. Il driver interno allentit. Il valore di un terminale di questo tipo non pu essere letto allinterno dellentit.

Corso di Architettura dei Sistemi Integrati

18

Il VHDL Parte 1

Modo BUFFER

BUFFER : Il terminale di uscita, (il driver interno allentit) ma il suo valore pu anche essere letto allinterno dellentit.
Corso di Architettura dei Sistemi Integrati 19 Il VHDL Parte 1

Modo BUFFER

buffer

BUFFER : Il terminale di uscita, (il driver interno allentit) ma il suo valore pu anche essere letto allinterno dellentit. L'utilizzo del modo buffer non indispensabile e non raccomandato.
Corso di Architettura dei Sistemi Integrati 20 Il VHDL Parte 1

Modo INOUT.

INOUT : Il segnale pu essere utilizzato sia come ingresso che come uscita (il driver pu essere sia interno che esterno allentit) Questo il modo da utilizzare per i terminali tristate.
Corso di Architettura dei Sistemi Integrati 21 Il VHDL Parte 1

Modo INOUT.

INOUT : Il segnale pu essere utilizzato sia come ingresso che come uscita (il driver pu essere sia interno che esterno allentit) Questo il modo da utilizzare per i terminali tristate.
Corso di Architettura dei Sistemi Integrati 22 Il VHDL Parte 1

Tipi.
Il tipo specifica linsieme di valori che un segnale pu assumere; ad ogni tipo inoltre generalmente associato un insieme di operatori. Il VHDL prevede pochi tipi predefiniti:

il tipo bit ha due valori 0 ed 1 . il tipo bit_vector rappresenta un array di bit (un bus)

La keyword downto definisce lordinamento dei bit che compongono il vettore. b <= 1100; assegna a b(3) e b(2) il valore 1 ed a b(1) e b(0) il valore 0

b <= 1100; assegna a b(3) e b(2) il valore 0 ed a b(1) e b(0) il valore 1.

Corso di Architettura dei Sistemi Integrati

23

Il VHDL Parte 1

STD_LOGIC
I tipi bit e bit_vector non sono comunemente utilizzati in VHDL, (non consentono, ad esempio, di definire che un segnale sia in condizioni di alta impedenza o di specificare condizioni do not care). Il VHDL consente di adoperare tipi definiti dallutente, E' opportuno raggruppare le definizioni dei tipi usati comunemente in una libreria.

libreria standard IEEE 1164


Definisce alcuni tipi di notevole utilit per la sintesi e la simulazione di circuiti digitali.

Di largo impiego il tipo std_logic, a nove valori.


Corso di Architettura dei Sistemi Integrati 24 Il VHDL Parte 1

STD_LOGIC
Per il momento, possiamo pensare di utilizzare i due tipi std_logic ed std_logic_vector in sostituzione dei tipi bit e bit_vector.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

-- Descrizione VHDL di un comparatore a 4 bit library ieee; use ieee.std_logic_1164.all; entity eqcomp is port (a, b: in std_logic_vector (3 downto 0); eq, neq : out std_logic); end eqcomp; architecture dataflow of eqcomp is signal aux1 : std_logic; begin neq <= not aux1; -- neq attivo basso aux1 <= 1 when (a = b) else 0; eq <= aux1; end dataflow;
25

Corso di Architettura dei Sistemi Integrati

Il VHDL Parte 1

Architettura

Corso di Architettura dei Sistemi Integrati

26

Il VHDL Parte 1

Sintassi della descrizione dell'architettura


architecture nome_architettura of nome_entita is dichiarazioni di tipo dichiarazioni di segnali dichiarazioni di costanti definizione di funzioni definizioni di procedure dichiarazioni di componenti begin statement concorrente . . . . statement concorrente end nome_architettura;

Corso di Architettura dei Sistemi Integrati

27

Il VHDL Parte 1

Descrizione dell'architettura
E prassi comune distinguere tre possibili stili di descrizione architetturale:

comportamentale (behavioral) data-flow strutturale


Questa distinzione utile per familiarizzare con il linguaggio. Nella definizione dellarchitettura possibile utilizzare una qualsiasi combinazione dei tre stili.

Corso di Architettura dei Sistemi Integrati

28

Il VHDL Parte 1

Definizione architetturale - dichiarazioni.


architecture nome_architettura of nome_entita is dichiarazioni di tipo dichiarazioni di segnali dichiarazioni di costanti definizione di funzioni definizioni di procedure dichiarazioni di componenti begin . . . .

Le costanti vengono utilizzate per rendere pi leggibile e pi facilmente modificabile il codice.


constant nome_costante : tipo_costante := valore;

Corso di Architettura dei Sistemi Integrati

29

Il VHDL Parte 1

Definizione architetturale - dichiarazioni.


architecture nome_architettura of nome_entita is dichiarazioni di tipo dichiarazioni di segnali dichiarazioni di costanti definizione di funzioni definizioni di procedure dichiarazioni di componenti begin . . . .

Definizione di segnali, (molto simile a quella relativa ai port di una entit)


signal nome_segnale : tipo_segnale;

Un segnale definito allinterno di una architettura corrisponde, grosso modo, ad una linea di collegamento in un diagramma logico.
Corso di Architettura dei Sistemi Integrati 30 Il VHDL Parte 1

Descrizione VHDL strutturale.


Il sistema viene descritto mediante uninterconnessione di opportuni componenti, in maniera del tutto analoga ad una rappresentazione del circuito mediante schema a blocchi.

In una descrizione strutturale avremo dei componenti, che sono utilizzati o istanziati pi volte, e sono fra loro collegati utilizzando dei segnali.

Corso di Architettura dei Sistemi Integrati

31

Il VHDL Parte 1

Esempio
Circuito combinatorio che calcola il numero di bit '1' in una word di ingresso. Allingresso 1101 (tre bit 1) corrisponde luscita 011 (il valore 3 espresso in binario); allingresso 1001 luscita 010 ecc. Schema a blocchi:
a0 a2 a1 c0 x0 s0 a3

Utilizziamo 3 full-adders.

y2

y1

y0
32 Il VHDL Parte 1

Corso di Architettura dei Sistemi Integrati

Full-adder
a 0 0 0 0 1 1 1 1 b 0 0 1 1 0 0 1 1 cin 0 1 0 1 0 1 0 1
Somma (decimale) Somma (binario)

cout 0 0 0 1 0 1 1 1

s 0 1 1 0 1 0 0 1

Tabella di verit (compressore 3 2)

0 1 1 2 1 2 2 3

00 01 01 10 01 10 10 11

Corso di Architettura dei Sistemi Integrati

33

Il VHDL Parte 1

Half-adder
a 0 0 1 1 b 0 1 0 1
Somma (decimale) Somma (binario)

cout 0 0 0 1

s 0 1 1 0

0 1 1 2

00 01 01 10

Somma due soli ingressi. cout=a AND b; s= a XOR b

Corso di Architettura dei Sistemi Integrati

34

Il VHDL Parte 1

Full-adder ed Half-adder

Un full-adder pu essere realizzato tramite due half-adders ed una porta OR (non l'implementazione migliore...)

Corso di Architettura dei Sistemi Integrati

35

Il VHDL Parte 1

Esempio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

library ieee use ieee.std_logic_1164.all; entity one_counter is port (a : in std_logic_vector (3 downto 0); y : out std_logic_vector (2 downto 0)); end one_counter; architecture strutturale of one_counter is signal s0, c0, x0 : std_logic; component full_add port (i2, i1, i0 : in std_logic; s,c : out std_logic); end component; component half_add port (i1, i0 : in std_logic; s,c : out std_logic); end component; begin . . . . .

continua ....
Corso di Architettura dei Sistemi Integrati 36 Il VHDL Parte 1

Dichiarazione di un componente
architecture nome_architettura of nome_entita is dichiarazioni di tipo dichiarazioni di segnali dichiarazioni di costanti definizione di funzioni definizioni di procedure dichiarazioni di componenti begin . . . .

Dichiarazione di un componente: simile ad una dichiarazione di entit:


component nome_componente is port ( nome_segnale : modo tipo_segnale; nome_segnale : modo tipo_segnale; nome_segnale : modo tipo_segnale); end component;
Corso di Architettura dei Sistemi Integrati 37 Il VHDL Parte 1

Esempio (segue)
21 22 23 24 . . . . begin f1 : full_add port map(i2=> a2, i1 => a1, i0 => a0, s => s0, c => c0); h1 : half_add port map (i1 => a3, i0 => s0, s => y0, c => x0);

25 26 27
28 29 30 31 32

h2 : half_add port map (c0, x0, y1, y2);


end strutturale;

Corso di Architettura dei Sistemi Integrati

38

Il VHDL Parte 1

Istanza di un componente
architecture nome_architettura of nome_entita is dichiarazioni di tipo dichiarazioni di segnali dichiarazioni di costanti definizione di funzioni definizioni di procedure dichiarazioni di componenti begin statement concorrente . . . nome_label : nome_componente port map(segnale1, segnale2, ..., segnaleN); nome_label : nome_componente port map(port1 => segnale1, ..., portN => segnaleN);
Corso di Architettura dei Sistemi Integrati 39 Il VHDL Parte 1

Associazione fra i port della entit ed i segnali utilizzati nellarchitettura:


Corrispondenza per posizione: il primo segnale elencato allinterno del port map corrisponde al primo port del componente, il secondo segnale al secondo port e cos via. Corrispondenza per nome: ogni port dellentit collegato ad un segnale utilizzando loperatore =>; lordine con cui compaiono le coppie port-segnale ininfluente.

Corso di Architettura dei Sistemi Integrati

40

Il VHDL Parte 1

Esempio (segue)
21 22 23 24 25 26 27 28 29 30 31 32 . . . . begin f1 : full_add port map(i2=> a2, i1 => a1, i0 => a0, s => s0, c => c0); h1 : half_add port map (i1 => a3, i0 => s0, s => y0, c => x0); h2 : half_add port map (c0, x0, y1, y2);

a0

a2 a1

end strutturale;

c0 x0

s0 a3

y2
Corso di Architettura dei Sistemi Integrati 41

y1

y0

Il VHDL Parte 1

Descrizione VHDL strutturale del full-adder


library ieee; use ieee.std_logic_1164.all; entity full_add is port (i2, i1, i0 : in std_logic; s,c : out std_logic); end full_add; architecture strutturale of full_add is component half_add port (i1, i0 : in std_logic; s, c : out std_logic); end component; component OR2 port (I0 : in std_logic; I1 : in std_logic; O : out std_logic ); end component; signal aux1, aux2, aux3 : std_logic; begin . . . . . .
Corso di Architettura dei Sistemi Integrati 42 Il VHDL Parte 1

Descrizione VHDL strutturale del full-adder (segue)


begin h1 : half_add port map(i1 => i2, i0 => i1, s => aux1, c => aux2); h2 : half_add port map(i1 => aux1, i0 => i0, s => s, c => aux3); o1 : or2 port map (i0 => aux2, i1 => aux3, o => c); end strutturale;

Corso di Architettura dei Sistemi Integrati

43

Il VHDL Parte 1

Descrizione VHDL strutturale half-adder


library ieee; use ieee.std_logic_1164.all; entity half_add is port (i1, i0 : in std_logic; s,c : out std_logic); end half_add; architecture strutturale of half_add is component AND2 port ( I0 : in std_logic; I1 : in std_logic; O : out std_logic ); end component; component XOR2 port (I0 : in std_logic; I1 : in std_logic; O : out std_logic ); end component; begin xx1 : xor2 port map(i1, i0, s); aa1 : and2 port map (i1, i0, c); end strutturale;
Corso di Architettura dei Sistemi Integrati 44 Il VHDL Parte 1

Strutture ripetitive
generate : consente di descrivere in maniera compatta strutture ripetitive.
library ieee; use ieee.std_logic_1164.all; entity inv16 is port (a : in std_logic_vector (15 downto 0); b : out std_logic_vector (15 downto 0)); end; architecture structure of inv16 is component INV port (I : in std_logic; O : out std_logic); end component; begin g1 : for k in 15 downto 0 generate n1 : INV port map(I => a(k), O => b(k)); end generate; end structure;

Corso di Architettura dei Sistemi Integrati

45

Il VHDL Parte 1

Strutture ripetitive
generate : consente di descrivere in maniera compatta strutture ripetitive. nome_label : for identificatore in range generate istanza_componente; end generate;

Corso di Architettura dei Sistemi Integrati

46

Il VHDL Parte 1

Entit ed architetture parametrizzate.


costanti generiche allinterno della dichiarazione di entit: entity nome_entita is generic (nome_costante . . . . nome_costante port (nome_segnale : . . . . nome_segnale : end nome_entita;

: tipo; : tipo); modo tipo_segnale;

modo

tipo_segnale);

Corso di Architettura dei Sistemi Integrati

47

Il VHDL Parte 1

Esempio: banco di invertitori su N bit


library ieee; use ieee.std_logic_1164.all; entity invx is generic (size : integer); port (a : in std_logic_vector (size-1 downto 0); b : out std_logic_vector (size-1 downto 0)); end; architecture structure of invx is component INV port (I : in std_logic; O : out std_logic); end component; begin g1 : for k in size-1 downto 0 generate n1 : INV port map(I => a(k), O => b(k)); end generate; end structure;

Il valore delle costanti generiche viene stabilito quando lentit istanziata come componente, mediante una clausola generic map.
Corso di Architettura dei Sistemi Integrati 48 Il VHDL Parte 1

Esempio: banco di invertitori su N bit


library ieee; use ieee.std_logic_1164.all; entity invy is port (a8 : in std_logic_vector (7 downto 0); b8 : out std_logic_vector (7 downto 0); a4 : in std_logic_vector (3 downto 0); b4 : out std_logic_vector (3 downto 0); a12 : in std_logic_vector (11 downto 0); b12 : out std_logic_vector (11 downto 0) ); end; architecture structure of invy is component invx generic (size : integer := 8); -- default value port (a : in std_logic_vector (size-1 downto 0); b : out std_logic_vector (size-1 downto 0)); end component; begin g1: invx generic map (size =>4) port map(a=>a4, b=>b4); g2: invx generic map (size =>12) port map(a=>a12, b=>b12); g3: invx port map(a=>a8, b=>b8); end structure;
Corso di Architettura dei Sistemi Integrati 49 Il VHDL Parte 1