Presentation is loading. Please wait.

Presentation is loading. Please wait.

Osnovne jezičke konstrukcije

Similar presentations


Presentation on theme: "Osnovne jezičke konstrukcije"— Presentation transcript:

1 Osnovne jezičke konstrukcije

2 Osnovne jezičke konstrukcije u VHDL-u
Leksički elementi (identifikatori, komentari, rezervisane reči, brojevi, karakteri, stringovi) Objekti (signali, varijable, konstante) Tipovi podataka (integer, boolean, bit, bit_vector, std_logic, std_logic_vector, signed, unsigned) Polja (1D, 1Dx1D, 2D) Atributi (atributi vektora, atributi signala) Arhitektura mikrosistema

3 Arhitektura mikrosistema
Identifikatori Imena objekata u VHDL-u (signala, promenljivih, entiteta, arhitektura itd.). Pravila za pisanje identifikatora: Može sadržati samo slova, decimalne cifre i crtu za podvlačenje. Prvi karakter mora biti slovo. Poslednji karakter ne može biti crta za podvlačenje. Dve uzastopne crte za podvlačenje nisu dozvoljene. Ispravno: A11, sledece_stanje, NextState, addr_en Neispravno: x#8, _x3, 5linija, a10_, ab__cd Arhitektura mikrosistema

4 Arhitektura mikrosistema
Komentari Komentar počinje sa dve crtice ˝--˝ posle kojih sledi tekst komentara. Komentari se koriste radi dokumentacije i nemaju uticaja na procesiranje kôd. (Prilikom kompajliranja, celokupan tekst počev od ˝--˝ pa do kraja tekuće linije se ignoriše.) Arhitektura mikrosistema

5 Rezervisane (službene) reči VHDL-a
Imaju posebno značenje u VHDL-u i ne mogu se koristiti kao identifikatori. 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 procedure 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 Arhitektura mikrosistema

6 Arhitektura mikrosistema
Brojevi Celi: 0, i 98E7 (= 98·107) Realni: 0.0, ili 6.82E6 (= 6.82·106) Dozvoljeno je korišćenje crte za podvlačenje: 12_3456 isto što i Arhitektura mikrosistema

7 Arhitektura mikrosistema
Karakteri i stringovi Karakteri se pišu pod jednostukim navodnicima: 'A', 'a‘, '7' Stringovi se pišu pod dvostrukim navodnicima: ˝Alo˝, ˝ ˝ Arhitektura mikrosistema

8 Arhitektura mikrosistema
Objekti Služe za reprezentaciju i čuvanje vrednosti podataka: Signali Varijable Konstante Arhitektura mikrosistema

9 Arhitektura mikrosistema
Signali Za povezivanje komponenti i razmenu podataka između entiteta (kao električne veze u fizičkom kolu) Deklaracija signala (u deklarativnom delu arhitekture): SIGNAL ime_signala,..., ime_signala : TIP_PODATAKA; Pr.: Deklaracija tri signala tipa std_logic: SIGNAL x, y, z : STD_LOGIC; Inicijalna (početna) vrednost signala: SIGNAL x, y, z : STD_LOGIC := ´0´; Dozvoljeno u simulaciji ali ne i u sintezi Dodela vrednosti signalu: ime_signala <= izraz; Arhitektura mikrosistema

10 Arhitektura mikrosistema
Varijable Za čuvanje lokalnih podataka u procesu ili proceduri (odgovaraju promenljivama iz programskih jezika) Deklaracija (u deklarativnoj sekciji procesa): VARIABLE ime_var,..., ime_var : TIP_PODATAKA; Dodela vrednosti varijabli: ime_varijable := izraz; Arhitektura mikrosistema

11 Arhitektura mikrosistema
Konstante Sadrži nepromenljivu vrednost. Može se deklarisati u entitetu, arhitekturi ili paketu: CONSTANT ime_konstante : TIP_PODATAKA := izraz; Npr., CONSTANT M : INTEGER := 32; CONSTANT N : INTEGER := M/4; Arhitektura mikrosistema

12 Arhitektura mikrosistema
Upotreba konstanti ARCHITECTURE arch OF parity IS SIGNAL x : STD_LOGIC; BEGIN . . . p := ´0´; FOR i IN 7 DOWNTO 0 LOOP P := p AND a(i); END LOOP; CONSTANT N : INTEGER := 7; FOR i IN N DOWNTO 0 LOOP Arhitektura mikrosistema

13 Arhitektura mikrosistema
Tipovi podataka Tip podataka definiše skup vrednosti i skup operacija koje se mogu primeniti nad podacima datog tipa. VHDL je strogo tipiziran jezik: operacije su legalne samo ako su tipovi operanada usklađeni Podela tipova podataka: Predefinisani: ugrađeni u jeziku (bit, bit_vector, boolean, integer, ...) Standardni: dostupni kroz standardizovane pakete (std_logic, std_logic_vector, unsigned, signed, ...) Korisnički - uvodi ih projektant Tip podataka definiše skup vrednosti i skup operacija koje se mogu primeniti nad podacima datog tipa. VHDL je strogo tipiziran jezik, što znači da su operacija koje se javljaju u naredbama legalne samo ako su tipovi operanada usklađeni. Drugim rečima, nije dozvoljeno u istom izrazu koristiti operande različitog tipa. Primer nelegalne operacije je sabiranje realnog i celog broja ili dodela binarne vrednosti celobrojnoj promenljivoj. VHDL je bogat tipovima podataka. Osim tipova koji su ugrađeni u sam jezik (tzv. predefinisani tipovi), i raspoloživi kroz standardne biblioteke i pakete, VHDL omogućava projektantu da definiše i nove, tzv. korisničke tipove podataka. Pojedini tipovi podataka se mogu koristiti samo u simulaciji, dok se drugi mogu koristiti i u sintezi. Dobro poznavanje tipova podataka, načina njihovog korišćenja i ograničenja, od velike je važnosti za razumevanje VHDL jezika i efikasno pisanje VHDL kôda. U ovoj sekciji biće reči o svim važnim tipovima podataka VHDL jezika, sa naglaskom na onima koje se koriste u sintezi. Međutim, pre nego što pređemo na izlaganje o tipovima podatak, ukratko ćemo se upoznati za jezičkim objektima koji se u VHDL-u koriste za reprezentaciju i manipulaciju podacima Arhitektura mikrosistema

