Budapesti Műszaki és Gazdaságtudományi Egyetem VHDL. Horváth Péter, Nagy Gergely. Elektronikus Eszközök Tanszéke (BME) 2013. október 3.



Hasonló dokumentumok
Bevezető Típusok és operátorok a VHDL-ben A VHDL nyelv vezérlési szerkezetei Hieararchikus tervezés. Budapesti Műszaki és Gazdaságtudományi Egyetem

VHDL szimuláció. Tervezés. Labor II. Dr. Hidvégi Timót

Tervezési módszerek programozható logikai eszközökkel

Digitális elektronika gyakorlat

Digitális rendszerek. I. rész. Dr. Turóczi Antal

Laborgyakorlat 3 A modul ellenőrzése szimulációval. Dr. Oniga István

Programozás és digitális technika II. Logikai áramkörök. Pógár István Debrecen, 2016

HDL nyelvek: VHDL. Fehér Béla Szántó Péter, Lazányi János, Raikovich Tamás BME MIT FPGA laboratórium

Programozási nyelvek (ADA)

Tartalom Tervezési egység felépítése Utasítások csoportosítása Értékadás... 38

Verilog HDL ismertető 2. hét : 1. hét dia

Hardver leíró nyelvek (HDL)

Budapesti Műszaki és Gazdaságtudományi Egyetem. A Verilog HDL II. Nagy Gergely. Elektronikus Eszközök Tanszéke (BME) szeptember 26.

Digitális elektronika gyakorlat

Digitális elektronika gyakorlat. A VHDL leírástípusok

VHDL alapismeretek. (Xilinx FPGA-k programozása VHDL nyelven) Oktatási jegyzet. Összeállította: dr. Zigó Tamás

Egyszerű mikroprocesszor RTL modellek (VHDL)

5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI

Újrakonfigurálható eszközök

Algoritmizálás és adatmodellezés tanítása 1. előadás

6. hét: A sorrendi hálózatok elemei és tervezése

VHDL alapú tervezés. (nem a teljes változat) Írta : Dr. Hidvégi Timót egyetemi docens

Tervezési módszerek programozható logikai eszközökkel

Attribútumok, constraint-ek

PROGRAMOZÁSI NYELVEK - ADA. GYAKORLAT JEGYZET

Komputeralgebra Rendszerek

A Verilog HDL áttekintése

Constraint-ek. Fehér Béla Szántó Péter, Lazányi János, Raikovich Tamás BME MIT FPGA laboratórium

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Occam 1. Készítette: Szabó Éva

Egyszerű RISC CPU tervezése

Kifejezések. Kozsik Tamás. December 11, 2016

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Digitális technika (VIMIAA02) Laboratórium 5

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Digitális technika (VIMIAA02) Laboratórium 5

Újrakonfigurálható eszközök

Algoritmizálás + kódolás C++ nyelven és Pascalban

16F628A megszakítás kezelése

Java II. I A Java programozási nyelv alapelemei

Szkriptnyelvek. 1. UNIX shell

Tervezési módszerek programozható logikai eszközökkel

Dr. Oniga István DIGITÁLIS TECHNIKA 8

Java programozási nyelv

Java II. I A Java programozási nyelv alapelemei

BASH script programozás II. Vezérlési szerkezetek

Tervezési módszerek programozható logikai eszközökkel

Programozás alapjai. 5. előadás

Apple Swift kurzus 3. gyakorlat

Programozási nyelvek I. (Az Ada) Kozsik Tamás

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Előadó: Dr. Oniga István

Csomag. Adatbázis-objektum Programozási eszközök gyűjteménye Két részből áll. specifikáció törzs (opcionális)

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Informatika terméktervezőknek

OOP #14 (referencia-elv)

Pénzügyi algoritmusok

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Dr. Oniga István

és az instanceof operátor

HDL nyelvek: VHDL. Fehér Béla Szántó Péter, Lazányi János, Raikovich Tamás BME MIT FPGA laboratórium

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Kombinációs áramkörök modelezése Laborgyakorlat. Dr. Oniga István

Operációs Rendszerek II. labor. 2. alkalom

DIGITÁLIS TECHNIKA 7. Előadó: Dr. Oniga István

III. Alapfogalmak és tervezési módszertan SystemC-ben

A VHDL kódtól az FPGA-ba való ágyazásig From the VHDL Code to the Implementation to FPGA-s

Nyolcbites számláló mintaprojekt

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

8.3. AZ ASIC TESZTELÉSE

S z á m í t ó g é p e s a l a p i s m e r e t e k

Haladó DBMS ismeretek 1

Webprogramozás szakkör

Újrakonfigurálható eszközök

Bevezetés a programozásba I.

Smalltalk 2. Készítette: Szabó Éva

Újrakonfigurálható eszközök

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Tervezési módszerek programozható logikai eszközökkel

Az MSP430 mikrovezérlők digitális I/O programozása

Rendszerszintű tervezés: SystemC I.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

7.hét: A sorrendi hálózatok elemei II.

1. Alapok. #!/bin/bash

A Picoblaze Core implementálása FPGA-ba

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

1. Jelölje meg az összes igaz állítást a következők közül!

A C# programozási nyelv alapjai

Digitális Technika. Dr. Oniga István Debreceni Egyetem, Informatikai Kar

Programozás alapjai. 7. előadás

A Memory Interface Generator (MIG) beállítása a Logsys Kintex-7 FPGA kártyához

VHDL oktatási segédlet

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Digitális Technika. Dr. Oniga István Debreceni Egyetem, Informatikai Kar

MSP430 programozás Energia környezetben. LED kijelzok második rész

AWK programozás, minták, vezérlési szerkezetek

Bevezetés a programozásba I.

AWK programozás, minták, vezérlési szerkezetek

Tranzakciókezelés PL/SQL-ben

1. A VHDL mint rendszertervező eszköz

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Átírás:

Áramkörtervezés az absztrakciótól a realizációig BMEVIEEM284 Budapesti Műszaki és Gazdaságtudományi Egyetem VHDL Horváth Péter, Nagy Gergely Elektronikus Eszközök Tanszéke (BME) 2013. október 3. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 1 / 62

Bevezető Bevezető Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 2 / 62

Bevezető A VHDL A VHDL A VHDL egy hardverleíró nyelv neve egy rövítés: VHSIC Hardware Description Language, amelyben szintén van egy rövidítés: VHSIC Very-High-Speed Integrated Circuit. A nyelvet az amerikai védelmi minisztérium (Department of Defense DoD) készíttette az 1980-as években digitális ASIC áramkörök dokumentálására. Hamar nagy igény lett a dokumentáció szimulálására, majd később a logikai szintézisre. A megbízás 1983-ban történt, az első szabvány az IEEE 1076-1987 volt, majd ezt követte az IEEE-1164 és 1993-ban az IEEE-1076 új verziója. A nyelvnek létezik analóg és analóg-digitális rendszerek leírását lehetővé tevő verziója: a VHDL-AMS. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 3 / 62

Bevezető A VHDL A VHDL nyelv A VHDL alapjául az Ada nyelv szolgált, amit szintén a DoD rendelt meg. Az Ada egy erősen típusos nyelv, nagy megbízhatóságú rendszerek fejlesztésére hozták létre. A VHDL is ezt a hagyományt követi. Szintaktikájára jellemző, hogy kevesebb szimbólumot és több, egész szavas kulcsszót használ, mint más nyelvek. Előnye a könnyű olvashatóság és az áttekinthető, szabályos szerkezet, hátránya a sok foglalt szó. A VHDL nem különbözteti meg a kis- és nagybetűket! A nyelv folyamatos fejlesztés alatt áll a mai napig: verifikáció támogatása, OOP. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 4 / 62

Típusok és operátorok a VHDL-ben Típusok és operátorok a VHDL-ben Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 5 / 62

Típusok és operátorok a VHDL-ben Egyed deklaráció entity Egyed deklaráció entity A VHDL-ben, más HDL-ekhez hasonlóan, a tervezés alapja a logikai egység egyed. Az egyedek megadása két részletben történik: 1 entity blokk: az egyed interfésze (deklaráció) a portjainak az iránya és típusa, 2 architecture blokk: az egyed leírása (definíció) viselkedési, strukturális leírás. entity reg4 is port (d0, d1, d2, d3, en, clk : in bit ; q0, q1, q2, q3 : out bit ); end entity reg4 ; A példa egy négybites flipflopot mutat be. Az egyes portok egybites logikai típusúak. Az end után az entity reg4 opcionális. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 6 / 62

Típusok és operátorok a VHDL-ben Egyed definíció architecture Egyed definíció architecture Az egyedek definíciója architecture blokk(ok)ban történik. Egy egyedhez tartozhat több definíció is: ez lehetsőséget ad több absztrakciós szint párhuzamos kipróbálására: entity nand_gate is port (a, b : in bit ; q : out bit ); end entity nand_gate ; architecture arch_1 of nand_gate is begin q <= not (a and b); end architecture arch_1 ; architecture arch_2 of nand_gate is signal internal : bit ; begin internal <= a and b; q <= not internal ; end architecture arch_2 ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 7 / 62

Típusok és operátorok a VHDL-ben Jelek létrehozása, értékadás jeleknek Jelek létrehozása, értékadás jeleknek Egy egyed portjai jelek (signal). Az egyedeken belül definiálhatunk további jeleket is. A jeleket a deklarációs blokkban hozzuk létre, ami a begin kulcsszó előtt található. architecture arch_2 of nand_gate is signal internal : bit ; -- lok á lis jel begin internal <= a and b; q <= not internal ; end architecture arch_2 ; Az értékadás a <= operátorral történik jelek esetében. A jelek értékadása párhuzamosan kerül végrehajtásra ezért lesz a fenti leírásból egy NAND kapu. A -- utáni szöveg egy sorban: megjegyzés. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 8 / 62

