Introduzione al linguaggio VHDL

Documenti analoghi
Introduzione al linguaggio VHDL

interfacciamento statico e dinamico analisi di interconnessioni, driver e receiver

Elettronica per le telecomunicazioni 21/05/2004

Calcolatori Elettronici M Modulo Linguaggio VHDL Parte 1/2

Introduzione al VHDL. Alcuni concetti introduttivi

Sommario. Modellizzazione Sintassi Classi di Oggetti Tipi di Dati e Operatori Package e Librerie Processi Esempi di codice VHDL VHDL Testbenches

Note su VHDL. 22 gennaio 2004

Un linguaggio per la descrizione dello hardware: il VHDL

Un linguaggio per la descrizione dello hardware: il VHDL

Sintassi. Le varie espressioni sintattiche scritte in VHDL si possono ricondurre ai seguenti oggetti: Scalari e Vettori Nomi Oggetti: Espressioni

Prima esercitazione. a.a

Introduzione al VHDL Lezione 2

Seconda esercitazione

Architetture e Reti logiche. Esercitazioni VHDL. a.a. 2003/04 VHDL. Stefano Ferrari

Introduzione al VHDL. Alcuni concetti introduttivi

Architetture e reti logiche Esercitazioni VHDL a.a. 2006/07. UsodelVHDL. Stefano Ferrari

IL VHDL. Perché si usa un linguaggio di descrizione dell'hardware? Permette di formalizzare il progetto di sistemi digitali complessi

Introduzione alla sintesi comportamentale

Architetture e reti logiche. Esercitazioni VHDL. a.a. 2005/06. Uso del VHDL. Stefano Ferrari

Corso di Reti Logiche A

Sequential Processing

Introduzione al VHDL Lezione 1

architecture tipo_architettura of nome_del_modulo is begin architecture tipo_architettura of nome_del_modulo is

library ieee; use ieee.std_logic_1164.all; library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; library STD; use STD.textio.

Introduzione al VHDL Lezione 3

Quarta esercitazione

VHDL - Introduzione. //

Flusso di progetto circuiti digitali

Fondamenti di Informatica B

Semicustom Design Flow VHDL HDL. VHDL: Applicazioni. Stili di Descrizione Hardware. Elettronica dei Sistemi Digitali L-A

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. VHDL - Esempi. Martedì 13 Gennaio 2009

Addizione tra numeri binari

Dispositivi riconfigurabili. Reti Logiche T Ingegneria Informatica

Corso di Circuiti Logici Appunti e Approfondimenti A. Di Stefano

Terza esercitazione. Progetto di una rete di controllo. Obiettivi Progetto e analisi di macchine a stati finiti. a.a

Christian Pilato

Calcolatori Elettronici M Modulo Introduzione all ambiente Xilinx ISE 12.3 e ISIM

VHDL: Simulazione & Sintesi

Indice. Prefazione. sommario.pdf 1 05/12/

Lezione E15. Sistemi embedded e real-time

Dispositivi logici programmabili. Marco Cesati. Schema della lezione. Logiche programmabili. Dispositivi logici programmabili.

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Lezione 6 Introduzione al C++ Mauro Piccolo

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Progettazione di circuiti integrati

Riassunto tecnica digitale

Lez2 mar 7 Ottobre 2008 Op. aritmetiche/logiche arch. Elaboratore

Introduzione al Flusso di Progetto di Circuiti e Sistemi Digitali

Reti Logiche A Esame del 13 settembre 2007

Tipi di segnali (logici) predefiniti. Rappresentazione dei segnali in VHDL. Tipo bit (definito nel package standard)

Fondamenti di Informatica

Modello sequenziale. Modello sequenziale: i Process 13/11/2014. ENTITY ffsr IS Port ( s,r: IN std_logic; q, qn: OUT std_logic); END ffsr;

senza stato una ed una sola

INTRODUZIONE ALLE LOGICHE PROGRAMMABILI

