Corso FPGA: Altera Quartus II, il tool di sviluppo di Altera

quartus2-image

Eccoci qui, con una nuova puntata del nostro corso su FPGA. Quello di cui parliamo oggi rende più completo un quadro che si va sempre più delineando nei dettagli. In particolare, non si può utilizzare un dispositivo FPGA se non si conosce il suo tool di sviluppo. E proprio per questo motivo ho deciso di venire in vostro aiuto, descrivendovi il tool progettato da Altera per dare la vita al vostro dispositivo programmabile. Ci stiamo avvicinando davvero al cuore del nostro dispositivo: signore e signori, ecco a voi Altera Quartus II!

Abbiamo già conosciuto i dispositivi Field Programmable Gate Array, abbiamo conosciuto le più note ed importanti famiglie produttrici, abbiamo imparato ad utilizzare i linguaggi VHDL e Verilog, ora non resta che imparare ad utilizzare i potenti tool di sviuppo che le aziende produttrici mettono a disposizione per sviluppare un'FPGA.

Abbiamo parlato di più famiglie, ma in questo articolo il focus è su una particolare azienda: ALTERA.

I motivi non stanno nel fatto che Altera è migliore delle altre, anche perché nell'articolo dedicato alle famiglie penso che sia chiaro come sia difficile poter dire che una famiglia è migliore di un'altra.

