Presentation is loading. Please wait.

Presentation is loading. Please wait.

Arhitektura mikrosistema

Similar presentations


Presentation on theme: "Arhitektura mikrosistema"— Presentation transcript:

1 Arhitektura mikrosistema
Sekvencijalni kôd Sekvencijalni kôd je sadržan u: Procesu (PROCESS) Proceduri (PROCEDURE) Funkciji (FUNCTION) Sekvencijalne naredbe: IF WAIT CASE LOOP VHDL je u osnovi konkurentan jezik. Jedine sekcije kôda koje se izvršavaju sekvencijalno su one obuhvaćene konstrukcijama PROCESS, FUNCTION i PROCEDURE. Međutim, kao celine, ove sekcije se izvršavaju konkurentno u odnosu na druge delove kôda. U ovom odeljku razmatraćemo naredbe koje je dozvoljeno koristiti unutar sekvencijalnih sekcija. To su: IF, WAIT, CASE i LOOP. Korišćenje promenljivih (VARIABLE) je takođe ograničeno isključivo na sekvencijalni kôd. Za razliku od signala (SIGNAL), VARIABLE ne mogu biti deklarisane kao globalne, tako da se njihova vrednost ne može direktno preneti iz sekvencijalne sekcije u neki drugi deo kôda. U ovom odeljku, naša pažnja biće usmerena na konstrukciju PROCESS. Preostale dve konstrukcije za kreiranje sekvencijalnog kôda (FUNCTION i PROCEDURE) bitne su za projektovanje na sistemskom nivou i biće detaljno razmatrane u 2.10. Arhitektura mikrosistema

2 Arhitektura mikrosistema
PROCESS Okvir za sekvencijalni kod - definiše oblast arhitekture u kojoj se naredbe izvršavaju na sekvencijalan način. Kao celina, proces je konkurentna naredba i može se kombinovati s drugim konkurentnim naredbama i procesima u okviru iste arhitekture. U odnosu na to kako se definišu uslovi za aktiviranje, razlikujemo dve vrste procesa: proces sa listom senzitivnosti i proces sa wait naredbom. Arhitektura mikrosistema

3 Proces sa listom senzitivnosti
[labela:] PROCESS (lista senzitivnosti) [VARIABLE ime tip [opseg] [:= inicijalna_vrednost]] BEGIN (sekvencijalni kôd) END PROCESS [labela]; Lista senzitivnosti: spisak signala na koje je proces senzitivan (osetljiv) Promena vrednosti bilo kog signala iz liste senzitivnosti aktivira proces Nakon aktiviranja, naredbe iz dela sekvencijalni kôd se izvršavaju jedna za drugom. Nakon što se izvrši i poslednja naredba, proces se deaktivira, i ostaje neaktivan sve do ponovnog aktiviranja PROCESS predstavlja sekvencijalnu sekciju VHDL kôda. VHDL projekat može sadržati proizvoljan broj procesa, ali svi oni moraju biti smešteni u arhitekturi u glavnom kôdu, tj. ne mogu biti deo paketa/biblioteke. Konstrukcija PROCESS ima sledeću sintaksu (opcioni delovi sintakse obuhvaćeni su uglastim zagradama): [labela:] PROCESS (lista senzitivnosti) [VARIABLE ime tip [opseg] [:= inicijalna_vrednost]] BEGIN (sekvencijalni kôd) END PROCESS [labela]; Konstrukcija PROCESS počinje ključnom rečju PROCESS, nakon koje sledi tzv. lista senzitivnosti. Lista senzitivnosti sadrži spisak ulaznih signala na koje je proces senzitivan (osetljiv), tj. na koje proces reaguje. Promena vrednosti bilo kog signala iz liste senzitivnosti aktivira proces. Nakon aktiviranja, naredbe iz dela sekvencijalni kôd se izvršavaju jedna za drugom. Nakon što se izvrši i poslednja naredba, proces se deaktivira, i ostaje neaktivan sve do ponovnog aktiviranja. Varijable su opcione. Ako se koriste, moraju biti deklarisane u deklarativnom delu procesa (pre ključne reči BEGIN). Prilikom deklaracije, varijabli se može dodeliti inicijalna vrednost. Međutim, inicijalne vrednosti varijabli su podržane samo u simulaciji, ali ne i u sintezi VHDL kôda. Takođe opciono, proces može biti označen labelom, kojom započinje i kojom se završava PROCESS konstrukcija. Arhitektura mikrosistema

4 Proces sa listom senzitivnosti - primer - opis kombinacionog kola
SIGNAL a, b, c : STD_LOGIC; . . . PROCESS(a, b, c) BEGIN y <= a OR b OR c; END PROCESS; Proces se izvrši jedanput uvek kad se promeni vrednost nekog od signala a, b ili c. Isti efekat kao jednostavna konkurentna naredba dodele: y <= a OR b OR c; Arhitektura mikrosistema