VHDL come strumento di progetto di circuiti digitali. Fabio Campi Corso di Elettronica dei Sistemi Digitali LS AA

Esercizi VHDL nelle prove d esame di Architettura degli elaboratori (a.a. 2002/03)

TUTORIAL 3. Realizzazione di un contatore su scheda XSA50. A cura di De Pin Alessandro

esercitazioni Corso di Laurea in Ing. elettronica Esercitazioni

Algebra e circuiti elettronici

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Richiami di Algebra di Commutazione

INFORMATICA GENERALE Prof. Alberto Postiglione. Università degli Studi di Salerno. UD 3.2b: Programmazione in Pascal (1)

VHDL come strumento di progetto di circuiti digitali

Reti combinatorie. Reti combinatorie (segue)

Reti combinatorie (segue) Reti combinatorie. Lezione 2. Architettura degli Elaboratori A. Sperduti 1

Cominciamo ad analizzare la rappresentazione delle informazioni... di Cassino. C. De Stefano Corso di Fondamenti di Informatica Università degli Studi

Progettazione di circuiti integrati

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Regole per la scrittura di VHDL Sintetizzabile. Fabio Campi. Corso di Elettronica dei Sistemi Digitali LS AA

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

I.3 Porte Logiche. Elisabetta Ronchieri. Ottobre 13, Università di Ferrara Dipartimento di Economia e Management. Insegnamento di Informatica

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09

Logica binaria. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Pag. 1. La formalizzazione dell informazione: Dati e Diagrammi di Flusso. Codifica degli algoritmi

Flusso di progetto circuiti digitali. Circuiti Integrati Digitali. Il Design Productivity Gap. Tecnologia Standard Cells

UML Introduzione a UML Linguaggio di Modellazione Unificato. Corso di Ingegneria del Software Anno Accademico 2012/13

INFORMATICA GENERALE Prof. Alberto Postiglione. Scienze della Comunicazione Università di Salerno. Il Linguaggio di Programmazione Pascal

ELETTRONICA dei SISTEMI DIGITALI Universita di Bologna, sede di Cesena

Logica Digitale. Fondamenti di Informatica - Prof. Gregorio Cosentino

Settimana n.2. Obiettivi Esecuzione di un programma. Tutorial su CodeBlocks e ambiente di sviluppo.

Reti Logiche A Prova di giovedì 3 febbraio 2005

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

Esercitazione : REALIZZAZIONE IMPIANTO SEMAFORICO

ELETTRONICA GENERALE, FONDAMENTI DI ELETTRONICA DIGITALE Appello d esame del 30/3/2015

VHDL. Il linguaggio FOCUS

Reti Logiche A II Prova - 2 marzo 2009

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

CAPITOLO 3 - ALGORITMI E CODIFICA

Introduzione alla programmazione. Alice Pavarani

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

RELAZIONE DEL PROGETTO DI UN CONTATORE BINARIO UP/DOWN MODULO 4 PER IL CORSO DI APPARATI ELETTRONICI 1. INTRODUZIONE

Flusso di Progetto Mixed Signal in ambiente CADENCE. Approccio Analog Centric. Corso di Progettazione Mixed Signal 19/12/2013 Prof.

Introduzione alla programmazione in linguaggio C

CIRCUITI DIGITALI. La grandezza fisica utilizzata nella maggior parte dei circuiti digitali è la differenza di potenziale (tensione).

$ % 16 dicembre Giovanni Beltrame 2

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO

Transcript:

DEIS Dipartimento di Elettronica Informatica e Sistemistica Universita di Bologna Introduzione al linguaggio VHDL PARTE I Stefano Mattoccia e-mail: smattoccia@deis.unibo.it Telefono: +39 051 2093860 Bologna, 4 Marzo 2004

Il VHDL e un linguaggio per la sintesi automatica e la simulazione di circuiti digitali VHDL: VHSIC Hardware Description Language VHSIC: Very High Speed Integrated Circuit Standardizzato nel 1993 (IEEE Standard 1076-1993)

