VHDL for beginners: Dati e tipi

Eccoci alla seconda lezione del corso base di VHDL. Nella precedente lezione, prettamente teorica, abbiamo affrontato una panoramica sul linguaggio introducendo i concetti base che ci sono dietro lo sviluppo di un nuovo componente, quali ENTITY e ARCHITECTURE. In questa lezione entreremo nel dettaglio dello sviluppo affrontando i concetti alla base dei tipi, delle variabili e dei segnali. Proverò a trasmettervi delle linee guida per gestirli nel modo corretto. Questa lezione non sarà solo teorica, ma inizieremo a sporcarci le mani con qualche esempio muovendo i primi passi con la suite di sviluppo Xilinx e valutando i primi errori che si possono generare in fase di sintesi. Vi consiglio di prendere familiarità fin da ora con la suite in modo tale da avere una marcia in più nelle prossime lezioni, soprattutto per quando si affronterà la simulazione di un listato.

Tipi di dati

Nella precedente lezione abbiamo visto che all'interno dell'entità e delle architetture è possibile dichiarare le porte, i segnali e le variabili. In tali dichiarazioni/definizioni deve essere associato anche un tipo e nel seguito vediamo quali tipi ci fornisce il VHDL e le varie peculiarità.

  • BIT: Il primo tipo di dato che osserviamo è il BIT proprio perché è il mattoncino di partenza per i sistemi digitali. Ovviamente questo tipo può assumere solo i due valori '0' e '1'. Tra poco vedremo che questi valori non sono esaustivi per la rappresentazione dello stato di una generica porta di un sistema digitale. Associato al tipo BIT troviamo l'array di bit che viene definito BIT_VECTOR. Anche questo tipo è molto semplice, e supponendo che il lettore abbia le conoscenze basi dei linguaggi di programmazione, un tipo definito vettore è la dichiarazione di un array, in tal caso di singoli elementi dichiarati come BIT. La sintassi corretta per l'utilizzo è BIT_VECTOR ( x1 downto x2)
  • INTEGER: è il tipo per i numeri interi a 32bit senza segno. Per il sintetizzatore un intero è sempre a 32bit e quindi bisogna fare molta attenzione al suo utilizzo per non sprecare risorse (definire un segnale a 32bit significa definire un array di 32 elementi). Per tale tipo esistono diversi sottotipi (POSITIVE, NATURAL, etc...) che possono essere utilizzati all'occorrenza. Vedremo nel seguito di questo articolo alcune tecniche utili a gestire meglio tipi come l'integer.
  • BOOLEAN: è il tipo per il valore booleano che può assumere solo i valori TRUE o FALSE. In genere questo è il tipo utilizzato per i risultati delle operazioni di confronto.
  • TIME: utilizzato per variabili di tempo è molto utile nelle attività di test per sollecitare al giusto momento l'ingresso del componente. Il tipo non è sintetizzabile in quanto non ha un significato fisico nell'hardware.
  • REAL: è il tipo dei dati reali (con virgola) e risulta tra i tipi non sintetizzabili ma è utilizzabile per le attività di test. Quando viene utilizzato un valore di tipo reale è sempre necessario che contenga il punto decimale ed eventualmente anche il segno.
  • CHARACTER tipo per l'utilizzo di caratteri ASCII. Il vettore di caratteri è indicato con STRING. Questi due tipi relativi ai caratteri non sono sintetizzabili in termini di circuiti logici ma sono previsti per un utilizzo nelle attività di test.
  • STD_LOGIC: è un tipo definito nella libreria IEEE 1164 e nasce come estensione del tipo bit, in quanto oltre ai valori '0' e '1' sono stati aggiunti altri 7 valori quali 'Z' (alta impedenza), 'L' e 'H' (basso e alto ma livelli logici con basse correnti), 'X' e 'W' (stati di indeterminazione in basse correnti), 'U' (valore indefinito), '-' (don't care). Infine, anche per tale tipo è definito il tipo relativo all'array con la parola chiave STD_LOGIC_VECTOR.

Il VHDL è un linguaggio con un elevato indice di flessibilità e, oltre ai tipi sopra riportati, consente di specificare nuovi tipi secondo le esigenze del progettista. Il linguaggio mette a disposizione principalmente due tecniche per definire nuovi tipi: i sottotipi e gli enumerativi. Queste due tecniche sono abbastanza diverse tra loro. La definizione di un sottotipo non è altro che l'utilizzo di un tipo già esistente ridefinendo l'intervallo di utilizzo del nuovo tipo. La sintassi è riportata di seguito.

SUBTYPE nuovo_nome_tipo IS nome_tipo RANGE valore_iniziale TO valore_finale;

Come si può osservare nella sintassi ritroviamo le parole chiave SUBTYPE, RANGE e TO. La sintassi è semplice ed intuitiva e un pratico esempio applicativo può essere la ridefinizione del tipo integer assegnandogli un range limitato. Tale tecnica porta anche a gestire meglio le risorse (esempio integer a 8bit anziché 32bit). La parola chiave RANGE può essere utilizzata anche durante la definizione di qualsiasi segnale o variabile, in modo tale da poter limitare la variazione del segnale all'interno di un intervallo prestabilito. L’utilizzo di questa tecnica consente di ottimizzare le risorse a disposizione.

La seconda tecnica per definire un nuovo tipo è l'enumerazione che si ottiene con la seguente sintassi:

TYPE nome_tipo IS (valore1, valore2, …);

L'enumerazione consente di definire un nuovo tipo che assume dei "label" definiti dal progettista. La sintassi utilizza le parole chiave TYPE e IS mentre i valori da assegnare vengono riportati tra le parentesi graffe. Un esempio molto significativo dell'utilizzo dell'enumerativo è nell'implementazione di una macchina a stati finiti, in cui è necessario definire i vari stati e facendo ricorso al tipo enumerativo è possibile farlo assegnando dei label ai diversi stati.

Definizione dei Dati

Nella prima parte dell'articolo abbiamo visto con quali tipi possiamo definire i nostri dati. La definizione dei dati in VHDL può essere realizzata principalmente in 3 modi che di seguito affrontiamo:

Costanti. Come per i linguaggi di programmazione, una costante è un valore simbolico a cui viene assegnato un valore in fase di dichiarazione e questo non può essere più modificato. La sintassi per [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2770 parole ed è riservato agli abbonati PRO. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e PRO inoltre potrai fare il download (PDF) dell'EOS-Book e di FIRMWARE del mese. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

5 Commenti

  1. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 26 settembre 2017
  2. Luca Giuliodori Luca Giuliodori 27 settembre 2017
    • Luca Giuliodori Luca Giuliodori 27 settembre 2017
  3. Davide Di Gesualdo Davide Di Gesualdo 27 settembre 2017
    • Daniele Valanzuolo Daniele Valanzuolo 28 settembre 2017

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *