VHDL (VHSIC Hardware Description Language) er eit kraftig og allsidig maskinvarebeskrivingsspråk som vert brukt til design, simulering og syntese av digitale elektroniske system. Språket vart opprinneleg utvikla for det amerikanske forsvarsdepartementets program for Very High Speed Integrated Circuits (VHSIC) på 1980-talet, og VHDL gjer det mogleg for ingeniørar å lage abstrakte modellar av maskinvareoppførsel og struktur. Dens evne til å beskrive komplekse system har gjort det essensielt i ulike bransjar, spesielt for FPGA (Field Programmable Gate Array) og ASIC (Application-Specific Integrated Circuit) design.
VHDL vart oppretta tidleg på 1980-talet som ein del av eit arbeid for å standardisere design av digitale kretser. Språket vart utvikla av eit team leia av Peter Ashenden ved det amerikanske forsvarsdepartementet for å møte behovet for ein konsistent måte å beskrive maskinvare på. Den første intensjonen var å lette dokumentasjonen av eksisterande design for VHSIC-programmet, men det utvikla seg til eit fullverdig språk for maskinvarebeskriving.
I 1987 vart VHDL standardisert av IEEE som IEEE 1076. Sidan den gong har det gjennomgått ulike oppdateringar, med IEEE 1076-1993 og IEEE 1076-2002 som viktige revisjonar. Språket har blitt utvida til å inkludere konstruksjonar som støttar designverifikasjon, syntesekrav og simuleringskapasitetar.
I dag er VHDL mykje brukt både i akademia og industri for å designe komplekse elektriske system. Dens syntaks og oppførsel er påverka av programmeringsspråk som Ada, Pascal og C. Ulike verktøy for simulering og syntese kan tolke VHDL-kode, og det vert ofte brukt i samband med andre maskinvarebeskrivingsspråk, mest merkbart Verilog.
VHDL er eit sterkt typa språk, noko som betyr at kvar variabel må bli erklært med ein spesifikk type før den vert brukt. Dette forhindrar mange vanlege feil.
signal CLK : std_logic; -- Erklæring av ein signal av typen std_logic
VHDL støttar samtidig utføring av utsagn. Fleire prosessar kan køyre samtidig, noko som er essensielt for å modellere maskinvareoppførsel.
process (CLK)
begin
if rising_edge(CLK) then
-- Oppgåve som skal utførast
end if;
end process;
VHDL bruker ein enhet-arkitektur modell der enheten beskriver grensesnittet til ein maskinvarekomponent, medan arkitekturen beskriver dens interne oppførsel.
entity AND_Gate is
Port ( A, B : in std_logic;
Y : out std_logic);
end AND_Gate;
architecture Behavior of AND_Gate is
begin
Y <= A and B;
end Behavior;
VHDL har fleire innebygde datatypar, inkludert skalar (f.eks. heiltal, bit), samansette (f.eks. array, record), og tilgangstypar.
type MyArray is array (0 to 9) of integer; -- Array erklæring
Signal tildelingar skjer samtidig i VHDL. Du kan drive signal ved hjelp av tildelingar som vert utført når ein hending skjer.
signal C : std_logic;
C <= A and B; -- C vert oppdatert når A eller B endrar seg
VHDL støttar pakker, som gjer det mogleg for brukarar å definere gjenbrukbare komponentar og typar. Pakker hjelper til med å organisere kode og fremje gjenbruk.
package MyLib is
type MyType is array (0 to 7) of std_logic_vector(3 downto 0);
end MyLib;
VHDL gjer det mogleg å setje konfigurasjonar på eit høgare nivå, noko som gjer det mogleg å velje ulike arkitekturar for enheiter.
configuration MyConfig of AND_Gate is
for Behavior
end for;
end MyConfig;
VHDL legg til rette for oppretting av testbenkar for å simulere maskinvaredesign. Ein testbenk inneheld instansar av designet som vert testa og påfører stimulus.
entity TB_AND_Gate is
end TB_AND_Gate;
architecture sim of TB_AND_Gate is
signal A, B : std_logic;
signal Y : std_logic;
begin
uut: entity work.AND_Gate port map (A, B, Y);
-- Stimulusprosess her
end sim;
Påstandar kan brukast til å sjekke eigenskapar under simulering og hjelpe til med feilsøking av design.
assert (A = '1') report "A er ikkje høg" severity error;
Generiske gjer det mogleg å parameterisere design, noko som gjer dei fleksible og gjenbrukbare utan å endre den grunnleggjande logikken.
entity Counter is
generic (N : integer := 4);
port (CLK : in std_logic;
COUNT : out std_logic_vector(N-1 downto 0));
end Counter;
Flere integrerte utviklingsmiljø (IDEar) og verktøy støttar VHDL-utvikling, inkludert:
For å bygge eit VHDL-prosjekt, skriv designerar typisk VHDL-koden sin i .vhdl
eller .vhd
filer, opprettar ein testbenk for simulering, og nyttar eit passende verktøy for å syntetisere designet til målmaskinvare. Prosessen involverer typisk:
VHDL vert hovudsakleg brukt i design av digitale system som krev presis timing og funksjonalitet. Dens applikasjonar inkluderer:
VHDL kan samanliknast med fleire andre programmeringsspråk, kvar med sine unike funksjonar og tiltenkte applikasjonar:
C og C++ er generelle programmeringsspråk som tillèt prosedyre- og objektorientert programmering. I motsetning til dette er VHDL eksplisitt designa for maskinvarebeskriving, med fokus på samtidig utføring i staden for sekvensiell.
Verilog er eit anna maskinvarebeskrivingsspråk som deler likheiter med VHDL, men som generelt vert rekna som mindre omstendelig. Verilog bruker ein meir konsis syntaks og vert ofte føretrekt for systemnivådesign.
Python er eit høgnivå skriptspråk som utmerkar seg i rask applikasjonsutvikling, men som ikkje er designa for direkte maskinvarebeskriving. Likevel gjer bibliotek som MyHDL det mogleg å konvertere Python-kode til VHDL.
MATLAB vert brukt for numerisk databehandling og algoritmeutvikling, men kan integrerast med VHDL for maskinvareimplementering gjennom sin HDL Coder og Simulink.
Rust og Ada har funksjonar som fremjar minnesikkerheit og samtidig programmering, men er ikkje spesialiserte for maskinvarebeskriving. VHDLs vekt på maskinvareabstraksjon er unik blant desse språka.
Å oversette kildekode frå andre språk til VHDL krev ofte spesiell omtanke for samtidighet og timing som er iboande i maskinvaredesign.
Flere kilde-til-kilde oversettingsverktøy er tilgjengelege for å hjelpe til med å konvertere kode:
Avslutningsvis fungerer VHDL som eit kritisk verktøy i digital design, og tilbyr robuste funksjonar, ei rik historie og eit mangfald av applikasjonar innan elektronikk og databehandling. Dens unike evner i maskinvarebeskriving skil det frå mange mykje brukte programmeringsspråk.