Libri Zainalabedin Navabi, VHDL: Analysis and modelling of digital systems (2nd Ed), McGraw-Hill 1998 Douglas Perry, VHDL - Third Edition, McGraw-Hill 1998 Kevin Skahill, VHDL for Programmable Logic, Addison-Wesley Internet Sito di Reti Logiche L-A Cesena, www.ingce.unibo.it http://www.fpga.com.cn/hdl/training/vhdl_intr.pdf http://www.ee.pdx.edu/~mperkows/class_vhdl_99/005.pdf. Dispense corso Reti Logiche Introduzione alle esercitazioni di laboratorio www.ingce.unibo.it/corsi_di_laurea/piano_studi/programma_didattico_01_02/reti_logiche/indicemateriale.htm Software Altera Max Plus (versione 10) www.altera.com www.ingce.unibo.it/corsi_di_laurea/piano_studi/programma_didattico_01_02/reti_logiche/indicemateriale.htmd

Schema logico Design Entry Sintesi (Compilazione) Descrizione Testuale (VHDL) Strutturale Structural (Blocchi interconnessi) Comportamentale Behavioural Simulazione NO Funzionamento previsto? SI Trasferimento al Chip (Target FPGA)

Nella rappresentazione comportamentale ( Behavioural ) un componente viene descritto mediante il suo comportamento ingresso-uscita. Si descrive come dovra rispondere la rete ma non la sua struttura. I 0 I 1 Z<= 1 se gli ingressi I1 e I0 sono diversi; Z Nella rappresentazione strutturale ( Structural ) un componente e descritto connettendo tra loro più blocchi. L approccio e basato su un linguaggio testuale (VHDL) ma risulta concettualmente analogo al design-entry mediante schema logico.

Esempio: Decoder Effettuando il design entry mediante schema logico ed effettuando la simulazione si perviene alle seguenti forme d onda.

Una possibile codifica in VHDL della rete combinatoria dell esempio potrebbe essere la seguente: -- Possibile codifica VHDL del decoder LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY decoder_vhdl IS PORT (a, b : IN BIT; u0,u1,u2,u3 : OUT BIT); END decoder_vhdl; ARCHITECTURE arch_decoder_vhdl OF decoder_vhdl IS BEGIN -- attivazione (concorrente) dei segnali -- non e importante l ordine u3 <= (a AND b) ; u2 <= ((NOT a) AND b); u1 <= (a AND (NOT b)); u0 <= ((NOT a) AND (NOT b)); END arch_ decoder_vhdl;

Come risulta dal confronto tra le due simulazioni, ottenute rispettivamente dal design entry mediante schema logico e mediante VHDL, i due approcci sono equivalenti, Simulazione: codice VHDL Simulazione: schema logico

Elementi che caratterizzano il linguaggio VHDL Il VHDL essendo un linguaggio di programmazione per la descrizione dell HARDWARE presenta delle sostanziali differenze rispetto ai linguaggi di programmazione standard (i.e. C, Java, Pascal). In particolare vi sono due caratteristiche che differenziano il VHDL rispetto ai linguaggi di programmazione convenzionali: Timing La capacità di poter gestire i tempi di propagazione dei segnali all interno dei circuiti digitali Concurrency La capacità di simulare lo svolgimento di più operazioni contemporanee, tipica dei dispositivi Hardware

Timing & Concurrency La propagazione dei segnali tra i vari componenti che compongono un un circuito digitale avviene attraverso fili o bus. Nella realtà la propagazione dei segnali non avviene istantaneamente perché ritardata dalle caratteristiche fisiche delle connessioni (fenomeni parassiti). Si consideri ad esempio la seguente rete logica Rete ideale Volendo descrivere come si propaga il segnale dal punto x verso a e b con un linguaggio di programmazione ad alto livello (ad esempio il C ) si potrebbe scrivere: a:=x; /* assegna x ad a */ b:=x; /* assegna x a b */

