VHDL
Di cosa parla
- Cos'è VHDL: Un linguaggio di descrizione hardware (VHSIC Hardware Description Language) indipendente dalla tecnologia, utilizzato per la modellizzazione, simulazione e sintesi di sistemi digitali.
- Storia: Nato nel 1987 per risolvere le sfide di progettazione manuale dei circuiti digitali. Sviluppato dal Dipartimento della Difesa americano, è stato poi standardizzato dall'IEEE con diverse revisioni (1993, 2000, 2002, 2007, 2008). Oggi è ampiamente usato, in particolare in Europa.
- Concorrenza: I principali HDL sono VHDL (Europa) e Verilog (USA). È importante notare che gli HDL non sono linguaggi di programmazione software come C, C++ o MATLAB.
- High-Level Synthesis (HLS): A fronte della crescente complessità e del time-to-market ridotto per le FPGA, HLS è una metodologia emergente che permette di generare VHDL/Verilog da descrizioni di più alto livello (es. C++/SystemC).
- Target Applicativo: VHDL è uno standard IEEE, non legato a specifiche tipologie di dispositivi o produttori, potendo essere implementato su FPGA o ASIC.
- Design Flow: Il flusso di progettazione VHDL include fasi indipendenti dal dispositivo (Design Entry, Synthesis) e fasi dipendenti dal dispositivo (Implementation, Programming, Testing).
- Sintesi e Modellizzazione: VHDL è un linguaggio a 360 gradi. La "Descrizione Hardware" porta alla sintesi, mentre la "Modellizzazione Hardware" è per la simulazione. Non tutti i costrutti VHDL sono sintetizzabili.
- Entity: È il blocco fondamentale di un design VHDL, una black-box con ingressi e uscite definiti tramite "port". Un design completo include una "top" Entity che comunica con l'esterno.
- Modularità: VHDL promuove una gerarchia modulare, permettendo di "istanziare" e collegare diverse Entity, facilitando la scrittura e il debug. Le porte d'uscita sono convenzionalmente a destra, quelle d'ingresso a sinistra.
- Architecture: Descrive il comportamento o i sub-componenti istanziati all'interno di un'Entity. Un'Entity può avere più Architecture, permettendo diverse implementazioni. È buona norma avere una sola Architecture per Entity e nominare il file (.vhd) e l'Entity allo stesso modo.
- Modeling Styles e Livelli di Astrazione:
- Structural Modeling: Unione di porte/strutture, legata alla tecnologia.
- Dataflow Modeling: Descrizione combinatoria con porte logiche di base, indipendente dalla tecnologia.
- Behavioral Modeling: Descrizione del comportamento dell'entity, non riflette direttamente l'implementazione.
- Mixed Modeling: Combinazione dei precedenti.
- Librerie: Definiscono tipi base e funzioni. Alcune sono obbligatorie (es. `IEEE.std_logic_1164.all`). La libreria "standard" è implicitamente inclusa e contiene tipi come `boolean`.
- Tipi Integer:
- `INTEGER`: Definito nel package "standard", range `(-2^31-1)` a `(2^31-1)`. Utilizza 32 bit per default. Il roll-up non è affidabile in sintesi.
- `NATURAL`: Sottotipo di INTEGER, range `0` a `INTEGER'HIGH`.
- `POSITIVE`: Sottotipo di INTEGER, range `1` a `INTEGER'HIGH`.
- Std_ulogic: Definisce i possibili stati di un buffer in uscita non risolto (`'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-'`).
- Std_logic: Una versione "risolta" di `std_ulogic`. Definisce il valore di uscita per ogni combinazione di stati possibili in caso di connessioni multiple.
- Std_logic_vector: Estensione di `std_logic` sotto forma di vettore.
- Unsigned e Signed: Tipi definiti nella libreria `numeric_std` come array di `std_logic`. Non hanno limiti di dimensione predefiniti e il roll-up è affidabile, a differenza degli `integer`.
- Conversioni: Esistono funzioni e librerie (`numeric_std`) per convertire tra i diversi tipi numerici (unsigned, signed, integer, std_logic_vector).