VHDL

С Википедије, слободне енциклопедије
VHDL kod za označeni sabirač.

VHDL (енгл. VHSIC hardware description language) je jezik za opis hardvera koji se koristi u automatizaciji elektronskog dizajna za opisivanje digitalnih sistema i mešovitih-sistema kao što su FPGA (енгл. field-programmable gate array) odnosno integrisana strujna kola dizajnirana da budu konfigurisana od strane potrosača nakon proizvodnje. VHDL se takođe može smatrati paralelnim programskim jezikom opste namene, kreiranim za programiranje paralelnih računara.

Istorijat[уреди | уреди извор]

Početkom 1983, VHDL je originalno razvijen prema zahtevu Ministarstva odbrane Sjedinjenih Američkih Država sa namerom da se dokumentuje ponašanje ASIC-a (енгл. application-specific integrated circuit (ASIC)), integrisanog kola prilagođenog za određenu upotrebu, koji su bili sastavni deo opreme kojom su snabdevani. Standard MIL-STD-454N[1] u Zahtevu 64 odeljak 4.5.1 „ ASIC dokumentacija u VHDL-u“ eksplicitno zahteva dokumentaciju „ Mikroelektronskih Uređaja“ u VHDL-u.

Ideja da se ASIC može simulirati samo na osnovu ove dokumentacije je bila toliko atraktivna da su razvijeni posebni logički simulatori koji su mogli da čitaju VHDL fajlove. Sledeći korak je bio razvoj alata za sintezu logičkih kola, koji će čitati VHDL fajlove, i na izlaz propagirati fizičku definiciju implementacije strujnih kola.

Ministarstvo odbrane je zahtevalo da se što je više moguće sintakse preuzme iz programskog jezika Ada, kako bi se izbeglo izumiranje koncepta koji je vec detaljno testiran i proveren prilikom razvoja jezika Ada,[тражи се извор] pa je VHDL podosta nasledio, i koncept i sintaksu, od programskog jezika Ada.

Prvobitna verzija VHDL-a, dizajnirana prema IEEE standardu IEEE 1076-1987,[2] uključivala je širok spektar tipova podataka, uključujući numeričke tipove(integer i real), logičke (bit i boolean), znakovne tipove character i vremenske (time), kao i nizove bit-ova koji se zovu bit_vector i nizove character-a zvane string.

Problem koji nije bio rešen ovim izdanjem, bila je „ višenamenska logika“, gde se uzima u obzir jačina protoka signala (bez signala, slab ili jak signal) kao i nepoznata vrednost. To je opisano u standardu IEEE 1164, koji je definisao 9-vrednosne logičke tipove: skalarni std_logic i njegova vektorska verzija std_logic_vector.

Ažurirana verzija standarda IEEE 1076, 1993. godine, učinila je sintaksu konzistentnijom, omogućila veću fleksibilnost pri imenovanju i uveden je veći broj karakterskih tipova kako bi podržala ISO-8859-1 karaktere, dodat je i operator negacije ekskluzivne disjunkije(xnor) itd.

Manje promene u standardu (2000 i 2002) dodale su ideju zaštićenih tipova (slično konceptu klase u C++) i uklonjena su odredjena ograničenja koja se odnose na pravila mapiranja portova.

Pored IEEE standarda 1164, uvedeno je i nekoliko detskih standarda (eng. child standards) kako bi se proširila funkcionalnost jezika. IEEE standard 1076.2 poboljšao je upravljanje realnim i kompleksnim tipovima. IEEE standard 1076.3 predstavio je označene i neoznačene tipove i time pojednostavio aritmetičke operacije nad vektorima. IEEE standard 1076.1 (poznatiji kao VHDL-AMS) je proširio dizajn analognih i mešovitih-signala strujnih kola.

Neki drugi standardi podržavaju širu upotrebu VHDL-a, naročito VITAL (енгл. VHDL Initiative Towards ASIC Libraries) i proširenju mikrotalasnih električnih kola.