Prima osservazione (PROBLEMA DI TIMING): La rappresentazione attraverso le due assegnazioni del lucido precedente non contempla i ritardi di propagazione del segnale che in realtà ci sono. La rete seguente evidenzia le capacità parassite associate ai due tratti della connessione tra il gate di ingresso e i due gate in uscita (lungo percorsi da x a a da x a b) Queste capacità determinano il ritardo di propagazione del segnale. Rete reale con capacità parassite che impongono la variazione dei segnali a e b in ritardo rispetto alla variazione di x Seconda osservazione (PROBLEMA DI CONCURRENCY): Solitamente i linguaggi di programmazione prevedono che due istruzioni di assegnazione vengano eseguite nella sequenza in cui compaiono nel programma.nella realtà il segnale elettrico parte da x e si propaga contemporaneamente verso a e b (non prima su a e poi su b come avverrebbe con il codice della pagina precedente scritto in C ).

Il VHDL, essendo orientato all hardware deve essere in grado di descrivere sia il TIMING sia la CONCURRENCY dei segnali: (TIMING) rendendo possibile la gestione dei ritardi con cui si propagano i segnali digitali all interno della rete (CONCURRENCY) Eseguendo più istruzioni (processi) contemporaneamente Considerando la rete dell esempio precedente. Se ogni capacità introduce un ritardo pari a 1 unit_delay ( ) il codice VHDL che sintetizza il funzionamento reale della rete potrebbe essere il seguente: a<=x AFTER 4*unit_delay b<=x AFTER 3*unit_delay Da un punto di vista logico le 2 istruzioni sono eseguite contemporaneamente in VHDL (esecuzione concorrente) x a b t t t

CONCURRENCY Quando un programmatore sviluppa del codice con un linguaggio ad alto livello (i.e. C, Java, Pascal) immagina di scomporre il problema in una serie di istruzioni che saranno eseguite in modo sequenziale. PARADIGMA DI PROGRAMMAZIONE SEQUENZIALE. Al contrario, un progettista hardware decompone il progetto in blocchi interconnessi che reagiscono ad eventi e generano eventi. Gli eventi sono le transizioni dei segnali: ogni transizione di un ingresso, di un uscita o del clock è un evento. Ogni evento impone che tutti i blocchi dipendenti da tale evento vengano valutati. L ordine in cui vengono valutati i blocchi deve essere ininfluente sul risultato finale(cioe, qualunque sia l ordine di valutazione delle espressioni associate ai singoli blocchi, lo stato complessivo raggiunto dalla rete quando tutti gli eventi sono stati gestiti deve essere sempre il medesimo). Il tipo di programmazione che consente di modellare questo tipo di funzionamento e il PARADIGMA DI PROGRAMMAZIONE PARALLELA: infatti visto che il risultato dell elaborazione deve essere indipendente dalla sequenza in cui le istruzioni sono state eseguite, allora possiamo concludere che tutte le istruzioni possono anche essere eseguite in parallelo,senza che mai una istruzione, per essere eseguita, debba attendere il completamento di un altra.

Ad esempio, si pensi ad una rete combinatoria di tipo SP. Il programmma che descrive questa rete deve generare un risultato (uscita di ciascun gate) che dipende solo dal valore degli ingressi e non dall ordine con il quale vengono valutati gli and e l or. Le istruzioni che descrivono i blocchi possono essere codificate secondo il paradigma della programmazione parallela T1 <= A AND B; T2 <= C AND D; TN <= E AND F; U <= T1 OR T2 OR T3; Equivalenti U <= T1 OR T2 OR T3; T1 <= A AND B; T2 <= C AND D; TN <= E AND F;