14 Arhitektura mikrosistema
BIT i BIT_VECTOR Definiše dvonivovsku logiku Dozvoljene vrednosti: ΄0΄ i ΄1΄ BIT_VECTOR je vektorska varijanta tipa BIT: definiše niz (vektor) bitova SIGNAL x : BIT; -- deklariše x kao jednobitni signal tipa BIT SIGNAL y : BIT_VECTOR(3 DOWNTO 0); -- y je 4-bitni vektor. (3 DOWNTO 0) definiše opseg indeksa -- bitova u vektoru i njihov poredak (u ovom slučaju opadajući) SIGNAL w : BIT_VECTOR(0 TO 7); -- w je 8-bitni vektor. (0 TO 7) definiše opseg indeksa bitova u vektoru i njihov poredak (u ovom slučaju rastući). SIGNAL z : BIT := ´1´; -- z je jednobitni signal inicijalne vrednost ´1´. Arhitektura mikrosistema

15 Arhitektura mikrosistema
Skalari i vektori Skalar SIGNAL x : BIT; Vektor SIGNAL y : BIT_VECTOR(3 DOWNTO 0); SIGNAL w : BIT_VECTOR(0 TO 7); Definiše dužinu vektora, opseg i poredak indeksa U gornjim primerima, signal x je skalar (može da sadrži samo jednu binarnu vrednost), a signali y i w vektori (sadrže niz bitova). Uočimo da je deklaracija vektorskog tip praćena konstrukcijom (n DOWNTO m), odnosno (n TO m) koja definiše dužinu vektora i opseg indeksa. n i m su vrednosti početnog i krajnjeg indeksa u nizu. Za DOWNT0 važi n≥m, a za TO n≤m. Vektor sadrži m-n+1 elemenata, za DOWNTO, odnosno n-m+1 elemenata, za TO varijantu. U gornjim primerima, y je vektor dužine 3-0+1=4, a w vektor dužine 7-0+1=8 bita. Svakom elementu vektora pridružen je indeks koji ukazuje na njegovu poziciju u vektoru. Ključne reči DOWNTO i TO ukazuju da li kretanjem kroz niz, s leva na desno, indeksi opadaju ili rastu. Za DOWNTO važi da krajnji levi element vektora ima najveći, a krajnji desni najmanji indeks. Za TO važi obrnuto, krajnji levi element ima najmanji, a krajnji desni najveći indeks. Kod tipova koji služe za predstavljanje binarnih vrednosti (kao što su BIT ili STD_LOGIC) element (bit) na poziciji indeksa najveće težine naziva se bitom najveće težine (MSB - Most Sifnicant Bit). Bit na poziciji najmanjeg indeksa je bit najmanje težine (LSB - Last Significant Bit) . Prilikom deklaracije signala (varijable), dozvoljeno je postaviti početnu (inicijalnu) vrednost, kao u poslednjem primeru. Inicijalna vrednost se navodi posle znaka :=. Treba napomenuti da inicijalne vrednosti signala i varijabli imaju značaj samo u simulaciji, dok se prilikom sinteze ne uzimaju u obzir. Arhitektura mikrosistema

16 Arhitektura mikrosistema
Skalari i vektori SIGNAL x : BIT; SIGNAL y : BIT_VECTOR(3 DOWNTO 0); SIGNAL w : BIT_VECTOR(0 TO 7); x <= ΄1΄; jednobitnom signalu x dodeljuje se vrednost ‘1΄. koriste se jednostruki znaci navoda ΄ ΄. y <=˝0111˝; 4-bitnom signalu dodeljuje se vrednost ˝0111˝ (MSB=΄0΄, binarna vrednost 7). Vektori se pišu pod dvostrukim navodnicima (˝ ˝). Elementi vektora: y(3) , y(2), y(1), y(0) (koriste se male zagrade) x <= y(2) ; -- skalaru x dodelje element vektora y sa indeksom 2 w <=˝ ˝; 8-bitnom signalu w dodeljuje vrednost ˝ ˝ (MSB=΄1΄, binarna vredost 142). Sledeće naredbe dodele su legalne: x <= ΄1΄; -- jednobitnom signalu x dodeljuje se vrednost ‘1΄. Za pisanje -- jednobitnih vrednosti koriste se jednostruki znaci navoda (΄ ΄). y <=˝0111˝; -- 4-bitnom signalu dodeljuje se vrednost ˝0111˝ (MSB=΄0΄). Vektori se -- pišu pod dvostrukim navodnicima (˝ ˝). w <=˝ ˝; -- 8-bitnom signalu w dodeljuje se vrednost ˝ ˝ (MSB=΄1΄). Skalarne vrednosti se pišu pod jednostrukim, a vektorske pod dvostrukim navodnicima. Za pristup pojedinačnim elementima vektora koristi se indeksiranje. Na primer, elementi vektora y, kod koga važi DOWNTO redosled, su y(3), y(2), y(1) i y(0), čije su vrednosti redom, ´0´, ´1´, ´1´ i ´1´. Elementi vektora w (TO redosled), su w(0), w(1), ..., w(7), čije su vrednosti redom ´0´, ´1´, ..., ´1´. DOWNTO redosled se obično koristi ako se vektor tumači kao binarni broj. Navikli smo da kod zapisivanja binarnih brojeva krajni levi bit bude bit najveće težine. Tako, zapis ˝0111˝ predstavlja broj 7. Da je signal y bio deklarisan sa indeksima u TO redosledu (SIGNAL y : BIT_VECTOR(0 DOWNTO 3)), tada bi vrednost binarnog broja y <=˝0111˝ bila 14. Arhitektura mikrosistema

17 Arhitektura mikrosistema
BOOLEAN Definiše logičke vrednosti true (tačno) i false (netačno). IF (a) THEN a je tipa boolean IF (a=΄1΄) THEN a je tipa bit boolean Arhitektura mikrosistema

18 Arhitektura mikrosistema
INTEGER 32-bitni celi (integer) brojevi. Opseg dozvoljenih vrednosti: –(231-1) do 231-1, tj. -2,147,483,647 do +2,147,483,647. U upotrebi su i dva izvedena tipa podatka (tj. podtipa): NATURAL - obuhvata nenegativne cele brojeve (uključuje 0), POSITIVE pozitivne cele brojeve (bez 0). Arhitektura mikrosistema

19 Arhitektura mikrosistema
Operatori Operatori (kao +, -, AND, NOT,...) pridruženi su definiciji tipa podataka i mogu se primenjivati samo na objekte tog tipa. Arhitektura mikrosistema

20 Arhitektura mikrosistema
Logički operatori Za logičke operacije: NOT AND OR NAND NOR XOR XNOR Definisani za sledeće predefinisane tipove podataka: BIT, BOOLEAN, STD_LOGIC, i odgovarajuća 1D polja: BIT_VECTOR, STD_LOGIC_VECTOR i Operator NOT je unarni i ima viši prioritet od svih ostalih operatora. Koriste se za obavljanje logičkih operacija. To su: NOT AND OR NAND NOR XOR XNOR Logički operatori su definisani za sledeće predefinisane tipove podataka: BIT, BOOLEAN, STD_LOGIC, STD_ULOGIC i odgovarajuća 1D polja (BIT_VECTOR, STD_LOGIC_VECTOR i STD_ULOGIC_VECTOR). Operator NOT je unarni i ima viši prioritet od svih ostalih operatora. Arhitektura mikrosistema

21 Logički operatori Logičke operacije nad skalarima
SIGNAL a, b, c, y: STD_LOGIC; . . . y <= NOT a AND b; (a΄b) y <= NOT (a AND b); -- (ab)΄ y <= a NAND b; (ab)΄ Operatori NAND i NOR nisu asocijativni. Zbog toga, sledeća sintaksa nije ispravna: y <= a NAND b NAND c; Neophodne su zagrade: y <= (a NAND b) NAND c; SIGNAL a, b, c, y: STD_LOGIC; . . . y <= NOT a AND b; (a΄b) y <= NOT (a AND b); -- (ab)΄ y <= a NAND b; (ab)΄ Operatori NAND i NOR nisu asocijativni. Zbog toga, sledeća sintaksa nije ispravna: y <= a NAND b NAND c; neophodne su zagrade: y <= (a NAND b) NAND c; Arhitektura mikrosistema

22 Logički operatori Logičke operacije nad vektorima
Izvršavaju se nezavisno nad svakim parom odgovarajućih bitova dva vektora. Vektori moraju biti iste dužine. SIGNAL a, b, c: STD_LOGIC_VECTOR(7 DOWNTO 0); . . . a <= ˝ ˝; b <= ˝ ˝; c <= NOT a; c dobija vrednost ˝ ˝ c <= a OR b; -- c dobija vrednost ˝ ˝ c <= a XOR b; -- c dobija vrednost ˝ ˝ Logičke operacije nad vektorima izvršavaju se nezavisno nad svakim parom odgovarajućih bitova dva vektora. Pri tome, vektori moraju biti iste dužine. SIGNAL a, b, c: STD_LOGIC_VECTOR(7 DOWNTO 0); . . . a <= ˝ ˝; b <= ˝ ˝; c <= NOT a; -- c dobija vrednost ˝ ˝ c <= a OR b; -- c dobija vrednost ˝ ˝ c <= a XOR b; -- c dobija vrednost ˝ ˝ Arhitektura mikrosistema

23 Aritmetički operatori
U kodu za sintezu: Sabiranje, oduzimanje i množenje – bez ograničenja Deljenje – samo ako je delilac stepen dvojke (2k) Stepenovanje – samo za definisanje vrednosti konstante MOD, REM i ABS – nisu podržani u sintezi + Sabiranje Oduzimanje * Množenje / Deljenje ** Stepenovanje MOD Deljenje po modulu REM Ostatak deljenja ABS Apsolutna vrednost Koriste se za obavljanje aritmetički operacija. Primenjivi su na podatke tipa INTEGER, SIGNED, UNSIGNED, ili REAL. Ako je u projekat uključen paket std_logic_signed ili std_logic_unsigned iz biblioteke ieee, tada se operatori sabiranja i oduzimanja mogu direktno primenjivati i nad podacima tipa STD_LOGIC_VECTOR. Podržani su sledeći operatori: +Sabiranje–Oduzimanje*Množenje/Deljenje**StepenovanjeMODDeljenje po moduluREMOstatak deljenjaABSApsolutna vrednost U kôdu za sintezu ne postoje striktna ograničenja koja se odnose na korišćenje operacija sabiranja i oduzimanja. U opštem slučaju to važi i za operaciju množenja. Kod deljenja, dozvoljeni su samo delioci koji imaju vrednost stepena dvojke (svodi se na operaciju pomeranja). Stepenovanje je dozvoljeno samo prilikom definisanja vrednosti konstante (osnova i eksponent mogu biti samo konkretne vrednosti). Alati za sintezu, po pravilu, ne podržavaju poslednja tri operatora (MOD, REM i ABS). Rezultat operacije x REM y je ostatak celobrojnog deljenja x/y (= x – (x/y)*y). Znak rezultata isti je kao znak levog operanda. Npr. 7 REM 4 = 3; (-7) REM 4 = -3; 7 REM (-4) = 3. Rezultat operacije x MOD y jednak je x – y*N, gde je N najveći ceo broj za koji važi x ≤ y*N. Znak rezultata isti je kao znak desnog operanda. Npr. 7 MOD 4 = 3; 7 MOD (-4) = -1. Arhitektura mikrosistema

24 Arhitektura mikrosistema
Operatori poređenja = Jednako /= Različito < Manje > Veće <= Manje ili jednako >= Veće ili jednako Arhitektura mikrosistema

25 Broj pozicija za pomeranje
Operatori pomeranja Pomeranje/rotiranje podataka sll - logičko pomeranje ulevo (u pozicije sa desne strane ΄0΄) BIT_VECTOR x = ˝01001˝ y <= x sll 2; -- y <= ˝00100˝ srl - logičko pomeranje udesno (u pozicije sa leve strane ΄0΄) y <= x srl 3; -- y <= ˝00001˝ y <= x srl -2; -- isto što i srl 2 U opštem slučaju, vrednost za popunjavanje je krajnja leva vrednost iz definicije odgovarajućeg tipa. BIT = {‘0’,’1’} sla - aritmetičko pomeranje ulevo (pozicije sa desne strane popunjavaju se krajnjim desnim bitom) y <= x sla 2; -- y <= ˝00111˝ Broj pozicija za pomeranje Koriste se za pomeranje/rotiranje podataka. Sintaksa je sledeća: <levi operand> <operator pomeranja> <desni operand>. Levi operand (onaj koji se pomera) mora biti 1D vektor (BIT_VECTOR, STD_LOGIC_VECTOR, ...), a desni (iznos pomeranja) INTEGER. Ako je iznos pomeranja negativan broj, izvršava se ista operacija pomeranja, ali u suprotnom smeru. Raspoložive su sledeće operacije pomeranja: slllogičko pomeranje ulevo (pozicije sa desne strane popunjavaju se ΄0΄)srllogičko pomeranje udesno (pozicije sa leve strane popunjavaju se ΄0΄)slaaritmetičko pomeranje ulevo (pozicije sa desne strane popunjavaju se krajnjim desnim Arhitektura mikrosistema

26 Arhitektura mikrosistema
Operatori pomeranja Pomeranje/rotiranje podataka sra - aritmetičko pomeranje udesno (pozicije sa leve strane popunjavaju se krajnjim levim bitom) BIT_VECTOR x = ˝11001˝ y <= x sra 2; -- y <= ˝11110˝ rol - rotacija na levo y <= x rol 2; -- y <= ˝01011˝ ror - rotacija na desno y <= x ror 2; -- y <= ˝00111˝ U kôdu za sintezu operatore pomeranja dozvoljeno je koristiti samo nad operandima tipa BIT_VECTOR. bitom)sraaritmetičko pomeranje udesno (pozicije sa leve strane popunjavaju se krajnjim levim bitom)rolrotacija na levororrotacija na desno Arhitektura mikrosistema

