Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
VHDL
Motivazioni
Introduzione
1
VHDL
Sommario – I
Introduzione
Introduzione
Esempio di progetto in VHDL
Componenti di un modello VHDL
Dichiarazione di entity
Descrizione di architecture
Modello timing
VHDL
Sommario – II
Introduzione
Esempi
Utilizzo di un simulatore freeware
Riepilogo
2
Ragioni per l'utilizzo del
VHDL VHDL Introduzione
VHDL
Storia del VHDL (I)
Introduzione
3
VHDL
Storia del VHDL (II)
Introduzione
VHDL
Gajski e Kuhn’s Y Chart
Introduzione
Architectural Structural
Behavioral
Algorithmic
Processor
Systems Functional Block
Hardware Modules
Algorithms Logic
ALUs, Registers
Register Transfer
Circuit Gates, FFs
Logic
Transfer Functions Transistors
Rectangles
Floor Plans
Clusters
Physical Partitions
Physical/Geometry 8
4
VHDL
Vantaggi del VHDL
Introduzione
Linguaggi di descrizione
VHDL
dell'hardware – Linguaggi
Introduzione
di descrizione del software
Si descrive una rete logica Si descrive un algoritmo
come insieme di componenti come sequenza di operazioni
interconnessi o mediante il eseguite da una specifica
suo comportamento architettura harware (Von-
Sintesi: realizzazione del Neumann – o sistemi
circuito mediante una distribuiti)
specifica tecnologia Compilazione: traduzione del
Simulazione: realizzazione di programma nel linguaggio
un modello utilizzabile per macchina di una specifica
predire il comportamento del CPU
sistema per un dato insieme di
stimoli
10
5
VHDL
Sintesi logica (I)
Introduzione
Descrizione Libreria
Ritardi e area
HDL tecnologia
Traduzione
Formato
intermedio
Ottimizzazione
behavioral => RTL => logica => technology mapping
11
VHDL
Sintesi logica (II)
Introduzione
La sintesi logica puo' essere vista come un processo
di ricerca in uno spazio le cui coordinate sono date
da:
Costo (area)
Prestazioni (ritardo, throughput)
Affidabilita'
Consumo di potenza
12
6
VHDL
Verifica
Introduzione
La verifica di progetto procede in senso inverso alla
sintesi logica e puo' essere fatta in due modi diversi
Si puo' voler verificare la funzionalita' di un circuito
digitale, ma anche le prestazioni o l'affidabilita'
Simulazione
Ingenerale produce risultati parziali (computazionalmente
esponenziale)
Verifica formale
Quando e' computazionalmente fattibile, produce risultati
completi
13
Struttura di un progetto
VHDL VHDL Introduzione
Un progetto complesso descritto in VHDL ha dei
punti in comune con la descrizione di un programma
in un linguaggio ad alto livello
Ad esempio puo' essere importante utilizzare un
approccio strutturato alla programmazione
Diversamente dal software, la descrizione di una rete
puo' passare attraverso diversi stadi nei quali alcune
parti del progetto vengono successivamente
specificate con maggiori dettagli
Possono essere possibili differenti viste dello stesso
oggetto
14
7
VHDL
Visione di insieme
Introduzione
Package
Concurrent Process
Concurrent
Statemens
Statemens
Sequential Statements 15
Esempio di
VHDL progettoVHDL Introduzione
x
carry
y Half Adder
result
enable
16
8
Esempio di progetto
VHDL
VHDL
Introduzione
Dichiarazione di entity
Primo passo, la entity declaration descrive
l'interfaccia del componente
le porte di input e output sono dichiarate
ENTITY half_adder IS
END half_adder;
x
Half carry
y
Adder result
enable
17
Esempio di progetto
VHDL
VHDL Introduzione
Specifiche behavioral
Una descrizione ad alto livello dell' half-adder
puo' essere fornita in questo modo:
ARCHITECTURE half_adder_a OF half_adder IS
BEGIN
PROCESS (x, y, enable)
BEGIN
IF enable = ‘1’ THEN
result <= x XOR y;
carry <= x AND y;
ELSE
carry <= ‘0’;
result <= ‘0’;
END IF;
END PROCESS;
END half_adder_a;
9
Esempio di progetto
VHDL
VHDL Introduzione
Data Flow
Un secondo metodo consiste nell'utilizzo di
espressioni logiche per sviluppare la descrizione
del data flow
19
Esempio di progetto
VHDL
VHDL Introduzione
Strutturale
Come ulteriore alternativa, si puo' utilizzare una
descrizione strutturale
x
y carry
enable
result
10
Esempio di progetto
VHDL
VHDL Introduzione
Strutturale
ARCHITECTURE half_adder_c OF half_adder IS
COMPONENT and2
PORT (in0, in1 : IN BIT;
out0 : OUT BIT);
END COMPONENT;
COMPONENT and3
PORT (in0, in1, in2 : IN BIT;
out0 : OUT BIT);
END COMPONENT;
COMPONENT xor2
PORT (in0, in1 : IN BIT;
out0 : OUT BIT);
END COMPONENT;
Esempio di progetto
VHDL
VHDL Introduzione
Strutturale
-- continuing half_adder_c description
BEGIN
END half_adder_c;
22
11
VHDL
Decoder behavioral
Introduzione
Library ieee;
ENTITY decoder_2_to_4 IS
PORT (E_n, A0, A1: IN BIT;
O0, O1, O2, O3: OUT BIT);
END decoder_2_to_4;
ARCHITECTURE behavioral OF decoder_2_to_4 IS
BEGIN
PROCESS (E_n, A0, A1)
BEGIN
IF E_n='1' THEN
O0 <= (NOT A0) AND (NOT A1);
O1 <= A0 AND (NOT A1);
O2 <= (NOT A0) AND A1;
O3 <= A0 AND A1;
ELSE
O0 <= '0';
O1 <= '0';
O2 <= '0';
O3 <= '0';
END IF;
END PROCESS;
END decoder_2_to_4;
23
VHDL
Decoder dataflow
Introduzione
END dataflow;
24
12
VHDL
Decoder strutturale
Introduzione
component NOT1
componenti
port(in1: in std_logic;
out1: out std_logic);
end component;
component NAND3
port(in1, in2, in3: in std_logic;
out1: out std_logic);
end component;
25
VHDL
Decoder strutturale
Introduzione
g2: NAND3 port map (in1 => not_A0, in2 => not_A1,
in3 => E, out1 => D0);
g3: NAND3 port map (in1 => A0, in2 => not_A1,
in3 => E, out1 => D1);
g4: NAND3 port map (in1 => not_A0, in2 => A1,
in3 => E, out1 => D2);
g5: NAND3 port map (in1 => A0, in2 => A1,
in3 => E, out1 => D3);
end structural_1;
26
13
VHDL
MPX 4-to-1 Strutturale
Introduzione
VHDL
MPX 4-to-1 Strutturale
Introduzione
begin
g0: NOT1 port map (S(0), not_S(0));
g1: NOT1 port map (S(1), not_S(1));
g2: AND3 port map (not_S(1), not_S(0), D(0),
N(0));
g3: AND3 port map (not_S(1), S(0), D(1), N(1));
g4: AND3 port map (S(1), not_S(0), D(2), N(2));
g5: AND3 port map (S(1), S(0), D(3), N(3));
g6: OR4 port map (N(0), N(1), N(2), N(3), Y);
end structural_2;
28
14
MPX 4-to-1 data flow
VHDL (when-else) Introduzione
library ieee;
use ieee.std_logic_1164.all;
entity multiplexer_4_to_1_we is
port (S : in std_logic_vector(1
downto 0);
D : in std_logic_vector(3
downto 0);
Y : out std_logic);
end multiplexer_4_to_1_we;
architecture function_table of
multiplexer_4_to_1_we is
begin
Y <= D(0) when S = "00" else
D(1) when S = "01" else
D(2) when S = "10" else
D(3) when S = "11" else
'X';
end function_table;
29
library ieee;
use ieee.std_logic_1164.all;
entity multiplexer_4_to_1_ws is
port (S : in std_logic_vector(1 downto 0);
D : in std_logic_vector(3 downto 0);
Y : out std_logic);
end multiplexer_4_to_1_ws;
architecture function_table_ws of
multiplexer_4_to_1_ws is
begin
with S select
Y <= D(0) when "00",
D(1) when "01",
D(2) when "10",
D(3) when "11",
'X' when others;
end function_table_ws;
30
15
Modelli dei componenti
VHDL VHDL Introduzione
31
Modelli di componenti
VHDL VHDL Introduzione
16
VHDL
Dichiarazione di Entity
Introduzione
x
Half carry
y result
Adder
enable ENTITY half_adder IS
GENERIC(prop_delay : TIME := 10
ns);
PORT( x, y, enable : IN BIT;
carry, result : OUT
BIT);
END half_adder;
33
Dichiarazione di Entity
VHDL Port Introduzione
17
Dichirarzione di Entity
VHDL Port Introduzione
35
Dichiarazioni di Entity
VHDL Generic Introduzione
18
VHDL
Corpo delle Architetture
Introduzione
37
VHDL
Descrizioni strutturali
Introduzione
38
19
Descrizioni
VHDL
Comportamentali
Introduzione
(Behavioral)
Il VHDL mette a dispsizione due stili per
descrivere il behavior di un componente
Data Flow: istruzioni concorrenti di assegnmento dei
segnali
Behavioral: processi utilizzati per descrivere
comportamenti complessi mediante costrutti di
linguaggi ad alto livello
e.g. variabili, cicli, if-then-else
VHDL
Modello Timing
Introduzione
End Simulation
40
20
VHDL
Tipi di ritardo
Introduzione
41
VHDL
Ritardo di tipo trasporto
Introduzione
Input Output
Input
Output
0 5 10 15 20 25 30
35
42
21
Ritardo inerziale
VHDL Introduzione
Output
0 5 10 15 20 25 30 43
VHDL
Ritardo inerziale (cont.)
Introduzione
Input
Output
0 5 10 15 20 25 30
44
22
VHDL
Ritardo Delta
Introduzione
Ritardo Delta
VHDL Esempio senza ritardo Delta Introduzione
Qual'e' il comportamento di C?
A
IN: 1->0 C
B
1
AND gate valutato prima:
NAND gate valutato prima: IN: 1->0
IN: 1->0 A: 0->1
A: 0->1 C: 0->1
B: 1->0 B: 1->0
C: 0->0 C: 1->0
46
23
Ritardo Delta
VHDL Esempio con Ritardo Delta Introduzione
Comportamento di C?
A
IN: 1->0
C
B
1
Utilizzo del ritardo delta
Time Delta Event
0 ns 1 IN: 1->0
eval INVERTER
2 A: 0->1
eval NAND, AND
3 B: 1->0, C: 0->1
eval AND
4 C: 1->0
1 ns
47
VHDL
Tipi di dato
Introduzione
Access Composite
Array Record
Scalar
Integer Physical
Real Enumerated 48
24
Tipi di dato VHDL
VHDL Tipi scalari Introduzione
Interi
Minimum range (standard): da - 2,147,483,647 a
2,147,483,647
Esempio di assegnamento a variabili :
49
Real
Minimum range (standard): da -1.0E38 a 1.0E38
Esempio di assegnamento :
25
Tipi di dato VHDL
VHDL Tipi scalari (Cont.) Introduzione
Enumerated
Lista
di possibili valori forniti dall'utente
Esempio di dichiarazione :
51
Physical
Richiedeun unita' di misura associata
Sideve specificare un range
Esempio di dichiarazione :
UNITS
ohm; -- ohm
Kohm = 1000 ohm; -- i.e. 1 KW
Mohm = 1000 kohm; -- i.e. 1 MW
END UNITS;
52
26
Tipi di dato VHDL
VHDL Tipi Compositi Introduzione
Array
Utilizzato per ragruppare elementi dello stesso tipo in un
singolo oggetto VHDL
Il Range puo' essere unconstrained nella dischiarazione
Deve essere specificato quando si utilizza l'array
Esempio di dichiarazione per un array mono dimensionale
(vettore) :
0 ...element indices...31
0 ...array values... 1
VARIABLE X : data_bus;
VARIABLE Y : BIT;
15...element indices...0
0 ...array values... 1
VARIABLE X : reg_type;
VARIABLE Y : BIT;
27
Tipi di dato VHDL
VHDL Tipi compositi (Cont.) Introduzione
Records
Utilizzati
per ragruppare elementi di tipi differenti in un
singolo oggetto VHDL
Gli elementi sono referenziati mediante i nomi dei campi
Esempio di dichiarazione e utilizzo :
55
Access
Simile ai puntatori in altri linguaggi
Memorizzazione dinamica
Utile
per realizzare a un livello astratto code, fifos, etc.
emulando eventualmente programmi software
Viene utilizzato nel package TextIO
Può essere assegnato esclusivamente a variabili
Una volta dichiarata una variabile di questo tipo, si
rendono disponibili due funzioni new e deallocate
che consentono di allocare e deallocare memoria per
tale variabile
56
28
Tipi di dato VHDL D
VHDL Tipo Accesso Introduzione
Esempio (FIFO)
PROCESS(x)
TYPE fifo_el_type IS ARRAY (0 TO 3) OF std_logic;
TYPE fifo_el_access IS ACCESS fifo_el_type;
VARIABLE fifo_ptr : fifo_el_access := NULL;
VARIABLE temp_ptr : fifo_el_access := NULL;
BEGIN
temp_ptr:=new fifo_el_type;
temp_ptr.ALL:=('0','1','0','1');
fifo_ptr:=temp_ptr;
END
57
Subtype
Permette di definire dei vincoli sui tipi di dato
e.g. un subtype si basa su tipi unconstrained
Possono includere l'intero range del tipo base
Assegnmenti fuori dal range del subtype sono illegali
Le violazioni di range sono rivelate run time e non alla
compilazione dove si controllano solo i tipi
Sintassi della dichiarazione :
Esempio :
58
29
Tipi di dato VHDL
VHDL Sommario Introduzione
59
VHDL
VHDL Oggetti
Introduzione
30
Oggetti VHDL
VHDL Costanti Introduzione
Esempio :
Oggetti VHDL
VHDL Variabili Introduzione
31
Oggetti VHDL
VHDL Segnali Introduzione
Esempio :
63
VHDL
Segnali e variabili
Introduzione
32
Oggetti VHDL
VHDL Segnali vs Variabili Introduzione
0 0 1 1 1 0
1 1 1 1 1 0
1+d 1 1 1 0 0
1+2d 1 1 1 0 1
65
Oggetti VHDL
VHDL Segnali vs Variabili (Cont.) Introduzione
0 0 1 1 1 0
1 1 1 1 0 0
1+d 1 1 1 0 1
66
33
Oggetti VHDL
VHDL File Introduzione
Concorrenti
Il VHDL e' inerentemente un linguaggio
concorrente
Tutti i processi VHDL sono eseguiti concorrentemente
Gli assegnamenti concorrenti dei segnali sono processi
on-line
68
34
VHDL
Istruzioni Concorrenti
Introduzione
69
VHDL
Istruzioni sequenziali
Introduzione
70
35
VHDL
Packages e Librerie
Introduzione
71
VHDL
Packages
Introduzione
72
36
Packages
VHDL Dichiarazione Introduzione
73
Packages
VHDL Package Body Introduzione
74
37
Packages
VHDL Clausola di utilizzo Introduzione
75
VHDL
Librerie
Introduzione
38
VHDL
Attributi
Introduzione
Attributi
VHDL Esempio di registro Introduzione
ENTITY 8_bit_reg IS
GENERIC (x_setup, prop_delay : TIME);
PORT(enable, clk : IN qsim_state;
a : IN qsim_state_vector(7 DOWNTO 0);
b : OUT qsim_state_vector(7 DOWNTO 0));
END 8_bit_reg;
39
Attributi
VHDL Registro (Cont.) Introduzione
Attributi
VHDL Esempio di registro (Cont.) Introduzione
40
VHDL
Operatori
Introduzione
Espressioni complesse :
res <= a AND NOT(B) OR NOT(a) AND b;
81
Operatori
VHDL Esempi Introduzione
0 1 2 3
SHIFTIN 1 0 0 1
SHIFTED 0 0 1 0
L'operatore esponente **
x := 5**5 -- 5^5, OK
y := 0.5**3 -- 0.5^3, OK
x := 4**0.5 -- 4^0.5, Illegal
y := 0.5**(-2) -- 0.5^(-2), OK
82
41
VHDL
Esempi
Introduzione
83
VHDL
Global Package
Introduzione
PACKAGE resources IS
END resources;
84
42
VHDL
AND gate a due ingressi
Introduzione
USE work.resources.all;
ENTITY and2 IS
END behav;
85
VHDL
Tri-State Buffer
Introduzione
USE work.resources.all;
ENTITY tri_state IS
END behav;
86
43
VHDL
D Flip Flop
Introduzione
87
VHDL
Sommario
Introduzione
88
44
VHDL
Riferimenti
Introduzione
45