Típusok I. Típusok és operátorok a VHDL-ben Típusok A jeleink típusa eddig bit volt, ami 0 és 1 értékeket tud felvenni. Hardver-modellezéshez ennél többféle érték szükséges. nagy impedancia, ismeretlen/érdektelen, stb. Ilyen típust létre lehet hozni a nyelv saját eszközeivel (ld. később), de a szabványosítók elkészítettek a saját verzióikat. Érdemes ezeket használni, hiszen ezek széles körben elterjedtek és támogatottak és ezeket ismerik a szintézerek is. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 9 / 62

Típusok II. Típusok és operátorok a VHDL-ben Típusok A nagy VHDL projektek hierarchikus felépítésűek, így a típusdefiníciók is ebben a hierchiában jelentkeznek: Könyvtár (library): legmagasabb szintű egység, Csomag (package): a könyvtár alegysége. Pl. az IEEE-1164 szabványban bevezetett típusok az ieee könyvtár std logic 1164 csomagjában találhatóak. A kódban jelezni kell, ha egy könyvtár egyes csomagjait használjuk. Pl. ha a teljes std logic 1164 csomagot használjuk: library ieee ; use ieee. std_logic_1164. all; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 10 / 62

Típusok és operátorok a VHDL-ben Az std.standard típusai Típusok A legalapvetőbb típusok az std.standard csomagban vannak definiálva ezt a legtöbb környezetben automatikusan beszerkeszti a fordító. Az itt található típusok: Az std.standard típusai Típus bit bit vector character integer natural real time Leírás 0 vagy 1 értékű bit több-bites érték karakter egész szám (méret: implementáció-függő) pozitív egész szám valós szám (a szintézerek általában nem támogatják) idő (megadható: sec, ms, us, ns, ps, fs egységekben) Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 11 / 62

Típusok és operátorok a VHDL-ben Az ieee típusai: std logic Típusok A nagy támogatottság és pontos modellezés érdekében érdemes az IEEE típusokat használni. Az std logic logikai jeleket ír le. Az std logic U inicializálatlan X kényszerített ismeretlen 0 kényszerített 0 1 kényszerített 1 Z nagy impedancia W gyenge ismeretlen L gyenge 0 H gyenge 1 - érdektelen (don t care) Az egybites értékeket aposztrófok közt adjuk meg VHDL-ben. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 12 / 62

Típusok és operátorok a VHDL-ben Típusok Az ieee típusai: std logic vector Az std logic vector több-bites értékek tárolására jó. Használata: signal vec_a : std_logic_vector (0 to 3); -- MSB : 0- s bit signal vec_b : std_logic_vector (3 downto 0); -- MSB : 3- as bit... vec_b (2) <= 1 ; A Veriloghoz hasonlóan kétféleképpen lehet megadni vektort (tömböt). Mindkét példában egy négybites vektort hozunk létre, de az elsőben az MSB a 0 indexű elem lesz, az LSB a 3 indexű, a másodikban az MSB a 3 indexű elem lesz, az LSB a 0 indexű. A második megoldást javasolt használni általában. Elemek elérése: a () operátorral. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 13 / 62

Típusok és operátorok a VHDL-ben Típusok Felhasználói típusok I. Intervallumok A felhasználó is létrehozhat saját típusokat a type kulcsszó segítségével: type { azonosito } is { tipusleiras }; Például egész számok intervallumai: type small_int is range 0 to 1024; type word_length is range 31 downto 0; subtype data_word is word_length range 7 downto 0; A subtype egy típus részhalmaza, amely kompatibilis vele (értékadásokban vegyesen szerepelhet egy típus és altípusai, de különböző típusok nem). Készíthető a beépített típusokhoz is altípus: subtype int_small is integer range -1024 to 1024; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 14 / 62

Típusok és operátorok a VHDL-ben Típusok Felhasználói típusok II. Fizikai típusok Létrehozhatóak fizikai típusok reprezentációi, amelyek mértékegységekkel együtt adhatóak meg ilyen a std.standard time típus is): type conductance is range 0 to 2e -9 units mho ; mmho = 1e -3 mho ; umho = 1e -6 mho ; nmho = 1e -9 mho ; pmho = 1e -12 mho ; end units conductance ; Deklaráció a fenti típussal: constant LINE_COND : conductance := 125 umho ; a constant kulcsszó konstansok létrehozására szolgál. A fizikai típusokat a szintézerek nem támogatják. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 15 / 62

Típusok és operátorok a VHDL-ben Típusok Felhasználói típusok III. Felsorolt típus Más programnyelvekhez hasonlóan VHDL-ben is létezik a felsorolt típus: type mnemonics is ( load, store, add, sub, div, mult ); type three_state is ( 0, 1, Z );... signal sig_1 : three_state := Z ; Inicializálatlan felsorolt típusú változók a felsorolás első értékét kapják kezdőértékként. A korábban megismert std logic is egy felsorolt típus. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 16 / 62