27 Arhitektura mikrosistema
Prioriteti operatora Prioritet Operator Najviši ** ABS NOT * / MOD REM - (negacija) & + - sll srl sla sra rol ror = /= < <= > >= Najniži and or nand nor xor xnor Arhitektura mikrosistema

28 ((a + b) > c) OR (a < d)
Prioriteti operatora a + b > c OR a < d 1 2 3 2 Isto što i: ((a + b) > c) OR (a < d) a + b + c + d isto što i (((a + b) + c) + d) Arhitektura mikrosistema

29 Arhitektura mikrosistema
Efekat zagrada Arhitektura mikrosistema

30 Tipovi podataka iz paketa std_logic_1164
STD_LOGIC – skalarni tip STD_LOGIC_VECTOR – vektorski tip Uopštenje tipova BIT i BIT_VECTOR Namenjeni sintezi Arhitektura mikrosistema

31 STD_LOGIC i STD_LOGIC_VECTOR
Definiše 8-nivovski logički sistem. Dozvoljene vrednosti: ΄X΄ Nepoznata vrednost ΄0΄ Nizak logički nivo Sintetiše se kao logička ΄0΄ ΄1΄ Visok logički nivo Sintetiše se kao logička ΄1΄ ΄Z΄ Visoka impedansa Sintetiše se kao tro-statički bafer ΄W΄ ˝Slaba˝ nepoznata vrednost ΄L΄ ΄˝Slab˝ nizak nivo ΄H΄ ΄˝Slab˝ visok nivo ΄-΄ Proizvoljna vrednost definiše 8-nivovski logički sistem. Dozvoljene vrednosti su sledeće: Tip STD_LOGIC je prevashodno namenjen modeliranju električnih veza u digitalnim sistemima. Svaka fizička veza se pobuđuje najčešće jednim izlazom nekog digitalnog kola (drajver veze). Drajver može da pobuđuje vezu logičkom ΄1΄ ili ΄0΄. Takođe, izlaz drajvera može biti u stanju visoke impedanse ΄Z΄. U upotrebi su i digitalna kola sa izlazom tipa ˝otvoreni kolektor˝ koja zahtevaju ugradnju spoljašnjeg otpornika (tzv ΄pull-up΄). Drajver tipa otvoreni kolektor postavlja ˝jaku˝ ΄0΄, ali ˝slabu˝ ΄1΄, tj. slab visok nivo (΄H΄). Drajver koji zahteva ugradnju ˝pull-down˝ otpornika postavlja ˝jaku˝ ΄1΄ i ˝slabu˝ ΄0΄, tj. slab nizak nivo (΄L΄). U nekim slučajevima više drajvera mogu da pobuđuju istu vezu (tipičan primer su magistrale). S obzirom da u jednom momentu na vezi može da postoji samo jedan logički nivo, problem se javlja kada drajveri generišu različite logičke vrednosti (pojava konflikta). Konflikti se razrešavaju tako što se signalu dodeljuje vrednost ˝najjačeg˝ od svih logičkih nivoa kojima je veza pobuđena. Na primer, ako neku vezu pobuđuju dva drajver, tako da je jedan u stanju visoke impedanse (΄Z΄), a drugi generiše ΄1΄, rezultujuća vrednost signala na liniji biće ΄1΄. Ili, ako jedan drajver generiše ΄1΄, a drugi ΄0΄, rezultujuća vrednost biće nepoznata (΄X΄). Pravila za razrešavanje konflikta u logičkom sistemu tipa STD_LOGIC navedena su u tabeli. Većina dozvoljenih vrednosti tipa STD_LOGIC koriste se samo u simulaciji. U VHDL kôdu koji je namenjen sintezi dozvoljeno je signalima ovog tipa dodeljivati samo vrednosti ΄1΄, ΄0΄ ili ΄Z΄. Arhitektura mikrosistema

32 STD_LOGIC i STD_LOGIC_VECTOR
Dozvoljeno u sintezi Arhitektura mikrosistema

33 STD_LOGIC i STD_LOGIC_VECTOR
Automatsko razrešavanje konflikta: Arhitektura mikrosistema

34 STD_LOGIC i STD_LOGIC_VECTOR
SIGNAL x : STD_LOGIC; -- deklariše x kao jednobitni (skalarni) signal tipa STD_LOGIC SIGNAL y : STD_LOGIC_VECTOR(3 DOWNTO 0) := ˝0001˝; -- deklariše y kao 4-bitni vektor i dodeljuje mu inicijalnu vrednost ˝0001˝ -- Inicijalna vrednost je opciona, a dodeljuje se operatorom ˝:=˝ . -- Krajnji levi bit je bit najveće težine (MSB). Arhitektura mikrosistema

35 Operacija nad tipom STD_LOGIC
Dozvoljeni su logički, ali ne i aritmetički operatori Preklopljeni operator Tip operanda a operanda b rezultata NOT a std_logic std_logic_vector isti kao a a AND b a OR b a XOR b a NOR b a XNOR b Arhitektura mikrosistema

36 Logičke operacije nad operandima tipa std_logic_vector
Logičke operacije nad vektorima izvršavaju se nezavisno nad svakim parom odgovarajućih bitova dva vektora. Pri tom vektori moraju biti iste dužine. SIGNAL a, b, c: STD_LOGIC_VECTOR(7 DOWNTO 0); . . . a <= ˝ ˝; b <= ˝ ˝; c <= NOT a; -- c dobija vrednost ˝ ˝ c <= a OR b; -- c dobija vrednost ˝ ˝ c <= a XOR b; -- c dobija vrednost ˝ ˝ Arhitektura mikrosistema

37 Funkcije za konverziju iz paketa std_logic_1164
Iz tipa std_logic (std_logic_vector) u tip bit (bit_vector) i obrnuto Funkcija Tip operanda a Tip rezultata to_bit(a) std_logic bit to_stdlogic(a) to_bitvector(a) std_logic_vector bit_vector to_stdlogicvector(a) Arhitektura mikrosistema

