• HDL nel flusso di progettazione digitale • Elementi base del VHDL
Transcript
• HDL nel flusso di progettazione digitale • Elementi base del VHDL
Laboratorio di Elettronica 1 Introduzione al VHDL • HDL nel flusso di progettazione digitale • Elementi base del VHDL • Meccanismo di simulazione • Meccanismo di sintesi 2 1 Organizzazione del corso • Lezione 1: – introduzione al VHDL, sintassi, metodi di programmazione • Lezione 2: – uso dell’ambiente di sviluppo per FPGA – Xilinx. Programmazione, sintesi, simulazione. Esempio svolto su un contatore • Lezione 3: – descrizione e utilizzo della Spartan 3. Programmazione, mappatura dei pin, uso del Chipscope 3 Organizzazione del corso • Lezione 4: – Progetto: realizzazione e test di un modulatore a PWM. Determinazione dei fronti di comando per un inverter a mezzo ponte con tempi morti di comando. • Lezione 5: – Progetto: - da definire – realizzazione di una operazione aritmetica • Lezione 6: – Progetto: - da definire – pilotaggio di una VGA 4 2 Organizzazione del corso • Materiale e manuali vengono resi disponibili sul sito web • E’ necessario, soprattutto nella fase iniziale, leggere e capire il linguaggio di programmazione – dedicare molto tempo per lo studio nella prima settimana – • Tutti i progetti saranno disponibili sul sito web, in modo che durante l’esercitazione ci possa essere un backup nel caso di problemi 5 Introduzione A chi e’ dedicato? Ai progettisti di circuiti e sistemi logici che utilizzano sistemi CAE (Coputer Automated tools for Electronic design) Un po’ di storia: 1983: il dipartimento della difesa (DOD) all’interno del progetto VHSIC (Very High Speed Integrated Circuti) sviluppa un linguaggio di descrizione Hardware 1987:l’IEEE lo riconosce come STANDARD (1076) 1993:Il linguaggio viene migliorato con delle integrazioni “minori” Attualmente: A causa della attuale complessita’ dei circuiti ha surclassato altre metodologie (schematic capture) 6 3 Vantaggi • Progetto di tipo “technology -independent” – Impiegato da diversi fornitori / venditori (sia di HW che SW) – Facilita gli “aggiornamenti” del sistema progettato – Documentazione del progetto e’ “STANDARD” • Miglioramento nella qualita’ del progetto – Consente di analizzare varie alternative – Consente piu’ livelli di astrazione • Verifica ad un elevato livello di astrazione • Paragone delle prestazioni tra vari livelli di astrazione • Integrazione tra blocchi sviluppati a vari livelli – Riutilizzo e condivisione di blocchi gia’ sviluppati • Miglioramento della descrizione circuitale ai bassi livelli 7 Considerazioni • E’ meno “immediato” di uno schema digitale • E’ sintatticamente … pesante • Essendo uno “Standard Aperto” vi si possono definire strutture e/o tipologie di variabili non direttamente collegabili alla struttura del circuito • Solo un sottoinsieme del VHDL e’ fisicamente “sintetizzabile” • Esistono tools di sviluppo che consentono di ricavare descrizioni in VHDL partendo da Schemi, Macchine a Stati Finiti, Tabelle di verita’, ecc…. 8 4 I linguaggi di descrizione dell’hardware (HDL) - 1 • hanno l’aspetto di un normale linguaggio di programmazione (tipicamente C), per cui hanno: – diversi tipi di dati e oggetti (costanti, variabili, espressioni) – operatori aritmetico/logici, istruzioni sequenziali (if, while, for…) – funzioni , sottoprogrammi • hanno elementi specifici per modellare in modo efficiente blocchi di hardware – permettono di definire componenti e istanziarliin una struttura gerarchica – supportano la rappresentazione di eventi concorrenti (cioè, operazioni che non si attivano sempre nello stesso ordine temporale) 9 I linguaggi di descrizione dell’hardware (HDL) - 2 • sono adatti a descrivere il sistema a diversi livelli di astrazione – tipicamente, dal livello più alto (sistema) fino al livello logico (rete di porte logiche) – i sistemi tradizionali di rappresentazione di solito sono specializzati per uno o due livelli: schemi a blocchi ⇒sistema, RTL; schemi logici ⇒livello logico; schemi elettrici ⇒livello elettrico; 10 5 Livelli di descrizione più usati • comportamentale (behavioral) – Funzionalità del sistema a prescindere dall’effettiva implementazione a livello di celle elementari – operazioni in sequenza corretta ma senza informazioni temporali • RTL (Register Transfer Level o Data-Flow) – descrizione del sistema in termini di registri, logica combinatoria, bus e unitàdi controllo – assegnazione delle operazioni a un determinato ciclo di clock • strutturale (structural) – descrizione del sistema come rete di componenti elementari (descritti a livello comportamentale) – possibile analisi dettagliata dei tempi di ritardo 11 VHDL (VHSIC Hardware Description Language) • supporta a tutti i livelli il flusso di progettazione – sviluppo, simulazione, sintesi, testing, documentazione • descrizione indipendente dalla tecnologia realizzativa – portabilitàdel progetto da una tecnologia ad un’altra • permette la simulazione a eventi del sistema – validazionedi sistemi complessi • permette la sintesi automatica – da RTL a netlist di celle (standard) – da comportamentale a RTL (in perfezionamento) 12 6 Flusso di progetto: uso del VHDL 13 Modeling Digital Systems • VHDL is for writing models of a system • Reasons for modeling – requirements specification – documentation – testing using simulation – formal verification – synthesis • Goal – most reliable design process, with minimum cost and time – avoid design errors! 14 7 Domains and Levels of Modeling Functional Structural high level of abstraction low level of abstraction Geometric “Y-chart” due to Gajski & Kahn 15 Domains and Levels of Modeling Functional Structural Algorithm (behavioral) Register-Transfer Language Boolean Equation Differential Equation Geometric “Y-chart” due to Gajski & Kahn 16 8 Domains and Levels of Modeling Functional Structural Processor-Memory Switch Register-Transfer Gate Transistor Geometric “Y-chart” due to Gajski & Kahn 17 Domains and Levels of Modeling Functional Structural Polygons Sticks Standard Cells Floor Plan Geometric “Y-chart” due to Gajski & Kahn 18 9 Descrizione VHDL: concetto base • La descrizione di un modulo in VHDL è fatta da due elementi principali: – un’interfaccia (entity), che definisce i terminali di I/O e il nome del circuito – una o più implementazioni(architecture), che descrivono il comportamento o la struttura interna del circuito 19 ENTITY + ARCHITECTURE - esempio • entity, clausola port – nomi dei terminali: A,B,… – direzione: in,out – tipo di dato: bit • architecture – parte dichiarativa (prima di begin) in cui vengono dichiarati segnali interni – parte assertiva (tra begin e end) in cui viene descritto il comportamento del circuito – le operazioni tra segnali (interni e/o di I/O) e le assegnazioni (<=) definiscono il comportamento del circuito 20 10 Segnali e processi • gli elementi fondamentali di un modello VHDL sono i segnali e i processi • un processo è un blocco di codice che descrive il funzionamento di un modulo di logica sequenziale o combinatoria • Processi diversi comunicano tra loro attraverso segnali 21 Segnali e processi • un processo si attiva ed esegue la sua funzione in risposta ad un evento (cioè, ad un cambiamento di valore) di uno dei segnali a cui è sensibile(indicati in una lista apposita: sensitivity list) • in certi casi, la funzione rappresentata da un processo può essere descritta con una assegnazione concorrente semplice o condizionata ad un segnale 22 11 Segnali - Introduzione Signal …. P <= A G <= A S <= P …. P, G : bit xor B; and B; xor CI; • i segnali, cioè gli oggetti dichiarati con l’istruzione signal oppure nella clausola port della entity sono strutture dati capaci di rappresentare forme d’onda nel tempo • hanno associato un tipo (nell’esempio bit) e possono avere un valore iniziale • nella parte assertiva dell’architecture, compaiono delle operazioni tra segnali (xor,and, …) e delle assegnazioni (<=); gli operatori possono essere primitive del VHDL oppure funzioni e procedure definite dall’utente 23 Segnali - Introduzione Signal …. P <= A G <= A S <= P …. P, G : bit xor B; and B; xor CI; • a sinistra del segno di assegnazione (<=) c’èil target(che deve essere un segnale), a destra il signaldriver • l’assegnazione stabilisce un legame tra i suoi ingressi (i segnalicontenuti nel driver) e la sua uscita (il target), quindi viene attivata solo quando si ha un evento (cioèun cambiamento di valore) di uno degli ingressi • di conseguenza, l’ordine con cui le assegnazioni vengono scritte all’interno dell’architecture non ha importanza signal 24 12 Meccanismi di simulazione • …: – ogni evento attiva i driver e i processi che sono sensibili al segnale soggetto all’evento; i driver calcolano il nuovo valore del segnale target, valore (detto transazione) che viene inserito nella coda degli eventi del simulatore – l’esecuzione di tutti i driver sensibili all’evento causa l’inserimento di una o più transazioni nella coda degli eventi della simulazione; terminatala fase di esecuzione dei driver, la simulazione salta alla transazione successiva nella coda e aggiorna il valore del relativo segnale: se il valore aggiornato è diverso dal valore precedente, si ha un evento, e, di conseguenza, una nuova fase di esecuzione dei driver ad esso sensibili; altrimenti, il simulatore salta alla transazione successiva nella coda 25 Simulazione • Un sistema descritto in VHDL viene solitamente SIMULATO per analizzarne in comportamento (simulazione comportamentale) • Bisogna fornire degli stimoli (INPUT) • Ed avere un sistema capace di osservare l’evoluzione del modello durante la simulazione, registrarne le variazioni per un’eventuale ispezione di funzionamento • Il simulatore deve aver la possibilita’ di rappresentare una variabile come “unknown”. • Package STD_LOGIC_1164 26 13 Sintesi Logica • Passaggio tra descrizione comportamentale e descrizione a porte logiche • La sintesi avviene tramite appositi programmi che si appoggiano a librerie dove sono descritte le porte logiche da impiegare (fornite dal venditore) • La sintesi e’ un processo delicato che deve essere opportunamente “guidato ed ottimizzato” • Solo un ristretto sottoinsieme del VHDL si presta ad essere Sintetizzato automaticamente ovvero: Non tutto cio’ che e’ scritto in VHDL e’ sintetizzabile • La restante parte e’ da impiegarsi per la descrizione e per la simulazione 27 Sintassi e dettagli del VHDL 28 14 Elementi Lessicali • Il VHDL non distingue maiuscole e minuscole • un commento inizia con – e si estende fino allafine della linea • un identificatore per segnali, variabili, funzioni, …, inizia con un carattere alfabetico e può contenere lettere, numeri e il carattere _ • i numeri possono essere interi o reali (se includono il punto): –0 1 435_197 623E4 – numeri interi –0.0 1.0 251.436 12.3E-4 – numerireali –2#1100_0100# 16#C4# 4#301#E1 --numero196 • i caratterivannoracchiusitravirgolettesingole: –‘A’‘a’‘*’‘1’‘0’ • Una stringa di caratteri è racchiusa tra doppie virgolette: –“stringa”“” • le stringhedi bit permettono di specificare in modo semplice valori per vettori(array) di tipo binario: –B”101100110101”O”5465”X”B35”--binario, ottale, esadecimale 29 Tipi standard • Definiti nel package STANDARD contenuto nella libreria STD • Presenti implicitamente in ogni simulatore VHDL 30 15 Classi di oggetti: Costanti, variabili, segnali • Costanti: valori fissi valutati solo una volta • CONSTANT e: real := 2.71828; • CONSTANT delay: time := 5 ns; • CONSTANT index: integer; • Variabili: valori modificabili tramite assegnazioni – Utilizzabile solo all’interno di un processo • VARIABLE count: integer := 0; • VARIABLE Is High: boolean; • Segnali: valori modificabili tramite assegnazioni – tengono traccia di una forma d’onda – canali di comunicazione tra i blocchi di un modello VHDL – “eventi”in un segnale attivano la simulazione • SIGNAL dout: std_logic_vector(7 DOWNTO 0) := B”0000_0000”; 31 Array • Il range (intervallo di variazione dell’indice) di un array può essere ascendente o discendente: – SIGNAL a: bit_vector(3 downto 0); --discendente – SIGNAL b: bit_vector(0 to 3); --ascendente • le assegnazioni a array sono basate sullaposizione: – b <= a; --significa:b(0) <= a(3);…; b(3) <= a(0); – b(1 downto 0) <= a(3 downto2); -- assegnazione parziale, con inversione dell’ordine predefinito di b; il risultato è b(1) <= a(3); b(0) <= a(2); – a <= (‘1’,’0’,’1’,’0’); --assegnazione tramite aggregato – a <= B”1010” -- assegnazione tramite stringa di bit – a <= X”A” --come sopra, ma in formato esadecimale – a <= (OTHERS => ‘1’); --assegnazione dello stesso valore a tutti gli elementidi a – b & a -- produce(b(0),b(1),b(2),b(3),a(3),a(2),a(1),a(0)) 32 16 Array: attributi • Nel caso degli array, gli attributi forniscono informazioni supplementari relative all’indice del segnale 33 Espressioni e operatori standard Operatori presenti nel package STANDARD: • booleani: not, and nand, or, nor, xor, xnor • relazionali: =, /=, <, <=, >, >= • shift: sll, srl, sla, sra, rol, ror –poco usati, hanno un comportamento non convenzionale • aritmetici:+, -, abs, +, -, *, /, mod, rem, **– segnooperazioni • concatenazione: & –concatena due array, mettendo l’operando di destra in coda a quello di sinistra 34 17 Dati per logica multilivello e artimetica binaria IEEE ha creato due package per tipi di dati (e relativi operatori) logici e aritmetici: • STD_LOGIC_1164 – sistema a 9 stati logici – TYPE std_logicIS (‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’); – TYPE std_logic_vector IS ARRAY (NATURAL RANGE <>) OF std_logic; • NUMERIC_STD –TYPE unsigned IS ARRAY (NATURAL RANGE <>) OF std_logic; –TYPE signed IS ARRAY (NATURAL RANGE <>) OF std_logic; –unsigned interpretato come rappresentazione binaria di un intero senza segno; signed interpretato come rappresentazione in complemento a 2 di un intero • STD_LOGIC_ARITH –alternativa (preferita) a NUMERIC_STD 35 Package STD_LOGIC_ARITH • definiscei tipi unsigned e signed (come in NUMERIC_STD) • Ridefinisce una parte degli operatori standard per lavorare con signed, unsigned, std_logic_vector e integer – booleani (not, and,…): non ci sono! Per applicare gli operatori booleani ai dati unsigned e signed bisogna prima convertirli nel tipo std_logic_vector e poi usare glioperatori standard – relazionali(=, /=, <,…): a differenza degli operatori relazionali standard, questi hanno ilcomportamento corretto dal punto di vista artimetico – shift: operatori std sostituiti da shl(shift left) e shr(shift right) – aritmetici: ci sono solo -(segno), abs, +, -, *; implementano operazioni in aritmetica senza segno per i dati unsigned, in con segno(in complemento a 2) per i dati signed • Definisce funzioni per le conversioni di dati daun tipo all’altro conv_signed, conv_unsigned, conv_integer, conv_std_logic_vector 36 18 Librerie • • • Una libreria è una collezione di design units il riferimento ad una libreria avviene attraverso nomi logici – l’associazione tra i nomi logici e le directory che contengono le librerie è contenuta in file di setup – Il nome logico WORK è normalmente usato per la libreria che memorizza le design units create dall’utente – la libreria predefinita STD contienei packages STANDARD e TEXTIO – la libreria IEEE contiene, tra gli altri, i package STD_LOGIC_1164 e STD_LOGIC_ARITH per accedere a una libreriae usare le design units in essa contenute: – LIBRARY IEEE; --permette di accedere alla libreria attraverso il nome --logico IEEE – USE IEEE.STD_LOGIC_1164.ALL; --carica tutto(ALL) il contenutodel package STD_LOGIC_1164 – USE IEEE.STD_LOGIC_ARITH.ALL; --carica tutto (ALL) il contenutodel package STD_LOGIC_ARITH 37 Istruzioni concorrenti Le istruzioni concorrenti sono usate all’interno delle architecture per descrivere il comportamento dei segnali. Si attivano(vengono eseguite) solo in seguito ad un evento su uno dei segnali cui sono sensibili, quindi l’ordine di esecuzione non dipende dall’ordine con cui appaiono nel modello. 38 19 Istruzioni sequenziali • Le istruzioni sequenziali compaiono solo all’interno di processi; vengono eseguite nell’ordine in cui appaiono all’interno del processo. 39 Confronto tra variabili e segnali il processo viene eseguito quando a cambia valore (da 0 a 1, nell’esempio sotto); nel primo caso, x prende il valore di a alla fine del processo, per cui a y viene assegnato il valore originale di x (cioè 0); nel secondo caso, x prende il valore di a quando viene eseguita l’assegnazione x:=a, quindi y assume il nuovo valore di x 40 20 Procedure e funzioni 41 Linguaggio VHDL • Esempi • Elementi di memoria: flip-flop, latch • Registri 42 21 Esempi: Multiplexer 4-1 43 Esempi: Multiplexer 4-1 44 22 Sommatore: architettura behavioural 45 Sommatore ripple-carry 46 23 Sommatore ripple-carry: uso di generate 47 Multiplexer 16-1: uso di generate 48 24 Elementi di memoria: latch e flip-flop 49 Flip-Flop con reset sincrono e asincrono 50 25 Registro a N bit 51 Registro a scorrimento 52 26