Introduzione al linguaggio VHDL

Documenti analoghi
Introduzione al linguaggio VHDL

Cos è il VHDL. Il VHDL è un linguaggio standard per la descrizione dell hardware

interfacciamento statico e dinamico analisi di interconnessioni, driver e receiver

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

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

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

Un linguaggio per la descrizione dello hardware: il VHDL

Un linguaggio per la descrizione dello hardware: il VHDL

Introduzione al VHDL Lezione 1

Introduzione al VHDL. Alcuni concetti introduttivi

Calcolatori Elettronici M Modulo Linguaggio VHDL Parte 1/2

Introduzione alla sintesi comportamentale

Quarta esercitazione

Lezione E15. Sistemi embedded e real-time

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.

Rappresentazione con i diagrammi di flusso (Flow - chart)

Progettazione di circuiti integrati

Progettazione di circuiti integrati

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

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

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

Introduzione al Flusso di Progetto di Circuiti e Sistemi Digitali

Introduzione al VHDL Lezione 3

Introduzione alla programmazione

Programmazione C Massimo Callisto De Donato

Introduzione al VHDL Lezione 2

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

INTRODUZIONE ALLE LOGICHE PROGRAMMABILI

Linguaggi, Traduttori e le Basi della Programmazione

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

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

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

Traduzione ed Interpretazione

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a

Traduzione ed Interpretazione. Queste sconosciute

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

7. I linguaggi descrittivi HDL.

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Esercitazione : REALIZZAZIONE IMPIANTO SEMAFORICO

ELETTRONICA dei SISTEMI DIGITALI Universita di Bologna, sede di Cesena

Algoritmi e Strutture Dati

(b) LOGIC SYNTHESIS DESIGN FLOW

Il Software programmabili programma algoritmo

Lezione 6 Introduzione al C++ Mauro Piccolo

Macchine Astratte. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione feb, 2016

Esercitazioni di Reti Logiche. Lezione 5

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

Dispositivi riconfigurabili. Reti Logiche T Ingegneria Informatica

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

senza stato una ed una sola

Architettura degli elaboratori

Linguaggi di programmazione

Laboratorio di Elettronica Introduzione al VHDL

Elena Baralis 2007 Politecnico di Torino 1

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Christian Pilato

Corso di Linguaggi di Programmazione + Laboratorio

Introduzione alla programmazione. Walter Didimo

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Sintesi Sequenziale Sincrona Sintesi Comportamentale di reti Sequenziali Sincrone

Cos è la programmazione?

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Il linguaggio di programmazione Python

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

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

VHDL. Il linguaggio FOCUS

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

Contatore avanti-indietro Modulo 4

Cosa è un programma. Informatica di Base -- R.Gaeta 18

Introduzione al C++ (continua)

I Linguaggi di Programmazione

Sistemi logici complessi

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

Addizione tra numeri binari

Esercitazione di laboratorio n. 2

ALGORITMI: PROPRIETÀ FONDAMENTALI

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

METODOLOGIE PROGETTUALI CMOS

Evoluzione del FORTRAN 14/03/2016. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 15 IL LINGUAGGIO FORTRAN

Studio degli algoritmi

Reti logiche A All. Informatici (M-Z) Fabrizio Ferrandi a.a

Logica sequenziale: implementazione verilog

Reti Logiche 1. Prof. B. Buttarazzi A.A. 2009/2010. Reti Sequenziali

Elementi di programmazione

Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Circuiti Logici

Le Macchine digitali sono Sistemi artificiali che elaborano informazioni

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

IL PROCESSO di PROGETTAZIONE

Basi di Dati. Concetti e Principi Generali. Maria Mirto

Cos'e un linguaggio di programmazione?

Reti combinatorie. Reti combinatorie (segue)

Simulazione. Simulazione verilog. Testbench. Testbench

Linguaggi di Programmazione

Istruzioni condizionali di diramazione in Fortran 90

Concetti di Base sulla Programmazione. Prof.Ing.S.Cavalieri

Lezione 15 Il Set di Istruzioni (1)

Transcript:

Introduzione al linguaggio VHDL Il VHDL è un linguaggio per la sintesi e la simulazione di circuiti digitali, uno standard per la descrizione dell hardware E stato introdotto negli anni 80 nell ambito di un progetto del dipartimento della difesa statunitense denominato VHSIC (Very High Speed Integrated Circuits). VHDL= VHSIC Hardware Description Language Nel 1987 il VHDL è stato adottato come standard dalla IEEE (Institution of Electrical and Electronics Engineering): VHDL-87 Nel 1993 lo standard è stato revisionato dalla IEEE. Versione attuale: VHDL-93 Per fortuna, il VHDL-93 differisce solo in pochi dettagli dal VHDL-87 Altri linguaggi per la descrizione dell hardware VERILOG: inizialmente linguaggio proprietario della Cadence, ora standard IEEE Il VHDL ed il VERILOG coprono la grande maggioranza delle applicazioni, con una progressiva tendenza a favore del VHDL. Esistono altri linguaggi, spesso proprietari, meno generali del VHDL e del VERILOG: ABEL (Advanced Boolean Equation Language), inizialmente proprietario di DATA I/O corporation, è ora supportato da XILINX (sintassi semplice ed intuitiva - poco flessibile adatto per progetti non complessi come i PLD) AHDL (Altera Hardware Description Language), supportato da ALTERA (simile ad ABEL)