38 Arhitektura mikrosistema
Konverzija tipa Pretpostavimo da su s1, s2, s3, b1 i b2 signali definisani na sledeći način: SIGNAL s1, s2, s3 : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL b1, b2 : BIT_VECTOR(7 DOWNTO 0); Sledeće naredbe dodele su neispravne zbog neusklađenosti tipova: s1 <= b1; signalu tipa std_logic_vector se dodeljuje -- vrednost signala tipa bit_vector b2 <= s1 AND s2; -- vrednost tipa std_logic_vector se dodeljuje -- signalu tipa bit_vector s3 <= b1 OR s2; -- operacija or nije definisana između vrednosti -- tipa bit_vector i std_logic_vector Treba ovako: s1 <= to_stdlogicvector(b1); b2 <= to_bitvector(s1 AND s2); s3 <= to_stdlogicvector(b1) OR s2; ili s3 <= to_stdlogicvector(b1 OR to_bitvector(s2)); Arhitektura mikrosistema

39 Operacije nad vektorskim tipovima
Relacije Konkatenacija Agregacija Arhitektura mikrosistema

40 Relacije (poređenja) nad vektorima
Sledeći izrazi su tačni: ˝101˝ = ˝101˝, ˝011˝ > ˝010˝, ˝011˝ > ˝00011˝, ˝0110˝ > ˝011˝ ´1´ je veće od ´0´ Poređenje s leva na desno, do prvog neslaganja Duži vektor je ˝veći˝, ako je ˝kraći˝ u potpunosti sadržan u ˝dužem˝ Arhitektura mikrosistema

41 Arhitektura mikrosistema
Konkatenacija Nadovezivanje (spajanje) manjih vektora, segmenata vektora ili skalara u jedan veći vektor. Operator konkatenacije je znak ˝&˝. y <= x & “ ”; -- ako je x = ΄1΄, tada y <= ˝ ˝ y <= ˝00˝ & a(7 DOWNTO 0); -- ekvivalentno pomeranju vektora a za dve pozicije udesno y <= a(1 DOWNTO 0) & a(7 DOWNTO 2); -- ekvivalentno rotaciji vektora a za dve pozicije udesno Arhitektura mikrosistema

42 Arhitektura mikrosistema
Konkatenacija SIGNAL dbus: STD_LOGIC_VECTOR(0 TO 7); SIGNAL ctrl: STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL en, rw: STD_LOGIC; SIGNAL count: STD_LOGIC_VECTOR(0 TO 3); dbus <= ctrl & en & rw & count; Arhitektura mikrosistema

43 Operatori konkatenacije - primer
Pomeranje pomoću konkatenacije SIGNAL a, b: STD_LOGIC_VECTOR(0 TO 7); . . . a <= b(5 DOWNTO 0) & “00”; -- a <= b << 2 Da su a i b tipa BIT_VECTOR isti efekat ima: a <= b sll 2 Za STD_LOGIC_VECTOR a <= b sll 2 ; je isto što i: a <= b(5 DOWNTO 0) & “XX”; Zbog STD_LOGIC = (΄X΄, ΄0΄, ΄1΄, ΄Z΄, ΄W΄, ΄L΄, ΄H΄, ΄-΄) Pomeranje pomoću konkatenacije SIGNAL a, b: STD_LOGIC_VECTOR(0 TO 7); . . . a <= b(5 DOWNTO 0) & “00”; Naizgled efekat je isto kao a <= b sll 2. To bi i bio slučaj da se radi o operandima tipa BIT. Međutim, za operande tipa STD_LOGIC_VECTOR efekat operacije a <= b sll 2 je sledeći: a <= b(5 DOWNTO 0) & “XX”; Vrednost ´X´ (nepoznata vrednosti) se ne može sintetizovati. To je i razlog zašto se operator sll (kao i ostali operatori pomeranja) ne može koristiti u sintezi tipa STD_LOGIC_VECTOR. Zbog toga se za pomeranje vektora ovog tipa koristi konkatenacija. Arhitektura mikrosistema

44 Arhitektura mikrosistema
Agregacija SIGNAL w: STD_LOGIC_VECTOR(7 DOWNTO 0); . . . w <= “ ”; w <= (’0’,’0’, ’0’, ’0’, ’1’, ’0’, ’0’, ’1’); w <= (7=>’0’,1=>’0’,5=>’0’,6=>’0’,0=>’1’,4=>’0’,3=>’1’,2=>’0’); w <= (7|6|5|4|2|1 =>’0’, 3|2 =>’1’); w <= (0=>'1', 3=>'1', OTHERS => '0') Arhitektura mikrosistema

45 Arhitektura mikrosistema
Agregacija Dodela svih nula vektoru: w <= (OTHERS => '0'); Arhitektura mikrosistema

46 Tipovi podataka iz paketa IEEE numeric_std
Uključuje se sa: LIBRARY IEEE; USE IEEE.NUMERIC_STD.ALL; Podrška za aritmetičke operacije Uvodi dva tipa podataka: UNSIGNED – za neoznačene binarne brojeve SIGNED – za označene binarne brojeve SIGNAL a, b : SIGNED(7 DOWNTO 0); SIGNAL x : UNSIGNED(7 DOWNTO 0); Arhitektura mikrosistema

47 Označeni i neoznačeni brojevi
Šta predstavlja ˝˝1100˝ ? Zavisi od konteksta (tipa signala/varijable kome se dodeljuje) a <= ˝1100˝ a je tipa std_logic_vector Niz od 4 nezavisna bita a <= ˝˝1100˝ a je tipa unsigned Neoznačen binarni broj, vrednosti 12 a je tipa signed Označen binarni broj, vrednosti -4 Arhitektura mikrosistema

48 Operacije nad UNSIGNED i SIGNED
Operacija Opis Tip operanda a Tip operanda b rezultata Aritmetičke operacije a + b sabiranje unsigned unsigned, natural signed signed, integer a - b oduzimanje a * b množenje a / b deljenje a MOD b moduo a REM b ostatak ABS a apsolutna vrednost - a negacija Operacije poređenja a = b jednako boolean a /= b različito a < b manje a > b veće a <= b manje ili jednako a >= b veće ili jednako Arhitektura mikrosistema

49 Operacije nad UNSIGNED i SIGNED
SIGNAL au, bu, cu, du, eu : UNSIGNED(7 DOWNTO 0); SIGNAL as, bs, cs, ds : SIGNED(7 DOWNTO 0); . . . au <= bu + cu; -- unsigned i unsigned du <= cu + 1; -- unsigned i natural eu <= (3 + au + bu) - cu; -- unsigned i natural as <= bs + cs; signed i signed ds <= bs – 1; -- signed i integer Arhitektura mikrosistema

50 Dozvoljene i nedozvoljene operacije
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL; . . . SIGNAL a, b, c: SIGNED(7 DOWNTO 0); SIGNAL x, y, z: STD_LOGIC_VECTOR(7 DOWNTO 0); c <= a + b; -- ispravno, aritmetičke operacije su dozvoljene nad tipom signed c <= a AND b; -- neispravno, logičke operacije nisu dozvoljene nad tipom signed z <= x + y; -- neispravno, aritmetičke operacije nisu dozvoljene nad -- tipom std_logic_vector z <= x AND y; -- ispravno, logičke operacije su dozvoljene u tipu std_logic_vector Arhitektura mikrosistema