Típusok és operátorok a VHDL-ben Típusok Felhasználói típusok IV. Tömbök I. Tömböket (array) a következőképpen lehet létrehozni: type word_type is array (15 downto 0) of std_logic ; type one_byte is array (7 downto 0) of integer ;... signal data_addr : word_type ; signal mem_addr : word_type := B" 1101100111011001 "; az inicializációnál látható, hogy több-bites értékeket idézőjelek közt ("") adhatunk meg jelölve a számrendszert, ami lehet: B, O, D, X. A számrendszerek közül a bináris az alapértelmezett, így a "1011" karaktersorozatot a fordító bináris számként értelmezi. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 17 / 62

Típusok és operátorok a VHDL-ben Típusok Felhasználói típusok V. Tömbök II. Tömbtípus definiálásakor nem muszáj megadni a méretet: type vector_int is array( integer range < >) of integer ; Ilyenkor a jelek létrehozásakor kell megadni a méretet: signal my_vector : vector_int (2 downto -3) := (2, 4, 12, 6, 2); A fenti példa egyben egy tömb inicializálást is mutat. Tömbök értékadásakor létezik egy egyszerűsítő leírás: signal bvec : bit_vector (3 downto 0);... bvec <= (1= > 1, others = > 0 ); -- bvec : ( 0, 0, 1, 0 ) az others önmagában az összes bitnek a megadott értéket adja. Ilyen tömb-típus a std logic vector is. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 18 / 62

Típusok és operátorok a VHDL-ben Típusok Felhasználói típusok VI. Rekordok A VHDL nyelv támogatja rekordok, másnéven strukúrák létrehozását is: type module_parameters is record rise_time : time ; fall_time : time ; size : integer range 0 to 200; data : std_logic_vector (15 downto 0); end record; signal a, b: module_parameters ;... a. rise_time <= 5 ns; b <= a; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 19 / 62

Attribútumok I. Típusok és operátorok a VHDL-ben Attribútumok A VHDL sokféle attribútumok ismer, amelyek információt szolgáltatnak egy adott jelről/értékről. Az attribútumok megadása: {jelnév} {attribútum}. Jelattribútumok I. signal name event signal name active signal name transaction signal name last event signal name last active igaz, ha a jel esemény részese volt igaz, ha értékadás történt értéke egy bit, ami értéket vált, ha a jelen tranzakció történik legutóbbi esemény óta eltelt idő legutóbbi tranzakció óta eltelt idő Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 20 / 62

Attribútumok II. Típusok és operátorok a VHDL-ben Attribútumok Jelattribútumok II. signal name last value signal name delayed(t) a jel előző értéke T -vel késleltett másolata a jelnek signal name stable(t) igaz, ha T ideje nem volt változás signal name quiet(t) igaz, ha T ideje nem volt tranzakció Például egy jel felfutó élére a következőképp írhatunk ki vizsgálatot: if ( clock event and clock = 1 ) then... Ugyanez megoldható az ieee könyvtár std logic 1164 csomagjában található rising edge függvény segítségével is: if ( rising_edge ( clock )) then... Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 21 / 62

Attribútumok III. Típusok és operátorok a VHDL-ben Attribútumok Skalár attribútumok scalar type left az első vagy legbaloldalabbi eleme a típusnak scalar type right az utolsó vagy legjobboldalabbi eleme a típusnak scalar type low az intervallum legkisebb eleme scalar type high az intervallum legnagyobb eleme scalar type ascending igaz, ha ez egy növekvő intervallum scalar type value(s) az s által repezentált elem type my_index is range 3 to 15; my_index value (5) -- returns : "5" conductance right -- returns : 1 e3 three_state left -- returns : 0 Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 22 / 62

Attribútumok IV. Típusok és operátorok a VHDL-ben Attribútumok Tömbi attribútumok array left(n) array right(n) array high(n) array low(n) array length(n) array range(n) array reverse range(n) array ascending(n) legbaloldalabbi elem indexe legjobboldalabbi elem indexe felső határ alsó határ az elemek száma intervallum fordított intervallum igaz, ha növekvő intervallum A (N) a dimenziót adja meg, egydimenziós tömböknél elhagyható. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 23 / 62

Típusok és operátorok a VHDL-ben A VHDL operátorai A VHDL operátorai Logikai operátorok not and or nand nor xor xnor Relációs operátorok = /= (nem-egyenlő) < <= > >= Eltoló operátorok sll srl (0-t tol be), sla sra (szélső bitet másol), rol ror Összeadó/kivonó operátorok + - & (összefűző operátor) Előjel operátorok + - Szorzás/osztás * / mod rem (maradék) Egyéb operátorok abs ** (hatványozás) Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 24 / 62

A VHDL nyelv vezérlési szerkezetei A VHDL nyelv vezérlési szerkezetei Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 25 / 62

