a 2011-2012
QUARTUS un tool utilizzabile per effettuare, nellambito della progettazione di circuiti digitali: 1. Descrizione a livello RTL del circuito 2. Simulazione funzionale 3. Sintesi logica su dispositivi FPGA della famiglia Altera 4. Simulazione post-sintesi (timing) e analisi delle prestazioni. Imp: nei laboratori didattici installata la versione 9 che permette di svolgere i punti 3 e 4 utilizzando un programma per la gestione delle forme donda in modo grafico. Questa versione non pi disponibile in rete dal sito di Altera. Per averne copia, rivolgersi al docente. In questa guida sono illustrati e commentati i vari passi da compiere per il progetto di circuiti digitali tramite linguaggio VHDL. QUARTUS composto da diversi tools (Compiler, Simulator, Text Editor, etc.) ognuno dei quali serve per una fase specifica del flusso di progetto.
CREAZIONE DI UN PROGETTO
Il primo passo da svolgere consiste nella definizione un nuovo progetto. Con Progetto si intende un insieme di files (es. file VHDL .vhd, file con forme donda per la simulazione .vwf, file contenenti i reports forniti dai differenti tool) che vengono raggruppati in un direttorio comune di lavoro che deve essere specificato dallutente allatto della creazione del progetto stesso (imp: mai direttamente nel desktop).
Per poter generare un nuovo progetto selezionare il men di Quartus: File>NewProjectWizard. Nella prima schermata che appare occorre specificare un direttorio di lavoro (working directory), il nome da assegnare al progetto e il nome della Top-level entity del progetto stesso. Si noti che questultima voce pu in seguito essere modificata per consentire al progettista di analizzare differenti parti del proprio sistema senza necessariamente dover lavorare sullintero progetto. Di default il sistema attribuisce al progetto e alla entit a top-level (e quindi al circuito da simulare) il nome del direttorio di lavoro. Il passo successivo consente di associare al progetto alcuni file (sia .vhd che .vwf). Poich questo manuale vuole essere una guida per la creazione di un nuovo progetto ignoriamo tale passo ipotizzando di non avere alcun file da inserire. Si noti comunque che possibile aggiungere nuovi file al proprio progetto in un secondo momento specificando quali sono i file in uso dal men Assignment-> Settings.
Il passo 3 dedicato alla famiglia logica sulla quale si vuole mappare il circuito che si vuole progettare. E evidente che per selezionare il dispositivo pi adatto occorre innanzitutto avere una conoscenza delle famiglie logiche messe a disposizione da ALTERA e una stima di occupazione darea in termini di GATE utilizzati e del numero di PIN necessari a realizzare il proprio modulo circuitale. Oltre ci bisogna ovviamente tenere in considerazione le prestazioni desiderate per il circuito progettato. Poich in questo momento non abbiamo le specifiche che ci consentirebbero di fare una scelta oculata del dispositivo lasciamo tutte le impostazioni di default e terminiamo il processo di creazione del nuovo progetto (premendo il tasto Finish) ignorando i passi 4 e 5.
Si potr accedere al Project appena creato in altre sessioni di lavoro con Quartus, specificando il nome del progetto con File> Open Project.
avr il nome d default del project); deve quindi essere scritto. Nel corso dellesercitazione la nostra entit a livello pi alto della gerarchia sar inizialmente HA, poi FA e infine adder4. La gerarchia di progetto visibile dalla finestra Project Navigator (Hierarchy).
Qualora invece la sintesi fallisca a causa di qualche errore o comunque si presenti un numero di warning non nullo necessario analizzare il risultato della compilazione leggendo i messaggi di errore/warning nella finestra in basso dei messaggi.
E possibile, facendo doppio clic sulla linea corrispondente allerrore farsi portare (nel Text Editor) alla riga corrispondente allerrore.
Attenzione! Poich alcuni errori ne generano altri (si pu avere il tipico effetto a valanga) sempre bene risolvere gli errori cominciando dal primo (numero di riga di codice pi basso). Attenzione! Questo passo verifica solo la correttezza della sintassi del codice VHDL. Vengono per generati dei messaggi (warnings) che aiutano a segnalare la presenza di errori logici prima della simulazione: per esempio il messaggio che indica che alcune uscite sono stuck-at 0 o 1 (cio fisse al valore logico alto o basso) o quello che segnala che alcuni ingressi non sono connessi a nessun nodo del circuito segnalano probabili errori nella descrizione del circuito.
E possibile esplorare la gerarchia e, per esempio, come ogni FA internamente realizzato. A tale scopo basta cliccare col tasto sinistro del mouse due volte su uno dei quattro FA per ottenere il seguente risultato,che mostra come ogni FA si compone di due HALF_ADDER ed un OR:
Si noti che questo strumento non sempre di facile utilizzo soprattutto in progetti di complessit maggiore. Ad ogni modo la sua utilit indubbia soprattutto per evitare i pi comuni errori che portano alla generazione di Latch parassiti nel circuito.
2 . SIMULAZIONE FUNZIONALE
Selezioniamo dal men la seguente voce: Edit>End time e impostiamo per esempio 2us (corrispondente a 2us/100ns = 20 punti). Chiaramente pi punti metteremo, pi tempo impiegher il simulatore a terminare la simulazione. (Lend time pu anche essere assegnati dal men Assignments> Setting > Simulator) 3. Fatto questo andiamo a disegnare le forme donda. Aggiungiamo quindi tutti i segnali di ingresso e uscita che vogliamo analizzare. Cliccare col tasto destro in un punto della colonna Name e selezioniamo Insert>Insert Nodes or Bus
Nella casella Type possibile restringere la ricerca dei segnali a particolari categorie: Inputs: gli ingressi Outputs: le uscite Reg: uscite di registri Combinatorial: uscite di blocchi combinatori
Per agevolare la ricerca conveniente utilizzare il Node Finder cliccando il relativo tasto presente nella finestra. La seguente finestra consente di fare una ricerca pi dettagliata dei nodi che vogliamo analizzare. Il campo Filter permettere di controllare i criteri della ricerca. Selezionare pins: all e procedere alla ricerca dei nodi cliccando il tasto List. La lista di nodi compatibile con i criteri di ricerca prescelti comparir alla voce Node Found. Si noti che compariranno gli ingressi A, B, S sia come singoli bit, che come stringa di N bit. Selezioniamo (agendo con il tasto >) la stringa per motivi di compattezza, ed aggiungiamo i riporti in ingresso e uscita CIN, COUT.
IMP: per i circuiti sequenziali molto utile visualizzare luscita dei registri interni: per fare ci (solo dopo avere eseguito il comando di generazione della netlist) dal node finder selezionare come filtro: registers pre-synthesis Una volta selezionati i nodi di interesse, premere OK.
Le uscite COUT e S sono ovviamente indefinite, mentre gli ingressi sono posti a 0 a default. Andiamo a cambiarli! Vogliamo verificare che il sommatore funzioni, quindi andremo a definire dei valori per A, B e CIN. Ora selezioniamo una parte della forma donda di CIN che per esempio vorremo porre uguale a 1. La cosa si fa cliccando col tasto sinistro del mouse in un punto della forma donda e spostandosi a destra tenendo premuto (come per selezionare il testo in un wordprocessor). Per default i segnali sono rappresentati in base binaria. Impostiamo ora A, B, S in decimale. Per esempio selezioniamo la forma donda di A tenendo premuto il tasto destro del mouse
8
dalla colonna name; visualizzeremo una finestra da cui selezionare properties. Cambiamo il campo binary a Unsigned Decimal. Ora diamo un valore a B. Selezioniamo il segnale con il tasto destro del mouse dalla colonna name. Assegniamo ora un COUNT VALUE a B, selezionando la voce Value/Count Value (un Count Value un valore che si incrementa con cadenza regolare indicata dallutente).
I parametri sono: Il valore iniziale di conteggio Start Value, mettiamolo per esempio a 10. Il passo di incremento Increment By, mettiamolo a 1. Lintervallo dellincremento che va impostato nel sotto-men Timing. Mettiamolo a 10ns. La rete infatti combinatoria e l'unico vincolo che occorre rispettare che le configurazioni degli ingressi si mantengano per un tempo sufficiente ad esaurire i transistori. In un circuito sequenziale sincrono il valore in questo campo dovr essere multiplo del periodo di clock. Nota: Per inizializzare un segnale di CLOCK, si seleziona la voce Value/Clock e, nel men che compare, si specifica il periodo e il duty-cycle.
Simulazione
Lanciamo la simulazione dal men di QUARTUS Processing>Start Simulation. Le forme donda sottostanti rappresentano il risultato della simulazione:
Si noti che, avendo eseguito una simulazione funzionale, le forme donda non presentano ritardi di propagazione.
10
(Messages) sono anche indicati il percorso critico, la massima frequenza di funzionamento, tempi di hold e setup, occupazione darea. Rispetto alla sintesi funzionale sono stati infatti eseguiti i seguenti ulteriori passi: Il Fitter, che alloca i blocchi logici ottenuti dalla logic synthesis sugli elementi logici presenti sullFPGA e ne programma le interconnessioni. Il Timing SNF Extractor, che ricava informazioni sui ritardi di propagazine dei segnali attraverso i blocchi logici istanziati nellFPGA.
LAssembler, che crea un file binario, che contiene le configurazioni degli switch e dei blocchi logici, per programmare il dispositivo FPGA utilizzando hardware apposito.
4. SIMULAZIONE POST-SINTESI
Dopo aver eseguito la sintesi timing possibile effettuare la simulazione del circuito generato con i ritardi effettivi introdotti dai blocchi logici e dalle interconnessioni semplicemente selezionando la voce Processing>Start Simulation. Si ricordi per di cambiare il tipo di simulazione da Functional a Timing selezionando Assignements/settings/Simulator settings/Simulator mode = Timing
A differenza della simulazione funzionale, la simulazione tiene ora conto di tutti ritardi nel circuito. E pertanto evidente che rispetto alle forme donda viste nella simulazione funzionale, ove luscita commutava idealmente istantaneamente al variare degli ingressi, nella simulazione Timing luscita commuta e si stabilizza con un certo ritardo rispetto allistante in cui variano i segnali dingresso. Nella simulazione svolta, lingresso B commuta dopo 10 ns mentre luscita inizia a commutare introno ai 18,5 ns, per assumere un valore di transizione non valido e successivamente stabilizzarsi intorno ai 19 ns al corretto valore. Vi pertanto un ritardo di luscita e lingresso pari a 9 ns.
11
Per lanciare il Timing Analyzer dal men di QUARTUS si esegua il comando Processing>Start>Start Classic Timing Analyzer. Il T.A. pu eseguire differenti tipi di analisi. I pi importanti sono i seguenti: Delay Matrix. Esegue unanalisi limitatamente ai percorsi combinatori che collegano pin di ingresso e pin di uscita. calcolata una matrice in cui le righe corrispondono agli ingressi, le colonne alle uscite, e in cui indicato alla posizione (i,j) il ritardo di propagazione dallingresso i alluscita j. Questa matrice non tiene conto dei tempi di setup e hold di eventuali registri. Non tiene conto di eventuali percorsi combinatori interni, cio che iniziano e finiscono internamente e che possono comunque essere pi lunghi di quelli indicati! Non comunque il nostro caso ora, poich il sommatore puramente combinatorio, e non avendo registri non pu avere percorsi combinatori che si originano internamente. Registered Performance. Ha senso solo per reti sincrone, in cui vi sia almeno un registro. Indica la frequenza massima di clock che pu essere utilizzata con il circuito e il dispositivo utilizzati senza incorrere in problemi di funzionamento. Tiene conto anche del tempo di setup dei registri.
Nella precedente tabella troviamo conferma di quanto visto nella simulazione Timing. Si vede che al variare il bit B[0] varia il bit S[3] con 9.414 ns di ritardo. Si noti che come ci si aspettava il percorso pi lungo quello da CIN a COUT. Tuttavia anche se tale percorso sicuramente il pi lungo in termini di celle attraversate e quindi di ritardi accumulati nellattraversare le stesse, pu in alcuni casi succedere che altri percorsi risultino pi critici in termini di timing. Infatti nelle FPGA la configurazione delle interconnessioni gioca un ruolo importante e spesso le interconnessioni hanno ritardi di propagazione maggiore dei blocchi combinatori nelle attuali tecnologie.
12