51 Relacije nad UNSIGNED/SIGNED
Da li važi ˝011˝ > ˝1000˝ ? Ako su: Std_logic_vector: NETAČNO Unsigned: NETAČNO ˝011˝ je 3, a ˝1000˝ je 8 Signed: TAČNO ˝011˝ je 3, a ˝1000˝ je -8 Arhitektura mikrosistema

52 Funkcije za konverziju iz paketa numeric_std
Iz tipa U tip Funkcija za konverziju / eksplicitna konverzija unsigned, signed std_logic_vector std_logic_vector(a) signed, unsigned unsigned(a) unsigned, signed signed(a) integer to_integer(a) natural to_unsigned(a, size) to_signed(a, size) Arhitektura mikrosistema

53 Eksplicitna konverzija tipa
Za konverziju podataka između tipova std_logic_vector, unsigned i signed SIGNAL u1, u2 : UNSIGNED(7 DOWNTO 0); SIGNAL v1, v2 : STD_LOGIC_VECTOR(7 DOWNTO 0); . . . u1<= UNSIGNED(v1); -- konvertuje std_logic_vector u unsigned v2<= STD_LOGIC_VECTOR(u1); -- konvertuje unsigned u std_logic_vector Arhitektura mikrosistema

54 Funkcija za konverziju
SIGNAL u: UNSIGNED(7 DOWNTO 0); u <= 5; -- neispravno, neusklađeni tipovi Treba ovako: Broj bita u rezultujućoj binarnoj vrednosti u <= TO_UNSIGNED(5, 8); Vrednost koja se konvertuje Arhitektura mikrosistema

55 Korisnički tipovi podataka
Mogućnost da projektant definiše svoje sopstvene tipove podataka. Dve kategorije: Celobojni korisnički tipovi (podopseg celih brojeva) Nabrojivi korisnički tipovi (skup korisnički-definisanih vrednosti ) VHDL omogućava projektantu da definiše svoje sopstvene tipove podataka (tzv. korisnički tipovi). Postoje dve kategorije korisničkih tipova podataka: celobrojni (integer) i nabrojivi (enumeration). Arhitektura mikrosistema

56 Korisnički tipovi podataka Celobrojni tipovi
Podskup tipa INTEGER definisan opsegom (RANGE) celih brojeva: TYPE mali_integer IS RANGE -32 TO 32; -- podskup celih (integer) brojeva iz opsega -32 do 32 TYPE ocena IS RANGE 5 TO 10; -- podskup celih ili prirodnih (natural) brojeva iz opsega 5 do 10 Koristi se kada treba ograničiti opseg vrednosti koje se mogu dodeliti celobrojnoj varijabli ili signalu: VARIABLE markova_ocena, anina_ocena : ocena; markova_ocena := 8;-- ispravno, dozvoljena ocena anina_ocena := 11; -- grešaka, ocena ne može biti veća od 10. -- (kompajler će prijaviti grešku) Kao što se može zaključiti iz datih primera, celobrojni tipovi su podskup tipa INTEGER definisan opsegom (RANGE) celih brojeva. Koristi se kada treba ograničiti opseg vrednosti koje se mogu dodeliti celobrojnoj varijabli ili signalu Korisnički integer tipovi: TYPE integer IS RANGE TO ; -- ekvivalentno predefinisanom tipu INTEGER TYPE natural IS RANGE 0 TO ; -- ekvivalentno predefinisanom tipu NATURAL TYPE mali_integer IS RANGE -32 TO 32; -- podskup celih (integer) brojeva iz opsega -32 do 32 TYPE ocena IS RANGE 5 TO 10; -- podskup celih ili prirodnih (natural) brojeva iz opsega 5 do 10 Kao što se može zaključiti iz datih primera, celobrojni tipovi su podskup tipa INTEGER definisan opsegom (RANGE) celih brojeva. Koristi se kada treba ograničiti opseg vrednosti koje se mogu dodeliti celobrojnoj varijabli ili signalu: VARIABLE markova_ocena, anina_ocena : ocena; markova_ocena := 8;-- ispravno, dozvoljena ocena anina_ocena := 11; -- grešaka, ocena ne može biti veća od 10. -- (kompajler će prijaviti grešku) Arhitektura mikrosistema

57 Korisnički tipovi podataka Nabrojivi tipovi
Skup korisnički-definisanih vrednosti vrednosti su apstraktne i imaju značenje poznato samo korisniku poboljšavaju čitljivost (razumljivost) kôda i smanjuju mogućnost greške u pisanju kôda TYPE bit IS (΄0΄, ΄1΄); -- ekvivalentno predefinisanom tipu BIT TYPE nasa_logika IS (΄0΄, ΄1΄, ΄Z΄); -- podskup std_logic vrednosti TYPE stanje IS (iskljuceno, napred, nazad, stop); -- definiše nabrojivi tip: dozvoljene vrednosti su eksplicitno navedene (tipična upotreba kod konačnih automata) TYPE boja IS (crvena, zelena, plava, bela); -- još jedan primer nabrojivog tipa Korisnički nabrojivi tipovi: TYPE bit IS (΄0΄, ΄1΄); -- ekvivalentno predefinisanom tipu BIT TYPE nasa_logika IS (΄0΄, ΄1΄, ΄Z΄); -- podskup std_logic vrednosti TYPE bit_vector IS ARRAY (NATURAL RANGE <>) OF BIT; -- ekvivalentno predefinisanom tipu BIT_VECTOR -- RANGE <> označava opseg bez eksplicitno navedenih granica -- NATURAL RANGE <> ograničava RANGE <> na opseg NATURAL tipa. -- ARRAY - službena reč za deklaraciju niza. TYPE stanje IS (iskljuceno, napred, nazad, stop); -- definiše nabrojivi tip – dozvoljene vrednosti su eksplicitno navedene -- (tipična upotreba kod konačnih automata) TYPE boja IS (crvena, zelena, plava, bela); -- još jedan primer nabrojivog tipa Deklaracija nabrojivog tipa definiše tip podataka koji čini skup korisnički-definisanih vrednosti. Na primer, deklaracija tipa boja osim imena tipa (boja) sadrži i imena vrednosti pridruženih ovom tipu (crvena, zelena, plava i bela). Ove vrednosti su apstraktne jer ne predstavljaju ni brojnu vrednost ni fizičku veličinu, već imaju značenje koje je poznato samo korisniku. Korišćenje korisničkih tipova poboljšava čitljivost (razumljivost) kôda i smanjuje mogućnost greške u pisanju kôda. Arhitektura mikrosistema