U Junu 2006 godine, VHDL tehnički odbor Accellera (koji je delegirao IEEE za rad na sledećem ažuriranju standarda) odobrio je takozvani Draft 3.0 VHDL-a 2006. Održavajući potpunu kompatibilnost sa starijim verzijama, ovaj predloženi standard obezbeđuje mnoge nadogradnje koje čine VHDL kod lakšim za pisanje i održavanje. Ključne promene se odnose na uključivanje detskih standarda (1164, 1076.2, 1076.3) u glavni 1076 standard, prošireni skup operatora, fleksibilniju sintaksu za generisanje izjava, ugradnja VHPI (VHDL Procedural Interface) (interfejs za jezike C/C++) i podskup PSL jezika (енгл. Property Specification Language). Ove promene treba da pobojšaju kvalitet VHDL koda, i omoguće širu upotrebu VHDL jezika za sistemski opis.

U februaru 2008. godine Accellera je odobrila VHDL 4.0, neformalno poznat kao VHDL 2008, koji je adresirao više od 90 problema otkrivenih tokom probnog perioda za verziju 3.0 i uključio poboljšane generičke tipove. Tokom 2008. Godine, Accellera je objavila glasanje da VHDL 4.0 IEEE bude uključen u u IEEE 1076-2008. VHDL standard IEEE 1076-2008[3] je objavljen u januaru 2009. godine.

Standardizacija[уреди | уреди извор]

IEEE standard 1076 definiše VHSIC jezik za opis hardvera za VHDL. On je prvobitno razvijen na osnovu ugovora F33615-83-C-1003 sklopljenog sa vazduhoplovnim snagama Sjedinjenih Američkih Država koji je dodeljen 1983. godine timu sa Intermetrics-a, kao stručnjacima za jezike i glavnim izvođačem, Texas Instruments-u kao ekspertu za dizajn čipova i IBM-u kao ekspertima za izradu računarskih sistema. Jezik je prošao kroz brojne revizije i ima različite sub-standarde koji su povezani sa njim, koji ga proširuju.

Standard 1076 je bio i nastavlja da bude prekretnica u dizajnu elektronskih sistema.

Revizije[уреди | уреди извор]

  • IEEE 1076-1987[2] prva standardizovana revizija verzije 7.2 jezika iz vazduhoplovstva Sjedinjenih Američkih Država.
  • IEEE 1076-1993[4] (takođe objavljena sa. ISBN 978-1-55937-376-0) sadrži značajna poboljšanja koja su proistekla iz nekoliko godina povratnih informacija i rezultata. Verovtano je najšire korišćena verzija sa najvećom podrškom za alat prodavača.
  • IEEE 1076-2000[5] mala revizija. Uvodi upotrebu zaštićenih (eng. protected) tipova.
  • IEEE 1076-2002 mala revizija verzije 1076-2000. Rasterećena su pravila vezana za buffer port-ove.
    • IEC 61691-1-1: 2004[6] IEC usvaja IEEE 1076-2002
  • IEEE 1076-2008[7] IEC adoption of IEEE 1076-2002
  • IEEE 1076-2008[8] (ranije poznat pod nazivom 1076-200x) velika revizija objavljena 2009-01-26. Među ostalim promenama, ovaj standard sadrži osnovni podskup PSL-a, omogućava generisanje paketa i podprograma i uvodi upotrebu spoljašnjih imena
    • IEC 61691-1-1: 2011[9] IEC usvaja IEEE 1076-2008

Srodni standardi[уреди | уреди извор]

  • IEEE 1076.1 VHDL Analogni i mešoviti signal (VHDL-AMS)
  • IEEE 1076.1.1 VHDL-AMS Standardni paketi (stdpkgs)
  • IEEE 1076.2 VHDL Matematički paketi
  • IEEE 1076.3 VHDL Sintetizovani paketi (vhdlsynth)
  • IEEE 1076.3 VHDL Sintetizovani paketi - Floating Point (fphdl)
  • IEEE 1076.4 Podešavane vremena (VHDL Inicijativa ka ASIC bibliotekama: vital)
  • IEEE 1076.6 VHDL Sinteza interoperabilnosti
  • IEEE 1164 VHDL Višenamenska logika (std_logic_1164)

Dizajn[уреди | уреди извор]

VHDL se obicno koristi za pisanje tekstualnih modela koji opisuju logička kola. Takav model se obrađuje sinteznim programom, samo ako je deo logičkog dizajna. Simulacioni program se koristi za testiranje dizajna logike korišćenjem simulacionih modela za predstavljanje logičkih kola koja su u skladu sa dizajnom. Ova grupa simulacionih modela se obično naziva testbench.

VHDL simulator je obično simulator koji pokreće događaj.[10] To znači da se svaka transakcija dodaje u red za tačno određeno vreme. Na primer, ako prenos signala treba da se desi nakon jedne nanosekunde, događaj se dodaje u red za vreme +1ns. Nulto odlaganje je takođe dozvoljeno, ali ga i dalje treba zakazati: za ove slučajeve se koristi Delta odlaganje, što predstavlja beskrajno mali vremenski korak. Simulacija se menja između dva režima: izvršenje izvođenja, gde se aktivirani iskazi procenjuju i obrada događaja, gde se događaji u redu obrađuju.

VHDL ima konstruktore koji se bave paralelizmom svojstvenim za hardverske projekte, ali ovi konstrutkori(procesi) se razlikuju u sintaksi od paralalenih konstruktora u Adi(zadaci). Kao u Adi, VHDL je strogo tipiziran i nije osetljiv na mala i velika slova. Da bi direktno predstavljali operacije koje su uobičajene u hardveru, ima mnogo karakteristika u VHDL-u koje nisu pronađene u Adi, kao što je prošireni skup Boolean operatora uključujuci negaciju konjukcije(nand) i negaciju disjunkcije(xor).

VHDL ima ulazno-izlazne mogućnosti i može da se koristi kao opšti jezik za obradu teksta, ali datoteke se najčešće koriste od strane simulacionog modela testbench za podatke o stimulaciji ili verifikaciji. Postoje neki VHDL kompajleri koji grade izvršne binarne datoteke. U ovom slučaju, možda bi bilo moguće koristiti VHDL da napiše testbench da bi potvrdio funkcionalnost dizajna pomoću datoteka na računaru domaćina da definiše stimulanse, da interaktuje sa korisnikom i da uporedi rezultate sa očekivanim. Međutim, većina dizajnera ostavlja ovaj posao simulatoru.

Relativno je lako neiskusnom programeru da proizvede kod koji uspešno simulira, ali koji se ne može integrisati u pravi uređaj, ili je preveliki da bi bio praktičan. Jedna posebna zamka je slučajna proizvodnja prozirnih reza više nego D flip-flopova kao elemenata za skladištenje.

U VHDL IDE-u se može dizajnirati hardver (za FPGA implementaciju kao što su Xilinx ISE, Altera Quartus, Synopsys Synplify ili Mentor Graphics HDL Desinger) za proizvodnju šeme željenog strujnog kola. Posle toga, generisana šema može biti verifikovana pomoću simulacionog softvera koji prikazuje grafike ulaza i izlaza kola nakon generisanja odgovarajućeg testbench-a. Da biste generisali odgovarajući testbench za određeno kolo ili VHDL kod, unosi moraju biti pravilno definisani. Na primer, za unos sata, potrebna je petlja ili iterativni izraz.[11]


Krajnji cilj je da kada se VHDL model prevede na "kapije i žice" koji su mapirani na programabilni logički uređaj kao što je CPLD ili FPGA, onda je tekući hardver konfigurisan, umesto da se VHDL kod “izvršava” kao na nekom obliku procesorskog čipa.

Prednosti[уреди | уреди извор]

Ključna prednost VHDL-a, kada se koristi za dizajn sistema, jeste da omogućava ponašanje potrebnog sistema da bude opisano (modelirano) i verifikovano(simulirano) pre nego što alati sinteze prevode dizajn u stvarni hardver (kapije i žice).

Druga prednost je što VHDL dozvoljava opis paralelnog sistema. VHDL je jezik za protok podataka, za razliku od proceduralnih računskih jezika kao što su BASIC, C i asembler, koji svi rade sekvencijalno, jednu instrukciju istovremeno.

VHDL projekat je višenamenski. Kada se jednom kreira, blok za izračunavanje može se koristiti u mnogim drugim projektima. Međutim, mnogi formacijski i funkcionalni blok parametri se mogu podesiti (parametri kapaciteta, veličina memorije, baza elemenata, sastav bloka i medjusobno povezane strukture).

