Non vorrei fare un corso sul VHDL come linguaggio di programmazione per l’HW, corsi e specifiche del linguaggio sono pubblici e ognuno può trovarli facilmente in rete. Quello che vorrei fare e’...
VHDL Altera/Xilinx
Storicamente il gruppo germinale nel quale lavoravo e’ partito con la tecnologia Altera e quindi c’e’ un “amore” filiale verso questa societa’, anche se Xilinx (la rivale), addirittura antecedente come presentazione di componenti programmabili on field,, ha tecnologie simili se non migliori (le due societa’ si rincorrono l’un l’altra con l’ultimo componente). E’ anche vero pero’, che il sistema di sviluppo Altera e’ gratis e questo spinge ad avvicinarsi a loro piu’ facilmente. Non me ne voglia quindi Xilinx se questi articoli si basano sugli strumenti Altera.
VHDL Quartus
Direi che oggi non possiamo piu’ prendere in considerazione MaxPlus (il vecchio sistema di sviluppo Altera) perche’ ormai non piu’ supportato e lasciato giusto per compatibilita’ con vecchi progetti.
Scarichiamo quindi la versione 7.x di Quartus, oggi e’ disponibile la v8, (www.altera.com munendoci di una veloce connessione ad internet), successivamente richiediamo una licenza VHDL (e’ gratis, e scadra’ 3 mesi dopo, e’ legata al MAC address della scheda di rete oppure all’id dell’HD) e installiamo il tutto.
Conviene fare una directory nell’ambito di Quartus per contenere tutte le licenze che andremo nel tempo a richiedere.
Dopo aver installato il tutto proverei qualche programma per essere certi che abbiamo installato correttamente il programma, utilizzando magari qualche piccolo esempio disponibile sul sito o in rete (http://www.altera.com/support/examples/vhdl/vhd-add-sub.html).
Il nostro primo programma VHDL
Anche se questo non e’ un corso e io non sono un docente, e’ necessario impiegare un vocabolario di termini comuni e la cosa piu’ semplice e’ commentare un piccolo programma. Quello che avrei scelto per l’occasione e’ un contatore up-down.
Nelle linee 1 e 2, ci sono dei commenti, in VHDL “—“ costituisce il flag di inizio commento, il commento dura fino al termine della linea
-- vhdl (parte 1)
-- contatore sincrono
poi puntiamo le librerie, VHDL e’ un programma molto tipizzato, con cio’ si intende che ogni variabile assume un suo “tipo” e quindi solo le operazioni permesse da quel tipo saranno disponibili. Le librerie che piu’ si impiegheranno saranno quelle aritmetiche, che dovranno essere puntate e abilitate all’uso, vedi linee 4-6
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
C’e’ ora la dichirazione dell’entity, questo e’ il livello piu’ alto del nostro progetto e in pratica costituisce l’I/O del progetto stesso.
INSERIRE ENTITY
Direi che possiamo fare a meno di commentare i nomi dei pin del nostro HW A seguire l’entity vi e’ l’architecture, questa sezione del programma costituisce il body del programma stesso e contiene tutte le variabili impiegate comuni ai vari moduli componenti l’architettura.
VHDL: Inserire Architettura
Definita la dichiarazione dell’architettura si passa al body vero e proprio. Non esistono regole fisse, dipende dal progetto e dall’esperienza precedente. Io cerco di dividere il progetto in piu’ sezioni, in genere una sezione e’ un file, all’interno di una sezione trovano posto piu’ processi.
Ogni processo ha una parte di logica combinatoria ed una parte di logica sequenziale.
Ma questo non e’ obbligatorio, ciascuno e’ libero di organizzare il progetto come vuole, il miglior consiglio che posso dare e’ suddividere il tutto, quanto e’ piu’ possibile. Se ci riusciamo vedrete come ogni parte puo’ essere compilata e simulata separatamente e poi puo’ essere utilizzata dalla sezione superiore facilmente.
L’architettura del nostro progetto si basera’ su di un solo processo vista la semplicita’ del progetto.
Simulazione VHDL
Compilato il programma possiamo passare alla simulazione, anche qui’ non ci sono regole da seguire quanto consigli. Avendo suddiviso il nostro programma su piu’ files e’ anche possibile simularli uno alla volta e cio’ ci permette una messa a punto piu’ facile, inoltre considerate che tutti i file di ogni sezione avranno la stessa radice, es. se il progetto si chiama “p” ci sara’:
un P.vhd che sara’ il file sorgente
un P.wwf che sara’ il file degli stimoli (non prendiamo in esame gli stimoli tramite comandi perche sono di piu’ difficile impiego)
una serie di file prodotti dal compilatore di nome p.xxx
Ritorniamo al file di simulazione, in genere io inserisco al primo posto il reset e subito dopo il clock (piu’ d’uno se necessario). A seguire gli altri segnali magari stando attento a mettere prima l’input e poi l’output corrispondente. Aiutatevi con gli adeguati separatori fra le varie zone degli stimoli.
Per inserire un segnale e’ bene selezionare la visibilita’ su tutti i nodi e quindi selezionarli, si paga lo scotto di avere nomi molto lunghi ma e’ meglio che non vedere il segnale o immaginare come si stia comportando.
In alcuni casi accade che il nostro segnale non e’ visibile al simulatore, quello che normalmente succede e’ che per un errore il compilatore ha provveduto ad eliminarlo perche’ non utilizzato o utilizzabile, normalmente e’ facile capire perche’ il segnale’ e’ stato rimosso (caso banale il segnale e’ dichiarato ma non utilizzato, oppure qualunque sia il valore che puo’ assumere la logica non cambia…), nei casi piu’ difficili e’ sufficiente agganciare il segnale ad un pin di test esterno e quindi capire il suo possibile stato e perche’ e’ stato eliminato dal compilatore.
Nella nostra simulazione ho usato:
- il reset;
- il clock;
- il segnale mode (composto da 3 bit), rispettivamente per hold,count-up,count-down e load;
- il segnale di ingresso composto da 12 bit;
- il segnale di uscita composto da 12 bit.
In allegato trovate l’intero progetto Quartus da poter provare.
Bene, ora che abbiamo iniziato con il VHDL possiamo passare ad un esempio un po’ piu’ corposo, non tanto come quantita’ di codice ma come insieme di regole empiriche che pero’ aiutano a cavarci d’impaccio.
Nota 1: McGraw Hill - VHDL Programming by Example 4th Ed.pdf, Vhdl Reference Manual.pdf
Leggi anche: VHDL II e VHDL III
Repost: 15 Lug 2008