VHDL

VHDL

Tiedot
Ensimmäinen versio 1983
Viimeinen versio IEEE 1076-2008
Tyyppi Laitteiston kuvauskieli
Ohjelmointikieli
Verkkosivusto www.vhdl.org

VHDL on laitteistokuvauskieli, joka on tarkoitettu edustamaan digitaalisen elektronisen järjestelmän käyttäytymistä ja arkkitehtuuria . Sen koko nimi on VHSIC Hardware Description Language .

Tällaisen kuvauksen etuna on sen suoritettava luonne: VHDL: ssä kuvattu eritelmä voidaan tarkistaa simuloimalla, ennen kuin yksityiskohtainen suunnittelu on valmis. Lisäksi tietokoneavusteiset suunnittelutyökalut, jotka mahdollistavat siirtymisen suoraan VHDL: n toiminnallisesta kuvauksesta loogiseen porttikaavioon, ovat mullistaneet digitaalisten piirien, ASIC: n tai FPGA: n suunnittelumenetelmät .

Historiallinen

VHDL kielen tilattiin vuonna 1980 , jonka Yhdysvaltain puolustusministeriö osana VHSIC aloitteen . Järkeistämiseksi VHDL käyttää samaa syntaksia kuin Ada-kieli (jälkimmäistä kehittää myös puolustusministeriö).

VHDL: n alkuperäinen versio, IEEE Standard 1076-1987 , sisälsi laajan valikoiman tietotyyppejä, numeerisia (kokonaisluku, todellinen), loogisia ( bittiä , looginen ), merkkejä, aikaa, sekä bittiryhmät ja merkkijonot.

Yksi pääongelmista oli bittityypissä. Kun tämä kykeni ottamaan vain 2 arvoa (0, 1), oli mahdotonta edustaa tuntemattoman arvon signaaleja tai signaaleja suurella impedanssilla sekä signaalin "voimakkuutta" (heikko, voimakas tai nolla) ). IEEE 1164 -standardi määrittelee std_logic-tyypin 9 mahdollisella tilalla. Tämä hyväksyttiin VHDL-93: ssa ( IEEE 1076 -standardin toinen versio ).

VHDL-standardin piti kehittyä vastaamaan elektroniikan erilaisiin ongelmiin. IEEE Design Automation Standards Committee (DASC) loi standardin 1076,1 IEEE (1999), tai VHDL-AMS ( VHDL Analogiset ja Mixed-Systems ).

Tämä uusi standardi on jatko jo olemassa olevalle IEEE 1076-1987 -standardille . Sen avulla voidaan kuvata ja simuloida analogisia , digitaalisia ja sekoitettuja (analogisia ja digitaalisia) piirejä . Tätä varten se käyttää peräkkäisten ja samanaikaisten ohjeiden lisäksi uuden tyyppisiä käskyjä, joita kutsutaan "samanaikaisiksi" ja joilla on yhtälöiden arvo. Käytännössä yhä useampi simulaattori toteuttaa tämän laajennuksen. Toisaalta siihen liittyvät analogisynteesityökalut ovat vielä lapsenkengissään.

Sijoitus Verilogiin nähden

Verilog- kieli , vaikka syntaktisesti hyvin erilainen, palveli samankaltaisia ​​tarpeita. Näiden kahden kielen välillä on tosiasiallisesti lähes ekvivalentti, minkä vuoksi on olemassa lukuisia käännösskriptejä yhdestä toiseen. VHDL on nyt hallitseva laitteistojen kuvauskieli, jota eurooppalaiset yritykset käyttävät, kun taas Verilogia suositaan usein Atlantin yli.

Johdatus VHDL: ään

Simulointi ja synteesi

Tarkoituksena on laitteiston kuvauskieli kuten VHDL on helpottaa kehittämisen digitaalisen piirin tarjoamalla tiukka menetelmän toimintaa kuvaavia ja haluttu piiri arkkitehtuuri. Ajatuksena ei ole tehdä (sulattaa) todellista komponenttia, vaan käyttää kehitystyökaluja odotetun toiminnan tarkistamiseen. Tämän kielen avulla voidaan käyttää simulaattoreita , joiden tehtävänä on testata suunnittelijan kuvaama toiminta.

Seuraava vaihe on syntetisoida tämä laitteistokuvaus, jotta saadaan komponentti, joka suorittaa halutut toiminnot, käyttämällä konkreettisia loogisia elementtejä ( logiikkaportit , kiikarit tai rekisterit ). Ne toteutetaan käytetyn tekniikan mukaan joko suoraan transistoreissa ( ASIC : n tapauksessa ) tai FPGA: iden ohjelmoitavien elementtien perusteella . Synteesin jälkeen tulevat vaiheet:

Näissä kahdessa toiminnassa on otettava huomioon käytettävissä olevat resurssit ASIC: lla (pinta) tai FPGA: lla (ohjelmoitavat yksiköt).

VHDL: llä, jolla on kaksi toimintoa (simulointi ja synteesi), vain osa VHDL: stä voidaan syntetisoida, toinen olemassa vain simuloinnin helpottamiseksi (käyttäytymismallien ja testipenkkien kirjoittaminen ). Riippuen laitteistotukesta ja käytetystä synteesiohjelmistosta, tämä osa voi olla enemmän tai vähemmän laaja. Syntetisoitavan ja kannettavan VHDL: n saamiseksi on siksi tarpeen rajoittua yksinkertaisiin rakenteisiin, joiden transkriptio portteihin ja kiipeihin on helppo suorittaa. 1076.6-standardi aloitettiin yrittäessä määritellä "synteettisten" VHDL-osien joukko.

Kieli

Vhdl on erittäin hyödyllinen kieli. VHDL: n syntaksia käytetään adan kielestä , jonka avainsanat on mukautettu materiaalisuunnitteluun. Yksi VHDL: n erityispiirteistä on se, että piirin sisällä oleva rinnakkaisuus on helppo ilmaista.

VHDL: ssä mitä tahansa komponenttia (ohjelmistotarkoituksessa) kuvataan kahdessa osassa:

Siksi arkkitehtuuriosa sisältää kuvauksen halutusta laitteistotoiminnosta:

Jälkimmäisessä tapauksessa kuvauksessa voidaan käyttää samanaikaisia käskyjä , pääasiassa käyttämällä lopullisia määrityksiä ( A <= B;jotka lukevat A vastaanottaa B: tä, mutta vastaavat pysyvää yhteyttä signaalista B signaaliin A) ehdollisena ( A <= B when condition else C;mikä tarkoittaa: A vastaanottaa B, jos ehto on totta muuten C, mutta mitään muutoksia B, C tai tila on välitön ja selektiivinen vaikutus ( valintavivunA <= B when valeur1, C when valeur2, D when others samanaikaisesti version kytkentä tapauksessa valitsin on C-kieli ). Kuten heidän nimensä viittaa, samanaikaiset ohjeet simuloivat kuvattujen piirien rinnakkaisuutta. Samanaikaisten ohjeiden järjestyksellä ei ole vaikutusta kuvattuun piiriin.

Kuitenkin, kun looginen toiminto on liian monimutkainen kuvaamaan samanaikaisella käskyllä, se voidaan korvata algoritmisella kuvauksella, jota kutsutaan prosessiksi . Näissä prosesseissa käytettävät ohjeet ovat tällä kertaa peräkkäiset. Nämä ovat ohjelmointikielien klassisia ohjausrakenteita ( jos-muu, tapaus-aika, / / ​​kun ), jotka tarjoavat mahdollisuuden toteuttaa mikä tahansa algoritmi, ainakin simulaatiossa.

Simulaation aikana prosessi suoritetaan vain nimenomaisella liipaisimella, muuten se ei ole aktiivinen. Laitteiston kannalta prosessi on "musta laatikko", jonka vain käyttäytyminen on kuvattu, mutta ei rakennetta. Ohjelmiston näkökulmasta prosessi käyttäytyy kuin ääretön silmukka, jonka jokainen iterointi laukaisee yhden sen tulosignaalien aktiivisuudesta (sisältyy sen herkkyysluetteloon). Täten for and while -lausekkeet eivät ole hyödyllisiä laskureiden kuvaamisessa, toisin kuin VHDL-aloittelijoiden yleiset uskomukset.

Kaksi vaikeutta

Kaksinkertainen merkitys sanalle "peräkkäinen"

"Peräkkäinen" käsky prosessissa on vastakkainen "samanaikaiselle" käskylle ( prosessin ulkopuolella ) eikä yhdistelmälle (kuvatun logiikan kannalta), joka muodostaa hyvin usein sekaannuksen lähteen aloittelijoiden keskuudessa. Yhdistelmäjärjestelmää voidaan todellakin kuvata peräkkäisellä algoritmilla ( if A=1 then B <= C; else B<=0; end if;vastaa AND-porttia), kuten voidaan kuvata peräkkäinen piiri samanaikaisella käskyllä ​​( Q <= Q when LE = '1' else D). Vain synkronisia peräkkäisiä piirejä (herkkiä kellosignaalin reunoille) voidaan kuvata vain kellon reunalla aktivoidulla algoritmilla.

Signaali ei ole muuttuja

Eräässä menetelmässä , voi löytää tehtäviä signaalien tai muuttujia. Toisin kuin muuttujilla, signaalin osoittamisella ei ole välitöntä vaikutusta. Voit muokata vain tulevaa signaalin arvoa. Vaikuttaa oletusarvoisesti arvoon, jonka tämä signaali saa seuraavassa simulointivaiheessa, joka tulee voimaan vasta prosessin päättymisen jälkeen . Täten prosessissa viiden käskyn A <= A+1;jälkeen signaalia A ei lisätä 5: llä, vaan vain 1: lla. Se on luettava A.futur <= A.présent +1;siten, että läsnä olevaa A. ei koskaan muuteta.

Erot ohjelmointikielen kanssa

VHDL: llä on kaksi näkökohtaa, jotka voivat olla ristiriitaisia. Yksinkertaisesti simuloitavan käyttäytymismallin kirjoittamisessa simulaattori kääntää kielen ja suorittaa sen. Toisaalta, kun on kyse syntetisaattorin luoman piirin kuvaamisesta, filosofia on huomattavasti erilainen. Synteesityökalu, jonka on muutettava kaikki toimitettu koodi logiikkaportteihin perustuvaksi toteutukseksi, on suunniteltu toimimaan hyvin jäsennellyllä tavalla. On välttämätöntä pystyä antamaan sille selkeä kuvaus (jonka synteesi vastaa haluttua arkkitehtuuria) samalla kun se on mahdollisimman vähemmän spesifinen (jotta työkalu voi optimoida muodostetun piirin mahdollisimman paljon).

Esimerkiksi, jos haluat luoda yhdistelmälogiikkatoiminnon (kellosta riippumatta), kaikki lähdöt on osoitettava kullekin prosessikutsulle, muuten synteesityökalu, kun otetaan huomioon, että kohdistamattomat lähdöt säilyttävät vanhan arvonsa, asettaa D-kääntämisen - floppaa jokaisen muuttumattoman lähdön ulostulossa. Tämä ratkaisu on silloin erittäin huono, koska se muuttaa toiminnon synkroniseksi logiikkatoiminnoksi, joka riippuu siis kellosta (jonka lisäksi synteesityökalu määrittelee suunnittelijan hallinnan ulkopuolella).

Tämä ero edellyttää paljon työtä koodauksesta ylävirtaan ja alavirtaan, kuvatun piirin on oltava jo suunniteltu ennen koodaamista ja se on varmistettava suunnittelun jälkeen, ottaen huomioon porttien lukumäärä ja asetteluominaisuudet, varmistaakseen, että että kuvausvirhettä ei ole. Nämä erittäin vahvat rajoitukset ohjelmoijalle johtavat erittäin tiukkojen käytöksen ja koodausmenetelmien käyttöönottoon.

Nämä suuret erot ohjelmointikielen kanssa, kuten C, tekevät VHDL: stä erillisen kielen, lähempänä elektroniikkaa kuin tietojenkäsittelyä. Ei ole myös harvinaista nähdä mikro- ohjainarkkitehtuureja , jotka on toteutettu FPGA : ille , itse ohjelmoituina kokoonpanimessa tai C: ssä muussa projektissa.

Ohjelmisto käynnistettäväksi VHDL: ssä

Integroitu kehitysympäristö

Suurimmat ohjelmoitavien logiikkapiirien valmistajat tarjoavat ilmaisen, mutta rajoitetun version työkaluistaan.

Toimittaja Tuote Lisenssi Syntetisaattori Simulaattori Huomautukset
Xilinx ISE-verkkopaketti Omistaja, ilmainen, rajoittamaton Joo Joo Ilmainen ModelSim XE Starter Simulator
Altera Quartus II -versio Omistaja, ilmainen, 6 kuukautta uusittavissa Joo Joo Ilmainen ModelSim Altera Starter Edition Simulator
Ristikko ispVipu käynnistin Omistaja, ilmainen, 6 kuukautta uusittavissa Joo Joo Syntetisaattori: Synplify Pro for Lattice (ilmainen), Active-HDL Lattice Edition Simulator (ilmainen)
Todellinen Libero Omistaja, ilmainen, yhden vuoden uusittavissa Joo Joo Syntetisaattori: Synplify Pro Actel Edition (ilmainen), ModelSim Actel Edition Simulator (ilmainen)
Vain simulaattorit
Aldec Active-HDL Student Edition Omistaja, ilmainen, 1 vuosi Kolmas osapuoli Joo
Mentor Graphics ModelSim PE Student Edition Omistaja, ilmainen Ei Joo
Delfiinien integrointi MURSKATA Omistaja, ilmainen Ei Joo Ilmainen SMASH Discovery -simulaattori (esimerkkejä VHDL: stä)

Tekstieditori

Edellä mainitut kehitysympäristöt sallivat kaikki VHDL-tiedoston syöttämisen, mutta jotkut tekstieditorit tarjoavat edistyneitä ominaisuuksia, kuten syntaksikorostuksen , automaattisen täydennyksen , koodin taittamisen tai jopa makrokomennot . Tämä koskee seuraavia ilmaisia ​​ohjelmistoja:

Esimerkkejä kuvauksista VHDL: ssä

Bonjour Monde

Jotkut käsitteet, kuten tiedostot tai aikataulu, ovat järkeviä vain elektronisen komponentin mallinnuksessa, eivätkä ne ole itse komponentin käytettävissä. Koska merkkijonon näyttäminen vakiolähdössä on myös abstrakti käsite, se on mahdollista vain simulaatiossa.

-- Déclaration de l'entité entity hello_world is end entity hello_world; -- Déclaration de l'architecture architecture wiki of hello_world is begin -- Process affiche_texte affiche_texte: process is begin -- Afficher la chaine de caractère "Hello world !" sur la sortie standard du simulateur report "Hello world !"; -- Suspendre l'exécution du process wait; end process affiche_texte; end architecture wiki;

Suuntavilkku

On olemassa useita mahdollisia kuvauksia komponentista, jonka toinen lähtö muuttaa tilaa määritetyn ajan kuluttua.

Esimerkki syntetisoitavasta kuvauksesta -------------------------------------------------------------------------------- -- Liste des librairies et objets importés library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; -------------------------------------------------------------------------------- -- Déclaration de l'entité entity Clignotant is -- Paramètres passés lors de la génération (compilation ou synthèse) generic ( PERIODE : integer := 100000000; DUREE_ETAT_BAS : integer := 75000000 ); -- Entrées / sorties port ( CLK : in std_logic; RESET : in std_logic; LED : out std_logic ); end entity Clignotant; -------------------------------------------------------------------------------- architecture RTL of Clignotant is -- Déclaration des signaux utilisés dans l'implémentation signal Compteur_s : std_logic_vector(31 downto 0); begin -- Process synchrone "Compteur" Compteur: process(CLK) begin if rising_edge(CLK) then -- La suite est exécutée après chaque front montant de l'entrée CLK if (RESET = '1') then -- Reset actif à l'état haut Compteur_s <= (others => '0'); LED <= '0'; else if (Compteur_s < DUREE_ETAT_BAS) then -- Maintenir la LED éteinte LED <= '0'; else -- Allumer la LED LED <= '1'; end if; if (Compteur_s >= PERIODE) then -- Recommencer un cycle Compteur_s <= (others => '0'); else -- Continuer le cycle Compteur_s <= Compteur_s + 1; end if; end if; end if; end process Compteur; -- Fin du process "Compteur" end architecture RTL; -- Fin du fichier  

4: 1-multiplekseri (kolme erilaista kilpailevaa arkkitehtuuria)

VHDL: ssä meidän on erotettava säiliö sisällöstä, jota kutsutaan entiteetiksi ja vastaavasti arkkitehtuuriksi.

VHDL-tiedosto

VHDL-tiedostossa on aina oltava sen sisältämän yksikön nimi (tämä on selkeyttä helpottava käyttösääntö, joissakin ohjelmissa se on jopa pakollinen). Sen vakiolaajennus on ".vhd", vaikka se on joskus kirjoitettu ".vhdl". Ensinnäkin sinun on ensin ilmoitettava projektille tarvittavien kirjastojen käyttö:

-- En VHDL : une ligne de commentaires commence avec deux "-" -- Il est préférable de commencer par importer les bibliothèques VHDL standards normalisées par l'IEEE, -- car elles sont souvent nécessaires. library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all;

Std_logic_arith , std_logic_signed, ja std_logic_unsigned kirjastot , huolimatta heidän nimensä, ei ole standardoitu IEEE ja niiden käyttö ei ole suositeltavaa. Itse asiassa on parempi määritellä nimenomaisesti jokaisen vektorin tyyppi, jolle operaatio suoritetaan ( SIGNED tai UNSIGNED ) sen aritmeettisen käsittelyn määrittämiseksi. Toimintojen käyttäytyminen STD_LOGIC_VECTOR -tyypeillä on erilainen kutsutun kirjaston mukaan, mikä tekee niiden käytöstä riskialtista.

Entiteetti

Kuvaus nelisyöttöisen multiplekserin käyttöliittymästä (kokonaisuudesta) :

-- Voici un exemple d’entité, décrivant les E/S utilisées -- par les trois exemples d’architectures purement concurrentes : -- -- ATTENTION, avec certains outils de CAO, l'entité doit avoir le même nom que le fichier (logique_4_vers_1.vhd) ENTITY logique_4_vers_1 IS PORT ( a : IN STD_LOGIC; b : IN STD_LOGIC; c : IN STD_LOGIC; d : IN STD_LOGIC; adr : IN STD_LOGIC_VECTOR (1 downto 0); s : OUT STD_LOGIC ); END logique_4_vers_1; Ensimmäinen arkkitehtuuri

Ensimmäinen arkkitehtuuri, joka mahdollistaa tämän multiplekserin kuvaamisen, käyttää suoraan Boolen formulaatiota, jota voidaan käytännössä käyttää vain yksinkertaisissa yhtälöissä. Tämän menetelmän avulla voit kirjoittaa minkä tahansa yhdistelmätoiminnon.

-- Première architecture concurrente décrivant un mux : ARCHITECTURE mux_4_vers_1 OF logique_4_vers_1 IS BEGIN s <= ( a AND NOT adr(1) AND NOT adr(0) ) OR ( b AND NOT adr(1) AND adr(0) ) OR ( c AND adr(1) AND NOT adr(0) ) OR ( d AND adr(1) AND adr(0) ); END mux_4_vers_1; Toinen arkkitehtuuri

Toinen arkkitehtuuri käyttää avainsanoja WITH , SELECT ja WHEN . Käyttäytyminen simulointi tällaisten kirjoittaminen voi olla erilainen kuin ensimmäinen, kun tulot on asetettu X tai Z .

-- Deuxième architecture concurrente décrivant un mux : ARCHITECTURE mux_4_vers_1 OF logique_4_vers_1 IS BEGIN WITH adr SELECT s <= a WHEN "00", b WHEN "01", c WHEN "10", d WHEN others; END mux_4_vers_1;

Viimeinen rivi antaa mahdollisuuden ryhmitellä kaikki tapaukset, joita ei ole erikseen käsitelty yhdelle riville.

Kolmas arkkitehtuuri

Kolmas arkkitehtuuri käyttää WHEN- ja ELSE- avainsanoja .

-- Troisième architecture concurrente décrivant un mux : ARCHITECTURE mux_4_vers_1 OF logique_4_vers_1 IS BEGIN s <= a WHEN adr = "00" ELSE b WHEN adr = "01" ELSE c WHEN adr = "10" ELSE d; END mux_4_vers_1;

Peräkkäinen arkkitehtuuri - D-kiikku

Peräkkäisen arkkitehtuurin kuvaus, toisin sanoen ajasta riippuvan toiminnon (ts. Kellon) avulla, edellyttää prosessien käyttöä .

-- Architecture séquentielle pour une bascule D : ARCHITECTURE comport OF bascule_d IS BEGIN PROCESS (clk, reset) BEGIN IF reset = '1' THEN q <= '0'; ELSE IF clk'event AND clk = '1' THEN -- Moins bien que : IF rising_edge(clk) THEN q <= d; END IF; END IF; END process; END comport;

Huomautuksia

  1. VHSIC tarkoittaa erittäin nopeaa integroitua piiriä .
  2. (sisään) Peeter Ellervee Kalle Tammemäe VHDL - VHSIC Hardware Description Language [PDF] , Tallinnan teknillinen yliopisto - Tietokonetekniikan laitos, vieraili 24. syyskuuta 2008
  3. http://www.univ-bpclermont.fr/FORMATIONS/Master/meam/cme/cme02.pdf [PDF] s.  30-47
  4. Xilinx: ISE-verkkopaketti
  5. Quartus II Web Edition -ohjelmiston versio 7.2
  6. ispLEVER Starter
  7. Libero
  8. Opiskelijat - Active-HDL Student Edition
  9. ModelSim - tekniset resurssit: ModelSim PE Student Edition -esittely
  10. MALMA

Katso myös

Aiheeseen liittyvät artikkelit

Ulkoiset linkit