Uso ed utilità del linguaggio VHDL Flusso di progetto di un sistema digitale integrato (livelli di astrazione) Il VHDL è utilizzato nei tre livelli (comportamentale, RTL e gate) per: - Simulazione - Sintesi (passaggio automatico da un livello di astrazione ad un altro inferiore)

Simulazione VHDL

Sintesi VHDL

Confronto tra simulazione e sintesi VHDL Sono processi completamente differenti (per una stessa descrizione VHDL) Simulazione: verifica comportamento Ingresso - Uscita Sintesi: passaggio automatico da una descrizione ad alto livello (comportamentale) ad una a basso livello (netlist) Si utilizzano programmi CAD completamente differenti per le fasi di sintesi e di simulazione (sia la fase di sintesi che quella di simulazione prevedono un passo intermedio di compilazione del listato VHDL) Solo un limitato sottoinsieme del VHDL è sintetizzabile! Vantaggi del VHDL (rispetto a schematic entry) potenza e flessibilità: il VHDL ha costrutti linguistici molto potenti che consentono di descrivere in poche righe decine di migliaia di gates (il progettista può concentrarsi sul comportamento del sistema, non sui dettagli implementativi) progettazione device-independent: il VHDL consente di descrivere il funzionamento di un sistema senza dover a priori decidere il dispositivo per l implementazione => riutilizzo in più progetti => utilizzo di Intellectual Properties (IP) portabilità: il VHDL è uno standard perfettamente codificato: una descrizione VHDL simulata con sistemi di sviluppo differenti, su piattaforme hardware differenti) fornisce gli stessi risultati (almeno in teoria...) riduzione dei tempi di sviluppo e dei costi

Svantaggi del VHDL (nell operazione di sintesi) decide (quasi) tutto il sintetizzatore: poco controllo nell implementazione gate-level di un sistema descritto ad alto livello (direttive di sintesi) il circuito sintetizzato può non essere efficiente: molto spesso ciò è dovuto ad una descrizione VHDL inefficace (come un programma C scritto male può essere molto lento o richiedere eccessiva memoria, un codice VHDL scritto male può dar luogo ad una logica inutilmente complessa) la qualità del circuito sintetizzato varia da tool a tool: problema meno sentito, grazie al continuo miglioramento dei sistemi di sviluppo. Limitazioni del VHDL nell operazione di sintesi Solo un limitato sottoinsieme del VHDL è sintetizzabile: Il VHDL è un linguaggio completo (e complesso) e consente operazioni su files, definizione di puntatori, ecc., che non hanno corrispettivo hardware => è necessario conoscere i costrutti sintetizzabili, e con quali limitazioni. I sintetizzatori VHDL, a volte, non effettuano alcuni controlli sul codice: => è possibile avere descrizioni VHDL sintetizzabili, ma non simulabili! => è possibile avere descrizioni VHDL sia sintetizzabili che simulabili, ma i cui comportamenti pre- e post-sintesi sono differenti!

Diagramma di flusso della progettazione

Rappresentazione comportamentale Nella rappresentazione comportamentale ( Behavioural ) un componente viene descritto mediante il suo comportamento ingresso-uscita. Si descrive come dovrà rispondere la rete, ma non la sua struttura. Rappresentazione strutturale Nella rappresentazione strutturale ( Structural ) un componente è descritto connettendo tra loro più blocchi. L approccio è basato su un linguaggio testuale (VHDL) ma risulta concettualmente analogo al design-entry mediante schema logico.

Esempio: Decoder (tramite schema logico) Eseguendo il design entry mediante schema logico ed effettuando la simulazione si perviene alle forme d onda sottostanti.

Esempio: Decoder (tramite descrizione testuale) Una possibile codifica in VHDL della rete combinatoria dell esempio potrebbe essere: Dal confronto tra le simulazioni ottenute, rispettivamente, dal design entry mediante schema logico e mediante VHDL, si osserva che i due approcci sono equivalenti.

Proprietà caratteristiche del 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: La capacità di poter gestire i tempi di propagazione dei segnali all interno dei circuiti digitali La capacità di simulare lo svolgimento contemporaneo di più operazioni, tipica dei dispositivi Hardware Analisi del Timing e del Concurrency La propagazione dei segnali tra i vari componenti che compongono 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 mediante le assegnazioni del lucido precedente non contempla i ritardi di propagazione del segnale introdotti dalle capacità parassite, associate ai due tratti della connessione tra il gate di ingresso e i due gate in uscita (lungo percorsi da x ad a da x a b) e mostrati nella rete sottostante. 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 più istruzioni di assegnazione siano eseguite nella sequenza in cui compaiono nel programma. In realtà il segnale elettrico parte da x e si propaga contemporaneamente verso a e b (non prima su a e poi su b come avviene nel codice della pagina precedente scritto in C ). Il VHDL deve descrivere sia il TIMING sia la CONCURRENCY dei segnali. Nella rete in esame, se ogni capacità introduce un ritardo pari a 1 unit_delay ( ) il codice VHDL che sintetizza il funzionamento reale della rete potrebbe essere:

Quando un programmatore sviluppa del codice con un linguaggio ad alto livello (C, Java, Pascal) scompone 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 (cioè, 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 è il PARADIGMA DI PROGRAMMAZIONE PARALLELA: infatti, visto che il risultato dell elaborazione deve essere indipendente dalla sequenza in cui le istruzioni sono state eseguite, tutte le istruzioni possono anche essere eseguite in parallelo, senza che un istruzione debba attendere il completamento di un altra. Ad esempio, si pensi alla rete combinatoria in figura. Il programma che descrive la 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

Oggetti definiti in VHDL Oggetto VHDL: entità alla quale è associato un valore Sono definite quattro classi di oggetti Rappresentano connessioni hardware ( input, output, etc). Ad ogni segnale è associata una evoluzione temporale. Le assegnazioni sono effettuate mediante l operatore <=. 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 dato tipo. Non si può cambiare il loro valore. Attraverso lo statement GENERIC il VHDL dispone di un meccanismo per passare parametri non hardware (es. ritardi) di un componente. Oggetti che possono essere dichiarati ed utilizzati sia in blocchi concorrenti che in blocchi sequenziali.

Tipi di dato Nel linguaggio VHDL (Standard Package) sono predefiniti i seguenti tipi di dato: BIT ( 0, 1 ) BIT_VECTOR BOOLEAN ( TRUE, FALSE ) INTEGER REAL TIME Oltre a questi tipi, è possibile utilizzarne altri di specifiche librerie (es. LIBRARY IEEE). E possibile definire dei vettori di bit utilizzando il tipo di dato BIT_VECTOR... Formalismo scalare PORT ( a3,a2,a1,a0 : IN BIT; y1,y0 : OUT BIT); Formalismo vettoriale ( bus ) PORT ( a : IN BIT_VECTOR(3 DOWNTO 0); y : OUT BIT_VECTOR(1 DOWNTO 0)); - Gli elementi dei vettori possono referenziarsi attraverso gli indici (ad es. y(2) <= a(1)) - E inoltre possibile assegnare una sequenza di cifre (ad es., y <= 01 ;) - Per costanti binarie di un singolo bit si utilizza il simbolo mentre per configurazioni binarie da 2 o più bit si utilizza il simbolo. (ad es. a <= 1 ; b_vettore <= 100111 ;) - E anche possibile dare assegnazioni ad un numero limitato di bit del vettore (bit-slicing). (ad es. b_vettore(4 downto 2) <= 101 )

Library IEEE Mediante l utilizzo di librerie (keyword LIBRARY) è possibile aggiungere al VHDL standard nuovi tipi di dato, nuove funzioni, etc. Il meccanismo è 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 è necessario tenere in considerazione utilizzando l ambiente Altera. E disponibile un editor di testo per codice VHDL all interno dell ambiente software ma è 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 Una interface description (ENTITY), ha diverse architectural specification (ARCHITECTURE)

Interface description (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 Architectural specification (Architecture) All interno della sezione ARCHITECTURE viene specificata la logica della rete. All interno della sezione ARCHITECTURE (in <architecture declarations>) è possibile definire degli oggetti, che sono tipicamente dei segnali 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 in cui è specificata la logica 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 contemporaneamente. Non ha alcun significato l ordine con il quale appaiono nel codice VHDL. Sequential Processing Mediante l istruzione PROCESS possono definirsi una sequenza di istruzioni elaborate con il paradigma di programmazione sequenziale. In un blocco PROCESS le istruzioni sono elaborate in modo sequenziale, nell ordine in cui vengono scritte. Ogni processo è eseguito in modo concorrente rispetto ad altri processi o istruzioni concorrenti definite nell architecture. 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 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 di tipo BOOLEAN (TRUE o FALSE). Esempi: a_boolean <= op1 > op2; b_boolean <= op1 /= op2; Operatori come +, -, <, >, <=,>= sono definiti solo per il tipo INTEGER. Altri operatori definiti in VHDL

Concurrent statements I 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 è importante. Concurrent signal assignements Selective signal assignements (WITH-SELECT-WHEN) Conditional signal assignements (WHEN-ELSE) WITH-SELECT-WHEN (Selected signal assignement) Esempio: AND2

Una realizzazione più semplice dell esempio AND2 potrebbe essere la seguente: WHEN-ELSE (Conditional signal assignement)

Esempio 1: AND2 Nel caso siano verificate più condizioni, al segnale di uscita è assegnato il primo valore che soddisfa la catena dei WHEN. Esempio 2: AND2 sintetizzata in VHDL utilizzando il costrutto WHEN-ELSE

Esempio 3: AND2 utilizzando una forma alternativa del costrutto WHEN-ELSE Esempio 4: AND2 utilizzando ancora un altra forma del costrutto WHEN-ELSE