VHDL projekat je prenosiv. Kada se kreira za jednu bazu elemenata, projekat računarskog uređaja može se preneti na drugu bazu elemenata, na primer VLSI sa različitim tehnologijama.

Velika prednost VHDL-a u poređenju sa originalnim Verilog-om jeste to što VHDL ima sistem s punim tipom. Dizajneri mogu da koriste sistem tipa da napišu mnogo više strukturiranog koda (posebno deklarišući vrste zapisa).[12]

Sintetizabilni konstrukti i VHDL šabloni[уреди | уреди извор]

VHDL se često koristi za dva različita cilja: simulacija elektronskih dizajna i sinteza takvih dizajna. Sinteza je proces u kojem se VHDL kompajlira i mapira u tehnologiju implementacije kao što je FPGA ili ASIC. Mnogi FPGA proizvođači imaju besplatne (ili jeftine) alate za sintetizaciju VHDL-a za upotrebu sa svojim čipovima, gde su ASIC alati često veoma skupi.

Nisu svi konstrukti u VHDL primereni za sintezu. Na primer, većina konstruktora koji se eksplicitno bave vremenom kao što je čekanje od 10 ns; nisu sintetizovani uprkos tome što su validni za simulaciju. Iako različiti alati za sintezu imaju različite mogućnosti, postoji zajednički sintetizovani podskup VHDL-a koji definiše koji jezički konstrukti i idiomi mapiraju u obični hardver za mnoge alate za sintezu. IEEE 1076.6 definiše podskup jezika koji se smatra zvaničnim podskupom sinteze. Uopšteno se smatra "najboljom praksom" za pisanje vrlo idiomatskog koda za sintezu, jer rezultati mogu biti netačni ili suboptimalni za nestandardne konstrukcije.

O kašnjenjima[уреди | уреди извор]

Jezik VHDL uz niz ključnih reči koje služe za modeliranje funkcionalnosti kola nudi i neke jezične konstrukte koji omogućavaju specificiranje kašnjenja. Na primer, već smo se upoznali s naredbom oblika:

f <= a AND b AFTER 10 ns ;

Treba napomenuti da ti jezični konstrukti nisu sintetizabilni: opišete li digitalno kolo na takav način i potom zatražite od sintetizatora digitalnog kola da takav opis primeni u Vaše programabilno kolo (na primer, FPGA), sintetizator će naredbe kašnjenja zanemariti. Naime, prilikom sinteze kola iz VHDL opisa sintetizator na raspolaganju ima programabilno kolo koje ste mu zadali i koje je ostvareno u određenoj tehnologiji. U toj tehnologiji, komponente će imati kašenjenja koja su određena samom tehnologijom i na koja Vi (niti sintetizator) ne možete uticati.

Zapitate li se zašto onda takve naredbe uopšte postoje, odgovor je jednostavan: kako bi se omogućilo izvođenje što je moguće realnijih simulacija. Naime, svaki ozbiljniji alat za modeliranje i sintezu digitalnog hardvera korisnicima nudi mogućnost izvođenja nekoliko različitih vrsta simulacija.

Najjednostavnija simulacija je simulacija ponašajnog modela (енгл. Behavioral model simulation) kod koje simulator simulira Vaš opis upravo onako kako ste ga dizajnirali. Međutim, takav alat možete zatražiti i provođenje simulacije koja uzima u obzir zički razmeštaj komponenata u programabilnom kolu i način na koji su komponente međusobno povezane (енгл. Post place and route simulation). Ono što će se u tom trenutku dogoditi jeste da će alat zanemariti Vaš polazni opis i generisati novi VHDL opis koji u obzir uzima građu programabilnih komponenata i njihova stvarna kašnjenja koja će opisivati koristeći naredbe poput prethodne navedene uz AFTER10 ns . Takav opis potom će poslati simulatoru na simulaciju čime ćete dobiti verniju sliku onoga što će se u stvarnosti događati jednom kada se konačno kolo sintetizira. Ciljani korisnik ovih primitiva niste dakle Vi kao dizajner kola (iako Vam niko ne brani da ih koristite, tako dugo dok znate da se to ne može tako sintetizirati) već je to sam alat u kojem radite razvoj i sintezu.

Iz upravo opisanog razloga ni sledeći isečak koda napisanog u VHDL-u koji se u ispitnim kolima često koristi za generisanje signala takta nije sintetizabilan.