Oggetti definiti in VHDL Oggetto VHDL: entità alla quale e associato un valore Sono definite 4 classi di oggetti: Segnali Rappresentano connessioni hardware ( input, output, etc). Ad ogni segnale è associata una evoluzione temporale. Le assegnazioni sono effettuate mediante l operatore <=. Variabili Costanti Non hanno alcun significato hardware. Sono utilizzate per memorizzare valori temporanei. Le variabili possono essere dichiarate, o avere valori assegnati, solo all interno di blocchi sequenziali del codice VHDL. Il simbolo di assegnamento è := Rappresentano valori costanti di un determinato tipo. Il loro valore non può essere cambiato. Attraverso lo statement GENERIC il VHDL dispone di un meccanismo per passare parametri non hardware (es ritardi) di un componente. Files Oggetti che possono essere dichiarati ed utilizzati sia in blocchi concorrenti che in blocchi sequenziali.

Data types Nel linguaggio VHDL (Standard Package) sono predefiniti i seguenti tipi di dato: BIT ( 0, 1 ) BIT_VECTOR BOOLEAN ( TRUE, FALSE ) INTEGER REAL TIME Oltre ai tipi predefiniti e possibile utilizzarne altri disponendo di specifiche librerie (es LIBRARY IEEE). E possibile definire dei vettori di bit utilizzando il tipo di dato BIT_VECTOR...

Formalismo scalare a3 PORT ( a3,a2,a1,a0 : IN BIT; y1,y0 : OUT BIT); a2 a1 a0 ENTITY y1 y0 Formalismo vettoriale ( bus ) MSB LSB A[3..0] Y[1..0] PORT ( a : IN BIT_VECTOR(3 DOWNTO 0); y : OUT BIT_VECTOR(1 DOWNTO 0)); ENTITY

In VHDL gli elementi dei vettori possono essere referenziati attraverso gli indici. Ad esempio: y(2) <= a(1) E inoltre possibile assegnare una sequenza di cifre. Ad esempio y <= 01 ; Per costanti binarie di un singolo bit si utilizza il simbolo mentre per configurazioni binarie composte da 2 o più bit si utilizza il simbolo. Ad esempio: a <= 1 ; b_vettore <= 100111 ; E anche possibile effettuare assegnazioni ad un numero limitato di bit del vettore (bit-slicing). Ad esempio: b_vettore(4 downto 2) <= 101-1 0 1 - - b_vettore