Attualmente sto utilizzando Quartus II, e su questo prodotto penso di potervi dare le notizie più aggiornate. Tra l'altro Xilinx ha pensato bene di rinnovare il suo prodotto ripartendo dalla progettazione di base, e Vivado è un prodotto davvero nuovo rispetto all'obsoleto (e probabilmente non più degno dell'attuale tecnologia che contraddistingue le FPGA Xilinx) ISE; prima di affacciarci e di potervi descrivere questo nuovo mondo, sarebbe bene che io mi immerga un po' in questo tool rinnovato.

E' necessario dire, innanzitutto, che non è possibile programmare un'FPGA senza conoscere il suo tool di sviluppo; per questo motivo imparare ad usarlo non è un dettaglio ma un prerequisito necessario e fondamentale.

Premetto che, come detto nel primo articolo sui Field Programmable Gate Array, non abbiamo a che fare con dei giocattolini, ma sono oggetti altamente professionali, e questo si riflette anche sui tool, la cui licenza non è gratuita. Ma Altera mette a disposizione la versione Web Edition, che invece è gratuita, e su questa versione concentrerò la mia attenzione. In questo modo tutti potete fare ciò vi mostro senza problemi alcuni. Per quanto riguarda le limitazioni, le vedremo passo passo durante il nostro itinerario.

Iniziamo con il link al download center per il file di installazione. Per poter scaricare il file bisogna essere registrati.

Una volta scaricato il file, basta eseguirlo e seguire le semplicissime istruzioni mostrate.

E' fondamentale scaricare anche i devices support, senza cui non potremo programmare l'FPGA di cui abbiamo bisogno. Già qui compare la prima limitazione della Web Edition: non figura, tra i devices, la famiglia Stratix, che, se ricordate dall'articolo precedente, è la famiglia con più elevate "qualità" tecniche. Non compaiono inoltre molti modelli più datati.

 

A questo punto il Quartus II si presenta così:

Figura 1: Come si presenta Quartus II

 

Per creare un nuovo progetto vi rimando all'articolo precedente di cui sopra.

Una volta creato un nuovo progetto, è importante la possibilità di inserire nuovi file (.vhd, .v, schematici, etc...) sia da scrivere direttamente attraverso il tool sia che abbiamo scritto attraverso altri editor. L'editor messo a disposizione è molto potente ma anche piuttosto macchinoso, rispetto a tanti altri che si trovano sulla rete gratuitamente. Io personalmente utilizzo Notepad++, o Ultraedit, ma per scrivere in VHDL o Verilog ogni editor è buono, meglio se esiste il riconoscimento della sintassi del linguaggio e ancora meglio la ricompattazione a blocchi.

 

Per creare un nuovo file .vhd è sufficiente seguire il Menù: File -> New e si aprirà la seguente finestra

 

Figura 2: New Window

 

Cliccando su VHDL File verrà aperto l'editor.

 

 

Tramite Project -> Add Current file to Project il file verrà aggiunto al progetto.

Nel caso che voi decideste di usare altri editor, basterà aggiungerli dopo averli creati.

Per aggiungere nuovi file al progetto si procede così: Project -> Add/Remove files in Project e comparirà la seguente finestra:

 

Figura 3: Add/Remove File in Project

 

 

Quindi basterà cercare i file attraverso il Navigator e selezionarli, quindi cliccare su Add.

A questo punto possiamo procedere con la compilazione del nostro progetto.

Intanto osserviamo più da vicino come si presenta il tool. Nella figura 1 possiamo vedere una struttura a quattro finestre. In alto a sinistra abbiamo quella denominata Project Navigator, con più tab che ora esamineremo.

 

Figura 4: Project Navigator

 

Il primo tab, Hierarchy, contiene la gerarchia del progetto. Grazie ad un menù scorrevole a tendina è possibile vedere tutti i file funzionali presenti nel progetto in modo gerarchico. In questo esempio abbiamo un file top_and_port che istanzia un file denominato and_port. Questa visualizzazione gerarchica sarà visibile solo dopo aver compilato il progetto.

Il tab Files invece mostra tutti i file del progetto ma in modo non gerarchico. A differenza del tab precedente, qui compaiono anche file di supporto al progetto, come ad esempio i file di vincoli timing, o il file di pinout.

Il tab IP Components contiene tutte le macro IP utilizzate per il progetto, che vedremo nei prossimi articoli.

Non entrerò nel merito degli altri tab, dato che al momento non sono di grande interesse.

 

In basso a sinistra abbiamo invece la finestra denominata Tasks. E' qui che abbiamo le funzionalità di compilazione, sintesi, implementazione etc. del nostro progetto.

Si presenta così:

Figura 5: Tasks

 

Per agevolare la visualizzazione ho espanso alcune voci (altrimenti di default le voci sono tutte compresse).

Se eseguiamo doppio click sulla voce Compilation Design verranno eseguiti tutti i task presenti, dalla compilazione all'analisi timing, ma molto spesso capita che non vogliamo eseguire necessariamente tutto ogni volta che facciamo una compilazione. Considerate che per progetti complessi alcune di queste fasi richiedono ORE, per cui è bene eseguirle solo quando necessario.

Iniziamo con la prima voce disponibile: Analysis & Synthesis. Attraverso questa voce, con un doppio click, effettuiamo la compilazione del progetto e la sua sintesi. I file vengono letti sintatticamente, vengono individuati gli errori di sintassi, e la conversione del sistema descritto in porte logiche. Per cui alla fine abbiamo a disposizione sul tab Hierarchy del Project Navigator la visione gerarchica del nostro progetto (come possiamo vedere nella figura 4), se non sono presenti errori (Figura 5).

In questa fase il nostro progetto è già un insieme di porte logiche, ma ancora piuttosto indipendente dalla famiglia di FPGA su cui il nostro lavoro verrà poi scritto.

 

La fase di Fitter (Place & Route) invece va a decidere in quali celle dello specifico dispositivo scelto andranno ad essere posizionate le porte logiche elaborate nella parte precedente. Questa fase è spesso molto delicata. Può succedere, come nel nostro caso, che il tool impieghi poco tempo a decidere dove inserire le porte logiche, poiché il progetto è molto piccolo. Ma capita altrettanto spesso che invece il progetto preveda una miriade di porte logiche, celle di memoria, che dovranno essere usate e posizionate per ottenere la funzionalità scelta. In questi casi potrebbe essere complicato scegliere le posizioni più adatte in base alle vie di collegamento tra le varie celle. Ed è anche qui che possono nascere problemi di Timing. Un Place & Route non buono, o ottimale, può ad esempio portare a collegamenti troppo lunghi tra due registri tra cui ci sono anche porte logiche, e tutto ciò può creare ritardi tali da rendere non più veritiero ciò che magari abbiamo visto in simulazione.

In questa fase quindi va dedicata una particolare attenzione, attraverso tecniche di cui parleremo in seguito, ai vincoli temporali da inserire in modo da poter studiare il problema e superarlo qualora si presenti.

Successivamente c'è la fase di Assembler, che serve a generare il file di programmazione. E' una fase che non crea problemi in senso funzionale, ma rappresenta solo la codifica di ciò che è stato deciso in fase d Place & Route. Per la programmazione del nostro dispositivo Altera potrebbe già bastare.

Il file di programmazione viene scritto sul dispositivo attraverso una porta di tipo JTAG che deve essere presente sulla scheda. Altera mette a disposizione (in vendita) i cavi USB Blaster che sono dei convertitori USB - JTAG ad hoc per questo scopo.

Vi ricordo tuttavia che le FPGA Altera, come già detto nell'articolo sulle famiglie di FPGA, non sono realizzate in tecnologia FLASH, per cui c'è sempre bisogno di accompagnarle con una memoria Flash dedicata al Firmware, in modo che, ad ogni riavvio della scheda, il Firmware venga immediatamente scaricato sul dispositivo. Esiste una funzione per convertire il file generato per la programmazione dell'FPGA in file di programmazione da inserire in una memoria FLASH, che ha un formato differente. E' sufficiente andare nel menù: File -> Convert Programming Files...

Molto importante anche ai fini della fase di Place & Route è il TimeQuest Timing Analysis, che ha il compito di consentire lo studio delle varie problematiche di Timing nel progetto. E' un tool altamente sofisticato e imparare ad utilizzarlo rappresenta un'arma in più per un progettista, che gli eviterà molte sorprese una volta che l'FPGA è stata programmata.

 

In basso per tutta la base possiamo vedere la finestra dei Messages, su cui vengono stampati tutti i messaggi che il tool ci fornisce durante i vari tasks. Possiamo infatti leggere tutti i Warning, gli Errori, le Info, che ci aiutano a capire se qualcosa nel nostro lavoro potrebbe non funzionare correttamente. Possono essere visualizzati in ordine di visualizzazione, ma anche suddivisi per tipologia di messaggio, in modo da separare gli errori dai messaggi di semplice informazione.

 

Figura 6: Messages

 

Nel nostro progetto, non avendo definito una board in cui inserire l'FPGA, non ho deciso su quale pin andare a definire ingressi e uscite. Da qui nascono dei Warning e dei critical Warning.

Ci sono inoltre Warning che avvisano sull'assenza di una licenza.

 

Nella finestra grande invece vediamo il "banco di lavoro", in cui possiamo utilizzare l'editor, disegnare tramite schematico un sistema, visualizzare i Report in formato XML navigabile, etc.

Ad esempio possiamo osservare il Flow Summary nell'immagine di Figura 7.

 

Figura 7: Flow Summary

 

Questo report mostra tutte le risorse che il nostro progetto impegnerà. E' disponibile già in fase di compilazione, ma non è definitivo in questa fase. Ho infatti detto che in fase di compilazione il resoconto è indipendente dalla famiglia utilizzata. Può a questo punto succedere che l'inserimento del sistema in una certa famiglia consenta di utilizzare un numero minore di risorse, magari perché sono condivisibili in qualche modo.

Nell'immagine è ben visibile come l'unico elemento utilizzato sia una porta logica con 3 pin. Infatti il sistema è dato da un'unica porta and, e possiamo solo vedere come il report ci dia conferma che il tool abbia realizzato ciò che abbiamo scritto in VHDL.

Per indagare ancor di più sulla corretta realizzazione del sistema, possiamo, a questo punto, utilizzare l'RTL Viewer, oppure il Technology Map Viewer.

Utilizzando il Menù Tools -> Netlist Viewers -> RTL Viewer possiamo analizzare il sistema realizzato in fase di compilazione, mentre con Tools -> Netlist Viewers -> Technology Map Viewer vediamo il sistema post fitting e post Place & Route.

Figura 8: RTL Viewer 

Figura 9: Technology Map Viewer

 

In questa seconda visualizzazione sono ovviamente presenti anche i buffer di ingresso e uscita, sempre presenti in ogni FPGA e (in quasi tutte le situazioni) configurabili in vari modi.

 

Le potenzialità del tool non finiscono assolutamente qui. Esiste il Signal Tap, un analizzatore di stati logici interno con una potenza incredibile. Esiste il Megawizard Plug-in Manager, di cui parleremo nel prossimo articolo.

Ciò che certamente è importante sapere è che non è necessario conoscere tutte le potenzialità di Quartus per poter progettare un'FPGA. Tuttavia ogni strumento in più sarà un'arma aggiuntiva per raggiungere i propri scopi.

Chiudo l'articolo inserendo un link al sito di altera, e per la precisione alla sezione che elenca i costi delle licenze. Non sarà il modo migliore per chiudere un articolo, ma prima o poi anche queste notizie vanno fornite. Potrete constatare con i vostri occhi cosa intendevo all'inizio dell'articolo, affermando che l'alta professionalità di FPGA e tool si riflette sui costi delle licenze (e anche dei dispositivi stessi).

Spero che questo aspetto non vi scoraggi... considerate che per una scheda poco complessa con un'FPGA mediamente complessa ci sono aziende disposte a sborsare un numero variabile di decine di migliaia di euro (crisi economica a parte). Sono più che certo che può valerne la pena!

 

Quello che hai appena letto è un Articolo Premium reso disponibile affinché potessi valutare la qualità dei nostri contenuti!

 

Gli Articoli Tecnici Premium sono infatti riservati agli abbonati e vengono raccolti mensilmente nella nostra rivista digitale EOS-Book in PDF, ePub e mobi.
volantino eos-book1
Vorresti accedere a tutti gli altri Articoli Premium e fare il download degli EOS-Book? Allora valuta la possibilità di sottoscrivere un abbonamento a partire da € 2,95!
Scopri di più

13 Comments

  1. Giorgio B. Giorgio B. 7 gennaio 2014
  2. Giorgio B. Giorgio B. 7 gennaio 2014
  3. Piero Boccadoro Piero Boccadoro 7 gennaio 2014
  4. Tiziano.Pigliacelli Tiziano.Pigliacelli 7 gennaio 2014
  5. Giorgio B. Giorgio B. 8 gennaio 2014
  6. Giorgio B. Giorgio B. 8 gennaio 2014
  7. Tiziano.Pigliacelli Tiziano.Pigliacelli 14 gennaio 2014
  8. Tiziano.Pigliacelli Tiziano.Pigliacelli 14 gennaio 2014
  9. Giorgio B. Giorgio B. 22 gennaio 2014
  10. Dario.Soldi 2 febbraio 2014
  11. Ciro.Zolcol 8 febbraio 2014
  12. Piero Boccadoro Piero Boccadoro 9 febbraio 2014
  13. Tiziano.Pigliacelli Tiziano.Pigliacelli 13 febbraio 2014

Leave a Reply