58 Korisnički tipovi podataka Nabrojivi tipovi
Svakoj vrednosti iz deklaracije nabrojivog tipa implicitno je pridružen redni broj koji odgovara njenoj poziciji u spisku navedenih vrednosti. TYPE boja IS (crvena, zelena, plava, bela); crvena – redni broj 0 zelena – redni broj 1 plava – redni broj 2 bela – redni broj 3 Poredak vrednosti je od značaja ako se one koriste u relacionim izrazima: (crvena < plava) je tačano (bela < zelena) netačno Treba napomenuti da je svakoj vrednosti iz deklaracije nabrojivog tipa implicitno pridružen redni broj koji odgovara njenoj poziciji u spisku navedenih vrednosti. Tako, vrednost crvena, iz poslednje navedene deklaracije, ima redni broj 0, zelena 1 i td. Poredak vrednosti je od značaja ako se one koriste u relacionim izrazima (<, >, =). Tako, na primer, izraz (crvena < plava) je tačan, a izraz (bela < zelena) netačan. Predefinisani tipovi BIT, STD_LOGIC i STD_ULOGIC su takođe nabrojivi tipovi. Arhitektura mikrosistema

59 Arhitektura mikrosistema
Podtipovi Podtip (SUBTYPE) je tip sa ograničenjem: Ograničenje definiše podskup vrednosti osnovnog tipa koje se pridružuju podtipu. Podtip nasleđuje sve operacije osnovnog tipa. SUBTYPE nasa_logika IS STD_LOGIC RANGE ΄0΄ TO ΄Z΄; -- STD_LOGIC = (΄X΄,΄0΄,΄1΄,΄Z΄,΄W΄,΄L΄,΄H΄,΄-΄) -- nasa_logika = (΄0΄,΄1΄,΄Z΄) SUBTYPE nasa_boja IS boja RANGE crvena TO plava; -- boja = (crvena, zelena, plava, bela) -- nasa_boja = (crvena, zelena, plava) SUBTYPE mali_integer IS INTEGER RANGE -32 TO 32; -- podtip tipa INTEGER Podtip (SUBTYPE) je tip sa ograničenjem. Ograničenje definiše podskup vrednosti osnovnog tipa koje se pridružuju podtipu. Podtip nasleđuje sve operacije osnovnog tipa. Sledeći podtipovi izvedeni su iz tipova definisanih u prethodnoj sekciji. SUBTYPE natural IS INTEGER RANGE 0 TO INTEGER΄HIGH; -- prirodni brojevi su podtip (podskup) celih brojeva -- INTEGER'HIGH znači ˝najveća vrednosti tipa INTEGER˝ SUBTYPE nasa_logika IS STD_LOGIC RANGE ΄0΄ TO ΄Z΄; -- STD_LOGIC = (΄X΄,΄0΄,΄1΄,΄Z΄,΄W΄,΄L΄,΄H΄,΄-΄) -- nasa_logika = (΄0΄,΄1΄,΄Z΄) SUBTYPE nasa_boja IS boja RANGE crvena TO plava; -- boja = (crvena, zelena, plava, bela) -- nasa_boja = (crvena, zelena, plava) SUBTYPE mali_integer IS INTEGER RANGE -32 TO 32; -- podtip tipa INTEGER Uporedimo definiciju podtipa mali_integer sa definicijom istoimenog tipa iz prethodne sekcije. Oba tipa su izvedena iz tipa INTEGER, imaju identičan skup vrednosti i skup dozvoljenih operacija. Čini se da se radi o ekvivalentnim deklaracijama. Međutim, postoji jedna bitna razlika. Vrednosti tipa mali_integer ne mogu se kombinovati sa vrednostima tipa INTEGER u operacijama kao što su ΄+΄ i ΄-΄. Sa druge strane, dozvoljeno je, u istom izrazu, kombinovati vrednosti podtipa mali_integer i vrednosti tipa INTEGER. Arhitektura mikrosistema

60 Arhitektura mikrosistema
Podtipovi Primeri TYPE nova_logika IS STD_LOGIC RANGE ΄0΄ TO ΄1΄; SUBTYPE nasa_logika IS STD_LOGIC RANGE ΄0΄ TO ΄1΄; SIGNAL a: BIT; SIGNAL b: STD_LOGIC; SIGNAL c: nasa_logika; SIGNAL d: nova_logika; ... b <= a; neispravno (b je STD_LOGIC, a je BIT) b <= c; ispravno (isti osnovni tip) b <= d; neispravno (b je STD_LOGIC, d je nova_logika) TYPE nova_logika IS STD_LOGIC RANGE ΄0΄ TO ΄1΄; SUBTYPE nasa_logika IS STD_LOGIC RANGE ΄0΄ TO ΄1΄; SIGNAL a: BIT; SIGNAL b: STD_LOGIC; SIGNAL c: nasa_logika; SIGNAL d: nova_logika; ... b <= a; neispravno (b je STD_LOGIC, a je BIT) b <= c; ispravno (isti osnovni tip) b <= d; neispravno (b je STD_LOGIC, d je nova_logika) Arhitektura mikrosistema

61 Arhitektura mikrosistema
Polja Kolekcije objekata istog tipa: Jednodimenziona (1D ili vektori) 1D x 1D Dvodimeniziona (2D ili matrice) Polja viših dimenzija (npr. 3D ili 2D x 2D) se ređe koriste i obično nisu podržana u alatima za sintezu Polja su kolekcije objekata istog tipa. Polja mogu biti jednodimenziona (1D ili vektori), dvodimeniziona (2D ili matrice) ili 1D x 1D. Polja viših dimenzija (npr. 3D ili 2D x 2D) se ređe koriste i obično nisu podržana u alatima za sintezu. Na Sl. 2‑9 je ilustrovana organizacija polja. Pojedinačna vrednost (ili skalar) prikazana je na Sl. 2‑9(a), vektor (1D polje) na 3‑1(b), polje vektora (1D x 1D polje) na 3‑1(c) i polje skalara (2D polje) na 3‑1(d). Skalar 1D 1D x 1D 2D Arhitektura mikrosistema

