Movatterモバイル変換


[0]ホーム

URL:


Vai al contenuto
WikipediaL'enciclopedia libera
Ricerca

VHDL

Da Wikipedia, l'enciclopedia libera.
Esempio di codice VHDL

IlVHDL (acronimo diVHSIC Hardware Description Language, dove "VHSIC" è la sigla diVery High Speed Integrated Circuits), ininformatica edelettronica, è unlinguaggio di descrizione dell'hardware nato da un progetto delDipartimento della difesa statunitense. Il VHDL nasce nel1987 quando diventa lo standardIEEE 1076 e nel1993 ne esce una versione aggiornata.

È, insieme alVerilog, il linguaggio più usato per la progettazione disistemi elettronici digitali. È lo strumento fondamentale per la progettazione dei modernicircuiti integrati digitali e le sue applicazioni spaziano daimicroprocessori (DSP, acceleratori grafici), comunicazioni (cellulari,TV satellitare), automobili (navigatori,controllo di stabilità) a molte altre.

Caratteristiche distintive

[modifica |modifica wikitesto]

Il VHDL si presenta per molti versi simile a un vero e propriolinguaggio di programmazione: in particolare ne usa i tipicicostrutti qualiif...then...else. Tuttavia, essendo un linguaggio che descrive il funzionamento e la struttura di componentihardware, ha alcune caratteristiche distintive rispetto ai linguaggisoftware. La principale è la concorrenzialità; con questo termine si indica il fatto che diverse parti di un codice scritto in VHDL, una volta tradotte in un circuito elettronico, funzionano contemporaneamente, in quanto dispongono dihardware dedicato; al contrario, in un linguaggiosoftware, le funzioni descritte dal codice sono generalmente eseguite sequenzialmente, riga dopo riga, in quanto dispongono di un unico processore fisico.

Il VHDL permette di modellare facilmente l'interazione tra i vari blocchi funzionali che compongono un sistema. Queste interazioni sono essenzialmente lo scambio di segnali di controllo e di dati tra i vari oggetti che costituiscono il sistema. In un sistema hardware infatti ogni oggetto da modellare, sia esso una semplice porta logica o un complesso microprocessore, reagisce istantaneamente ai cambiamenti di stato dei propri ingressi producendo dei cambiamenti sulle proprie uscite. Ogni blocco funzionale, a sua volta, è descritto nella relazione ingressi-uscite, usando i classici costrutti del linguaggi di programmazione (if, for, while).

Utilizzo nella progettazione elettronica

[modifica |modifica wikitesto]

Le principali fasi di progettazione sono due:

  • nella prima l'oggetto viene descritto comeENTITY, ovvero come il componente viene visto dall'esterno: questa sezione comprende generalmente le porte di comunicazione, i tempi di ritardo, la larghezza deibus e i parametri di configurazione;
  • nella seconda si progetta laARCHITECTURE, ovvero l'architettura interna in cui si descrive come il dispositivo funziona; è questa la parte più importante perché ne costituisce la descrizione funzionale vera e propria.

Anche se ognuno può scrivere questa seconda parte come vuole, di solito vengono usati due stili:behavioural ostructural. Con il primo,behavioural, si descrive la relazione funzionale ingressi-uscita tramite una funzione o un algoritmo; se invece si usa lo stilestructural si rappresenta la struttura interna del dispositivo formata da componenti di più basso livello ed i loro collegamenti (RTL:Register transfer level), ovvero si decide già con quali oggetti realizzare la funzionalità e li si connette tra di loro.

Nella progettazione di un nuovo dispositivo, di solito, si parte da una descrizionebehavioural di alto livello, per passare poi ad una descrizione RTL ovvero costituito dai componenti fondamentali digitali come iregistri, l'ALU, ibus e lemacchine a stati.

L'ultimo passo di traduzione del modello RTL in unanetlist è eseguito in maniera automatica da un programma software che si chiama "sintetizzatore". Esempi di sintetizzatori commerciali sono ad esempio Synopsys Design Compiler per gliASIC e ISEXilinx o QuartusAltera per leFPGA. Il sintetizzatore produce unanetlist ovvero un file vhdl o verilog di istanze di celle della tecnologia su cui viene "mappato" il circuito digitale. La tecnologia è di solito quella delle FPGA o dei circuiti integrati CMOS. Esistono anche sintetizzatori liberi, quali ad esempio Alliance VHDL o MVSIS.

