VHDL (VHSIC Hardware Description Language) er et kraftfuldt og alsidigt hardwarebeskrivelsessprog, der bruges til design, simulering og syntese af digitale elektroniske systemer. Oprindeligt udviklet til det amerikanske forsvars program for meget højhastigheds integrerede kredsløb (VHSIC) i 1980'erne, giver VHDL ingeniører mulighed for at skabe abstrakte modeller af hardwareadfærd og -struktur. Dets evne til at beskrive komplekse systemer har gjort det uundgåeligt i forskellige industrier, især for FPGA (Field Programmable Gate Array) og ASIC (Application-Specific Integrated Circuit) designs.
VHDL blev oprettet i begyndelsen af 1980'erne som en del af en indsats for at standardisere designet af digitale kredsløb. Sproget blev udviklet af et team ledet af Peter Ashenden ved det amerikanske forsvarsministerium for at imødekomme behovet for en ensartet måde at beskrive hardware på. Den oprindelige hensigt var at lette dokumentationen af eksisterende designs til VHSIC-programmet, men det udviklede sig til et fuldt udviklet sprog til hardwarebeskrivelse.
I 1987 blev VHDL standardiseret af IEEE som IEEE 1076. Siden da har det gennemgået forskellige opdateringer, hvor IEEE 1076-1993 og IEEE 1076-2002 er betydelige revisioner. Sproget er blevet udvidet til at inkludere konstruktioner, der understøtter designverifikation, syntesebegrænsninger og simuleringsmuligheder.
I dag er VHDL bredt anvendt både i akademia og industri til design af komplekse elektriske systemer. Dets syntaks og adfærd er påvirket af programmeringssprog som Ada, Pascal og C. Forskellige værktøjer til simulering og syntese kan fortolke VHDL-kode, og det bruges ofte sammen med andre hardwarebeskrivelsessprog, mest bemærkelsesværdigt Verilog.
VHDL er et stærkt typet sprog, hvilket betyder, at hver variabel skal deklareres med en specifik type, før den bruges. Dette forhindrer mange almindelige fejl.
signal CLK : std_logic; -- Deklarerer et signal af typen std_logic
VHDL understøtter samtidig udførelse af udtalelser. Flere processer kan køre samtidigt, hvilket er essentielt for modellering af hardwareadfærd.
process (CLK)
begin
if rising_edge(CLK) then
-- Opgave der skal udføres
end if;
end process;
VHDL bruger en enhed-arkitektur model, hvor enheden beskriver grænsefladen af en hardwarekomponent, mens arkitekturen beskriver dens interne adfærd.
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 flere indbyggede datatyper, herunder skalar (f.eks. integer, bit), sammensatte (f.eks. array, record) og adgangstyper.
type MyArray is array (0 to 9) of integer; -- Array-deklaration
Signal tildelinger sker samtidigt i VHDL. Du kan styre signaler ved hjælp af tildelinger, der udføres, når en hændelse opstår.
signal C : std_logic;
C <= A and B; -- C opdateres, når A eller B ændres
VHDL understøtter pakker, som giver brugerne mulighed for at definere genanvendelige komponenter og typer. Pakker hjælper med at organisere kode og fremme genbrug.
package MyLib is
type MyType is array (0 to 7) of std_logic_vector(3 downto 0);
end MyLib;
VHDL tillader konfigurationer at blive indstillet på et højere niveau, hvilket muliggør valg af forskellige arkitekturer for enheder.
configuration MyConfig of AND_Gate is
for Behavior
end for;
end MyConfig;
VHDL letter oprettelsen af testbænke til simulering af hardwaredesign. En testbænk indeholder instanser af det design, der testes, og anvender 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);
-- Stimulus proces her
end sim;
Påstande kan bruges til at kontrollere egenskaber under simulering og hjælpe med at fejlfinde designs.
assert (A = '1') report "A er ikke høj" severity error;
Generics tillader parameterisering af designs, hvilket gør dem fleksible og genanvendelige uden at ændre den grundlæggende logik.
entity Counter is
generic (N : integer := 4);
port (CLK : in std_logic;
COUNT : out std_logic_vector(N-1 downto 0));
end Counter;
Flere integrerede udviklingsmiljøer (IDEs) og værktøjer understøtter VHDL-udvikling, herunder:
For at bygge et VHDL-projekt skriver designere typisk deres VHDL-kode i .vhdl
eller .vhd
filer, opretter en testbænk til simulering og bruger et passende værktøj til at syntetisere designet til et målhardware. Processen involverer typisk:
VHDL bruges hovedsageligt i designet af digitale systemer, der kræver præcise timing og funktionalitet. Dets anvendelser inkluderer:
VHDL kan sammenlignes med flere andre programmeringssprog, som hver har sine unikke funktioner og tilsigtede anvendelser:
C og C++ er generelle programmeringssprog, der tillader procedurel og objektorienteret programmering. I modsætning hertil er VHDL eksplicit designet til hardwarebeskrivelse, med fokus på samtidig udførelse snarere end sekventiel.
Verilog er et andet hardwarebeskrivelsessprog, der deler ligheder med VHDL, men generelt betragtes som mindre verbos. Verilog bruger en mere kortfattet syntaks og foretrækkes ofte til systemniveau design.
Python er et højniveau scriptsprog, der excellerer i hurtig applikationsudvikling, men ikke er designet til direkte hardwarebeskrivelse. Dog tillader biblioteker som MyHDL, at Python-kode kan konverteres til VHDL.
MATLAB bruges til numerisk computing og algoritmeudvikling, men kan integreres med VHDL til hardwareimplementering gennem sin HDL Coder og Simulink.
Rust og Ada har funktioner, der fremmer hukommelsessikkerhed og samtidig programmering, men er ikke specialiseret til hardwarebeskrivelse. VHDLs fokus på hardwareabstraktion er unikt blandt disse sprog.
At oversætte kildekode fra andre sprog til VHDL kræver ofte særlig overvejelse af samtidighed og timing, der er iboende i hardwaredesign.
Flere kilder-til-kilde oversættelsesværktøjer er tilgængelige for at hjælpe med at konvertere kode:
Afslutningsvis fungerer VHDL som et kritisk værktøj i digitalt design, der tilbyder robuste funktioner, en rig historie og en række anvendelser på tværs af elektronik og computing. Dets unikke evner inden for hardwarebeskrivelse adskiller det fra mange almindeligt anvendte programmeringssprog.