A VHDL nyelv vezérlési szerkezetei A jelekről részletesebben A jelek késleltetése I. Láttuk, hogy a jelek értékadásai párhuzamosan, azonnal megtörténnek. Egy áramkör viselkedésének az elemzése szempontjából fontos, hogy tudjuk modellezni a késleltetéseket. Egy jel késleltetésének a megadása: output <= in1 and in2 after 5 ns; Ez az ún. tehetetlenségi (inertial) késleltetés, ami azt jelenti, hogy a megadott késleltetésnél nem rövidebb időtartamú jelváltások a késleltetési idővel eltolva továbbítódnak, az annál rövidebbek elnyelődnek. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 26 / 62

A VHDL nyelv vezérlési szerkezetei A jelekről részletesebben A jelek késleltetése II. A logikai kapuk késleltetései tipikusan tehetetlenségi jellegű. Külön meg lehet határozni, hogy mi legyen az az időtartam, amit egy kapu még elnyel (reject), illetve mekkora késleltetést iktasson be a jelútba: output <= reject 4 ns inertial in1 and in2 after 10 ns; Ekkor a kapu a 4 ns-nál nem hosszabb jeleket elnyeli és minden változás 10 ns késéssel történik meg. Az inertial az alapértelmezett késleltetés, nem kell kíırni, csak reject esetén. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 27 / 62

A VHDL nyelv vezérlési szerkezetei A jelekről részletesebben A jelek késleltetése III. A vezetékekre az a jellemző, hogy minden jelet továbbítanak egy adott késleltetéssel. Ezt a VHDL-ben szálĺıtási (transport) késleltetésnek hívják: output <= transport in1 and in2 after 14 ns; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 28 / 62

A VHDL nyelv vezérlési szerkezetei A jelekről részletesebben A jelek késleltetése IV. Összefoglalás b1 <= inertial a after 10 ns; b2 <= transport a after 10 ns; b3 <= reject 4 ns inertial a after 10 ns; Valójában, ha nincs késleltetés megadva, a szimulátor akkor is feltételez egy infinitezimálisan kicsi, ún. késleltetést. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 29 / 62

A VHDL nyelv vezérlési szerkezetei Jelek feltételes értékadása I. Jelek feltételes értékadása Jelek esetén létezik feltételes értékadás, amely lényegében a más nyelvekből (C, Verilog) ismert?: operátor megvalósítása VHDL-ben: architecture tri_inv_arch of tri_inv is begin output <= 1 when input = 0 and enable = 1 else 0 when input = 1 and enable = 1 else Z ; end architecture tri_inv_arch ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 30 / 62

A VHDL nyelv vezérlési szerkezetei Jelek feltételes értékadása II. Jelek feltételes értékadása Amennyiben az összes feltétel egy adott jel értékeihez van kötve, akkor létezik egy egyszerűbb írásmód (amely hasonló a case szerkezethez ld. később): entity multiplexer is port (a, b, c, d: in std_logic ; sel : in std_logic_vector (1 downto 0); q: out std_logic ); end entity multiplexer ; architecture multi_select of multiplexer is begin with sel select q <= a when "00", b when "01", c when "10", d when "11"; end architecture multi_select ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 31 / 62

A VHDL nyelv vezérlési szerkezetei Jelek feltételes értékadása III. Jelek feltételes értékadása Arra is lehetőség van, hogy egynél több értéket felsoroljunk az ágakban, illetve, hogy megadjunk egy ágat az összes fel nem sorolt esetre:... target <= value1 when " 000 ", value2 when " 001 " " 011 " " 101 ", value3 when others;... Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 32 / 62

A VHDL nyelv vezérlési szerkezetei A folyamat process I. A folyamat process Mivel egy hardverben a műveletek párhuzamosan történnek alapvetően, a leírás is az. Azonban az algoritmusaink szekvenciálisak illetve tartalmaznak szekvenciális utasítás-sorozatokat. Ezek modellezésére szolgál a folyamat (process). A process magjában lévő utasítások a megadott sorrendben kerülnek végrehajtásra. Egy process folyamatosan, ismétlődve fut. Lehet érzékenységi listája, amely esetben csak akkor fut le, ha az ott szereplő jelek valamelyikén változás történt. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 33 / 62

A VHDL nyelv vezérlési szerkezetei A folyamat process II. A folyamat process A folyamaton belül deklarálhatunk változókat, amelyek a jelekkel ellentétben azonnal megkapják értékadáskor az új értéket, értéküket megőrzik a folyamat futásai között. A folyamaton belül más programnyelvekéihez hasonló vezérlési utasításokat használhatunk: értékadás jeleknek és változóknak, feltételes elágazás (if), case utasítás, ciklus (loop), várakoztató utasítás (wait), stb. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 34 / 62