process
begin
    cp <= '1';
    wait for 50 ns;
    cp <= '0';
    wait for 50 ns;
end process;

Naime, rad opisanog kola temelji se na pretpostavci da je sintetizator sposoban da osigura upravo navedena kašnjenja, to naravno nije slučaj. Stoga ovakvi delovi koda će često biti korišćeni u ispitnim sklopovima koje će simulator moći da simulira, ali ih nikada nećemo imati u opisima kola koje fzički treba sintetizovati: programabilna kola će za ovu svrhu morati da imaju unapred proizvedeno kolo čiji je zadatak generisanje signala takta, ili će u jednostavnijoj varijanti imati zaseban ulaz preko kojeg će korisnik iznova morati dovesti prikladno generisan signal takta (nekim na primer relaksacijskim oscilatorom ili kvarcnim oscilatorom).

Primeri dizajna[уреди | уреди извор]

Dizajn VHDL-a sadrži minimalan broj entiteta koji opisuju interfejs i arhitekturu koja sadrži stvarnu implementaciju. Pored toga većina dizajna importuje module biblioteka. Neki dizajnovi takođe sadrže više arhitektura i konfiguracija.

Jednostavno logičko kolo AND kolo u VHDL-u bi izgledalo na sledeći način:

-- (ovo je komentar u VHDL-u)

-- importujemo std_logic iz IEEE biblioteke
library IEEE;
use IEEE.std_logic_1164.all;

-- ovo je entitet
entity ANDGATE is
  port ( 
    I1 : in std_logic;
    I2 : in std_logic;
    O  : out std_logic);
end entity ANDGATE;

-- ovo je arhitektura
architecture RTL of ANDGATE is
begin
  O <= I1 and I2;
end architecture RTL;

(Obratite pažnju da je RTL oznaka za dizajn prenosa nivoa prenosa ) Iako se prethodni primer možda čini previše opširnim za početnike, mnogi delovi koda su ili neobavezni ili se moraju pisati samo jednom. Uglavnom kodovi poput ovog su deo većeg modula,umesto da postoje posebni moduli za nešto tako jednostavno. Pored toga, upotreba elemenata kao što su std_logic može delovati previše. Jednostavno moguće je koristiti ugrađeni tip bit i izbeći uvođenje biblioteke na početku. Međutim korišćenje ove 9-vrednosne logike (U,X,0,1,Z,W,H,L,-) umesto jednostavnih bitova (0,1) nudi dizajneru veoma moćnu alatku za simuliranje i debagovanje, koja trenutno ne postoji ni u jednom drugom HDL-u.

U primerima koji slede, videćete da VHDL može biti napisan u veoma kompaktnom obliku. Međutim iskusni programeri izbegavaju ove kompaktne forme i koriste opširniji stil programiranja radi bolje čitljivosti i lakše održivosti koda. Još jedna prednost ovakvg stila kodiranja je manja potrošnja resursa koji je se koriste pri programiranju na programibilnom logičkom uređaju kao što je CPLD.

MUX kolo[уреди | уреди извор]

Multiplekser ili "MUX", kako se obično naziva, je jednostavan konstrukt vrlo čest u dizajnu hardvera. Primer koji sledi pokazuje jednostavno 2-1 MUX, sa ulazima A i B, selektora S i izlazom X. Imajte na umu da postoje mnogi drugi načini da se izrazi isti MUX u VHDL-u.

X <= A when S = '1' else B;

Ponašajni model multipleksera 2-1 sa ulazom za omogućavanje:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

ENTITY mux21e IS PORT(
    d: IN STD_LOGIC_VECTOR(0 TO 1);
    a: IN STD_LOGIC;
    e: IN STD_LOGIC;
    y: out STD_LOGIC; 
);
END mux21e;

ARCHITECTURE arch OF mux21e IS
BEGIN
    process(d,a,e)
    begin
      if e='0' then
        y <= '0';
      elsif a='0' then
        y <= d(0);
      elsif a='1' then
        y <= d(1);
      else 
        y <= '0';
      end if;
    end process;
END arch;

Šablon reze[уреди | уреди извор]

