martedì 24 settembre 2013

FPGA: Approfondiamo il confine tra il linguaggio VHDL e le librerie standardizzate

Chi inizia a studiare il VHDL spesso assume per parte intrinseca del linguaggio la libreria Std_Logic_1164 perché, magari senza pensarci troppo, ha sempre scritto così l’inizio dei propri file VHDL:

library

Lo scopo di questo articolo è fare chiarezza tra i confini del linguaggio e delle librerie, seppur standardizzate.

Lo standard IEEE 1164 definisce un package che definisce una rappresentazione dei valori logici nel linguaggio VHDL, tale package non fa però parte del linguaggio ma è una libreria standardizzata fornita da tutti i principali programmi di sintesi come Quartus o ISE Design Suite.

Il linguaggio definisce invece un package denominato standard, compilato dai programmi di sintesi nella libreria VHDL std ed inclusa automaticamente in tutti i file VHDL, non è quindi necessario “importare” tale libreria nei propri file.

In Quartus il package standard è accessibile tramite il file standard.vhd nel percorso C:\altera\13.0\quartus\libraries\vhdl\std e ne è sotto riportato uno stralcio

standard

E’ possibile notare come nel package vengano definiti alcuni tipi come boolean, bit, integer, etc.. ed altri come natural, positive, etc.. siano creati a partire da tipi creati precedentemente restringendone ad esempio il range di valori ammissibili.

E’ quindi possibile scrivere del codice senza utilizzare la libreria Std_Logic_1164 ma utilizzando semplicemente il tipo bit, previsto nativamente dal linguaggio VHDL come ad esempio

bit

E’ sempre consigliato utilizzare la libreria Std_Logic_1164, l’esempio serve però per capire meglio il confine tra sintassi intrinseca del linguaggio e le librerie.

Analizziamo adesso il sorgente della libreria Std_Logic_1164, accessibile tramite il file std_1164.vhd nel percorso C:\altera\13.0\quartus\libraries\vhdl\ieee

stdlogic1

Notiamo come vengano definiti ulteriori tipi come std_ulogic e std_logic (non mostrato, std_logic è un tipo “risolto” rispetto a std_ulogic, permette cioè di modellare logica con driver multipli, come i bus tristate) con la relativa implementazione, nel file sono presenti inoltre alcune funzioni non native del linguaggio come rising_edge e falling_edge di cui è possibile studiarne l’implementazione

stdlogic2

I codici dei file VHDL di package standardizzati ma non parte del linguaggio come numeric_std, math_real, etc.. sono presenti nella stessa cartella del file std_1164.vhd, hanno grande valore educativo seppur non siano consigliati come materiale di studio iniziale per imparare il linguaggio VHDL. Rappresenta una ricca fonte di documentazione e il loro esame permetterà di scoprire anche i dettagli più intimi del VHDL per padroneggiare al meglio il linguaggio.