A VHDL nyelv vezérlési szerkezetei A folyamat process III. A folyamat process Például egy pozitív élre érzékeny, aszinkron törléssel rendelkező D flipflopot az alábbi módon modellezheztünk: entity d_flipflop is port ( clk, clear, d : in std_logic ; q : out std_logic ); end entity d_flipflop ; architecture behavioral of d_flipflop is begin process ( clk, clear ) is begin if ( clear = 1 ) then Q <= 0 ; else if ( clk event and clk = 1 ) then Q <= D; end if; end process; end architecture behavioral ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 35 / 62

A VHDL nyelv vezérlési szerkezetei A folyamat process IV. A folyamat process A változók használatát egy egyszerű számlálón mutatjuk be: entity cnt is port ( clk, rst : in std_logic ; q : out std_logic_vector (3 downto 0)); end entity cnt ; architecture behavioral of cnt is begin process ( clk ) is variable count : std_logic_vector (3 downto 0); begin if ( clk = 1 ) then if ( rst = 1 ) then count := B" 0000 "; else count := count + B" 001 "; end if; end if; q <= count ; end process; end architecture behavioral ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 36 / 62

A VHDL nyelv vezérlési szerkezetei A folyamat process V. A folyamat process A jelek és változók viselkedése közti különbséget nézzük meg egy példán keresztül: signal a1, a2: integer ;... process begin wait for 10 ns; a1 <= a1 +1; a2 <= a1 +1; end process; process variable a3, a4: integer ; begin wait for 10 ns; a3 := a3 +1; a4 := a3 +1; end process; Az értékek alakulása időben Idő a1 a2 a3 a4 0 0 0 0 0 10 0 0 1 2 10 + 1 1 1 2 20 1 1 2 3 20 + 2 2 2 3 30 2 2 3 4 30 + 3 3 3 4 Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 37 / 62

Az if szerkezet A VHDL nyelv vezérlési szerkezetei Feltételes elágazások Egy négybites multiplexer: entity MUX_4_1a is port ( S1, S0, A, B, C, D: in std_logic ; Z: out std_logic ); end entity MUX_4_1a ; architecture behav_mux41a of MUX_4_1a is begin process ( S1, S0, A, B, C, D) begin if (( not S1 and not S0 )= 1 ) then Z <= A; elsif (( not S1 and S0) = 1 ) then Z <=B; elsif (( S1 and not S0) = 1 ) then Z <=C; else Z <=D; end if; end process; end architecture behav_mux41a ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 38 / 62

Az case szerkezet A VHDL nyelv vezérlési szerkezetei Feltételes elágazások Ugyanaz a négybites multiplexer: entity MUX_4_1 is port ( SEL : in std_logic_vector (2 downto 1); A, B, C, D: in std_logic ; Z: out std_logic ); end entity MUX_4_1 ; architecture behav_mux41 of MUX_4_1 is begin process ( SEL, A, B, C, D) begin case SEL is when " 00" => Z <= A; when " 01" => Z <= B; when " 10" => Z <= C; when " 11" => Z <= D; when others => Z <= X ; end case; end process; end architecture behav_mux41 ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 39 / 62

A while ciklus A VHDL nyelv vezérlési szerkezetei Ciklusok Példa a while ciklusra: p1: process ( signal_a ) is -- cimke elhagyhat ó variable index : integer := 0; begin while_loop : -- a cimke elhagyhat ó while index < 8 loop ray_out ( index ) <= ray_in ( index ); index := index +1; end loop while_loop ; end process p1; A processek és a vezérlési szerkezetek megcímkézhetőek, és ezek a nevek feltűntethetőek az end utasítások után. Ez az olvashatóságot javíthatja. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 40 / 62

A for ciklus A VHDL nyelv vezérlési szerkezetei Ciklusok Példa a for ciklusra: process( signal_a ) begin label_1 : for index in 0 to 7 -- index impliciten deklar á lva loop ray_out ( index ) <= ray_in ( index ); end loop label_1 ; end process; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 41 / 62

A VHDL nyelv vezérlési szerkezetei Várakoztató utasítások I. Várakoztató utasítások A wait utasításnak több alakja is létezik. A szintézerek általában nem támogatják. Az until addig vár, amíg egy feltétel igaz nem lesz (szintézerek ezt támogatják): wait until clk = 1 ; wait until signal event and signal = value ; wait until not signal stable and signal = value ; Egy adott ideig várni a for segítségével lehet (tesztelésnél hasznos): wait for 2 ns; Az on hatására addig vár, amíg a megadott jel(ek)en változás nem történik: wait on sig1, sig2 ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 42 / 62

A VHDL nyelv vezérlési szerkezetei Várakoztató utasítások II. Várakoztató utasítások A wait önmagában örökké vár. Ennek hatására a szimuláció leáll, ha más változás nincsen: process begin in1 <= 0 ; in2 <= 0 ; wait for 5 ns; in1 <= 1 ; -- " wait forever " -- le á ll a szimul á ci ó wait; end process; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 43 / 62

