Dispense VERIFICATO

VHDL

Politecnico di Milano electronics engineering - ingegneria elettronica 2020
15 visualizzazioni
15 download
Nessun voto ancora
Condividi: WhatsApp Telegram
Anteprima pagina 1 — VHDL Anteprima pagina 2 — VHDL Anteprima pagina 3 — 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.
    Questi stili rappresentano diversi livelli di astrazione, dal basso all'alto.
  • 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`.
    Questi tipi sono derivazioni di INTEGER e la loro dimensione in sintesi può variare.
  • 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).

Altri appunti di DIGITAL ELECTRONIC SYSTEMS DESIGN

Condividi questi appunti

WhatsApp Telegram