Transparentna reza je u osnovi jedan bit memorije koja se ažurira kada se aktivirajući signal poveća. Opet, postoji mnogo drugih načina na koje se to može izraziti u VHDL-u.

-- reza primer 1:
Q <= D when Enable = '1' else Q;

-- reza primer 2:
process(D,Enable)
begin
  if Enable = '1' then
    Q <= D;
  end if;
end process;

D flip-flop[уреди | уреди извор]

D flip-flop se dobija pomoću D reze, ograničavanjem kontrolnog signala na uzlazni(silazni) rub ciklusa sata. Ovaj primjer ima asinhrono, aktivno-visoko resetovanje i uzorke na uzlazu sata sata.

DFF : process(RST, CLK) is
begin
  if RST = '1' then
    Q <= '0';
  elsif rising_edge(CLK) then
    Q <= D;
  end if;
end process DFF;

Još jedan uobičajeni način pisanja ponašanja na ivici u VHDL-u je sa atributom signala događaja. Jedan apostrof mora biti napisan između imena signala i imena atributa.

DFF : process(RST, CLK) is
begin
  if RST = '1' then
    Q <= '0';
  elsif CLK'event and CLK = '1' then
    Q <= D;
  end if;
end process DFF;

VHDL može biti i jednolinijski kao na primer:

DFF : Q <= '0' when RST = '1' else D when rising_edge(clk);

Ili

DFF : process(RST, CLK) is
begin
  if rising_edge(CLK) then
    Q  <= D;
    Q2 <= Q1;
  end if;
  if RST = '1' then
    Q <= '0';
  end if;
end process DFF;

Brojač[уреди | уреди извор]

Sledeći primer je primer brojaća unapred(up-counter) sa asinhronim resetom, paralelnim opterećenjem i širinom koja se može konfigurisati. On pokazuje upotrebu neoznačenog tipa, konverziju između 'unsigned' i 'std_logic_vector' tipova i VHDL generika. Generici su veoma blizu argumenata ili šablona u drugim tradicionalnim programskim jezicima kao što su C ++.

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all; -- za neoznačene tipove

entity COUNTER is
  generic (
    WIDTH : in natural := 32);
  port (
    RST   : in std_logic;
    CLK   : in std_logic;
    LOAD  : in std_logic;
    DATA  : in std_logic_vector(WIDTH-1 downto 0);
    Q     : out std_logic_vector(WIDTH-1 downto 0));
end entity COUNTER;

architecture RTL of COUNTER is
  signal CNT : unsigned(WIDTH-1 downto 0);
begin
  process(RST, CLK) is
  begin
    if RST = '1' then
      CNT <= (others => '0');
    elsif rising_edge(CLK) then
      if LOAD = '1' then
        CNT <= unsigned(DATA); -- tip je preveden u neoznačen
      else
        CNT <= CNT + 1;
      end if;
    end if;
  end process;

  Q <= std_logic_vector(CNT); -- tip je vraćen u std_logic_vector
end architecture RTL;

Kompleksniji brojači mogu dodati if/then/else izjave u okviru rising_edge (CLK) elsif za dodavanje drugih funkcija, kao što je omogućavanje, zaustavljanje ili prebacivanje na neku brojčanu vrijednost, generisanje izlaznih signala kao što su signali brojčanih terminala itd. Mora se uzeti u obzir sređivanje i ugnježdavanje takvih kontrola ako se koriste zajedno, kako bi se proizveli željeni prioriteti i minimizovao broj potrebnih logičkih nivoa...

Koji može biti koristan ako se ne moraju resetovati svi signali (registri) koji su vođeni ovim procesom.

Samo simulacijski(simulation-only) konstrukti[уреди | уреди извор]

Veliki podskup VHDL-a ne može se prevesti u hardver. Ovaj podskup je poznat kao nesintenzibilan ili podskup VHDL-a koji se može samo simulirati i može se koristiti samo za prototipove, simulaciju i debagovanje. Na primer, sledeći kod će generisati sat sa frekvencijom od 50 MHz. Na primer, može se koristiti da se na ulaz dovede signal sata tokom simulacije. To je, međutim, samo simulacijski konstrukt i ne može se implementirati u hardveru. U stvarnom hardveru, sat se generiše spolja; može se smanjiti interno pomoću korisničke logike ili namenskog hardvera.