A VHDL nyelv vezérlési szerkezetei Alprogramok Függvények I. A leírások áttekinthetőbbé tétele érdekében bizonyos algoritmus részletek alprogramokba (függvények, eljárások) emelhetőek ki. A függvények jellemzői: egy visszatérési értékük van, minden paraméterük bemeneti paraméter, az utasításaik sorrendben hajtódnak végre, minden utasítás és szerkezet használható bennük, ami a folyamatokban is. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 44 / 62

Függvények II. A VHDL nyelv vezérlési szerkezetei Alprogramok type log8 is array (0 to 7) of std_logic ;... entity convert is port ( i1: in log8 ; o1: out integer ); end entity convert ; architecture convert_fun of convert is function vector_to_int ( s: log8 ) return integer is variable result : integer := 0; begin for i in 0 to 7 loop result := result * 2; if s( i) = 1 then result := result + 1; end if; end loop; return result ; end function vector_to_int ; begin o1 <= vector_to_int ( i1 ); end architecture convert_fun ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 45 / 62

A VHDL nyelv vezérlési szerkezetei Alprogramok Eljárások I. Az eljárások hasonlóak a függvényekhez, azonban az eljárásoknak nincs dedikált visszatérési értékük, megadható a paramétereik iránya: in, out, inout. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 46 / 62

Eljárások II. A VHDL nyelv vezérlési szerkezetei Alprogramok procedure vector_to_int ( z: in std_logic_vector ; x_flag : out boolean ; q: inout integer ) is begin q := 0; x_flag := false ; for i in z range loop q := q * 2; if z( i) = 1 then q := q + 1; else if z( i) /= 0 then x_flag := true ; -- ha z( i) = Z pl. end if; end loop; end procedure vector_to_int ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 47 / 62

A VHDL nyelv vezérlési szerkezetei Generikus komponensek I. Generikus komponensek Lehetőség van arra, hogy egy komponens bizonyos paramétereit ne tervezéskor, hanem példányosításkor határozzuk meg. Ezt hívjuk általános, vagy generikus tervezésnek (pl. Verilogban a parameter, C++ template-jei). A generikus paramétert definiálni kell az entity blokkban: entity piso is -- parallel in serial out generic ( width : integer := 7); -- default : 7 port ( clk : in std_logic ; load : in std_logic ; in1 : in std_logic_vector ( width downto 0); out1 : out std_logic ); end entity piso ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 48 / 62

A VHDL nyelv vezérlési szerkezetei Generikus komponensek II. Generikus komponensek A modulban úgy használhatjuk a generikus változót, mint egy konstanst: architecture Behavioral of piso is signal temp : std_logic_vector ( width downto 0) := ( others => 0 ); -- initialize to zero begin process( clk ) begin if ( load = 0 ) then -- load the register temp <= in1 ; elsif ( clk event and clk = 1 ) then out1 <= temp ( width ); temp ( width downto 1) <= temp ( width -1 downto 0); end if; end process; end architecture Behavioral ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 49 / 62