5 Proces sa listom senzitivnosti - primer - opis sekvencijalnog kola
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY dff IS PORT (d,clk,rst : IN STD_LOGIC; q : OUT STD_LOGIC); END dff; ARCHITECTURE arch_proc OF dff IS BEGIN PROCESS(clk,rst) IF(rst='1') THEN q <= '0'; ELSIF(clk'EVENT AND clk='1') THEN q <= d; END IF; END PROCESS; END arch_proc; D flip-flop (DFF) je osnovni gradivni element sekvencijalnih kola. Varijanta DFF sa asinhronim resetom prikazana je na Sl. 2‑27. DFF predstavlja memorijsko kolo kapaciteta jednog bita. Vrednost koja je upisana (memorisana) u flip-flopu dostupna je na izlazu q. Pod dejstvom rastuće ivice taktnog signala, clk, u DFF se upisuje vrednost ulaznog signala d. Ulaz za asinhrono resetovanje, rst, služi za forsirano (nezavisno od clk) postavljanje DFF u stanje q=0. Sledi VHDL kôd DFF-a sa asinhronim resetovanjem. U prezentovanom VHDL kôdu, funkcija DFF-a je realizovana pomoću procesa koji sadrži samo jednu sekvencijalnu naredbu, IF. Ako je rst=´1´, izlaz mora biti q=´0´ (linije 14-15), bez obzira na taktni signal clk. U suprotnom, za rst=´0´, a pod uslovom da se signal clk promenio sa 0 na 1, na izlaz flip-flopa se prenosi vrednost ulaza d, tj. q=d (linije 16-17). U liniji 16, za detekciju promene signala clk koristi se atribut EVENT. clk’EVENT vraća TRUE uvek kada se vrednost signala clk promeni (bilo sa 0 na 1 ili sa 1 na 0). Da bi se izdvojila promena koja odgovara rastućoj ivici, uslov clk’EVENT je dopunjen uslovom clk=´1´). PROCESS (linije 12-19) se izvrši jedanput, uvek kada se promeni bilo koji od signala clk ili rst. Uočimo da lista senzitivnosti ne sadrži ulazni signal d. To znači da eventualne promene ovog signala, same po sebi, ne utiču na rad flip-flopa, već je vrednost signala d od značaja jedino u trenucima promene takta sa 0 na 1 (što upravo odgovara načinu rada realnog DFF-a). Detekcija rastuće ivice taktnog signala Arhitektura mikrosistema

6 Proces sa wait naredbom
Ako se WAIT koristi u procesu, lista senzitivnosti mora biti izostavljena WAIT sustenduje izvršenje procesa do ispunjenja zadatog uslova Tri oblika: WAIT UNTIL uslov; WAIT ON signal1 [, signal2, …]; WAIT FOR vreme; -- samo u simulaciji Arhitektura mikrosistema

7 Proces sa wait naredbom primer- opis kombinacionog kola
SIGNAL a, b, c : STD_LOGIC; . . . PROCESS(a, b, c) BEGIN y <= a OR b OR c; END PROCESS; SIGNAL a, b, c : STD_LOGIC; . . . PROCESS BEGIN WAIT ON a, b, c; y <= a OR b OR c; END PROCESS; Arhitektura mikrosistema

8 Proces sa wait naredbom primer- opis sekvencijalnog kola
PROCESS (clk) VARIABLE v : INTEGER RANGE 0 TO 10; BEGIN IF(clk'EVENT AND clk='1') THEN v := v + 1; IF(v = 10) THEN v := 0; END IF; cifra <= v; END PROCESS; PROCESS VARIABLE v : INTEGER RANGE 0 TO 10; BEGIN WAIT UNTIL (clk'EVENT AND clk='1'); v := v + 1; IF(v = 10) THEN v := 0; END IF; cifra <= v; END PROCESS; BCD brojač Arhitektura mikrosistema

9 Arhitektura mikrosistema
Signali u procesu Deklarišu se u deklarativnom delu arhitekture, a vidljivi su, tj. mogu se koristiti, kako u konkurentnim sekcijama arhitekture, tako i unutar procesa koji su obuhvaćeni arhitekturom. ARCHITECTURE … SIGNAL a,b : STD_LOGIC; BEGIN . . . PROCESS(…) b <= …; END PROCESS; a <= b …; END … Arhitektura mikrosistema

10 Odložena dodela signala u procesu
Dodela vrednosti signalu, obavljena unutar procesa, odlaže se do trenutka završetka tekućeg izvršenja procesa. U toku jednog izvršenja procesa, signal zadržava vrednost koju je imao u trenutku aktiviranja procesa (a koja potiče iz prethodnog izvršenja procesa), a novu vrednost dobija tek nakon deaktiviranja procesa. Ako se unutar procesa istom signalu više puta dodeli vrednost, samo će poslednja dodela imati vidljiv efekat . Arhitektura mikrosistema

11 Odložena dodela signala u procesu
Važi samo poslednja dodela istom signalu Iste naredbe u konkurentnom kodu Višestruke dodele u konkurentnom kodu nisu zabranjene, ali stvaraju kratak spoj Arhitektura mikrosistema

12 Arhitektura mikrosistema
Varijable Samo u sekvencijalnom kodu (PROCESS, PROCEDURE, FUNCTION) Samo kao lokalne promenljive Ažuriranje varijable je trenutno (kao promenljive iz programskih jezika) Naredba dodele za varijable: var := izraz; Arhitektura mikrosistema

13 Arhitektura mikrosistema
Proces s varijablom Varijable se deklarišu u deklarativnoj sekciji procesa SIGNAL a, b, y : STD_LOGIC; ... PROCESS(a,b) VARIABLE v : STD_LOGIC; BEGIN v := ’0’; v := v XOR a; v := v XOR b; y <= v; PROCESS; Isti tipovi podataka kao za procese Neposredno ažuriranje (odmah nakon izvršene naredbe) Isti efekat kao: y <= a XOR b; Rezultat izračunavanja se iznosi van procesa Isti kod, ali sa signalima Arhitektura mikrosistema

14 Sinteza procesa s varijablom
SIGNAL a, b, y : STD_LOGIC; ... PROCESS(a,b) VARIABLE v : STD_LOGIC; BEGIN v := ’0’; v := v XOR a; v := v XOR b; y <= v; PROCESS; PROCESS(a,b) VARIABLE v0, v1, v2 : STD_LOGIC; BEGIN v0 := ’0’; v1 := v0 XOR a; v2 := v1 XOR b; y <= v2; END PROCESS; Neophodna je transformacija koda => zamena varijable v sa više novih varijabli, tako da se svaka koristi samo jedanput s leve strane u naredbi dodele. (Automatski sprovodi softver za sintezu) Direktna sinteza nije moguća Arhitektura mikrosistema Isti kod, ali sa signalima

15 Arhitektura mikrosistema
Signali vs. varijable SIGNAL a, b, s : STD_LOGIC; ... PROCESS(a,b,s) BEGIN s <= ’0’; s <= s XOR a; s <= s XOR b; y <= s; END PROCESS; Zbog odložene dodele PROCESS(a,b,s) BEGIN s <= s XOR b; y <= s; END PROCESS; Signal se ne može delarisati u procesu Lista senzitivnosti za kombinaciono kolo sadrži sve signale koji se kao ulazni koriste u procesu (uključujući i s). Arhitektura mikrosistema

16 IF Sintaksa: IF uslov_1 THEN sekvencijane naredbe; ELSIF uslov_2 THEN
. . . ELSE END IF; Uslovi se ispituju redom IF(x<y) THEN v := “ ”; w := ‘1’; ELSIF(x=y) THEN v:=” ”; w := ‘0’; ELSE v:=(OTHERS => ‘0’); END IF; IF naredba počine ključnom rečju IF, završava se rečima END IF i sadrži dve opcione klauzule, ELSIF i ELSE. ELSIF se može ponoviti proizvoljan broj puta, a ELSE samo jedanput. IF i ELSIF grane sadrže uslove koji predstavljaju logičke izraze (tj. izraze čiji rezultat može biti samo tačno ili netačno). Naredba radi tako što se redom ispituju uslovi sve dok se ne naiđe na granu čiji je uslov tačan, a onda se redom izvršavaju sve sekvencijalne naredbe obuhvaćene tom granom. Ako ni jedan uslov nije tačan, izvršiće se ELSE grana (ako postoji); ako ni jedan uslov nije tačan i ELSE grana ne postoji, IF naredba neće imati nikakav efekat. U svakoj grani IF naredbe može se naći proizvoljan broj sekvencijalnih naredbi, uključujući i druge IF naredbe. Izvršava se samo ako ni jedan uslov nije tačan Arhitektura mikrosistema

17 Arhitektura mikrosistema
IF - Multiplekser 4-u-1 ENTITY mux IS PORT ( a,b,c,d : IN STD_LOGIC; sel: IN STD_LOGIC_VECTOR(1 DOWNTO 0); y : OUT STD_LOGIC); END mux; ARCHITECTURE if_arch OF mux IS BEGIN PROCESS(a,b,c,d,sel) IF(s=”00”) THEN y <= a; ELSIF(s=”01”) THEN y <= b; ELSIF(s=”10”) THEN y <= c; ELSE y <= d; END IF; END PROCESS; END if_arch; Mux je kombinaciono kolo => u listi senzitivnosti moraju biti navedni svi ulazni signali Arhitektura mikrosistema

18 Arhitektura mikrosistema
IF - Dekoder 2-u-4 ARCHITECTURE if_arch OF dek2u4 IS BEGIN PROCESS(d, e) IF(e = ’0’) THEN y <= "0000"; ELSIF(d = "00") THEN y <= "0001"; ELSIF(d = "01") THEN y <= "0010"; ELSIF(d = "10") THEN y <= "0100"; ELSE y <= "1000"; END IF; END PROCESS: END if_arch; Arhitektura mikrosistema

19 Arhitektura mikrosistema
IF - Koder 4-u-1 ARCHITECTURE if_arch OF encoder IS BEGIN PROCESS(x) IF(x = "0001") THEN y <= "00"; ELSIF(x = "0010") THEN y <= "01"; ELSIF(x = "0100") THEN ELSE y <= "11"; END IF; END PROCESS: END if_arch; Arhitektura mikrosistema

20 IF - Prioritetni koder 4-u-1
ARCHITECTURE if_arch OF pencoder IS BEGIN PROCESS(x) IF(x(3) = ’1’) THEN y <= "11"; ELSIF(x(2) = ’1’) THEN y <= "10"; ELSIF(x(1) = ’1’) THEN y <= "01"; ELSE y <= "00"; END IF; IF x = "0000" THEN z <= ’0’; z <= ’1’; END PROCESS: END if_arch; Arhitektura mikrosistema

21 Arhitektura mikrosistema
IF vs. WHEN Naredba IF je opštija od naredbe WHEN/ELSE, jer grane IF naredbe mogu sadržati ne samo jednu, već niz sekvencijalnih naredbi. Pravilnim i ˝disciplinovanim˝ korišćenjem naredbe IF kreira se deskriptivniji (čitljiviji) i često efikasniji (u smislu sinteze) kôd. Na primer, za razliku od WHEN/ELSE, ugnježdavanje IF naredbi je dozvoljeno. Međutim, IF naredba je opštija od WHEN: Grane IF naredbe mogu sadržati više od jedne naredbe Dozvoljeno ugnježdavanje IF naredbi Arhitektura mikrosistema

22 IF - Konceptualna implementacija
Ako postavlja samo jedan izlazni signal, isto kao when IF uslov_1 THEN sig <= izraz_1; ELSIF uslov_2 THEN sig <= izraz_2; ELSIF uslov_3 THEN sig <= izraz_3; ELSE sig <= izraz_4; END IF; Arhitektura mikrosistema

23 IF - Konceptualna implementacija
Ako postavlja više od jednog izlaznog signala, za svaki signal zasebna multiplekserska mreža IF uslov_1 THEN sig_a <= izraz_a_1; sig_b <= izraz_b_1; ELSE sig_a <= izraz_a_2; sig_b <= izraz_b_2; END IF; Arhitektura mikrosistema

24 IF - Konceptualna implementacija
Ugnježdene if naredbe IF uslov_1 THEN IF uslov_2 THEN sig <= izraz_a_1; ELSE sig <= izraz_a_2; END IF; IF uslov_3 THEN sig <= izraz_b_1; sig <= izraz_b_2; Arhitektura mikrosistema

25 Arhitektura mikrosistema
IF vs. WHEN - Primer PROCESS(a,b,c) BEGIN IF (a>b) THEN IF (a>c) THEN max <= a; -- a>b i a>c ELSE max <= c; -- a>b i c>=a END IF; IF (b>c) THEN max <= b; -- b>=a i b>c max <= c; -- b>=a i c>=b END PROCESS; Max = max{a, b, c} SIGNAL ac_max, bc_max : STD_LOGIC; . . . ac_max <= a WHEN (a > c) ELSE c; bc_max <= b WHEN (b > c) ELSE c; max <= ac_max WHEN (a > b) ELSE bc_max; Arhitektura mikrosistema

26 Dozvoljeno više od jedne narebe Pokriva sve vrednosti koje nedostaju
CASE Sintaksa: CASE selekcioni_izraz IS WHEN vrednost => sekvencijalne_naredbe; . . . END CASE; Primer: CASE ctrl IS WHEN "00" => x<=a; y<=b; WHEN "01" => x<=b; y<=c; WHEN OTHERS => x<="0000"; y<="ZZZZ"; Dozvoljeno više od jedne narebe Naredba CASE je slična konkurentnoj naredbi WHEN. Zavisno od vrednosti selekcionog izraza, za izvršenje se bira jedna od WHEN grana. Kao i kod konkurentne WHEN naredbe, sve moguće vrednosti izraza moraju biti pokrivene WHEN granama. Grana OTHERS pokriva sve vrednosti selekcionog izraza koje nisu obuhvaćene prethodnim granama. Za razliku od konkurentne WHEN naredbe, CASE naredba dozvoljava da svaka grana, u delu sekvencijalne_naredbe, sadrži više od jedne naredbe (slično IF naredbi). U granama gde ne postoji potreba za bilo kakvom akcijom, dozvoljeno je koristiti ključnu reč NULL. Pokriva sve vrednosti koje nedostaju Arhitektura mikrosistema

27 CASE - Primer (Multiplekser 4-u-1)
ENTITY mux IS PORT ( a,b,c,d : IN STD_LOGIC; sel: IN STD_LOGIC_VECTOR(1 DOWNTO 0); y : OUT STD_LOGIC); END mux; ARCHITECTURE case_arch OF mux IS BEGIN PROCESS(a,b,c,d,sel) CASE sel IS WHEN ”00” => y <= a; WHEN ”01” => y <= b; WHEN ”10” => y <= c; WHEN OTHERS y <= d; END CASE; END PROCESS; END case_arch; Neophodno, sel je tipa STD_LOGIC Arhitektura mikrosistema

28 CASE – Binarni dekoder 2-u-4
Arhitektura mikrosistema

29 CASE – Binarni koder 4-u-2
Arhitektura mikrosistema

30 CASE – Prioritetni koder 4-u-2
Arhitektura mikrosistema

31 CASE D flip-flop sa asinhronim resetovanjem
ENTITY dff IS PORT (d,clk,rst : IN BIT; q : OUT BIT); END dff; ARCHITECTURE dff3 OF dff IS BEGIN PROCESS(clk,rst) CASE rst IS WHEN '1' => q<='0'; WHEN '0' => IF(clk'EVENT AND clk='1') THEN q<=d; END IF; WHEN OTHERS => NULL; END CASE; END PROCESS; END dff3; NULL - ˝prazna˝ naredba, bez efekta Nepotrebna grana, rst je tipa BIT Arhitektura mikrosistema

32 Arhitektura mikrosistema
CASE vs. SELECT Međutim, CASE je opštija nareba jer dozvoljava više sekvencijalnih naredbi u jednoj grani Arhitektura mikrosistema

33 Konceptualna implementacija naredbe CASE - jedna naredba po grani
CASE sel IS WHEN v1 => sig <= izraz_1; WHEN v2 => sig <= izraz_2; WHEN OTHERS sig <= izraz_3; END CASE; Isto kao konkurentna naredba select Arhitektura mikrosistema

34 Arhitektura mikrosistema
Konceptualna implementacija naredbe CASE -više od jedne naredba po grani CASE case_uslov IS WHEN c0 => sig_a <= izraz_a_0; sig_b <= izraz_b_0; WHEN c1 => sig_a <= izraz_a_1; sig_b <= izraz_b_1; WHEN OTHERS sig_a <= izraz_a_n; sig_b <= izraz_b_n; END CASE; Za svaki signal poseban multiplekser Arhitektura mikrosistema

35 Arhitektura mikrosistema
LOOP Za kreiranje petlji u sekvencijalnom kôdu Tri oblika: FOR LOOP WHILE LOOP LOOP Arhitektura mikrosistema

36 Arhitektura mikrosistema
LOOP – FOR LOOP Petlja se ponavlja zadati broj puta Sintaksa [labela: ] FOR identifikator IN opseg LOOP (sekvencijalne naredbe) END LOOP [labela]; Primer: faktorijel := 1; FOR broj IN 2 TO 10 LOOP faktorijel := faktorijel * broj; END LOOP; Ograničenja: U telu petlje, nije dozvoljeno dodeljivati vrednosti identifikatoru U kôdu namenjenom sintezi obe granice opsega FOR / LOOP naredbe moraju biti statičke Arhitektura mikrosistema

37 Arhitektura mikrosistema
LOOP - WHILE LOOP Petlja se ponavlja sve dok se ne ispuni zadati uslov. Sintaksa: [labela: ] WHILE uslov LOOP (sekvencijalne naredbe) END LOOP [labela]; Primer: i:= 0; sum:= 10; WHILE (i < 20) LOOP sum:= sum * 2; i:= i + 3; END LOOP; Arhitektura mikrosistema

38 Arhitektura mikrosistema
LOOP - LOOP Beskonačna petlja [labela: ] LOOP (sekvencijalne naredbe) END LOOP [labela]; Uslov za izlazak iz petlje definisan je u telu petlju: Isti efekat kao: WAIT UNTIL a=b; sum:=1; LOOP sum:=sum*3; EXIT WHEN sum>100; END LOOP; LOOP WAIT on a,b; EXIT WHEN a=b; END LOOP; Arhitektura mikrosistema

39 LOOP Jednostavan barrel pomerač
ARCHITECTURE loop_arch OF barrel IS BEGIN PROCESS(inp,shift) IF(shift='0') THEN outp <= inp; ELSE outp(0)<='0'; FOR i IN 1 TO 7 LOOP outp(i) <= inp(i-1); END LOOP; END IF; END PROCESS; END loop_arch; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY barrel IS PORT (inp : IN STD_LOGIC_VECTOR(7 DOWNTO 0); shift : IN STD_LOGIC; outp : OUT STD_LOGIC_VECTOR(n-1 DOWNTO 0)); END barrel; Arhitektura mikrosistema

40 LOOP Generator bita parnosti
Vrednost na izlazu dopunjuje broj ulaznih 1-ca do parnog broja y <= a(0) XOR a(1) XOR … XOR a(7); ARCHITECTURE loop_arch OF pargen IS BEGIN PROCESS(a) VARIABLE p : STD_LOGIC; p := a(0); FOR i IN 1 TO 7 LOOP p := p XOR a(i); END LOOP; y <= p; END PROCESS; END loop_arch; Arhitektura mikrosistema

41 LOOP Sabirač sa rednim prenosom
si = ai XOR bi XOR ci ci+1 = (ai AND bi) OR (ai AND ci) OR (bi AND ci) Potpuni sabirač Arhitektura mikrosistema

42 LOOP Sabirač sa rednim prenosom
ENTITY sabirac IS PORT (a,b : IN STD_LOGIC_VECTOR(7 DOWNTO 0); cin : IN STD_LOGIC; s : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); cout : OUT STD_LOGIC); END sabirac; ARCHITECTURE sabirac1 OF sabirac IS BEGIN PROCESS(a,b,cin) VARIABLE c : STD_LOGIC_VECTOR(8 DOWNTO 0); c(0):=cin; FOR i IN 0 TO 7 LOOP s(i) <= a(i) XOR b(i) XOR c(i); c(i+1):=(a(i) AND b(i)) OR (a(i) AND c(i)) OR (b(i) AND c(i)); END LOOP; cout <= c(8); END PROCESS; END sabirac1; Arhitektura mikrosistema

43 Konceptualna implementacija FOR LOOP naredbe
c(0):=cin; FOR i IN 0 TO duzina-1 LOOP s(i) <= a(i) XOR b(i) XOR c(i); c(i+1):=(a(i) AND b(i)) OR (a(i) AND c(i)) OR (b(i) AND c(i)); END LOOP; cout <= c(duzina); Razotavanje petlje c(0):=cin; -- i = s(0) <= a(0) XOR b(0) XOR c(0); c(1):=(a(0) AND b(0)) OR (a(0) AND c(0)) OR (b(0) AND c(0)); -- i = s(1) <= a(1) XOR b(1) XOR c(1); c(2):=(a(1) AND b(1)) OR (a(1) AND c(1)) OR (b(1) AND c(1)); -- i = s(2) <= a(2) XOR b(2) XOR c(2); c(3):=(a(2) AND b(2)) OR (a(2) AND c(2)) OR (b(2) AND c(2)); -- i = s(3) <= a(3) XOR b(3) XOR c(3); c(4):=(a(3) AND b(3)) OR (a(3) AND c(3)) OR (b(3) AND c(3)); cout <= c(4); Sinteza Arhitektura mikrosistema

44 Sekvencijalni kôd za kombinaciona kola
Sekvencijalni kôd se koristi za opis: Sekvencijalnih kola (koriste se memorijski elementi) Kombinacionih kola (memorijski elementi se ne koriste) Kako kompajler ˝zna˝ da se radi o kombinacinom kolu ? Svi ulazni signali koji se koriste u procesu moraju biti navedeni u listi senzitivnosti. U kôdu su sadržane sve kombinacije ulaznih/izlaznih signala, tako da kompajler analizom kôda može da rekonstruiše potpunu tabelu istinitosti. Sekvencijalni kôd se može koristiti kako za realizaciju sekvencijalnih, tako i kombinacionih kola. Razlika između ova dva tipa kola je u tome što su kod prvih neophodni registri (flip-flopovi), dok se kod drugih registri ne koriste. Da bi kompajler prepoznao kôd kao kôd za kombinaciono kolo, neophodno je da su ispunjena sledeća dva uslova: Svi ulazni signali koji se koriste (˝čitaju˝) u procesu moraju biti navedeni u listi senzitivnosti. U kôdu su sadržane sve kombinacije ulaznih/izlaznih signala, tako da kompajler analizom kôda može da rekonstruiše potpunu tabelu istinitosti. Prvi uslov nije obavezan za sintezu. Tipično, ako je lista senzitivnosti nepotpuna, kompajler će izdati odgovarajuće upozorenje, ali će sintetizovano kolo biti korektno. Problem će se javiti u simulaciji takvog kôda, jer proces neće reagovati na ulazne signale kojih nema u listi senzitivnosti. Drugi uslov čini suštinsku razliku između kombinacionih i sekvencijalnih kola i mora biti ispunjen da se generisalo korektno rešenje. Nedefinisan odziv procesa na neku ulaznu kombinaciju znači da proces pri takvoj pobudi zadržava (memoriše) prethodni izlaz. Da bi se omogućilo memorisanje, u sintetizovano kolo biće uključena leč kola. Arhitektura mikrosistema

45 Tipične greške u pisanju procesa za kombinaciona kola
ILI kolo Nekomplenta lista senzitivnosti PROCESS(a) BEGIN y <= a OR b OR c; END PROCESS; U simulaciji: Proces ne reaguje na promene signala b i c. Izlaz y zadržava svoju staru vrednost bez obzira na novu vrednost signala b ili c - slično flip-flopu U sintezi: Samo upozorenje, ali sintetiše se ILI kolo Arhitektura mikrosistema

46 Tipične greške u pisanju procesa za kombinaciona kola
Komparator jednakosti Treba ovako: PROCESS(a,b) BEGIN IF(a=b) THEN eq <= '1'; END IF; END PROCESS; IF(a=b) THEN eq <= '1'; ELSE eq <= '0'; END IF; A šta ako je a ≠ b? Nedostaje ELSE grana Bez obzira na vrednosti signala a i b, uvek eq dobija definisanu vrednost, 0 ili 1 Nedefinisan odziv stvara memoriju u kolu. Kao da piše: IF(a=b) THEN eq <= '1'; ELSE eq <= eq; END IF; Ako je a ≠ b, eq zadržava svolju staru vrednost Arhitektura mikrosistema

47 Tipične greške u pisanju procesa za kombinaciona kola
Kompaktan, ali pogrešan opis potpunog komparatora Treba ovako: Ili ovako: PROCESS(a, b) BEGIN IF(a > b) THEN gt <= ‘1’; eq <= ‘0’; lt <= ‘0’; ELSIF (a = b) THEN gt <= ‘0’; eq <= ‘1’; ELSE lt <= ‘1’; END IF; END PROCESS; PROCESS(a, b) BEGIN gt <= ‘0’; eq <= ‘0’; lt <= ‘0’; IF(a > b) THEN gt <= ‘1’; ELSIF (a = b) THEN eq <= ‘1’; ELSE lt <= ‘1’; END IF; END PROCESS; PROCESS(a, b) BEGIN IF(a > b) THEN gt <= ‘1’; ELSIF(a = b) THEN eq <= ‘1’; ELSE lt <= ‘1’; END IF; END PROCESS; IF naredba je kompletna, ali grane IF naredbe nisu Arhitektura mikrosistema

48 Leč kola i flip-flopovi
Leč je transparentan dok je CLK=1 Flip-flop nikada nije transparentan. Rastuća (ili opadajuća) ivica CLK inicira upis u flip-flop. Arhitektura mikrosistema

49 Leč kola i flip-flopovi
D flip-flop LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY dff IS PORT (d,clk : IN STD_LOGIC; q : OUT STD_LOGIC); END dff; ARCHITECTURE flip_flop OF dff IS BEGIN PROCESS(clk) IF(clk'EVENT AND clk='1') THEN q <= d; END IF; END PROCESS; END flip_flop; D leč LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY dlec IS PORT (d,clk : IN STD_LOGIC; q : OUT STD_LOGIC); END dlec; ARCHITECTURE lec OF dlec IS BEGIN PROCESS(d,clk) IF clk = '1' THEN q <= d; END IF; END PROCESS; END lec; Arhitektura mikrosistema

50 Arhitektura mikrosistema
D FF sa dozvolom Asinhroni reset LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY dffe IS PORT (d,clk,en,rst : IN STD_LOGIC; q : OUT STD_LOGIC); END dff; Arhitektura mikrosistema

51 Arhitektura mikrosistema
D FF sa dozvolom Jednosegmentni kod - celokupan opis je u procesu: ARCHITECTURE dffe_v1 OF dffe IS BEGIN PROCESS(clk,rst) IF(rst = ‘1’) THEN q <= ‘0’; ELSIF(clk'EVENT AND clk='1') THEN IF(en = ’1’) THEN q <= d; END IF; END PROCESS; END dffe_v1; Arhitektura mikrosistema

52 Arhitektura mikrosistema
D FF sa dozvolom ARCHITECTURE dffe_v2 OF dffe IS SIGNAL q_reg, q_next : STD_LOGIC; BEGIN PROCESS(clk,rst) IF(rst = ‘1’) THEN q_reg <= ‘0’; ELSIF(clk'EVENT AND clk='1') THEN q_reg <= q_next; END IF; END PROCESS; -- Logika sledeceg stanja q_next <= d WHEN en = ’1’ ELSE q_reg; -- Izlazna logika q_next <= q_reg; END dffe_v2; Višesegmentni kod Logika sledećeg stanja i izlaza van procesa Arhitektura mikrosistema

53 Sinteza signala u flip-flop
Pod kojim uslovima se signali sintetišu u registre (flip-flopove) ? Signal se sintetiše u flip-flop ako je dodela vrednosti tom signalu uslovljena tranzicijom nekog drugog signala. Takve naredbe dodele se nazivaju sinhronim naredbama dodele i mogu se javiti samo u sekvencijalnom kôdu, obično nakon konstrukcija tipa: ˝IF signal´EVENT …˝ ili ˝WAIT UNTIL …˝. U ovom odeljku biće razmatrano kada i pod kojim uslovima se signali i varijable sintetišu u registre (flip-flopove). Signal se sintetiše u flip-flop ako je dodela vrednosti tom signalu uslovljena tranzicijom nekog drugog signala. Takve naredbe dodele se nazivaju sinhronim naredbama dodele i mogu se javiti samo u sekvencijalnom kôdu, obično nakon konstrukcija tipa: ˝IF signal´EVENT …˝ ili ˝WAIT UNTIL …˝. Na primer, na Sl. 2‑39 je prikazano kolo koga čine dva flip-flopa i odgovarajući VHDL kôd koji sadrži dve sinhrone naredbe dodele. Dodele vrednosti signalima out1 i out2 su sinhronizovane sa rastućom ivicom signala clk. Zbog toga u sintetizovanom kolu postoje dva flip-flopa: jedan pamti vrednost signala out1, a drugi signala out2. Sa druge strane, dodela vrednosti signalu out3 nije sinhronizovana sa signalom clk i zato se ovaj signal sintetiše u prostu vezu Arhitektura mikrosistema

54 Sinteza signala u flip-flop
IF(clk'EVENT AND clk='1') THEN q <= d; END IF; Sinhrona naredba dodele - uslovljena ivicom signala - q se sintetiše u flip-flop PROCESS(clk,a) BEGIN IF(clk’EVENT AND clk=’1’)THEN out1 <= b; out2 <= a; END IF; out3 <= a; END PROCESS; Sinhrone naredbe dodele Bezuslovna naredba dodele Arhitektura mikrosistema

55 D flip-flop sa komplementarnim izlazima
ARCHITECTURE neispravna OF dff IS SIGNAL q_reg : STD_LOGIC; BEGIN PROCESS(clk) IF(clk'EVENT AND clk='1') THEN q_reg <= d; not_q <= NOT q_reg; END IF; END PROCESS; END neispravna; Neispravno Za signale u procesu važi odložena dodela Arhitektura mikrosistema

56 D flip-flop sa komplementarnim izlazima
ARCHITECTURE dva_flip_flopa OF dff IS BEGIN PROCESS(clk) IF(clk'EVENT AND clk='1') THEN q <= d; not_q <= NOT d; END IF; END PROCESS; END dva_flip_flopa; Ispravno, ali dva flip-flopa Arhitektura mikrosistema

57 D flip-flop sa komplementarnim izlazima
ARCHITECTURE ispravna OF dff IS BEGIN PROCESS(clk) IF(clk'EVENT AND clk='1') THEN q <= d; END IF; END PROCESS; not_q <= NOT q; END ispravna; Ispravno, jedan flip-flopa i jedan invertor Arhitektura mikrosistema

58 Sinteza varijable u flip-flop
Pod kojim uslovima se varijable sintetišu u registre (flip-flopove) ? Dodela vrednosti varijabli je uslovljena tranzicijom nekog drugog signala ili Varijabla se koristi u kôdu pre nego što joj je dodeljena vrednost i Vrednost varijable se prenosi izvan procesa (putem dodele nekom signalu) Uslovi pod kojima se varijabla sintetiše u flip-flop nešto su složeniji. Prvo, kao i kod signala, potrebno je da dodela vrednosti varijabli bude uslovljena tranzicijom nekog drugog signala. Dugo, potrebno je da se vrednost varijable, putem dodele nekom signalu, prenosi izvan procesa (procedure ili funkcije). Na primer, varijabla v iz sledećeg VHDL kôda, se sintetiše u flip-flop (x je signal) Arhitektura mikrosistema

59 Sinteza varijable u flip-flop
ARCHITECTURE . . . SIGNAL x : BIT; BEGIN . . . PROCESS(clk) VARIABLE v : BIT; IF(clk’EVENT AND clk=’1’)THEN v := a; END IF; x <= v; END PROCESS; END ARCHITECTURE; Varijabla v se sintetiše u flip-flop Sinhrona dodela Vrednost varijable se prenosi izvan procesa Arhitektura mikrosistema

60 Sinteza varijable u flip-flop
Neispravno ARCHITECTURE pomreg OF pomreg IS BEGIN PROCESS (clk) VARIABLE a,b,c : BIT; IF(clk'EVENT AND clk='1') THEN dout <= c; c := b; b := a; a := din; END IF; END PROCESS; END pomreg; ARCHITECTURE pomreg OF pomreg IS BEGIN PROCESS (clk) VARIABLE a,b,c : BIT; IF(clk'EVENT AND clk='1') THEN a := din; b := a; c := b; dout <= c; END IF; END PROCESS; END pomreg; Ispravno VHDL kôd iz rešenja 1 sadrži tri varijable (a, b i c, linija 10). Međutim, u procesu, varijable se koriste pre nego što su im dodeljene vrednosti (tj. u obrnutom redosledu, počev dout, linija 13, do din, linija 16). Na primer, u liniji 13 na izlaz dout prosleđuje se vrednost varijable c. Međutim, to nije vrednost koja će ovoj varijabli biti dodeljena u narednoj liniji, već vrednost koja joj je bila dodeljena prilikom prethodnog izvršenja procesa. Zbog toga se u sintetizovano kolo uključuju flip-flopovi koji pamte vrednosti varijabli kako bi one mogle biti korišćene prilikom narednog izvršenja procesa. Konačno, u rešenju 3 ponovo se koriste varijable, kao u rešenju 1, ali je redosled naredbi dodele normalan, kao u rešenju 2. S obzirom da za varijable važi trenutna dodela, naredbe dodele iz linija 13, 14 i 15 mogu da se sažmu u jednu liniju ekvivalentnu naredbi c:=din. U sledećoj liniji (linija 16) vrednost varijable c napušta proces, jer se dodeljuje signalu dout. Pošto se ova dodela obavlja sinhronizovano sa tranzicijom signala clk, uslovi za sintezu flip-flopa su ispunjeni, ali samo jednog, a ne četiri koliko je potrebno da bi se dobilo ispravno rešenje Svaka varijabla se koristi pre nego što joj je dodeljena vrednost Sažima se na: c := din; Arhitektura mikrosistema

61 Arhitektura mikrosistema
Signali v.s. Varijable SIGNAL VARIABLE Operator dodele <= := Upotreba Povezivanje entiteta i komponenti Predstavlja lokalne promenljive Opseg važenja Može biti globalan Isključivo lokalna (vidljiva samo unutar procesa, procedure ili funkcije) Ponašanje Promena vrednosti nije trenutna (nova vrednost nije raspoloživa sve do završetka procesa, funkcije ili procedure) Promena vrednosti je trenutna (nova vrednost se može koristiti sledećoj naredbi) Koristi se u Paketu, entitetu i arhitekturi. U entitetu, svi portovi su signali. Isključivo u sekvencijalnom kôdu. Arhitektura mikrosistema

62 Registarske komponente
Sinhrona sekvencijalna digitalna kola standardne (prepoznatljive) funkcije, poput prihvatnih (stacionarnih), pomeračkih i brojačkih registara. Funkcije blokova sledećeg stanja i izlaza mogu se izraziti jednostavnim i regularnim logičkim ili aritmetičkim funkcijama. Arhitektura mikrosistema

63 Arhitektura mikrosistema
Binarni brojač Izlazni prenos. cout = ‘1’ za q = ˝1111˝ Asinhroni reset q : ˝0000˝, ˝0001˝, ..., ˝1111˝, ˝0000˝, ... ENTITY bin_counter IS PORT (clk,rst : IN STD_LOGIC; cout : OUT STD_LOGIC; q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END bin_counter; Arhitektura mikrosistema

64 Arhitektura mikrosistema
Binarni brojač - ispravno rešenje 1 Višesegmentni kod - Logika sledećeg stanja i izlaza van procesa ARCHITECTURE arch_v1 OF bin_counter IS SIGNAL r_reg : UNSIGNED(3 DOWNTO 0); SIGNAL r_next : UNSIGNED(3 DOWNTO 0); BEGIN PROCESS(clk,rst) IF(rst = '1') THEN r_reg <= (OTHERS => '0'); ELSIF(clk'EVENT AND clk = '1') THEN r_reg <= r_next; END IF; END PROCESS; -- Logika sledeceg stanja -- r_next <= r_reg + 1; -- Izlazna logika -- q <= STD_LOGIC_VECTOR(r_reg); cout <= '1' WHEN r_reg = "1111" ELSE '0'; END arch_v1; Arhitektura mikrosistema

65 Binarni brojač - ispravno rešenje 2 Jednosegmentni kod - celokupan kod u procesu, koristi varijablu
ARCHITECTURE arch_v2 OF bin_counter IS BEGIN PROCESS(clk,rst) VARIABLE q_tmp : UNSIGNED(3 DOWNTO 0); IF(rst = '1') THEN q_tmp := (OTHERS => '0'); ELSIF(clk'EVENT AND clk = '1') THEN q_tmp := q_tmp + 1; END IF; IF(q_tmp = "1111") THEN cout <= '1'; ELSE cout <= '0'; q <= STD_LOGIC_VECTOR(q_tmp); END PROCESS; END arch_v2; q_tmp ima vrednost koju je dobila u prethodnoj IF naredbi. (Za varijable ne važi odložena dodela) Arhitektura mikrosistema

66 Binarni brojač - pogrešno rešenje Jednosegmentni kod sa signalom
ARCHITECTURE arch_v3 OF bin_counter IS SIGNAL r_reg : UNSIGNED(3 DOWNTO 0); BEGIN PROCESS(clk,rst) IF(rst = '1') THEN r_reg <= (OTHERS => '0'); ELSIF(clk'EVENT AND clk = '1') THEN r_reg <= r_reg + 1; IF(r_reg = "1111") THEN cout <= '1'; ELSE cout <= '0'; END IF; END PROCESS; q <= STD_LOGIC_VECTOR(r_reg); END arch_v3; Neophodno zbog cout se sintetiše u flip-flop => izlaz cout kasni za jedan taktni ciklus

67 Pomerački registar Rešenje 1 - proces i signali
ARCHITECTURE arch_v1 OF pomreg IS SIGNAL reg : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (clk, rst) IF(rst='1') THEN reg <= (OTHERS => '0'); ELSIF(clk'EVENT AND clk='1') THEN reg <= d & reg(3 DOWNTO 1); END IF; END PROCESS; q <= reg(0); END arch_v1; Van procesa Arhitektura mikrosistema

68 Pomerački registar Rešenje 2 - proces i varijabla
ARCHITECTURE arch_v2 OF pomreg IS BEGIN PROCESS (clk, rst) VARIABLE reg : STD_LOGIC_VECTOR(3 DOWNTO 0); IF(rst='1') THEN reg := (OTHERS => '0'); ELSIF(clk'EVENT AND clk='1') THEN reg := d & reg(3 DOWNTO 1); END IF; q <= reg(0); END PROCESS; END arch_v2; U procesu Arhitektura mikrosistema

69 Univerzalni pomerački registar
Šta se dešava pod dejstvom rastuće ivice takta: Držanje (nema promene) - ctrl=˝00˝ Pomeranje ulevo - ctrl=˝01˝ Pomeranje udesno - ctrl=˝10˝ Paralelni upis - ctrl=˝11˝ Arhitektura mikrosistema

70 Univerzalni pomerački registar Trosegmentni opis
ARCHITECTURE arch_v1 OF shift_register IS SIGNAL r_reg : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL r_next : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (clk,rst) IF(rst='1')THEN r_reg <= (OTHERS => '0'); ELSIF(clk'EVENT AND clk='1') THEN r_reg <= r_next; END IF; END PROCESS; WITH ctrl SELECT r_next <= r_reg WHEN "00", -- pauza r_reg(2 DOWNTO 0) & d(0) WHEN "01", -- ulevo d(3) & r_reg(3 DOWNTO 1) WHEN "10", -- udesno d WHEN OTHERS; -- "load" q <= r_reg; END arch_v1; Registar stanja Logika sledećeg stanja Logika izlaza Arhitektura mikrosistema

71 Univerzalni pomerački registar Dvosegmentni opis
ARCHITECTURE arch_v2 OF shift_register IS SIGNAL r_reg : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (clk,rst) IF(rst='1')THEN r_reg <= (OTHERS => '0'); ELSIF(clk'EVENT AND clk='1') THEN CASE ctrl IS WHEN "00" => NULL; WHEN "01" => r_reg <= r_reg(2 DOWNTO 0) & d(0); WHEN "10" => r_reg <= d(3) & r_reg(3 DOWNTO 1); WHEN OTHERS => r_reg <= d; END CASE; END IF; END PROCESS; q <= r_reg; END arch_v2; Registar stanja i logka sledećeg stanja Logika izlaza Arhitektura mikrosistema

72 Programabilni brojač po modulu m - mod m brojač
Sekvenca brojanja: 0, 1, ..., m-1 ENTITY prog_counter IS PORT (clk,rst : IN STD_LOGIC; m : IN STD_LOGIC_VECTOR(3 DOWNTO 0); q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END prog_counter; Arhitektura mikrosistema

73 Mod-m brojač - dvosegmentni kod
ARCHITECTURE arch_v1 OF prog_counter IS SIGNAL r_reg : UNSIGNED(3 DOWNTO 0); SIGNAL r_next : UNSIGNED(3 DOWNTO 0); BEGIN PROCESS(clk,rst) IF(rst = '1') THEN r_reg <= (OTHERS => '0'); ELSIF(clk'EVENT AND clk = '1') THEN r_reg <= r_next; END IF; END PROCESS; r_next <= (OTHERS => '0') WHEN r_reg = (UNSIGNED(m) - 1) ELSE r_reg + 1; q <= STD_LOGIC_VECTOR(r_reg); END arch_v1; Registar stanja Logika sledećeg stanja/izlaza Arhitektura mikrosistema

74 Mod-m brojač - optimizovan dvosegmentni kod
r_reg = (UNSIGNED(m) - 1) <=> r_reg + 1 = UNSIGNED(m) ARCHITECTURE arch_v2 OF prog_counter IS SIGNAL r_reg : UNSIGNED(3 DOWNTO 0); SIGNAL r_next, r_inc : UNSIGNED(3 DOWNTO 0); BEGIN PROCESS(clk,rst) IF(rst = '1') THEN r_reg <= (OTHERS => '0'); ELSIF(clk'EVENT AND clk = '1') THEN r_reg <= r_next; END IF; END PROCESS; r_inc <= r_reg + 1; r_next <= (OTHERS => '0') WHEN r_inc = UNSIGNED(m) ELSE r_inc; q <= STD_LOGIC_VECTOR(r_reg); END arch_v2; Primena tehnike deoba operatora Arhitektura mikrosistema

75 Mod-m brojač - neoptimizovan vs. optimizovan dvosegmentni kod
r_next <= (OTHERS => '0') WHEN r_reg = (UNSIGNED(m) - 1) ELSE r_reg + 1; r_inc <= r_reg + 1; r_next <= (OTHERS => '0') WHEN r_inc = UNSIGNED(m) ELSE r_inc; Jedan oduzimač manje, uz nešto veće propagaciono kašnjenje logike sledećeg stanja Arhitektura mikrosistema

76 Mod-m brojač - jednosegmentni kod
ARCHITECTURE arch_v3 OF prog_counter IS SIGNAL r_reg : UNSIGNED(3 DOWNTO 0); BEGIN PROCESS(clk,rst) IF(rst = '1') THEN r_reg <= (OTHERS => '0'); ELSIF(clk'EVENT AND clk = '1') THEN r_reg <= r_reg + 1; IF(r_reg = UNSIGNED(m)) THEN END IF; END PROCESS; q <= STD_LOGIC_VECTOR(r_reg); END arch_v3; Neispravno Vrednost signala r_reg nije ažurirana - još uvek sadrži staru vrednost Arhitektura mikrosistema

77 Mod-m brojač - jednosegmentni kod
ARCHITECTURE arch_v4 OF prog_counter IS SIGNAL r_reg, r_inc : UNSIGNED(3 DOWNTO 0); BEGIN PROCESS(clk,rst) IF(rst = '1') THEN r_reg <= (OTHERS => '0'); ELSIF(clk'EVENT AND clk = '1') THEN IF(r_inc = UNSIGNED(m)) THEN ELSE r_reg <= r_inc; END IF; END PROCESS; r_inc <= r_reg + 1; q <= STD_LOGIC_VECTOR(r_reg); END arch_v4; Ispravno Ali, ovo nije jednosegmentni kod ! Registar + multiplekser Inkrementer Arhitektura mikrosistema

78 Mod-m brojač - jednosegmentni kod
ARCHITECTURE arch_v5 OF prog_counter IS BEGIN PROCESS(clk,rst) VARIABLE q_tmp : UNSIGNED(3 DOWNTO 0); IF(rst = '1') THEN r_reg <= (OTHERS => '0'); ELSIF(clk'EVENT AND clk = '1') THEN q_tmp := r_reg + 1; IF(q_tmp = UNSIGNED(m)) THEN ELSE r_reg <= q_tmp; END IF; END PROCESS; q <= STD_LOGIC_VECTOR(r_reg); END arch_v5; Ispravno Problem je rešen uvođenjem varijable Arhitektura mikrosistema

79 RAM sa razdvojenim ulazim i izlazim portovima za podatke
Memorija sa mogućnošću čitanja i upisa podataka addr bira (adresira) reč kojoj se pristupa. Za wr_ena=´1´, vrednost prisutan na ulaznom portu za podatke, data_in, pod dejstvom takta, clk, upisuje se u adresiranu reč. Sadržaj adresirane reči je dostupan na izlaznom portu za podatke, data_out. Arhitektura mikrosistema

80 RAM sa razdvojenim ulazim i izlazim portovima za podatke
ENTITY RAM IS PORT (wr_ena, clk : IN STD_LOGIC; addr : IN STD_LOGIC_VECTOR(3 DOWNTO 0); data_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0); data_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END RAM; Arhitektura mikrosistema

81 RAM sa razdvojenim ulazim i izlazim portovima za podatke
ARCHITECTURE ram OF RAM IS TYPE mem_array IS ARRAY (0 TO 15) OF STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL memory : mem_array; BEGIN PROCESS(clk, wr_ena) IF(wr_ena = '1') THEN IF(clk'EVENT AND clk='1') THEN memory(TO_INTEGER(UNSIGNED(addr))) <= data_in; END IF; END PROCESS; data <= memory(TO_INTEGER(UNSIGNED(addr))); END ram; Upis Čitanje Arhitektura mikrosistema

82 RAM sa bidirekcionim ulazno-izlaznim portom za podatke
Upis i čitanje podataka vrši se preko istog porta, bidir wr_ena reguliše smer bidirekcionog porta bidir: za wr_ena=1, bidir se ponaša kao ulazni, a za wr_ena=0 kao izlazni port. ENTITY RAM IS PORT (wr_ena, clk : IN STD_LOGIC; addr : IN STD_LOGIC_VECTOR(3 DOWNTO 0); bidir : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END RAM; Arhitektura mikrosistema

83 RAM sa bidirekcionim portom za podatke
ARCHITECTURE ram OF RAM IS TYPE mem_array IS ARRAY (0 TO 15) OF STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL memory : mem_array; BEGIN PROCESS(clk, wr_ena) IF(wr_ena = '0') THEN bidir <= memory(TO_INTEGER(UNSIGNED(addr))); ELSE bidir <= (OTHERS => 'Z'); IF(clk'EVENT AND clk='1') THEN memory(TO_INTEGER(UNSIGNED(addr))) <= bidir; END IF; END PROCESS; END ram; Čitanje Upis Arhitektura mikrosistema

84 Sekvencijalni kod - ispitni zadatak
(15 poena) Dovršiti VHDL opis 4-bitnog obostranog brojača sa paralelnim upisom (Sl. 3(a)). Signal rst služi za asinhrono resetovanje brojača. Ulazni signali ld (dozvola paralelnog upisa), ce (dozvola brojanja) i dir (smer brojanja) se koriste za izbor operacije koju će brojač obaviti sinhronizovano sa rastućom ivicom taktnog signala clk, shodno tabeli sa Sl.3(b). Izlazni signal cout (izlazni prenos) ima vrednost ´1´ ako je brojač u stanju ˝1111˝ i broji naviše (dir=´0´) ili ako je brojač u stanju ˝0000˝ i broji naniže (dir=´1´); u suprotnom, cout ima vrednost ´0´. 4-bitni ulaz din se koristi za postavljanje vrednosti koja će biti paralelno upisana u brojač, a na 4-bitnom izlazu q dostupno je trenutno stanje brojača. ld ce dir Operacija 1 X Paralelni upis Bez promene Brojanje naviše Brojanje naniže Arhitektura mikrosistema

85 Sekvencijalni kod - ispitni zadatak
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY zad5 IS PORT(clk : IN STD_LOGIC; rst : IN STD_LOGIC; p : OUT STD_LOGIC); END zad5; ARCHITECTURE zad5 OF zad5 IS SIGNAL ff1, ff2 : STD_LOGIC; BEGIN PROCESS(clk,rst) IF(rst='0') THEN ff1 <= '0'; ff2 <= '0'; ELSIF(clk'EVENT AND clk='1') THEN ff1 <= NOT ff2; ff2 <= ff1; p <= ff1 AND ff2; END IF; END PROCESS; (10 poena) Kreirati VHDL opis kola sa Sl.4. Arhitektura mikrosistema

86 Sekvencijalni kod - ispitno pitanje
Za svako od sledićih tvrđenja odgovoriti da li se odnosi na signal ili varijablu. Koristi se za povezivanje entiteta i komponenti. [varijabla, signal] Može se deklarisati u paketu, entitetu ili arhitekturi. [varijabla, signal] Predstavlja lokalnu promenljivu u sekvencijalnom kôdu. [varijabla, signal] Kada se koristi u procesu, promena vrednosti nije trenutna već se odlaže do trenutka završetka procesa. [varijabla, signal]. Arhitektura mikrosistema

87 Sekvencijalni kod - ispitno pitanje
Sledeći VHDL proces je sadržan unutar arhitekture u kojoj su signali a, b i c deklarisani kao std_logic. Objasniti šta proces radi, a zatim napisati varijantu istog procesa koristeći WAIT naredbu. process (a, b) begin if a = ’1’ then c <= b; end if; end process pp; Arhitektura mikrosistema

88 Sekvencijalni kod - ispitno pitanje
Objasniti razliku u radu sledeća dva VHDL procesa Arhitektura mikrosistema


Download ppt "Arhitektura mikrosistema"

Similar presentations


Ads by Google