Segnali ed
esecuzione
concorrente
Introduzione
• I segnali simulano i collegamenti fisici tra blocchi
• Servono a sincronizzare o scambiare dati tra processi
• L’assegnazione di un segnale avviene in base al “tempo
di simulazione” e non alla posizione nel listato
• Devono venir dichiarati opportunamente all’interno di:
– Packages (segnali globali)
– Entita’ (segnali “comuni” fra varie erchitetture)
– Architecture (segnali locali)
• I segnali vengono dichiarti anche nella dichiarazione
“port” di una entity
– sono di 4 tipi: In, Out, Inout, Buffer (I/O ma con 1 solo driver)
Assegnazione dei segnali in un processo
• Nell’assegnazione di un segnale viene definito
– Il segnale in questione
– Il driver del segnale (un altro segnale, una variabile, una
costante …)
– L’istante (tempo di simulazione) in cui avviene l’assegnazione
– L’assegnazione dei segnali e’ sequenziale all’interno del
processo e concorrente al di fuori del
processo stesso
Process
– All’interno del processo l’assegnabegin
zione in pratica viene ritardata fino
x <= 1 after 4 ns;
a che non inizia un ciclo di
y <= 2 after 10 ns;
simulazione (di solito coincide
x <= 3 after 4 ns;
con l’istruzione wait)
wait ...
Segnali ritardati
• L’assegnazione di un segnale avviene in un preciso
istante di simulazione
• Il ritardo viene spesso usato per descizioni
comportamentali di un processo
• Il ritardo NON puo’ essere sintetizzato
x <= a and b after 10 ns;
• Puo’ essere adottato per descrivere il funzionamento di
una porta logica fisica
• NON puo’ essere sintetizzato!!! La porta logica non deve
ritardare ne’ 9.99999 ns ne’ 10.000001 ns
Esempio
X <= 1;
wait . . .;
la vera assegnazione di x avviene qui
x <= y;
x assume il valore di y
y <= x;
y assume il valore di x
wait . . .;
in questo punto i segnali si scambiano
v:=1;
v assume IMMEDIATAMENTE il valore 1
s<=v;
s assumera’ il valore di v al WAIT
a:=s;
a assume il vecchio valore di s
wait . . . ;
x <= 1;
x <= 2;
wait . . . ;
x assume il valore 2
WAIT
• All’interno di un processo ci saranno una o piu’ istruzioni
WAIT
–
–
–
–
WAIT ON
WAIT UNTIL
WAIT FOR
WAIT
(es. wait on a,b)
(es. wait until a >10;)
(es wait for 10 ns;)
(es.wait;) - (esecuzione “sospesa”)
• La “sensitivity List” corrisponde ad una istruzione “wait
on” in coda al processo
PROCESS
– Un PROCESS contiene una serie di operazioni sequenziali
– Al suo interno la metodologia di programmazione e’ di tipo
sequenziale e pertanto familiare ai programmatori
– Tutte le operazioni racchiuse in un PROCESS avvengono in
un tempo (tempo di simulazione) NULLO
– I PROCESS sono tra loro concorrenti (operano in parallelo)
– Un PROCESS e’ un loop infinito e non esce mai
– Un PROCESS deve contenere un’istruzione WAIT o una
SENSITIVITY LIST (per la sincronizzazione)
– In pratica il simulatore esegue le istruzioni all’interno di un
processo fino a che non trova l’istruzione WAIT, poi passa agli
altri processi.
Assegnazione concorrente
• Fuori dai processi per snellire la stesura si usa
l’assegnazione concorrente
• L’assegnazione concorrente in pratica e’ un processo
con una sola istruzione
• La “sensitivity list” coincide con i segnali a destra
dell’assegnazione
• Come tutti i processi, anche le assegnazioni concorrenti
vengono eseguite in parallelo
c <= a and b
process (a,b)
begin
c <= a and b;
end process
Assegnazione condizionata
z <=
a when (x > 3) else
b when (x < 3) else
c;
Questo tipo di assegnazione non puo’ essere effettuata all’interno
di un processo
Assegnazione con segnale di selezione
• Deve esserci un solo target
• Deve esserci una sola espressione con with
with MYSIG select
z <= a when 15,
b when 22,
c when others;
Rappresentazione Strutturale
– Rappresenta l’architettura come interconnessione di
componenti
– Spesso e’ il risultato di un processo di sintesi
– E’ costituita da:
• componenti
– dichiarazione (viene dichiarato il componente e le sue porte)
– istanziazione (viene richiamato il componente in una o piu’ posizioni)
– librerie (solitamente l’architettura del componente e’ descritta in una
opportuna libreria)
• segnali di interconnessione, opportunamente dichiarati
–
–
–
–
come entity port
dichiarati nella entity
dichiarati nell’architettura
dichiarati in un pakage
Esempio (Flip-Flop)
res
q
U1
set
qneg
U2
architecture netlist of flipflop is
component nor2
port (a,b: in bit; c: out bit);
end component;
begin
U1: nor2 port map (res,qneg,q);
U2: nor2 port map (q, set, qneg);
end netlist;
dichiarazione
istanziazione
Associazione porta - segnale
• Puo’ essere di tipo posizionale (il primo al primo, il
secondo al secondo e cosi’ via)
U1: nor2
port map (res, qneg,q);
• Oppure si puo’ dichiarare espressamente quale segnale
deve essere associato alla singola porta
U1: nor2
port map (a => res, c => q, b=> qneg);
Struttura gerarchica
• Una architettura strutturale puo’ essere
– di tipo gerarchico (a piu’ livelli)
– ad un singolo livello (flat)
• Per associare ad ogni “component” una determinata
architettura (spesso residente in una libreria) si utilizza la
“CONFIGURATION”
Configuration uno of flipflop
for netlist
for U1: nor2 use entity work.NOR2(fast);
end for;
for U2: nor2 use entity ASIC.NO2(fast);
end for;
end for;
end uno;
CONCLUSIONI
– Con questa serie di lezioni
• Si e’ voluto dare allo studente un’infarinatura sul VHDL, e portarlo a
comprendere un “listato”
• Molti argomenti vi sarebbero ancora da trattare:
–
–
–
–
–
GENERATE
BLOCK
PROCEDURE
FUNCTIONS
...
• Per ulteriori approfondimenti si rimanda il lettore a testi specifici
• Solitamente si usa il VHDL per descrivere un circuito “SINTETIZZABILE”,
pertanto solo poche delle possibilita’ offerte dal linguaggio vengono
sfruttate in pratica
Scarica

VHDL3