1 / 32

VHDL-kieli

VHDL-kieli. Standardoitujen kuvauskielten kytn perusteetRiippumattomuus piirivalmistajista. sama kuvaus voidaan toimittaa usealle eri piirivalmistajalle (ainakinperiaatteessa).Riippumattomuus suunnittelutykaluista. stardardimuotoinen tekstitiedosto voidaan helposti siirtsuunnitteluty

kyne
Télécharger la présentation

VHDL-kieli

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


    1. VHDL-kieli Johdanto Laitteiston kuvauskieli eli HDL (Hardware Description Language) on tekstimuotoinen tapa kuvata digitaalipiiri tai laite. Valtaosa kytnnn digitaalipiirisuunnittelusta tehdn kuvauskielell. Kytetn erityisesti kuvattaessa asiakaskohtaisia digitaalipiirej ja ohjelmoitavia logiikkaverkkoja. Kuvauskielet muistuttavat ohjelmointikieli. laitteistossa on sek rinnakkaista ett perkkist toimintaa. ohjelmistossa on yleens vain perkkist toimintaa. Kuvauksia voidaan kytt simulointiin, piirisynteesiin ja testaukseen.

    2. VHDL-kieli Standardoitujen kuvauskielten kytn perusteet Riippumattomuus piirivalmistajista. sama kuvaus voidaan toimittaa usealle eri piirivalmistajalle (ainakin periaatteessa). Riippumattomuus suunnittelutykaluista. stardardimuotoinen tekstitiedosto voidaan helposti siirt suunnittelutykalusta toiseen. Hyvt valmislohkojen (IP Blocks) kyttmahdollisuudet. laitevalmistajan omat valmislohkot. piirivalmistajan valmislohkot. tykalutoimittajan valmislohkot. erikseen ostetut (third party) valmislohkot. valmislohkojen kytt lyhent usein suunnitteluaikaa paljonkin.

    3. VHDL-kieli VHDL = VHSIC Hardware Description Language VHSIC = Very High Speed Integrated Circuit (USA:n DoD:n hanke) Alkuperinen versio IEEE 1076-1987 vuonna 1987 Pivitys versioksi IEEE 1076-1993 vuonna 1993 Kehitysty jatkuu Hyvin rikas ja monipuolinen kieli Mys laaja ja osin mutkikaskin Sujuva kytt vaatii sek opiskelua ett erityisesti kytnnn kokemusta Kuvattua laitetta tai piiri nimitetn suunnitteluyksikksi (entity) Suunnitteluyksikill on hierarkia ylemmn tason suunnitteluyksikk koostuu alemman tason suunnitteluyksikist eli moduuleista samaa moduulia voidaan kytt useita kertoja

    4. VHDL-kieli VHDL-suunnittelussa on tavoitteena saada aikaan VHDL-malli. VHDL-kieli on tysin simuloituvaa, mutta ei tysin syntesoituvaa. -osaa kielen rakenteista ei pystyt toteuttamaan piiritasolla. Malli voi kuvata: - VHDL-komponenttia, - kokonaista ASIC/FPGA piiri, - piirikorttia - tai korttien muodostamaa jrjestelm, - tai se voi olla niin sanottu testipenkki. VHDL-malli on teksti (merkkijono), joka kirjoitetaan tekstinksittelyohjelman avulla.

    5. VHDL-kieli VHDL-mallin rakenne 1. Entity Declaration (primary) Suunnitteluyksikn esittely 2. Package Declaration (primary) Kokoelman esittely 3. Configuration Declaration (p) Kokoonpanon esittely 4. Architecture (secondary) VHDL-arkkitehtuuri 5. Package Body (secondary) Kokelman ydin. Entity Declaration on kirjastoyksikk, jossa mritelln mallinnetun logiikan liittyminen ympristns, liittimen kuvaus Architecture on kirjastoyksikk, jossa mritelln varsinainen mallinnettava logiikka Design Unit = Entity + Architecture on kokonaisuus, jota voidaan simuloida.

    6. VHDL-kieli Yksinkertaisin malli Mallissa on Entity + Architecture = yksi suunnitteluyksikk Simuloitava VHDL-malli voidaan aina esitt tss muodossa. Esim. AND-portti VHDL-kielell.

    7. VHDL-kieli Esim. Nand-portti. ENTITY nand2 IS PORT ( a: IN BIT; b: IN BIT; f: OUT BIT); END nand2; ARCHITECTURE behavior OF nand2 IS BEGIN f <= a NAND b; END behavior;

    8. VHDL-kieli Kommentti, varattu sana ja tunniste Kommentti (COMMENT) rivi tai rivin osa, joka alkaa -- (kaksi tavuviivaa) on kommentti -- Ulkoisten tulosignaalien esittely PORT (in1, in2, clk, reset): IN BIT; -- kaikkien tulosignaalien tyyppi BIT Varattu sana ja tunniste Avainsanat (keyword) ja operaattorit (operator) ovat varattuja sanoja tunnisteet (identifier) ovat kyttjn antamia nimi. Alkavat kirjaimella, sallittuja merkkej englannin kirjaimet, numerot ja _ _ ei saa olla viimeinen merkki eik niit saa olla kahta perkkin isoja ja pieni kirjaimia ei erotella: IN1 = in1 = In1 PORT, IN, NAND ovat varattuja sanoja in1, nand2, toiminta ovat tunnisteita

    9. VHDL-kieli Varatut sanat: abs access after alias all and architecture array assert attribute begin block body buffer bus case component configuration constant disconnect downto else elsif end entity exit file for function generate generic guarded if impure in inertial inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package port postponed process pure range record register reject rem report return rol ror select severity shared signal sla sll sra srl subtype then to transport type unaffected units until use variable wait when while with xnor xor

    10. VHDL-kieli Objekti Objekteja ovat portit, signaalit, muuttujat ja vakiot. Portti (PORT) on suunnitteluyksikn tulo- tai lhtsignaali. Signaali (SIGNAL) on suunnitteluyksikn sisinen signaali. PORT (in1, in2, clk, reset: IN BIT; -- tulosignaalit outa, outb, outc: OUT BIT); -- lhtsignaalit SIGNAL sis1, sis2, sis3: BIT; -- sisiset signaalit Muuttuja (VARIABLE) on VHDL-kuvauksen sisinen objekti VARIABLE p, q, sum: INTEGER; -- kolme kokonaislukumuuttujaa Vakio (CONSTANT) on nimetty objekti, jolle on annettu vakioarvo CONSTANT arvo0: STRING := "00"; -- vakion arvo0 arvo on jono "00"

    11. VHDL-kieli Tyyppi Tyyppi (TYPE) mrittelee objektin (esimerkiksi signaalin tai muuttujan) arvot VHDL-kielen keskeisi tyyppej

    12. VHDL-kieli Bittijonon pituus ja kokonaisluvun arvoalue Bittijonon bittien lukumr ja numerointi BIT_VECTOR (1 TO 8); -- 8-bittinen bittijono, bitit 18 BIT_VECTOR (8 DOWNTO 1); -- 8-bittinen bittijono, bitit 81 Yksittiseen bittiin viitataan sen numerolla eli indeksill SIGNAL bj: BIT_VECTOR (8 DOWNTO 1); -- 8-bittinen bittijono bj bj(8) <= '0'; bj(1) <= '1'; -- sijoitetaan 1. bitille arvo '0' ja 8. bitille '1 Kokonaisluvun arvoalue esitetn antamalla sen rajat INTEGER RANGE 0 TO 255; -- etumerkitn 8-bittinen luku INTEGER RANGE 127 DOWNTO -128; -- 2:n kompl.-muot. 8-bittinen luku

    13. VHDL-kieli Enumeroitu tyyppi ja operaattori Enumeroitu tyyppi on kyttjn itse mrittelem tyyppi arvot tunnisteita, merkkej tai merkkijonoja kytetn esimerkiksi sekvenssipiirien toiminnallisissa kuvauksissa tilojen mrittelyyn -- Nelitilaisen sekvenssipiirin tilat ovat alku, vali1, vali2 ja loppu TYPE tilatyyppi IS (alku, vali1, vali2, loppu); Operaattori (operator) loogiset operaattorit AND, OR, NOT, NAND, NOR, XOR, XNOR aritmeettiset operaattorit +, -, *, /, **, MOD, REM, ABS vertailuoperaattorit =, /=, <, >, <=, >= ketjutusoperaattori & operaatioiden jrjestys osittain mritelty: tarvittaessa kytetn sulkuja loogisissa operaatioissa NOT ensin, AND ja OR samanarvoisia

    14. VHDL-kieli Sijoituslauseet 1 Signaalin sijoituslauseella (signal assignment statement) sijoitetaan arvo signaalille tai portille Sijoituslauseita on kolme erilaista: yhtaikainen, ehdollinen ja valikoiva Yhtaikainen (concurrent) signaalin sijoituslause a <= '1'; -- sijoitetaan signaalille a vakioarvo 1 f <= a OR (b AND c); -- sijoitetaan signaalin f arvoksi lausekkeen arvo Ehdollinen (conditional) signaalin sijoituslause f <= '0' WHEN a = '0' AND b = '0' ELSE -- 0, kun a = b = 0 c WHEN a = '0' AND b = '1' ELSE -- c, kun a = 0 ja b = 1 NOT c WHEN a = '1' AND b = '0' ELSE -- EI c, kun a = 1 ja b = 0 '1'; -- 1 muutoin

    15. VHDL-kieli Sijoituslauseet 2 Valikoiva (selected) signaalin sijoituslause WITH ab SELECT f <= '0' WHEN "00", -- 0, kun bittijono ab = 00 c WHEN "01", -- c, kun bittijono ab = 01 NOT c WHEN "10", -- EI c, kun bittijono ab = 10 '1' WHEN OTHERS; -- 1 muutoin Usea samaan sijoitukseen johtava ehto voidaan esitt yhdistettyin kytetn mm. Mooren koneen lhtsignaalien sijoituksessa WITH tila SELECT f <= '1' WHEN alku | loppu, -- f = 1 tiloissa alku ja loppu '0' WHEN OTHERS; -- f = 0 kaikissa muissa tiloissa

    16. VHDL-kieli Ehdollinen ohjaus: IF- ja CASE-lauseet

    17. VHDL-kieli Attribuutti Attribuutti (attribute) eli lismre liitetn objektiin ja ilmaisee sen ominaisuuden arvon muoto objekti'ATTRIBUTE valmiina yli kolmekymment, kyttj voi mritell omia synkronisissa sekvenssipiireiss trke attribuutti on 'EVENT kytetn kellosignaalin muutoksen havaitsemiseen -- Nousevalla reunalla liipaistavan D-kiikun tilanmuutoksen kuvaus IF clk'EVENT AND clk = '1' THEN -- kellosignaalin nouseva reuna q <= d; -- q:n arvoksi d:n arvo END IF;

    18. VHDL-kieli Prosessi (process) Hertesignaalin muutoksen jlkeen tapahtuvat tapahtumat PROCESS (clk) -- D-kiikku kuvataan prosessina BEGIN IF clk'EVENT AND clk = '1' THEN -- kellosign. nouseva reuna q <= d; -- kiikun tilaksi d-tulon arvo END IF; END PROCESS; Ajallisesti perkkiset tapahtumat (testipenkin kuvaus) PROCESS -- testataan 2-tuloinen portti BEGIN a <= '0'; b <= '0'; WAIT FOR 100 NS; -- 1. herte, odotet. 100 ns a <= '0'; b <= '1'; WAIT FOR 100 NS; -- 2. herte, odotet. 100 ns a <= '1'; b <= '0'; WAIT FOR 100 NS; -- 3. herte, odotet. 100 ns a <= '1'; b <= '1'; WAIT; -- 4. herte, pysytetn END PROCESS;

    19. VHDL-kieli Yksinkertainen esimerkki prosessista: Com_XOR: process (b,c) begin a<= b xor c; end process; - Com_XOR on prosessin nimi - Sana process aloittaa prosessin mrittelyn (b,c) on ns. sensitivity list. Tm tarkoittaa, ett jos b:ss tai c:ss tapahtuu muutoksia, niin lht a arvioidaan uudelleen. Sulkujen sisll olevat signaalit kertovat mink signaalien muutosten jlkeen uudelleen arviointi tehdn. Uudelleen arviointi tehdn siten, ett jokainen toiminto sanojen begin ja end vlill tehdn uudelleen. Prosessi on vain kuvaus siit, mit tulisi tapahtua lohkon sisll.

    20. VHDL-kieli Signaalin attribuutit sEVENT palauttaa tosiarvon (true) kun tapahtuma tapahtuu sSTABLE: palauttaa tosiarvon kun signaalissa ei ole tapahtunut tapahtumaa sACTIVE: palauttaa tosiarvon jos s=1 sQUIET <time>palauttaa tosiarvon jos signaalissa ei ole tapahtunut mitn ajan time aikana sLAST_EVENT palauttaa ajan edellisest tapahtumasta sLAST_ACTIVE: palauttaa ajan edellisest kerrasta kun s=1 sLAST_VALUE: palauttaa s:n tapahtumaa edeltneen arvon

    21. VHDL-kieli Komponentti ja komponentin asennus Komponentti (component) komponenttimrittely kytetn rakennekuvauksessa erikseen kuvattu suunnitteluyksikk esitelln komponenttina COMPONENT and2 PORT (a, b: IN BIT; f: OUT BIT); END COMPONENT Komponentin asennus (component instantiation) esitellyn komponentin ilmentym kytketn suunnitteluyksikn signaaleihin komponenttia voidaan kytt monta kertaa eri paikoissa eka_and2: and2 PORT MAP (a => a1, b => b1, f => f1); toka_and2: and2 PORT MAP (a => a2, b => b2, f => f2);

    22. VHDL-kieli Esimerkki signaalin attribuuteista IF (clk'EVENT AND clk='1') IF (NOT clk'STABLE AND clk='1') WAIT UNTIL (clk'EVENT AND clk='1'); IF RISING_EDGE(clk) Kaikki yll olevat ovat samalla tavalla syntesoituvia koodeja. (Eli odottavat kellon nousevaa reunaa.)

    23. VHDL-kieli Suunnitteluyksikn esittely plohkokaaviosta Laitteen tai piirin plohkokaavio kuvautuu suunnitteluyksikn esittelyksi:

    24. VHDL-kieli

    25. VHDL-kieli VHDL-kyttytymiskuvaus totuustaulusta ENTITY muistutin IS PORT ( cold, rain, onmat: IN BIT; coat, umbr: OUT BIT); END muistutin; ARCHITECTURE tottaulu OF muistutin IS BEGIN coat <= '1' WHEN cold = '1' AND rain = '0' AND onmat = '1' ELSE '1' WHEN cold = '1' AND rain = '1' AND onmat = '1' ELSE '0'; umbr <= '1' WHEN cold = '0' AND rain = '1' AND onmat = '1' ELSE '0'; END tottaulu;

    26. VHDL-kieli VHDL-kyttytymiskuvaus lausekkeista ENTITY muistutin IS PORT ( cold, rain, onmat: IN BIT; coat, umbr: OUT BIT); END muistutin; ARCHITECTURE lauseke OF muistutin IS BEGIN coat <= cold AND onmat; umbr <= NOT cold AND rain AND onmat; END lauseke;

    27. VHDL-kieli

    28. VHDL-kieli ENTITY - Kaikki I/O-rajapinnan pinnien mrittelyt - MODE - in, out, inout, buffer - TYPE - bit, std_logic, integer,

    29. VHDL-kieli SEKVENSSIPIIRIT Sekvenssipiirin lhtsignaalien arvot riippuvat piirin tilasta piirin alkutilasta tulosignaalien historiasta Lhtsignaalien arvot voivat riippua mys tulosignaaleiden nykyisist arvoista Sekvenssipiiri tallettaa ja muistaa oman tilansa Sekvenssipiiriss on sisisi takaisinkytkentj Kaksi ptyyppi: asynkroniset sekvenssipiirit synkroniset sekvenssipiirit Asynkroninen sekvenssipiiri vaihtaa tilaansa tulosignaalin muuttuessa Synkroninen sekvenssipiiri vaihtaa tilaansa erityisen tulosignaalin - kellosignaalin - tahdissa

    30. VHDL-kieli SR-salpa SR-salpa (S = Set, R = Reset) on yksinkertaisin sekvenssipiiri Se voidaan toteuttaa joko TAI-EI-porteilla (SR-salpa) tai JA-EI-porteilla SR-salpa asetetaan S-tulolla ja nollataan R-tulolla Tulosignaaliyhdistelm S = R = 1 on kielletty entity srlatch is Port ( s : in STD_LOGIC; r : in STD_LOGIC; q : buffer STD_LOGIC; qnot : buffer STD_LOGIC); end srlatch; architecture Behavioral of srlatch is begin q <= '0' when r = '1' else '1' when s = '1' else q; qnot <= '1' when r = '1' else '0' when s = '1' else qnot; end Behavioral;

    31. VHDL-kieli Kellotulolla varustettu D-kiikku entity dkiikku is port ( d : in STD_LOGIC; clk : in STD_LOGIC; q : out STD_LOGIC); end dkiikku; architecture Behavioral of dkiikku is begin p0: process (clk) is begin if (clk = '1') then q <= d; end if; end process p0; end Behavioral;

    32. VHDL-kieli D-kiikku resetill ja setill. ENTITY dff_asynch IS PORT( D, Clk, Clr, Pre : IN STD_LOGIC; Q, Qbar : OUT STD_LOGIC); END dff_asynch; ARCHITECTURE behavioral OF dff_asynch IS BEGIN PROCESS(D, Clk, Clr, Pre) BEGIN IF Clr = '0' THEN -- Dont wait for clock Q <= '0'; Qbar <= '1'; ELSIF Pre = '0' THEN Q <= '1'; Qbar <= '0'; ELSIF (Clk'event) AND (Clk='1') THEN -- Positive Edge Q <= D; Qbar <= not D; END IF; END PROCESS; END behavioral;

    33. VHDL-kieli Laskuri entity counter is generic(n: natural :=2); port( clock: in std_logic; clear: in std_logic; count: in std_logic; Q: out std_logic_vector(n-1 downto 0) ); end counter; architecture behv of counter is signal Pre_Q: std_logic_vector(n-1 downto 0); begin -- behavior describe the counter process(clock, count, clear) begin if clear = '1' then Pre_Q <= Pre_Q - Pre_Q; elsif (clock='1' and clock'event) then if count = '1' then Pre_Q <= Pre_Q + 1; end if; end if; end process; Q <= Pre_Q; end behv;

More Related