62 Arhitektura mikrosistema
Polja Predefinisani tipovi podataka su ili skalari ili vektori (1D) Skalari: BIT, STD_LOGIC, STD_ULOGIC i BOOLEAN. Vektori: BIT_VECTOR, STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR, SIGNED i UNSIGNED. Novo (korisnički-definisano) polje: TYPE ime_tipa IS ARRAY (opseg_indeksa) OF tip; Svi predefinisani tipovi podataka su ili skalari ili vektori (jednodimenziona polja skalara). Sledeći predefinisani tipovi se mogu sintetizovati: Skalari: BIT, STD_LOGIC, STD_ULOGIC i BOOLEAN. Vektori: BIT_VECTOR, STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR, INTEGER, SIGNED i UNSIGNED. Ne postoje predefinisana 2D ili 1D x 1D polja. Ako su neophodna, takva polja mogu biti definisana od strane projektanta. Novo polje se definiše shodno sledećoj sintaksi: TYPE ime_tipa IS ARRAY (opseg_indeksa) OF tip; Arhitektura mikrosistema

63 Arhitektura mikrosistema
Polja Primer (1D x 1D) Konstruišemo polje od 4 vektora dužine 8 bita. Pojedinačne vektore nazvaćemo vrsta, a celokupnu strukturu matrica. Usvojićemo da je bit najveće težine (MSB) svakog vektora njegov krajnji levi bit i da je prva vrsta matrice vrsta 0. Postavljenim zahtevima odgovaraju sledeće deklaracije: TYPE vrsta IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; -- 1D polje TYPE matrica IS ARRAY (0 TO 3) OF vrsta; -- 1D x 1D polje SIGNAL x: matrica; D x 1D signal Isto što i: TYPE matrica IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0); Naš zadatak je da konstruišemo polje od četiri vektora dužine osam bita. Pojedinačne vektore nazvaćemo vrsta, a celokupnu strukturu matrica. Takođe, usvojićemo da je bit najveće težine (MSB) svakog vektora njegov krajnji levi bit i da je prva vrsta matrice vrsta 0. Postavljenim zahtevima odgovaraju sledeće deklaracije: TYPE vrsta IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; -- 1D polje TYPE matrica IS ARRAY (0 TO 3) OF vrsta; D x 1D polje SIGNAL x: matrica; D x 1D signal Identično 1D x 1D polje može se definisati i u jednoj liniji, na sledeći način: TYPE matrica IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0); Arhitektura mikrosistema

64 Polja Primer (2D) Polje definisano sledećom linijom kôda je ˝pravo˝ dvodimenzionalno polje, u potpunosti zasnovano na skalarima, a ne na vektorima, kao u prethodnom primeru: TYPE matrica2D IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC; Polje definisano sledećom linijom kôda je ˝pravo˝ dvodimenzionalno polje, u potpunosti zasnovano na skalarima, a ne na vektorima, kao u prethodnom primeru: TYPE matrica2D IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC; -- 2D polje Dvodimenzionalni indeks Skalarni tip Arhitektura mikrosistema

65 Arhitektura mikrosistema
Atributi Dodatne informacije pridružene tipovima podataka, signalima i drugim objektima deklarisanim u VHDL kôdu Podela: Atributi vektora: sadrže informacije (vrednosti) koje se odnose na vektor Atributi signala: služe za nadgledanje signala Atributi su dodatne informacije pridružene tipovima podataka, signalima i drugim objektima deklarisanim u VHDL kôdu. Postoje brojni predefinisani atributi, kao i mogućnost da projektant definiše svoje, korisničke atribute. Za referenciranje atributa koristi se apostrof (˝΄˝). Na primer, notacija x΄attr se odnosi na atribut attr tipa ili objekta x. Razmotrićemo dve grupe atribute: atributi vektora: sadrže informacije (vrednosti) koje se odnose na vektor atributi signala: služe za nadgledanje signala Arhitektura mikrosistema

66 Atributi - atributi vektora
d je vektor: d΄LOW vraća najmanji indeks vektora d d΄HIGH vraća naveći indeks vektora d d΄LEFT vraća krajnji levi indeks vektora d d΄RIGHT vraća krajnji desni indeks vektora d d΄LENGTH vraća veličinu (dužinu) vektora d d΄RANGE vraća opseg vektora d Arhitektura mikrosistema

67 Atributi - atributi vektora Primer 1
Za signal d: SIGNAL d : STD_LOGIC_VECTOR(7 DOWNTO 0); važi: d΄LOW=0 d΄LENGTH=8 d΄HIGH=7 d΄RANGE=(7 downto 0) d΄LEFT=7 d΄REVERSE_RANGE=(0 to 7) d΄RIGHT=0 Arhitektura mikrosistema

68 Atributi - atributi vektora Primer 2
Za signal d: SIGNAL d : STD_LOGIC_VECTOR(0 TO 7); Sledeće četiri LOOP naredbe su ekvivalentne (brojač i uzima redom sve vrednosti definisane pridruženim opsegom): FOR i IN RANGE (0 TO 7) LOOP . . . FOR i IN x΄RANGE LOOP . . . FOR i IN RANGE (x΄LOW TO x΄HIGH) LOOP . . . FOR i IN RANGE (0 TO x΄LENGTH-1) LOOP . . . Arhitektura mikrosistema

69 Atributi - atributi signala
s je signal: Dozvoljeni u sintezi s΄EVENT vraća TRUE ako se na signalu desio događaj s΄STABLE vraća TRUE ako se na signalu nije desio događaj s΄ACTIVE vraća TRUE ako je s = ΄1΄ s΄QUIET<vreme> vraća TRUE ako se u navedenom vremenu na signalu nije desio događaj s΄LAST_EVENT vraća vreme proteklo od poslednjeg događaja na signalu s s΄LAST_ACTIVE vraća vreme proteklo od kada je signal poslednji put imao vrednost s = ΄1΄ s΄LAST_VALUE vraća vrednost signala s neposredno pre poslednjeg dogadjaja Arhitektura mikrosistema

70 Atributi - atributi signala Primer
Rastuća ivica signala clk: IF (clk΄EVENT AND clk=΄1΄) ... -- atribut EVENT u IF naredbi IF (NOT clk΄STABLE AND clk=΄1΄) ... -- atribut STABLE u IF naredbi WAIT UNTIL (clk΄EVENT AND clk=΄1΄); -- atribut EVENT u WAIT naredbi Primer: Sledeće četiri naredbe su ekvivalentne i mogu se sintetizovati. Svaka od naredbi vraća TRUE ako se na signalu clk desio događaj (tj. ako je došlo do promene vrednosti signal clk) i nova vrednost signala je clk=΄1΄ (drugim rečima ako se javila rastuća ivica signala clk). IF (clk΄EVENT AND clk=΄1΄) atribut EVENT u IF naredbi IF (NOT clk΄STABLE AND clk=΄1΄) atribut STABLE u IF naredbi WAIT UNTIL (clk΄EVENT AND clk=΄1΄); -- atribut EVENT u WAIT naredbi IF RISING_EDGE(clk) poziv funkcije Arhitektura mikrosistema


Download ppt "Osnovne jezičke konstrukcije"

Similar presentations


Ads by Google