process
begin
  CLK <= '1'; wait for 10 NS;
  CLK <= '0'; wait for 10 NS;
end process;

Samo simulacijski konstrukti mogu se koristiti za izgradnju složenih grafika u vrlo kratkom vremenu. Takav grafik se može koristiti, na primer, kao vektori za testiranje složenog dizajna ili kao prototip neke logike sintetizovanja koji će se implementirati u budućnosti.

process
begin
  wait until START = '1'; 
  
  for i in 1 to 10 loop -- čekaj neki vremenski period
    wait until rising_edge(CLK);
  end loop;

  for i in 1 to 10 loop  
    DATA <= to_unsigned(i, 8);
    wait until rising_edge(CLK);
  end loop;

  -- čekaj dok se vrednost izlaza ne promeni
  wait on RESULT;
  
  
  ACK <= '1';
  wait until rising_edge(CLK);
  ACK <= '0';

 
end process;

VHDL simulatori[уреди | уреди извор]

Komercijalni:

  • Aldec Active-HDL
  • Cadence Incisive (Prethodni proizvod: NC-VHDL)
  • Mentor Graphics ModelSim. Specijalne verzije ovog proizvoda koje koriste različiti FPGA proizvođači npr. Altera, Lattice
  • Synopsys VCS-MX
  • Xilinx Vivado (a.k.a. xsim). Zasnovano na iSim-u od prethodnog ISE tool-chain. Xilinx Inc.

Ostali:

  • boot. from Free Range VHDL based on GHDL and GTKWave
  • GHDL from ghdl.free.fr, novija verzija dostupna na GitHub
  • VHDL Simili
  • Misc EDA Utilities Besplatni VHDL Parser, vhdl2verilog, vhdl2ipxact
  • EDA Playground – Besplatni web pretraživač baziran na VHDL IDE (koristi Riviera-PRO i ModelSim za VHDL simulacije)
  • Nick Gasson's VHDL compiler
  • freehdl od Edwina Naroska

Reference[уреди | уреди извор]

  1. ^ Department of Defense (1992). Military Standard, Standard general requirements for electronic equipment. Приступљено 15. 11. 2017. 
  2. ^ а б IEEE Standard VHDL Language Reference Manual. 1988. ISBN 978-0-7381-4324-8. doi:10.1109/IEEESTD.1988.122645. 
  3. ^ IEEE Standard VHDL Language Reference Manual. 2009. ISBN 978-0-7381-6854-8. doi:10.1109/IEEESTD.2009.4772740. 
  4. ^ IEEE Standard VHDL Language Reference Manual. 1994. ISBN 978-0-7381-0986-2. doi:10.1109/IEEESTD.1994.121433. 
  5. ^ IEEE Standard VHDL Language Reference Manual. 2000. ISBN 978-0-7381-1948-9. doi:10.1109/IEEESTD.2000.92297. 
  6. ^ IEEE Standard VHDL Language Reference Manual. 2002. ISBN 978-0-7381-3247-1. doi:10.1109/IEEESTD.2002.93614. 
  7. ^ IEC 61691-1-1 Ed.1 (IEEE STD 1076(TM)-2002): Behavioural Languages - Part 1-1: VHDL Language Reference Manual. 2004. ISBN 978-2-8318-7691-7. doi:10.1109/IEEESTD.2004.95752. 
  8. ^ IEEE Standard VHDL Language Reference Manual - Procedural Language Application Interface. 2007. ISBN 978-0-7381-5523-4. doi:10.1109/IEEESTD.2007.4299594. 
  9. ^ Behavioural languages - Part 1-1: VHDL Language Reference Manual. 2011. ISBN 978-0-7381-6605-6. doi:10.1109/IEEESTD.2011.5967868. 
  10. ^ „ELEC3017 - Simulation” (PDF). University of Southampton. Приступљено 23. 2. 2017. 
  11. ^ „Clock Generation”. Doulos. Архивирано из оригинала 20. 01. 2013. г. Приступљено 22. 12. 2012. 
  12. ^ Jiri Gaisler. „A structured VHDL Design Method” (PDF). Приступљено 15. 11. 2017. 
Beleške

Dodatna literatura[уреди | уреди извор]

Spoljašnje veze[уреди | уреди извор]