A VHDL nyelv vezérlési szerkezetei Generikus komponensek Generikus komponensek III. Példányosításkor a komponens megadásánál is szerepel a generic szerkezet (ugyanúgy, mint az entity blokkban. A tényleges példány létrehozásakor a port map rész előtt szerepel egy generic map szerkezet, ahol megadhatjuk a paraméter értékét (amennyiben nem az alapértelmezettet kívánjuk használni): piso1 : piso generic map ( width => 7) port map(clk, load1,in1,o1 ); piso2 : piso generic map ( width => 3) port map(clk, load2,in2,o2 ); Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 50 / 62

Hieararchikus tervezés Hieararchikus tervezés Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 51 / 62

Komponensek I. Hieararchikus tervezés Példányosítás A hierarchikus építkezés azt jelenti, hogy az egyedek tartalmazhatják más egyedek példányait. Az egyedek példányosítása előtt komponensként definiálnunk kell őket. Legegyszerűbb esetben a komponensdefiníció megegyezik az entity leírással. Amennyiben a neve is ugyanaz, akkor mást nem kell tenni a kapcsolat létrehozásához. entity nand_gate is port (a, b : in bit ; q : out bit ); end entity nand_gate ; architecture testbench of nand_test is component nand_gate is port (a, b : in bit ; q : out bit ); end component nand_gate ;... Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 52 / 62

Komponensek II. Hieararchikus tervezés Példányosítás A példányosításkor a létrejövő egyedet hozzá kell kapcsolni a környezetéhez: -- Itt fontos a sorrend : nand_gate_dut : nand_gate port map( in1, in2, output ); -- Itt a portokhoz egyenk é nt rendelj ük a jeleket : nand_gate_dut : nand_gate port map( a => in1, b => in2, q => output ); Sokportos egyedek esetén érdemes a második megoldást alkalmazni, mert olyankor nagyon nehéz a sorrendet követni nehezen érthető kódot eredményez az első alak. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 53 / 62

Komponensek III. Hieararchikus tervezés Példányosítás Amennyiben egy egyednek többféle architektúrája van, akkor példányosításkor meg kell adnunk azt is, hogy melyik legyen felhasználva. Alapértelmezés szerint a legutolsó kerül felhasználásra. architecture testbench of nand_gate_tb is component nand_gate_comp port (a, b : in bit ; q : out bit ); end component nand_gate_comp ; for nand_gate_dut : nand_gate_comp use entity work. nand_gate ( arch_1 ); signal in1, in2, output : bit ; begin nand_gate_dut : nand_gate_comp port map( a => in1, b => in2, q => output );... A work az alapértelmezett könyvtárnév, ahová az aktuális projekt egyedei kerülnek. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 54 / 62

Komponensek IV. Hieararchikus tervezés Példányosítás Egy egyszerűbb módja az példányosításnak az ún. közvetlen beültetés. Ilyenkor a példányosítás kizárólag a begin után történik: architecture testbench of nand_gate_tb is signal in1, in2, output : bit ; begin nand_gate_dut : entity work. nand_gate ( arch_1 ) port map( a => in1, b => in2, q => output );... Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 55 / 62

Csomagok I. Hieararchikus tervezés Csomagok A csomagok célja típusok, konstansok, alprogramok megosztása tervezési egységek között. Egy csomagot két részben adunk meg: 1 csomag deklaráció: az egyes elemek deklarációja, vagyis típussal adott névfelsorolás: alprogram deklarációja, típus/altípus deklaráció, konstansok deklarációja, komponensek deklarációja, use kifejezések, stb. 2 csomag definíció: a csomag elemeinek definíciója, vagyis kifejtése: alprogramok definíciója, konstansok definíciója, stb. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 56 / 62

Hieararchikus tervezés Csomagok II. deklarációs rész Csomagok package cluster_package is type nineval is ( Z0, Z1, ZX, R0, R1, RX, F0, F1, FX ); type t_cluster is array (0 to 15) of nineval ; type t_clus_vec is array( natural range <>) of t_cluster ; function resolve_cluster ( s: t_clus_vec ) return t_cluster ; subtype t_wclus is resolve_cluster t_cluster ; constant undriven : t_wclus ; end package cluster_package ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 57 / 62

Hieararchikus tervezés Csomagok II. definíciós rész Csomagok package body cluster_package is constant undriven : t_wclus := ( ZX, ZX, ZX, ZX, ZX, ZX, ZX, ZX, ZX, ZX, ZX, ZX, ZX, ZX, ZX, ZX ); function resolve_cluster ( s: t_clus_vec ) return t_cluster is variable result : t_cluster ; variable drive_count : integer ; begin if s length = 0 then return undriven ; end if; for i in s range loop if s( i) /= undriven then drive_count := drive_count + 1; if drive_count = 1 then result := s( i); else result := undriven ; end if; end if; end loop; return result ; end function resolve_cluster ; end package body cluster_package ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 58 / 62

Hardver generálás I. Hieararchikus tervezés Hardver generálás Ahogy Verilogban is, a VHDL is lehetőséget ad hardver generálásra. Ez azt jelenti, hogy egy ciklusban tudunk hardvert példányosítani úgy, hogy az összeköttetéseket a ciklus futó változói határozzák meg. Így egyszerűbb kapukból bonyolult szerkezetet lehet képezni anélkül, hogy mechanikusan le kéne írni az összes elem bekötését. Tipikusan arra használják, hogy egybites elemeket sokbites adatok lekezélésére képes architektúrává építsék össze. Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 59 / 62

Hardver generálás II. Hieararchikus tervezés Hardver generálás architecture test_generate of test_entity is signal s1, s2, s3: bit_vector (7 downto 0); begin G1: for N in 7 downto 0 generate and_array : and_gate generic map (2 ns, 3 ns) port map(s1(n), s2(n), s3(n )); end generate G1; end architecture test_generate ; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 60 / 62

Hardver generálás III. Hieararchikus tervezés Hardver generálás Lehetőség van feltételekhez kötni a generálást. Erre az if szerkezethasználható. Az else és elsif kulcsszavak generáláskor nem alkalmazhatóak. G1: for N in 8 downto 0 generate G2: if ( N < 7) generate or1 : or_gate generic map (3 ns, 3 ns) port map (s1(n), s2(n), s3(n )); end generate G2;... end generate G1; Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 61 / 62

Irodalom Irodalom Irodalom Peter J. Ashenden, Jim Lewis: The designer s guide to VHDL, Morgan Kaufmann, 2008 Peter J. Ashenden: Digital Design An embedded system approach using VHDL, Morgan Kaufmann, 2008 Hosszú Gábor, Keresztes Péter: VHDL-alapú rendszertervezés, Szak kiadó, 2012 Douglas L. Perry: VHDL Programming by example, McGraw-Hill, 2002 Jan Van der Spiegel: VHDL Tutorial, University of Pennsylvania Horváth Péter, Nagy Gergely (BME EET) VHDL 2013. október 3. 62 / 62