´ Aramk¨ ortervez´ es az absztrakci´ ot´ ol a realiz´ aci´ oig
BMEVIEEM284
Budapesti M˝ uszaki ´ es Gazdas´ agtudom´ anyi Egyetem
VHDL Horv´ath P´eter, Nagy Gergely Elektronikus Eszk¨ oz¨ ok Tansz´ eke (BME)
2013. okt´ ober 3.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
1 / 62
Bevezet˝ o
Bevezet˝o
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
2 / 62
Bevezet˝ o
A VHDL
A VHDL A VHDL egy hardverle´ır´ o nyelv – neve egy r¨ ov´ıt´es: VHSIC Hardware Description Language, amelyben szint´en van egy r¨ovid´ıt´es: VHSIC – Very-High-Speed Integrated Circuit. A nyelvet az amerikai v´edelmi miniszt´erium (Department of Defense – DoD) k´esz´ıttette az 1980-as ´evekben digit´ alis ASIC ´ aramk¨ or¨ ok dokument´ al´ as´ ara. Hamar nagy ig´eny lett a dokument´aci´ o szimul´al´as´ara, majd k´es˝obb a logikai szint´ezisre. A megb´ız´as 1983-ban t¨ ort´ent, az els˝ o szabv´any az IEEE 1076-1987 volt, majd ezt k¨ovette az IEEE-1164 ´es 1993-ban az IEEE-1076 u ´j verzi´oja. A nyelvnek l´etezik anal´ og ´ es anal´ og-digit´ alis rendszerek le´ır´ as´ at lehet˝ov´e tev˝o verzi´oja: a VHDL-AMS. Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
3 / 62
Bevezet˝ o
A VHDL
A VHDL nyelv A VHDL alapj´aul az Ada nyelv szolg´ alt, amit szint´en a DoD rendelt meg. Az Ada egy er˝ osen t´ıpusos nyelv, nagy megb´ızhat´os´ag´ u rendszerek fejleszt´es´ere hozt´ak l´etre. A VHDL is ezt a hagyom´anyt k¨ oveti. Szintaktik´aj´ara jellemz˝ o, hogy kevesebb szimb´ olumot ´es t¨obb, eg´esz szavas kulcssz´ot haszn´al, mint m´as nyelvek. El˝onye a k¨ onny˝ u olvashat´ os´ ag ´es az ´ attekinthet˝ o, szab´ alyos szerkezet, h´atr´anya a sok foglalt sz´ o. A VHDL nem k¨ ul¨ onb¨ ozteti meg a kis- ´ es nagybet˝ uket! A nyelv folyamatos fejleszt´ es alatt ´ all a mai napig: verifik´aci´ o t´amogat´asa, OOP. Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
4 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
T´ıpusok ´es oper´atorok a VHDL-ben
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
5 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
Egyed deklar´ aci´ o – entity
Egyed deklar´aci´o – entity A VHDL-ben, m´as HDL-ekhez hasonl´ oan, a tervez´ es alapja a logikai egys´ eg – egyed. Az egyedek megad´asa k´et r´eszletben t¨ ort´enik: 1 entity blokk: az egyed interf´ esze (deklar´aci´ o) a portjainak az ir´ anya ´es t´ıpusa, 2
architecture blokk: az egyed le´ır´asa (defin´ıci´o) viselked´esi, struktur´ alis le´ır´ as. entity reg4 is port ( d0 , d1 , d2 , d3 , en , clk : in bit ; q0 , q1 , q2 , q3 : out bit ); end entity reg4 ;
A p´elda egy n´egybites flipflopot mutat be. Az egyes portok egybites logikai t´ıpus´ uak. Az end ut´an az entity reg4 opcion´alis. Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
6 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
Egyed defin´ıci´ o – architecture
Egyed defin´ıci´o – architecture Az egyedek defin´ıci´ oja architecture blokk(ok)ban t¨ort´enik. Egy egyedhez tartozhat t¨ obb defin´ıci´ o is: ez lehets˝os´eget ad t¨obb absztrakci´os szint p´arhuzamos kipr´ ob´al´as´ara: 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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
7 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
Jelek l´ etrehoz´ asa, ´ ert´ ekad´ as jeleknek
Jelek l´etrehoz´asa, ´ert´ekad´as jeleknek Egy egyed portjai jelek (signal). Az egyedeken bel¨ ul defini´ alhatunk tov´ abbi jeleket is. A jeleket a deklar´ aci´ os blokkban hozzuk l´etre, ami a begin kulcssz´o el˝ott tal´alhat´o. architecture arch_2 of nand_gate is signal internal : bit ; -- lok ´a lis jel begin internal <= a and b ; q <= not internal ; end architecture arch_2 ;
Az ´ ert´ ekad´ as a <= oper´ atorral t¨ ort´enik jelek eset´eben. A jelek ´ ert´ ekad´ asa p´ arhuzamosan ker¨ ul v´egrehajt´asra – ez´ert lesz a fenti le´ır´asb´ol egy NAND kapu. A -- ut´ani sz¨oveg egy sorban: megjegyz´ es. Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
8 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
T´ıpusok
T´ıpusok I.
A jeleink t´ıpusa eddig bit volt, ami 0 ´es 1 ´ert´ekeket tud felvenni. Hardver-modellez´eshez enn´el t¨ obbf´ele ´ert´ek sz¨ uks´eges. nagy impedancia, ismeretlen/´erdektelen, stb.
Ilyen t´ıpust l´ etre lehet hozni a nyelv saj´ at eszk¨ ozeivel (ld. k´es˝obb), de a szabv´ anyos´ıt´ ok elk´ esz´ıtettek a saj´ at verzi´ oikat. ´ Erdemes ezeket haszn´alni, hiszen ezek sz´ eles k¨ orben elterjedtek ´ es t´ amogatottak ´es ezeket ismerik a szint´ ezerek is.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
9 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
T´ıpusok
T´ıpusok II. A nagy VHDL projektek hierarchikus fel´ ep´ıt´ es˝ uek, ´ıgy a t´ıpusdefin´ıci´ok is ebben a hierchi´aban jelentkeznek: K¨ onyvt´ ar (library): legmagasabb szint˝ u egys´eg, Csomag (package): a k¨ onyvt´ar alegys´ege.
Pl. az IEEE-1164 szabv´anyban bevezetett t´ıpusok az ieee k¨ onyvt´ ar
std logic 1164 csomagj´aban tal´alhat´oak.
A k´odban jelezni kell, ha egy k¨ onyvt´ ar egyes csomagjait haszn´ aljuk. Pl. ha a teljes std logic 1164 csomagot haszn´aljuk: library ieee ; use ieee . st d_logic_ 1164 . all ;
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
10 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
T´ıpusok
Az std.standard t´ıpusai A legalapvet˝obb t´ıpusok az std.standard csomagban vannak defini´alva – ezt a legt¨ obb k¨ ornyezetben automatikusan beszerkeszti a ford´ıt´o. Az itt tal´alhat´o t´ıpusok: Az std.standard t´ıpusai T´ıpus bit bit vector character integer natural real time
Le´ır´ as 0 vagy 1 ´ert´ek˝ u bit t¨ obb-bites ´ert´ek karakter eg´esz sz´ am (m´eret: implement´ aci´ o-f¨ ugg˝ o) pozit´ıv eg´esz sz´ am val´ os sz´ am (a szint´ezerek ´ altal´ aban nem t´ amogatj´ ak) id˝ o (megadhat´ o: sec, ms, us, ns, ps, fs egys´egekben)
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
11 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
T´ıpusok
Az ieee t´ıpusai: std logic A nagy t´amogatotts´ag ´es pontos modellez´es ´erdek´eben ´erdemes az IEEE t´ıpusokat haszn´alni. Az std logic logikai jeleket ´ır le. Az std logic ’U’ ’X’ ’0’ ’1’ ’Z’ ’W’ ’L’ ’H’ ’-’
inicializ´ alatlan k´enyszer´ıtett ismeretlen k´enyszer´ıtett 0 k´enyszer´ıtett 1 nagy impedancia gyenge ismeretlen gyenge 0 gyenge 1 ´erdektelen (don’t care)
Az egybites ´ert´ekeket aposztr´ ofok k¨ ozt adjuk meg VHDL-ben. Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
12 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
T´ıpusok
Az ieee t´ıpusai: std logic vector Az std logic vector t¨ obb-bites ´ ert´ ekek t´ arol´ as´ ara j´o. Haszn´alata: signal vec_a : s t d _ l o g i c _v e c t o r (0 to 3); -- MSB : 0 - s bit signal vec_b : s t d _ l o g i c _v e c t o r (3 downto 0); -- MSB : 3 - as bit ... vec_b (2) <= ’1 ’;
A Veriloghoz hasonl´oan k´ etf´ elek´ eppen lehet megadni vektort (t¨omb¨ot). Mindk´et p´eld´aban egy n´egybites vektort hozunk l´etre, de az els˝ oben az MSB a 0 index˝ u elem lesz, az LSB a 3 index˝ u, a m´asodikban az MSB a 3 index˝ u elem lesz, az LSB a 0 index˝ u.
A m´asodik megold´ast javasolt haszn´alni ´altal´aban. Elemek el´ er´ ese: a () oper´atorral. Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
13 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
T´ıpusok
Felhaszn´al´oi t´ıpusok I. – Intervallumok A felhaszn´al´o is l´etrehozhat saj´ at t´ıpusokat a type kulcssz´o seg´ıts´eg´evel: type { azonosito } is { tipusleiras };
P´eld´aul eg´esz sz´amok 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´ eszhalmaza, amely kompatibilis vele (´ert´ekad´asokban vegyesen szerepelhet egy t´ıpus ´es alt´ıpusai, de k¨ ul¨onb¨oz˝o t´ıpusok nem). K´esz´ıthet˝o a be´ep´ıtett t´ıpusokhoz is alt´ıpus: subtype int_small is integer range -1024 to 1024; Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
14 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
T´ıpusok
Felhaszn´al´oi t´ıpusok II. – Fizikai t´ıpusok L´etrehozhat´oak fizikai t´ıpusok reprezent´ aci´ oi, amelyek m´ ert´ ekegys´ egekkel egy¨ utt adhat´ oak meg – ilyen a std.standard time t´ıpus is): type conductance is range 0 to 2e -9 units mho ; mmho umho nmho pmho
= = = =
1e -3 mho ; 1e -6 mho ; 1e -9 mho ; 1e -12 mho ; end units conductance ;
Deklar´aci´o a fenti t´ıpussal: constant LINE_COND : conductance := 125 umho ;
a constant kulcssz´o konstansok l´ etrehoz´ as´ ara szolg´al. A fizikai t´ıpusokat a szint´ezerek nem t´amogatj´ak. Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
15 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
T´ıpusok
Felhaszn´al´oi t´ıpusok III. – Felsorolt t´ıpus
M´as programnyelvekhez hasonl´ oan VHDL-ben is l´etezik 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´alatlan felsorolt t´ıpus´ u v´altoz´ ok a felsorol´as els˝o ´ert´ek´et kapj´ak kezd˝o´ert´ekk´ent. A kor´abban megismert std logic is egy felsorolt t´ıpus.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
16 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
T´ıpusok
Felhaszn´al´oi t´ıpusok IV. – T¨omb¨ok I.
T¨ omb¨ oket (array) a k¨ ovetkez˝ ok´eppen lehet l´etrehozni: 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 " 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 " ;
az inicializ´aci´on´al l´athat´ o, hogy t¨ obb-bites ´ ert´ ekeket id´ ez˝ ojelek k¨ ozt ("") adhatunk meg jel¨ olve a sz´ amrendszert, ami lehet: B, O, D, X. A sz´amrendszerek k¨oz¨ ul a bin´ aris az alap´ ertelmezett, ´ıgy a "1011" karaktersorozatot a ford´ıt´ o bin´aris sz´amk´ent ´ertelmezi.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
17 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
T´ıpusok
Felhaszn´al´oi t´ıpusok V. – T¨omb¨ok II. T¨ombt´ıpus defini´al´asakor nem musz´ aj megadni a m´ eretet: type vector_int is array ( integer range < >) of integer ;
Ilyenkor a jelek l´ etrehoz´ asakor kell megadni a m´ eretet: signal my_vector : vector_int (2 downto -3) := (2 , 4 , 12 , 6 , 2);
A fenti p´elda egyben egy t¨ omb inicializ´al´ast is mutat. T¨omb¨ok ´ert´ekad´asakor l´etezik egy egyszer˝ us´ıt˝ o le´ır´as: signal bvec : bit_vector (3 downto 0); ... bvec <= (1= > ’1 ’ , others = > ’0 ’); -- bvec : ( ’0 ’ , ’0 ’ , ’1 ’ , ’0 ’)
az others ¨onmag´aban az ¨ osszes bitnek a megadott ´ert´eket adja. Ilyen t¨omb-t´ıpus a std logic vector is. Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
18 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
T´ıpusok
Felhaszn´al´oi t´ıpusok VI. – Rekordok A VHDL nyelv t´amogatja rekordok, m´ asn´ even struk´ ur´ ak l´etrehoz´as´at is: type m o d u l e _ p a r a m e t e r s is record rise_time fall_time size data end record ;
: : : :
time ; time ; integer range 0 to 200; s t d _ l og i c _ v e c t o r (15 downto 0);
signal a , b : m o d u l e _ p a r a m e t e r s ; ... a . rise_time <= 5 ns ; b <= a ;
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
19 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
Attrib´ utumok
Attrib´utumok I.
A VHDL sokf´ele attrib´ utumok ismer, amelyek inform´aci´ot szolg´altatnak egy adott jelr˝ ol/´ert´ekr˝ ol. Az attrib´ utumok megad´asa: {jeln´ ev}’{attrib´ utum}.
Jelattrib´ utumok I. signal name’event signal name’active signal name’transaction signal name’last event signal name’last active
Horv´ ath P´ eter, Nagy Gergely (BME EET)
igaz, ha a jel esem´eny r´eszese volt igaz, ha ´ert´ekad´ as t¨ ort´ent ´ert´eke egy bit, ami ´ert´eket v´ alt, ha a jelen tranzakci´ o t¨ ort´enik legut´ obbi esem´eny o ´ta eltelt id˝ o legut´ obbi tranzakci´ oo ´ta eltelt id˝ o
VHDL
2013. okt´ ober 3.
20 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
Attrib´ utumok
Attrib´utumok II. Jelattrib´ utumok II. signal name’last value signal name’delayed(T) signal name’stable(T) signal name’quiet(T)
a jel el˝ oz˝ o ´ert´eke T -vel k´esleltett m´ asolata a jelnek igaz, ha T ideje nem volt v´ altoz´ as igaz, ha T ideje nem volt tranzakci´ o
P´eld´aul egy jel felfut´o ´el´ere a k¨ ovetkez˝ ok´epp ´ırhatunk ki vizsg´alatot: if ( clock ’ event and clock = ’1 ’) then ...
Ugyanez megoldhat´o az ieee k¨ onyvt´ar std logic 1164 csomagj´aban tal´alhat´o rising edge f¨ uggv´eny seg´ıts´eg´evel is: if ( rising_edge ( clock )) then ... Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
21 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
Attrib´ utumok
Attrib´utumok III. Skal´ar attrib´ utumok scalar type’left scalar type’right scalar type’low scalar type’high scalar type’ascending scalar type’value(s)
az els˝ o vagy legbaloldalabbi eleme a t´ıpusnak az utols´ o vagy legjobboldalabbi eleme a t´ıpusnak az intervallum legkisebb eleme az intervallum legnagyobb eleme igaz, ha ez egy n¨ ovekv˝ o intervallum az s ´ altal repezent´ alt 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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
22 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
Attrib´ utumok
Attrib´utumok IV.
T¨ ombi attrib´ utumok 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˝ o hat´ ar als´ o hat´ ar az elemek sz´ ama intervallum ford´ıtott intervallum igaz, ha n¨ ovekv˝ o intervallum
A (N) a dimenzi´ot adja meg, egydimenzi´ os t¨ omb¨ okn´el elhagyhat´o.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
23 / 62
T´ıpusok ´ es oper´ atorok a VHDL-ben
A VHDL oper´ atorai
A VHDL oper´atorai Logikai oper´ atorok not and or nand nor xor xnor
Rel´ aci´ os oper´ atorok = /= (nem-egyenl˝ o) < <= > >=
Eltol´ o oper´ atorok sll srl (0-t tol be), sla sra (sz´els˝ o bitet m´asol), rol ror
¨ Osszead´ o/kivon´ o oper´ atorok + - & (¨ osszef˝ uz˝ o oper´ator)
El˝ ojel oper´ atorok + -
Szorz´ as/oszt´ as * / mod rem (marad´ek)
Egy´ eb oper´ atorok abs ** (hatv´anyoz´as) Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
24 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
A VHDL nyelv vez´erl´esi szerkezetei
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
25 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
A jelekr˝ ol r´ eszletesebben
A jelek k´esleltet´ese I.
L´attuk, hogy a jelek ´ert´ekad´asai p´arhuzamosan, azonnal megt¨ort´ennek. Egy ´aramk¨or viselked´es´enek az elemz´ese szempontj´ab´ol fontos, hogy tudjuk modellezni a k´ esleltet´ eseket. Egy jel k´esleltet´es´enek a megad´asa: output <= in1 and in2 after 5 ns ;
Ez az u ´n. tehetetlens´ egi (inertial) k´ esleltet´ es, ami azt jelenti, hogy a megadott k´esleltet´esn´el nem r¨ ovidebb id˝ otartam´ u jelv´alt´asok a k´esleltet´esi id˝ovel eltolva tov´abb´ıt´ odnak, az ann´al r¨ovidebbek elnyel˝odnek.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
26 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
A jelekr˝ ol r´ eszletesebben
A jelek k´esleltet´ese II. A logikai kapuk k´ esleltet´ esei tipikusan tehetetlens´egi jelleg˝ u. K¨ ul¨on meg lehet hat´arozni, hogy mi legyen az az id˝ otartam, amit egy kapu m´ eg elnyel (reject), illetve mekkora k´esleltet´est iktasson be a jel´ utba: output <= reject 4 ns inertial in1 and in2 after 10 ns ;
Ekkor a kapu a 4 ns-n´al nem hosszabb jeleket elnyeli ´es minden v´altoz´as 10 ns k´es´essel t¨ ort´enik meg. Az inertial az alap´ertelmezett k´esleltet´es, nem kell ki´ırni, csak reject eset´en.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
27 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
A jelekr˝ ol r´ eszletesebben
A jelek k´esleltet´ese III.
A vezet´ ekekre az a jellemz˝ o, hogy minden jelet tov´ abb´ıtanak egy adott k´ esleltet´ essel. Ezt a VHDL-ben sz´ all´ıt´ asi (transport) k´ esleltet´ esnek h´ıvj´ak: output <= transport in1 and in2 after 14 ns ;
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
28 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
A jelekr˝ ol r´ eszletesebben
¨ A jelek k´esleltet´ese IV. – Osszefoglal´ as
b1 <= inertial a after 10 ns ; b2 <= transport a after 10 ns ; b3 <= reject 4 ns inertial a after 10 ns ;
Val´ oj´aban, ha nincs k´esleltet´es megadva, a szimul´ator akkor is felt´etelez egy infinitezim´alisan kicsi, u ´n. ∆ k´esleltet´est. Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
29 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Jelek felt´ eteles ´ ert´ ekad´ asa
Jelek felt´eteles ´ert´ekad´asa I.
Jelek eset´en l´etezik felt´ eteles ´ ert´ ekad´ as, amely l´enyeg´eben a m´as nyelvekb˝ol (C, Verilog) ismert ?: oper´ator megval´os´ıt´asa 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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
30 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Jelek felt´ eteles ´ ert´ ekad´ asa
Jelek felt´eteles ´ert´ekad´asa II. Amennyiben az ¨ osszes felt´ etel egy adott jel ´ ert´ ekeihez van k¨ otve, akkor l´etezik egy egyszer˝ ubb ´ır´asm´ od (amely hasonl´o a case szerkezethez – ld. k´es˝ obb): entity multiplexer is port (a , b , c , d : in std_logic ; sel : in s t d _ l o g i c _ v e c t or (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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
31 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Jelek felt´ eteles ´ ert´ ekad´ asa
Jelek felt´eteles ´ert´ekad´asa III.
Arra is lehet˝os´eg van, hogy egyn´ el t¨ obb ´ ert´ eket felsoroljunk az ´ agakban, illetve, hogy megadjunk egy ´ agat az ¨ osszes fel nem sorolt esetre: ... target <= value1 when " 000 " , value2 when " 001 " | " 011 " | " 101 " , value3 when others ; ...
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
32 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
A folyamat – process
A folyamat – process I. Mivel egy hardverben a m˝ uveletek p´arhuzamosan t¨ort´ennek alapvet˝oen, a le´ır´as is az. Azonban az algoritmusaink szekvenci´ alisak illetve tartalmaznak szekvenci´ alis utas´ıt´ as-sorozatokat. Ezek modellez´es´ere szolg´al a folyamat (process). A process magj´aban l´ev˝ o utas´ıt´asok a megadott sorrendben ker¨ ulnek v´ egrehajt´ asra. Egy process folyamatosan, ism´ etl˝ odve fut. Lehet ´ erz´ ekenys´ egi list´ aja, amely esetben csak akkor fut le, ha az ott szerepl˝ o jelek valamelyik´ en v´ altoz´ as t¨ ort´ent.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
33 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
A folyamat – process
A folyamat – process II.
A folyamaton bel¨ ul deklar´alhatunk v´ altoz´ okat, amelyek a jelekkel ellent´etben azonnal megkapj´ ak ´ ert´ ekad´ askor az u ´j ´ ert´ eket, ´ ert´ ek¨ uket meg˝ orzik a folyamat fut´asai k¨ oz¨ ott.
A folyamaton bel¨ ul m´as programnyelvek´eihez hasonl´o vez´ erl´ esi utas´ıt´ asokat haszn´alhatunk: ´ ert´ ekad´ as jeleknek ´ es v´ altoz´ oknak, felt´ eteles el´ agaz´ as (if), case utas´ıt´as, ciklus (loop), v´ arakoztat´ o utas´ıt´ as (wait), stb.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
34 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
A folyamat – process
A folyamat – process III. P´eld´aul egy pozit´ıv ´elre ´erz´ekeny, aszinkron t¨ orl´essel rendelkez˝o D flipflopot az al´abbi m´ odon modellezhezt¨ unk: 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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
35 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
A folyamat – process
A folyamat – process IV. A v´ altoz´ ok haszn´ alat´ at egy egyszer˝ u sz´aml´al´ on mutatjuk be: entity cnt is port ( clk , rst : in std_logic ; q : out s t d _ l o g i c _ v e c t or (3 downto 0)); end entity cnt ; architecture behavioral of cnt is begin process ( clk ) is variable count : s t d _ l o g i c_ v e c t o r (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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
36 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
A folyamat – process
A folyamat – process V. A jelek ´ es v´ altoz´ ok viselked´ ese k¨ ozti k¨ ul¨ onbs´ eget n´ezz¨ uk meg egy p´eld´an kereszt¨ ul: signal a1 , a2 : integer ; ...
process begin wait for 10 ns ;
Az ´ert´ekek alakul´asa id˝oben Id˝ o 0 10 10 + ∆ 20 20 + ∆ 30 30 + ∆
a1 <= a1 +1; a2 <= a1 +1;
end process ; process variable a3 , a4 : integer ; begin wait for 10 ns ; a3 := a3 +1; a4 := a3 +1;
a1 0 0 1 1 2 2 3
a2 0 0 1 1 2 2 3
a3 0 1 1 2 2 3 3
a4 0 2 2 3 3 4 4
end process ; Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
37 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Felt´ eteles el´ agaz´ asok
Az if szerkezet Egy n´egybites 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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
38 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Felt´ eteles el´ agaz´ asok
Az case szerkezet Ugyanaz a n´egybites multiplexer: entity MUX_4_1 is port ( SEL : in s t d _ l o g i c _ v e c to r (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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
39 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Ciklusok
A while ciklus P´elda a while ciklusra: p1 : process ( signal_a ) is -- cimke e l h a g y h a t ´ o variable index : integer := 0;
begin
while_loop : -- a cimke e l h a g y h a t ´ o
while index < 8 loop
ray_out ( index ) <= ray_in ( index ); index := index +1; end loop while_loop ; end process p1 ;
A processek ´ es a vez´ erl´ esi szerkezetek megc´ımk´ ezhet˝ oek, ´ es ezek a nevek felt˝ untethet˝ oek az end utas´ıt´ asok ut´ an. Ez az olvashat´ os´ agot jav´ıthatja.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
40 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Ciklusok
A for ciklus
P´elda a for ciklusra: process ( signal_a ) begin label_1 : for index in 0 to 7 -- index i m p l i c i t e n deklar ´ a lva loop ray_out ( index ) <= ray_in ( index );
end loop label_1 ; end process ;
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
41 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
V´ arakoztat´ o utas´ıt´ asok
V´arakoztat´o utas´ıt´asok I. A wait utas´ıt´asnak t¨ obb alakja is l´etezik. A szint´ezerek ´altal´aban nem t´amogatj´ak. Az until addig v´ ar, am´ıg egy felt´ etel igaz nem lesz (szint´ezerek ezt t´amogatj´ak): wait until clk = ’1 ’; wait until signal ’ event and signal = value ; wait until not signal ’ stable and signal = value ;
Egy adott ideig v´ arni a for seg´ıts´eg´evel lehet (tesztel´esn´el hasznos): wait for 2 ns ;
Az on hat´as´ara addig v´ ar, am´ıg a megadott jel(ek)en v´ altoz´ as nem t¨ ort´ enik: wait on sig1 , sig2 ; Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
42 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
V´ arakoztat´ o utas´ıt´ asok
V´arakoztat´o utas´ıt´asok II. A wait ¨ onmag´ aban ¨ or¨ okk´ e v´ ar. Ennek hat´as´ara a szimul´aci´ o le´all, ha m´as v´altoz´as nincsen: process begin in1 <= ’0 ’; in2 <= ’0 ’;
wait for 5 ns ; in1 <= ’1 ’; -- " wait forever " -- le ´ a ll a szimul ´ a ci ´ o
wait ; end process ;
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
43 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Alprogramok
F¨uggv´enyek I.
A le´ır´asok ´attekinthet˝ obb´e t´etele ´erdek´eben bizonyos algoritmus r´ eszletek alprogramokba (f¨ uggv´enyek, elj´ar´asok) emelhet˝ oek ki. A f¨ uggv´ enyek jellemz˝ oi: egy visszat´ er´ esi ´ ert´ ek¨ uk van, minden param´ eter¨ uk bemeneti param´eter, az utas´ıt´ asaik sorrendben hajt´ odnak v´ egre, minden utas´ıt´ as ´ es szerkezet haszn´ alhat´ o benn¨ uk, ami a folyamatokban is.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
44 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Alprogramok
F¨uggv´enyek II. 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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
45 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Alprogramok
Elj´ar´asok I.
Az elj´ ar´ asok hasonl´ oak a f¨ uggv´ enyekhez, azonban az elj´ar´asoknak nincs dedik´ alt visszat´ er´ esi ´ ert´ ek¨ uk, megadhat´ o a param´ etereik ir´ anya: in, out, inout.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
46 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Alprogramok
Elj´ar´asok II. procedure vector_to_int ( begin
z : in s t d _ l o g i c _ v e ct o r ; x_flag : out boolean ; q : inout integer ) is
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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
47 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Generikus komponensek
Generikus komponensek I. Lehet˝os´eg van arra, hogy egy komponens bizonyos param´ etereit ne tervez´ eskor, hanem p´ eld´ anyos´ıt´ askor hat´arozzuk meg. Ezt h´ıvjuk ´altal´anos, vagy generikus tervez´esnek (pl. Verilogban a parameter, C++ template-jei). A generikus param´etert defini´alni kell az entity blokkban: entity piso is -- p a r a l l e l in serial out generic ( width : integer := 7); -- default : 7 port ( clk : in std_logic ; load : in std_logic ; in1 : in s t d _ l o g i c _ v e c t o r ( width downto 0); out1 : out std_logic ); end entity piso ;
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
48 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Generikus komponensek
Generikus komponensek II. A modulban u ´gy haszn´alhatjuk a generikus v´altoz´ot, mint egy konstanst: architecture Behavioral of piso is signal temp : s t d _l o g i c _ v e c t o r ( width downto 0) := ( others = > ’0 ’); -- i n i t i a l i z e to zero begin process ( clk ) begin if ( load = ’0 ’) then -- load the r e g i s t e r 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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
49 / 62
A VHDL nyelv vez´ erl´ esi szerkezetei
Generikus komponensek
Generikus komponensek III.
P´eld´anyos´ıt´askor a komponens megad´ as´ an´ al is szerepel a generic szerkezet (ugyan´ugy, mint az entity blokkban. A t´enyleges p´eld´any l´etrehoz´asakor a port map r´esz el˝ott szerepel egy generic map szerkezet, ahol megadhatjuk a param´ eter ´ ert´ ek´ et (amennyiben nem az alap´ertelmezettet k´ıv´anjuk haszn´alni):
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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
50 / 62
Hieararchikus tervez´ es
Hieararchikus tervez´es
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
51 / 62
Hieararchikus tervez´ es
P´ eld´ anyos´ıt´ as
Komponensek I. A hierarchikus ´ep´ıtkez´es azt jelenti, hogy az egyedek tartalmazhatj´ ak m´ as egyedek p´ eld´ anyait. Az egyedek p´ eld´ anyos´ıt´ asa el˝ ott komponensk´ ent defini´ alnunk kell ˝oket. Legegyszer˝ ubb esetben a komponensdefin´ıci´ o megegyezik az entity le´ır´assal. Amennyiben a neve is ugyanaz, akkor m´ast nem kell tenni a kapcsolat l´etrehoz´as´ahoz. 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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
52 / 62
Hieararchikus tervez´ es
P´ eld´ anyos´ıt´ as
Komponensek II. A p´eld´anyos´ıt´askor a l´etrej¨ ov˝ o egyedet hozz´a kell kapcsolni a k¨ornyezet´ehez: -- Itt fontos a sorrend : nand_gate_dut : nand_gate port map ( in1 , in2 , output ); -- Itt a p o r t o k h o z egyenk ´ e nt rendelj ¨ u k a jeleket : nand_gate_dut : nand_gate port map ( a = > in1 , b = > in2 , q = > output );
Sokportos egyedek eset´en ´erdemes a m´asodik megold´ast alkalmazni, mert olyankor nagyon neh´ez a sorrendet k¨ ovetni – nehezen ´erthet˝o k´odot eredm´enyez az els˝ o alak.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
53 / 62
Hieararchikus tervez´ es
P´ eld´ anyos´ıt´ as
Komponensek III. Amennyiben egy egyednek t¨ obbf´ ele architekt´ ur´ aja van, akkor p´eld´anyos´ıt´askor meg kell adnunk azt is, hogy melyik legyen felhaszn´alva. Alap´ertelmez´es szerint a legutols´ o ker¨ ul felhaszn´al´asra. architecture testbench of nand_gate_tb is component nand_ gate_co mp port (a , b : in bit ; q : out bit ); end component nand _gate_co mp ; for nand_gate_dut : nand_ga te_comp use entity work . nand_gate ( arch_1 ); signal in1 , in2 , output : bit ; begin nand_gate_dut : nand_gat e_comp port map ( a = > in1 , b = > in2 , q = > output ); ...
A work az alap´ertelmezett k¨ onyvt´arn´ev, ahov´a az aktu´alis projekt egyedei ker¨ ulnek. Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
54 / 62
Hieararchikus tervez´ es
P´ eld´ anyos´ıt´ as
Komponensek IV.
Egy egyszer˝ ubb m´odja az p´eld´anyos´ıt´asnak az u ´n. k¨ ozvetlen be¨ ultet´ es. Ilyenkor a p´eld´anyos´ıt´as kiz´ar´ olag a begin ut´an t¨ort´enik: 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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
55 / 62
Hieararchikus tervez´ es
Csomagok
Csomagok I. A csomagok c´elja t´ıpusok, konstansok, alprogramok megoszt´ asa tervez´esi egys´egek k¨oz¨ ott. Egy csomagot k´ et r´ eszben adunk meg: 1
csomag deklar´ aci´ o: az egyes elemek deklar´aci´ oja, vagyis t´ıpussal adott n´evfelsorol´as: alprogram deklar´ aci´ oja, t´ıpus/alt´ıpus deklar´ aci´ o, konstansok deklar´ aci´ oja, komponensek deklar´ aci´ oja, use kifejez´esek, stb.
2
csomag defin´ıci´ o: a csomag elemeinek defin´ıci´ oja, vagyis kifejt´ese: alprogramok defin´ıci´ oja, konstansok defin´ıci´ oja, stb.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
56 / 62
Hieararchikus tervez´ es
Csomagok
Csomagok II. – deklar´aci´os r´esz
package c lu st er _ pa ck ag e 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 r es ol ve _ cl us te r ( s : t_clus_vec ) return t_cluster ; subtype t_wclus is r es ol v e_ cl us t er t_cluster ; constant undriven : t_wclus ; end package c lu st er _ pa ck ag e ;
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
57 / 62
Hieararchikus tervez´ es
Csomagok
Csomagok II. – defin´ıci´os r´esz package body c lu st er _ pa ck ag e is constant undriven : t_wclus := ( ZX , ZX , ZX , ZX , ZX , ZX , ZX , ZX , ZX , ZX , ZX , ZX , ZX , ZX , ZX , ZX );
function r es ol ve _ cl us te r ( 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 r es ol ve _ cl us t er ; end package body c lu st er _ pa ck a ge ; Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
58 / 62
Hieararchikus tervez´ es
Hardver gener´ al´ as
Hardver gener´al´as I.
Ahogy Verilogban is, a VHDL is lehet˝ os´eget ad hardver gener´ al´ asra. Ez azt jelenti, hogy egy ciklusban tudunk hardvert p´ eld´ anyos´ıtani u ´gy, hogy az ¨ osszek¨ ottet´ eseket a ciklus fut´ o v´ altoz´ oi hat´ arozz´ ak meg. ´Igy egyszer˝ ubb kapukb´ ol bonyolult szerkezetet lehet k´epezni an´elk¨ ul, hogy mechanikusan le k´ene ´ırni az ¨ osszes elem bek¨ot´es´et. Tipikusan arra haszn´alj´ak, hogy egybites elemeket sokbites adatok lekez´ el´ es´ ere k´ epes architekt´ ur´ av´ a´ ep´ıts´ ek ¨ ossze.
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
59 / 62
Hieararchikus tervez´ es
Hardver gener´ al´ as
Hardver gener´al´as II.
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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
60 / 62
Hieararchikus tervez´ es
Hardver gener´ al´ as
Hardver gener´al´as III. Lehet˝os´eg van felt´ etelekhez k¨ otni a gener´ al´ ast. Erre az if szerkezethaszn´alhat´ o. Az else ´es elsif kulcsszavak gener´al´askor nem alkalmazhat´oak. 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´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 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´ u G´abor, Keresztes P´eter: VHDL-alap´ u rendszertervez´es, Szak kiad´o, 2012 Douglas L. Perry: VHDL Programming by example, McGraw-Hill, 2002 Jan Van der Spiegel: VHDL Tutorial, University of Pennsylvania
Horv´ ath P´ eter, Nagy Gergely (BME EET)
VHDL
2013. okt´ ober 3.
62 / 62