Durante l'esecuzione di tutto il flusso di progettazione si effettuano delle simulazioni per verificare che sia mantenuta la congruenza tra i vari modellibehavioural, RTL enetlist. Per effettuare queste simulazioni si usa untest bench, scritto anch'esso in VHDL, che ha la funzione di generare gli stimoli sugli ingressi del circuito e di verificare la correttezza delle uscite.

Concetti fondamentali

[modifica |modifica wikitesto]

I costrutti del VHDL si possono dividere in due classi: i costrutti paralleli e i costrutti sequenziali.

Icostrutti paralleli sono eseguiti ogni volta che almeno uno degli ingressi cambia stato; l'esempio più semplice è la descrizione di una portaAND:

Z<=AandB;-- se A o B cambiano valore, Z assume il nuovo valore dopo un intervallo infinitesimo delta (questo per differenziare il tipo di dato signal dal tipo di dato variabile). Se Z fosse una variabile, cambierebbe istantaneamente

Per descrivere funzioni più complesse si usano i processi; per esempio per descrivere unflip-flop si scrive:

FLIPFLOP:process(clock,reset)-- Il processo viene eseguito se almeno uno tra i segnali clock e reset cambia valorebeginif(reset='1')thenQ<='0';elsif(clock'eventandclock='1')thenQ<=D;endif;endprocess;

Tutti i processi presenti in un codice VHDL agiscono come se fossero in funzione contemporaneamente. Ad esempio, supponendo di avere molti processi che descrivono ciascuno un flip-flop come quello precedente, con ugualeclock di comando per tutti, quando si ha il fronte di salita delclock si deve immaginare che tutti i processi siano eseguiti contemporaneamente, in modo "concorrenziale". Nel caso di un simulatore software, poiché un computer esegue un numero limitato di operazioni contemporanee, quando non una sola alla volta, si tiene traccia dello stato iniziale e si simulano i processi in sequenza calcolando l'effetto che avrebbero avuto se fossero stati paralleli.

Icostrutti sequenziali sono eseguiti riga dopo riga come nei linguaggi per il software. Ad esempio tutti i costrutti all'interno di un processo sono eseguiti sequenzialmente (vedi esempio sopra). Fanno parte dei comandi sequenziali ilif...then...else, ilcase, ilfor...loop e altri.

Esempio finale

[modifica |modifica wikitesto]

Un esempio di programma in VHDL: ilflip-flop tipo JK sincrono

libraryieee;useieee.std_logic_1164.all;entityjk_ffisgeneric(prop_delay:Time:=10ns);-- tempo di propagazioneport(clk:instd_logic;-- segnale di clockj:instd_logic;k:instd_logic;q:outstd_logic;-- l'uscitaq_n:outstd_logic);-- l'uscita negataendjk_ff;architecturebehaviouralofjk_ffissignaloutp:std_logic;beginff:process(clk)beginif(clk'eventandclk='1')thenif(j='1'andk='0')thenoutp<='1';elsif(j='0'andk='1')thenoutp<='0';elsif(j='0'andk='0')thennull;elsif(j='1'andk='1')thenoutp<=notoutp;endif;endif;endprocessff;q<=outpafterprop_delay;q_n<=notqafterprop_delay;endbehavioural;architecturestructuralofjk_ffiscomponentnand3-- si richiamano delle porte logiche NANDport(a,b,c:instd_logic;-- con 3 ingressi (nand3)q:outstd_logic);endcomponent;componentnand2port(a,b:instd_logic;-- o 2 ingressi (nand2)q:outstd_logic);endcomponent;signalsgn_1,sgn_2:std_logic;-- si definiscono i segnali internibegin-- si descrivono le connessioninand3_a:nand3portmap(a=>j,b=>clk,c=>q_n,q=>sgn_1);nand3_b:nand3portmap(a=>k,b=>clk,c=>q,q=>sgn_2);nand2_a:nand2portmap(a=>sgn_1,b=>q_n,q=>q);nand2_b:nand2portmap(a=>sgn_2,b=>q,q=>q_n);endstructural;

Altri progetti

[modifica |modifica wikitesto]

Altri progetti

Collegamenti esterni

[modifica |modifica wikitesto]
Controllo di autoritàLCCN(ENsh89002702 ·J9U(EN, HE987007546559905171
V · D · M
Norme del Institute of Electrical and Electronics Engineers
Attuali488 ·730 ·754 (Revision) ·854 ·828 ·829 ·896 ·1003 ·1014 ·1016 ·1076 ·1149.1 ·1154 ·1164 ·1275 ·1278 ·1284 ·1355 ·1394 ·1451 ·1497 ·1516 ·1541 ·1547 ·1584 ·1588 ·1596 ·1603 ·1613 ·1666 ·1667 ·1675 ·1685 ·1722 ·1733 ·1800 ·1801 ·1815 ·1850 ·1900 ·1901 ·1902 ·1904 ·1905 ·2030 ·2050 ·11073 ·12207 ·14764 ·16085 ·16326 ·29148 ·42010
802 series
802.1D ·p ·Q ·Qav ·Qat ·Qay ·w ·X ·ab ·ad ·AE ·ag ·ah ·ak ·aq ·AS ·ax ·az ·BA
802.3-1983 ·a ·b ·d ·e ·i ·j ·u ·x ·y ·z ·ab ·ac ·ad ·ae ·af ·ah ·ak ·an ·aq ·at ·av ·az ·ba ·bt ·by ·bz ·cg
802.11legacy mode ·a ·b ·c ·d ·e ·f ·g ·h ·i ·j ·k ·n ·p ·r ·s ·u ·v ·w ·y ·ac ·ad ·af ·ah ·ai ·ax ·ay ·be
.2 ·.4 ·.5 ·.6 ·.7 ·.8 ·.9 ·.10 ·.12 ·.14 ·.15 (.1 ·.4 ·.4a ·.6) ·.16 (Original · d · e) ·.17 ·.18 ·.20 ·.21 · *.22
ProposteP1363 ·P1619 ·P1699 ·P1823 ·P1906.1
Sostituite754-1985 ·830 ·1219 ·1233 ·1362 ·1364 ·1471
V · D · M
Logica programmabile
ConcettiASIC ·SoC ·FPGA (CLB) ·CPLD ·EPLD ·PLA ·PAL ·GAL ·PSoC ·Reconfigurable Computing (Xputer) ·Soft microprocessor ·Circuit underutilization ·High-level synthesis ·Acceleratore
Tecniche di programmazioneGate array ·Antifusibile ·EPROM ·E²PROM ·Flash ·SRAM
LinguaggiVerilog (A,AMS) ·VHDL (AMS,VITAL) ·SystemVerilog (DPI) ·SystemC ·AHDL ·Handel-C ·PSL ·UPF ·PALASM ·ABEL ·CUPL ·OpenVera ·C to HDL ·Flow to HDL ·MyHDL ·ELLA ·Chisel
CostruttoriAccellera ·Achronix ·AMD (Xilinx) ·Aldec ·Arm ·Cadence ·Infineon ·Intel ·Lattice ·Microchip Technology ·NXP ·Siemens (Mentor Graphics) ·Synopsys ·Texas Instruments
Prodotti
HardwareiCE ·Stratix ·Virtex
SoftwareIntel Quartus Prime ·Xilinx ISE ·Xilinx Vivado ·ModelSim ·VTR
IP
ProprietarioARC ·ARM Cortex-M ·LEON ·LatticeMico8 ·MicroBlaze ·PicoBlaze ·Nios ·Nios II
Open-SourceJOP ·LatticeMico32 ·OpenCores ·OpenRISC ·Power ISA (Libre-SOC,Microwatt) ·RISC-V ·Zet
Estratto da "https://it.wikipedia.org/w/index.php?title=VHDL&oldid=142260893"
Categorie:
Categorie nascoste:

[8]ページ先頭

©2009-2025 Movatter.jp