LIBRARY IEEE Mediante l utilizzo di librerie (keyword LIBRARY) e possibile aggiungere al VHDL standard nuovi tipi di dato, nuove funzioni, etc. Il meccanismo e analogo a quello utilizzato dai linguaggi di programmazione ad alto livello. LIBRARY IEEE Tale libreria contiene i seguenti packages: std_logic_1164 (definisce la std_logic e relative funzioni) std_logic_arith (funzioni aritmetiche) std_logic_signed (funzioni aritmetiche su numeri con segno std_logic_unsigned (funzioni aritmetiche su numeri senza segno)

VHDL & Altera Max+ Plus II Altera Max+ Plus II fornisce un compilatore per codice vhdl. Esistono alcune regole che e necessario tenere in considerazione utilizzando l ambiente Altera. E disponibile un editor di testo per codice VHDL all interno dell ambiente software ma e possibile utilizzare anche editor esterni. Il linguaggio VHDL NON E case sensitive. Per convenzione utilizzeremo le lettere maiuscole per le parole chiave del linguaggio I file di testo che contengono il codice VHDL DEVONO avere estensione.vhd Il nome del file VHDL (estensione.vhd) DEVE coincidere con il nome assegnato all ENTITY.

Concetti fondamentali per la descrizione di circuiti digitali con il linguaggio VHDL Entity Architecture Internals (behavioural, structural,...) Input Output

Data una interface description (ENTITY) sono possibili diverse architectural specification (ARCHITECTURE) ENTITY esempio IS PORT( ) ARCHITECTURE behavioural OF esempio IS. ARCHITECTURE structural OF esempio IS... ARCHITECTURE.

-- Sintassi di un blocco descritto mediante VHDL LIBRRY IEEE; -- Standard IEEE library USE IEEE.std_logic_1164.all; -- Standard logic package Inclusione di librerie -- Entity declaration ENTITY nome_entity IS END nome_entity; PORT(signal_name : direction type); GENERIC(generic_name: type := default_value); Interface specification A z B S -- Architecture description ARCHITECTURE architettura_entity OF nome_entity IS Architectural specification <architecture declarations> BEGIN <processing statements> END architettura_entity ;

Entity -- Entity declaration ENTITY nome_entity IS PORT(signal_name: direction type); GENERIC(generic_name: type := default_value); END nome_entity; Mediante il costrutto GENERIC si definiscono tipicamente delle costanti. Queste possono essere utilizzate ad esempio per definire dei tempi di ritardo, GENERIC(delay: time := 1 ns); Mediante il costrutto PORT si specificano: quali sono i segnali della rete esaminata (signal_names) (direction) quali segnali sono di input (IN), di output (OUT), bidirezionali (INOUT) (type) di che tipo sono i segnali

Architecture -- Architecture description ARCHITECTURE architettura_entity OF nome_entity IS <architecture declarations> BEGIN <processing statements> END architettura_entity ; All interno della sezione ARCHITECTURE viene specificata la logica della rete. All interno della sezione ARCHITECTURE (in <architecture declarations>) è possibile definire degli oggetti. Tali oggetti sono tipicamente dei segnali (vedi esempio 2) e possono essere utilizzati (scope) solo all interno della architecture description. E possibile utilizzare i data types definiti all interno del VHDL o disponibili mediante l utilizzo di librerie aggiuntive. Ad esempio: SIGNAL T1,T0 : BIT; La parte nella quale viene specificata la logica vera e propria della rete è il <processing statements>, compresa tra BEGIN ed END.

Per il <processing statements> esistono due distinti modelli di elaborazione... CONCURRENT PROCESSING Le espressioni comprese tra BEGIN ed END vengono elaborate tutte contemporaneamente. Non ha alcun significato l ordine con il quale appaiono nel codice VHDL. ARCHITECTURE BEGIN <concurrent statement 1> <concurrent statement 2> <concurrent statement 3>... <concurrent statement n> 1 2 3 n END; t

SEQUENTIAL PROCESSING Mediante l istruzione PROCESS e possibile definire una sequenza di istruzioni che verranno elaborate secondo il paradigma di programmazione sequenziale. All interno di un blocco PROCESS le istruzioni sono elaborate in modo sequenziale dall alto verso il basso (nell ordine in cui vengono scritte). Ogni processo e eseguito in modo concorrente rispetto ad altri processi o istruzioni concorrenti definite nell architecture. ARCHITECTURE BEGIN PROCESS(sensitivity_list) <sequential statement 1> <sequential statement 2>... <sequential statement n> END END PROCESS; 1 2 3 n

sensitivity_list Lista degli segnali (eventi) ai quali le istruzioni del processo sono sensibili. Rappresentano quindi gli eventi che possono modificare le espressioni definite all interno di un processo. Se nessuno di questi eventi si verifica il processo rimane inattivo.

Operatori logici definiti in VHDL And: Or: Not: Nand: Nor: Xor: Xnor: AND OR NOT NAND NOR XOR XNOR Esempi: Y<= NOT A; Z<= a AND b; Tali operatori agiscono su tipi predefiniti: BIT, BOOLEAN, BIT_VECTOR. Se sono usati vettori il numero di bit dei due operandi deve essere lo stesso.

Operatori relazionali definiti in VHDL Tali operatori agiscono su operandi dello stesso tipo e ritornano un valore BOOLEAN (TRUE o FALSE). Uguale: = Diverso: /= Minore: < Minore Uguale: <= Maggiore: > Maggiore Uguale: >= Esempi: a_boolean <= op1 > op2; b_boolean <= op1 /= op2; Operatori come +, -, <, >, <=,>= sono definiti solo per il tipo INTEGER.

Altri operatori definiti in VHDL In VHDL sono definiti altri operatori, quali: SHIFT SOMMA SOTTRAZIONE MOLTIPLICAZIONE Consultare il manuale del VHDL per una descrizione dettagliata di tali operatori.

CONCURRENT STATEMENTS Concurrent statements possono essere utilizzati solo al di fuori di un processo e da un punto di vista concettuale sono eseguiti in modo concorrente. Per questo motivo l ordine con il quale vengono scritti non e importante. Concurrent signal assignements Selective signal assignements (WITH-SELECT-WHEN) Conditional signal assignements (WHEN-ELSE)

WITH-SELECT-WHEN Selected signal assignement WITH <expression> SELECT <signal_name> <= <signal/value> WHEN <condition1>, <signal/value> WHEN <condition2>,... <signal/value> WHEN OTHERS;

Esempio (and2) AND2 2 ENTITY and2with IS PORT (a : IN BIT_VECTOR (1 DOWNTO 0); y : OUT BIT); END and2with; ARCHITECTURE arch_and2with OF and2with IS BEGIN WITH a SELECT y <= 1' WHEN "11", 0' WHEN 00, 0' WHEN 01, 0' WHEN 10 ; END arch_and2with; and2with.vhd

Una realizzazione più semplice potrebbe essere la seguente Esempio (and2) AND2 2 ENTITY and2withothers IS PORT (a : IN BIT_VECTOR (1 DOWNTO 0); y : OUT BIT); END and2withothers; ARCHITECTURE arch_and2withothers OF and2withothers IS BEGIN WITH a SELECT y <= 1' WHEN 11", 0' WHEN OTHERS; END arch_and2withothers; and2withothers.vhd

WHEN-ELSE Conditional signal assignement <signal_name> <= <signal/value> WHEN <condition1> ELSE <signal/value> WHEN <condition2> ELSE... <signal/value> WHEN <conditionn> ELSE <signal/value>;

Esempio (and2) AND2 2 ENTITY and2 IS PORT (a, b : IN BIT; y : OUT BIT); END and2; ARCHITECTURE arch_and2 OF and2 IS BEGIN y<='1' WHEN (A='1' AND B='1') ELSE '0'; END arch_and2; and2.vhd Nel caso più condizioni siano verificate al segnale di uscita e assegnato il primo valore che soddisfa la catena dei WHEN.

Codice VHDL che sintetizza l AND a 2 ingressi utilizzando il costrutto WHEN-ELSE Esempio (and2) AND2 2 ENTITY and2whenelse1 IS PORT (a: IN BIT_VECTOR (1 DOWNTO 0); y : OUT BIT); END and2whenelse1; ARCHITECTURE arch_and2whenelse1 OF and2whenelse1 IS BEGIN y <= 0' WHEN a(0)= 0 ELSE 0' WHEN a(1)= 0 ELSE 1 ; END arch_and2whenelse1; and2whenelse1.vhd

Un altra soluzione, sempre utilizzando WHEN-ELSE, potrebbe essere la seguente.. Esempio (and2) AND2 2 ENTITY and2whenelse2 IS PORT (a: IN BIT_VECTOR (1 DOWNTO 0); y : OUT BIT); END and2whenelse2; ARCHITECTURE arch_and2whenelse2 OF and2whenelse2 IS BEGIN y <= 0' WHEN a(0)= 0 ELSE 1' WHEN a(1)= 1 ELSE 0 ; END arch_and2whenelse2; and2whenelse2.vhd

Oppure... Esempio (and2) AND2 2 ENTITY and2whenelse3 IS PORT (a : IN BIT_VECTOR (1 DOWNTO 0); y : OUT BIT); END and2whenelse3; ARCHITECTURE arch_and2whenelse3 OF and2whenelse3 IS BEGIN y <= 1' WHEN a= 11 ELSE 0 ; END arch_and2whenelse3; and2whenelse3.vhd