VHDL for beginners: Statement concorrenti e sequenziali

Il VHDL viene concepito per la descrizione dei circuiti elettronici e quindi consente la realizzazione di sistemi molto complessi. In elettronica troviamo una differenza sostanziale tra circuiti combinatori e sequenziali data dalla presenza di una cella di memoria al proprio interno. Infatti, nei circuiti combinatori, l'output è il risultato di una funzione logica dei soli input. Differentemente nel circuito sequenziale troviamo di fatto un elemento di memoria che porta in conto lo stato attuale (o quello precedente) del circuito stesso. In merito, il VHDL mette a disposizione diversi costrutti molto interessanti che possono rendere efficace e leggibile l'implementazione dei circuiti combinatori e/o dei circuiti sequenziali. A differenza dei linguaggi di programmazione, inoltre, il VHDL consente l'implementazione di comportamenti "concorrenziali", ossia determinate istruzioni che possono essere eseguite in modo contemporaneo, proprio perché esse sono legate a parte di circuiti indipendenti. Questa caratteristica è molto semplice ma estremamente potente in quanto è il punto di forza principale della tecnologia e consente di sintetizzare dei circuiti combinatori molto veloci. Ovviamente il linguaggio mette a disposizione anche determinati costrutti che favoriscono l’implementazione di logiche sequenziali.

Introduzione

In questo articolo affronteremo una panoramica generale di tutti i costrutti principali disponibili in VHDL suddividendoli tra comportamento concorrente e sequenziale. Per prima affronteremo i costrutti concorrenziali, molto utili in quanto garantiscono la progettazione di funzioni logiche veloci ed efficaci. Successivamente affronteremo i costrutti sequenziali e vedremo le peculiarità e la potenza del loro utilizzo. Al termine dell'articolo concluderemo con alcune note sulla realizzazione dei circuiti sequenziali e combinatori, valutando quali costrutti possono aiutare nella progettazione ed implementazione. Buona lettura.

Statement Concorrenti

All'interno del corpo di un'architettura tutte le istruzioni "semplici" sono di fatto delle istruzioni concorrenziali e quindi di natura combinatoria. L'assegnazione più semplice che si può fare ha la seguente sintassi:

output <= input_value;

Ossia l'output assume il valore di input che può essere una funzione logica o aritmetica di vari input (ad esempio output<= input1 + input2; oppure output <= input1 AND input2; ). Questa sintassi ci mostra che un'uscita è semplicemente la combinazione di uno o più ingressi (circuito combinatorio). L'assegnazione avviene con un certo ritardo il quale non è definibile a priori ma dipende dalla tecnologia e dal processo di sintesi. Sarà compito del progettista valutare eventuali ritardi del proprio sistema e verificare l'adeguatezza di questi ai constraint progettuali (vincoli temporali che devono essere rispettati). Questo ritardo nel linguaggio tecnico viene chiamato delta-delay ed è un parametro caratteristico. Nel caso in cui abbiamo due o più assegnazioni all'interno della stessa architettura queste saranno tra di loro concorrenti. Se prendiamo in considerazione il seguente esempio (con output1=output2 = 0) all'inizio dei tempi:

output1 <= 1;
output2 <= 1 + output1;

Avremo che alla fine output1 = output2 = 1 perchè gli statement sono concorrenti e quindi la funzione logica per output2 viene eseguita insieme alla funzione logica per output1 e quest'ultimo vale ancora 0. Esempi del genere li affronteremo nel dettaglio quando parleremo di simulazioni e testbench.
Una piccola precisazione è obbligatoria: il vhdl non vieta di mettere come operatore l'uscita stessa ma questo può portare ad una forte imprecisione e può essere facilmente causa di errore per cui è vivamente sconsigliato utilizzare tale tecnica.

Statement concorrente condizionale WHEN...ELSE

Il costrutto WHEN...ELSE consente un'assegnazione condizionata al risultato logico della condizione scelta. La sintassi del costrutto è la seguente:

output <= valore1 WHEN condizione1 ELSE
 valore2 WHEN condizione2 ELSE
 .....
 valore_default;

Come osserviamo dalla sintassi, ci possono essere diverse condizioni le quali non sono altro che delle espressioni booleane che possono restituire valore vero/falso. La prima condizione che restituisce valore vero fa sì che l'uscita output assuma il valore previsto per la condizione stessa. Nel caso in cui nessuna condizione fosse verificata, allora viene previsto un valore di default in modo tale da non avere condizioni per cui l'uscita non venga valorizzata/assegnata

Statement concorrente per la selezione

Il costrutto WHEN, molto simile al costrutto precedente, consente di assegnare all'uscita un determinato [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2416 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici e potrai fare il download in formato PDF eBook e Mobi per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

Una risposta

  1. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 24 Ottobre 2017

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend