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