150 likes | 306 Views
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
E N D
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 • All’interno del processo l’assegna-zione in pratica viene ritardata fino a che non inizia un ciclo di simulazione (di solito coincidecon l’istruzione wait) Process begin x <= 1 after 4 ns; y <= 2 after 10 ns; x <= 3 after 4 ns; 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 • 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 x <= a and b after 10 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 (es. wait on a,b) • WAIT UNTIL (es. wait until a >10;) • WAIT FOR (es wait for 10 ns;) • WAIT (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 process (a,b) begin c <= a and b; end process c <= a and b • 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
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 qneg set 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) • Oppure si puo’ dichiarare espressamente quale segnale deve essere associato alla singola porta U1: nor2 port map (res, qneg,q); 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