88
Arhitektura mikrosistema Sekvencijalni kôd Sekvencijalni kôd je sadržan u: Procesu (PROCESS) Proceduri (PROCEDURE) Funkciji (FUNCTION) Sekvencijalne naredbe: IF WAIT CASE LOOP

Sekvencijalni kôd

  • Upload
    sarila

  • View
    45

  • Download
    3

Embed Size (px)

DESCRIPTION

Sekvencijalni kôd. Sekvencijalni k ô d je sadržan u: Procesu (PROCESS) Proceduri (PROCEDURE) Funkciji (FUNCTION) Sekvencijalne naredbe: IF WAIT CASE LOOP. PROCESS. O kvir za sekvencijalni kod - definiše oblast arhitekture u kojoj se naredbe izvršavaju na sekvencijalan način. - PowerPoint PPT Presentation

Citation preview

Page 1: Sekvencijalni  kôd

Arhitektura mikrosistema

Sekvencijalni kôd Sekvencijalni kôd je sadržan u:

Procesu (PROCESS) Proceduri (PROCEDURE) Funkciji (FUNCTION)

Sekvencijalne naredbe: IF WAIT CASE LOOP

Page 2: Sekvencijalni  kôd

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.

Page 3: Sekvencijalni  kôd

Arhitektura mikrosistema

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

Page 4: Sekvencijalni  kôd

Arhitektura mikrosistema

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;

Page 5: Sekvencijalni  kôd

Arhitektura mikrosistema

Proces sa listom senzitivnosti - primer - opis sekvencijalnog kolaLIBRARY 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) BEGIN IF(rst='1') THEN q <= '0'; ELSIF(clk'EVENT AND clk='1') THEN q <= d; END IF; END PROCESS;END arch_proc;

DFF

d

clk

q

rst

Detekcija rastuće ivice taktnog signala

Page 6: Sekvencijalni  kôd

Arhitektura mikrosistema

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

Page 7: Sekvencijalni  kôd

Arhitektura mikrosistema

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;. . .PROCESSBEGIN WAIT ON a, b, c; y <= a OR b OR c;END PROCESS;

Page 8: Sekvencijalni  kôd

Arhitektura mikrosistema

Proces sa wait naredbom primer- opis sekvencijalnog kola

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č

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 IF; END PROCESS;

Page 9: Sekvencijalni  kôd

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(…) BEGIN b <= …; END PROCESS; . . . a <= b …;END …

Page 10: Sekvencijalni  kôd

Arhitektura mikrosistema

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 .

Page 11: Sekvencijalni  kôd

Arhitektura mikrosistema

Odložena dodela signala u procesuSIGNAL a, b, c, d : STD_LOGIC; . . . PROCESS(a,b,c,d) BEGIN y <= a AND b; y <= a OR c; y <= c XOR d; END PROCESS;

PROCESS(a,b,c,d) BEGIN y <= c XOR d END PROCESS;

Važi samo poslednja dodela istom signalu

Iste naredbe u konkurentnom kodu

SIGNAL a,b,c,d : STD_LOGIC; . . . -- sledece naredbe nisu u procesu y <= a AND b; y <= a OR c; y <= c XOR d;

ab

c

d

y

(a) (b)

Višestruke dodele u konkurentnom kodu nisu zabranjene, ali stvaraju

kratak spoj

Page 12: Sekvencijalni  kôd

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;

Page 13: Sekvencijalni  kôd

Arhitektura mikrosistema

Proces 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;

Varijable se deklarišu u deklarativnoj sekciji procesa

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

Page 14: Sekvencijalni  kôd

Arhitektura mikrosistema

Sinteza procesa s varijablomSIGNAL 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;

Direktna sinteza nije moguća

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)v0

a‘0’

b

v1 v2y

Isti kod, ali sa signalima

Page 15: Sekvencijalni  kôd

Arhitektura mikrosistema

Signali vs. varijableSIGNAL a, b, s : STD_LOGIC;...PROCESS(a,b,s)BEGIN s <= ’0’; s <= s XOR a; s <= s XOR b; y <= s;END PROCESS;

PROCESS(a,b,s)BEGIN s <= s XOR b; y <= s;END PROCESS;

b ys

Zbog odložene dodele

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).

Page 16: Sekvencijalni  kôd

Arhitektura mikrosistema

IF Sintaksa:

IF uslov_1 THEN sekvencijane naredbe;ELSIF uslov_2 THEN sekvencijane naredbe;ELSIF uslov_3 THEN sekvencijane naredbe;. . .ELSE sekvencijane naredbe;

END IF;

IF(x<y) THEN

v := “11111111”;

w := ‘1’;

ELSIF(x=y) THEN

v:=”11110000”;

w := ‘0’;

ELSE

v:=(OTHERS => ‘0’);

w := ‘1’;

END IF; Izvršava se samo ako ni jedan uslov nije tačan

Uslovi se ispituju redom

Page 17: Sekvencijalni  kôd

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 ISBEGIN PROCESS(a,b,c,d,sel) BEGIN 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

a

b

c

d

MUX y

s1 s0

Page 18: Sekvencijalni  kôd

Arhitektura mikrosistema

IF - Dekoder 2-u-4ARCHITECTURE if_arch OF dek2u4 ISBEGINPROCESS(d, e)BEGIN 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;

Dekoder2-u-4

e

d0 y0

y1

y2

y3

d1

Page 19: Sekvencijalni  kôd

Arhitektura mikrosistema

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

Koder4-u-2

x3

x2

x1

x0

y1

y0

Page 20: Sekvencijalni  kôd

Arhitektura mikrosistema

IF - Prioritetni koder 4-u-1ARCHITECTURE if_arch OF pencoder ISBEGINPROCESS(x)BEGIN 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’; ELSE z <= ’1’; END IF;END PROCESS:END if_arch;

Prioritetnikoder4-u-2

x3

x2

x1

x0

y1

y0

z

Page 21: Sekvencijalni  kôd

Arhitektura mikrosistema

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

sig <= izraz_1 WHEN uslov_1 ELSE izraz_2 WHEN uslov_2 ELSE izraz_3 WHEN uslov_3 ELSE . . . izraz_n;

PROCESS(…) BEGIN IF uslov_1 THEN sig <= izraz_1; ELSIF uslov_2 THEN sig <= izraz_2; ELSIF uslov_3 THEN sig <= izraz_3; . . . ELSE sig <= izraz_n; END IF; END PROCESS;

IF vs. WHEN

Page 22: Sekvencijalni  kôd

Arhitektura mikrosistema

IF - Konceptualna implementacija

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;

T

F

izraz_1

izraz_2

izraz_3

izraz_4

uslov_3

T

F

T

F

uslov_2

uslov_1

sig

Ako postavlja samo jedan izlazni signal, isto kao when

Page 23: Sekvencijalni  kôd

Arhitektura mikrosistema

IF - Konceptualna implementacija

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;

T

F

izraz_b_1

izraz_b_2

uslov

sig_b

T

F

izraz_a_1

izraz_a_2

sig_a

Ako postavlja više od jednog izlaznog signala, za svaki signal zasebna multiplekserska mreža

Page 24: Sekvencijalni  kôd

Arhitektura mikrosistema

IF - Konceptualna implementacija

IF uslov_1 THEN IF uslov_2 THEN sig <= izraz_a_1; ELSE sig <= izraz_a_2; END IF;ELSE IF uslov_3 THEN sig <= izraz_b_1; ELSE sig <= izraz_b_2; END IF;END IF;

T

F

izraz_b_1

izraz_b_2

uslov_3

T

F

izraz_a_1

izraz_a_2

T

F

uslov_2 sig

uslov_1

Ugnježdene if naredbe

Page 25: Sekvencijalni  kôd

Arhitektura mikrosistema

IF vs. WHEN - PrimerPROCESS(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; ELSE IF (b>c) THEN max <= b; -- b>=a i b>c ELSE max <= c; -- b>=a i

c>=b END IF; END IF;END PROCESS;

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;

Max = max{a, b, c}

Page 26: Sekvencijalni  kôd

Arhitektura mikrosistema

CASE Sintaksa:

CASE selekcioni_izraz IS WHEN vrednost => sekvencijalne_naredbe; 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";END CASE;

Pokriva sve vrednosti koje nedostaju

Dozvoljeno više od jedne narebe

Page 27: Sekvencijalni  kôd

Arhitektura mikrosistema

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 ISBEGIN PROCESS(a,b,c,d,sel) BEGIN 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

Page 28: Sekvencijalni  kôd

Arhitektura mikrosistema

CASE – Binarni dekoder 2-u-41 -- Binarni dekoder 2-u-4 ---------------- 2 ARCHITECTURE case_arch OF dek2u4 IS 3 SIGNAL ed : STD_LOGIC; 4 BEGIN 5 ed <= e & d; 6 PROCESS(ed) 7 BEGIN 8 CASE ed IS 9 WHEN "100" => 10 y <= "0001"; 11 WHEN "101" => 12 y <= "0010"; 13 WHEN "110" => 14 y <= "0100"; 15 WHEN "110" => 16 y <= "1000"; 17 WHEN OTHERS 18 y <= "0000"; 19 END CASE; 20 END PROCESS; 21 END case_arch; 22 -----------------------------------------

Dekoder2-u-4

e

d0 y0

y1

y2

y3

d1

Page 29: Sekvencijalni  kôd

Arhitektura mikrosistema

CASE – Binarni koder 4-u-21 -- Binarni koder 4-u-2 ------------------ 2 ARCHITECTURE case_arch OF encoder IS 3 BEGIN 4 PROCESS(x) 5 BEGIN 6 CASE x IS 7 WHEN "0001" => 8 y <= "00"; 9 WHEN "0010" => 10 y <= "01"; 11 WHEN "0100" => 12 y <= "10"; 13 WHEN OTHERS 14 y <= "11"; 15 END CASE; 16 END PROCESS; 17 END case_arch; 18 -----------------------------------------

Koder4-u-2

x3

x2

x1

x0

y1

y0

Page 30: Sekvencijalni  kôd

Arhitektura mikrosistema

CASE – Prioritetni koder 4-u-21 -- Priorietetni koder 4-u-2 ------------- 2 ARCHITECTURE case_arch OF pencoder IS 3 BEGIN 4 PROCESS(x) 5 BEGIN 6 CASE x IS 7 WHEN "0001" => 8 y <= "00"; 9 WHEN "0010"|"0011" => 10 y <= "01"; 11 WHEN "0100"|"0101"|"0110"|"0111" => 12 y <= "10"; 13 WHEN OTHERS => 14 y <= "11"; 15 END CASE; 16 END PROCESS: 17 END case_arch; 18 -----------------------------------------

Prioritetnikoder4-u-2

x3

x2

x1

x0

y1

y0

z

Page 31: Sekvencijalni  kôd

Arhitektura mikrosistema

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 ISBEGIN PROCESS(clk,rst) BEGIN 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;

DFF

d

clk

q

rst

Nepotrebna grana, rst je tipa BIT

NULL - ˝prazna˝ naredba, bez efekta

Page 32: Sekvencijalni  kôd

Arhitektura mikrosistema

CASE vs. SELECT

Međutim, CASE je opštija nareba jer dozvoljava više sekvencijalnih naredbi u jednoj grani

WITH sel SELECT sig <= izraz_1 WHEN v1, izraz_2 WHEN v2, izraz_3 WHEN v3, ... izraz_n WHEN vn;

PROCESS(…) BEGIN CASE sel IS WHEN izraz_1 =>

sig <= v1; WHEN izraz_2 =>

sig <= v2; WHEN izraz_3 =>

sig <= v3; . . . WHEN izraz_n =>

sig <= vn; END CASE; END PROCESS;

Page 33: Sekvencijalni  kôd

Arhitektura mikrosistema

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;

izraz_1

izraz_2

izraz_3

v1

v2

v3

v4

v5

sel

sig

(b)

Isto kao konkurentna naredba select

Page 34: Sekvencijalni  kôd

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;

izraz_a_1

izraz_a_2

izraz_a_n

v1

v2

v3

v4

v5

case_sel

sig_a

izraz_b_1

izraz_b_2

izraz_b_n

v1

v2

v3

v4

v5

sig_b

Za svaki signal poseban multiplekser

Page 35: Sekvencijalni  kôd

Arhitektura mikrosistema

LOOP Za kreiranje petlji u sekvencijalnom kôdu Tri oblika:

FOR LOOP WHILE LOOP LOOP

Page 36: Sekvencijalni  kôd

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

Page 37: Sekvencijalni  kôd

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;

Page 38: Sekvencijalni  kôd

Arhitektura mikrosistema

LOOP - LOOP Beskonačna petlja

[labela: ] LOOP(sekvencijalne naredbe)

END LOOP [labela]; Uslov za izlazak iz petlje definisan je u telu petlju:

sum:=1;LOOP sum:=sum*3; EXIT WHEN sum>100;END LOOP;

LOOP WAIT on a,b; EXIT WHEN a=b;END LOOP;

Isti efekat kao:WAIT UNTIL a=b;

Page 39: Sekvencijalni  kôd

Arhitektura mikrosistema

LOOPJednostavan barrel pomerač

mux

inp(6)

mux

inp(5)

mux

inp(4)

mux mux

inp(2)

mux

inp(1)

mux

inp(0)

mux

inp(3) ‘0’inp(7)

outp(7) outp(6) outp(5) outp(4) outp(3) outp(2) outp(1) outp(0)

shift

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;

ARCHITECTURE loop_arch OF barrel ISBEGIN PROCESS(inp,shift) BEGIN 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;

Page 40: Sekvencijalni  kôd

Arhitektura mikrosistema

LOOPGenerator bita parnosti

GBP...an-1

a1

a0

y

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; BEGIN p := a(0); FOR i IN 1 TO 7 LOOP p := p XOR a(i); END LOOP; y <= p; END PROCESS;END loop_arch;

Page 41: Sekvencijalni  kôd

Arhitektura mikrosistema

LOOP Sabirač sa rednim prenosom si = ai XOR bi XOR ci

ci+1 = (ai AND bi) OR (ai AND ci) OR (bi AND ci)

+

a

b

cin cout

s

FA

a7 b7

s7

FA

a1 b1

s1

c7 c2 c1FA

a0 b0

s0

c0c8

(cin)(cout). . .

Potpuni sabirač

Page 42: Sekvencijalni  kôd

Arhitektura mikrosistema

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 ISBEGIN PROCESS(a,b,cin) VARIABLE c : STD_LOGIC_VECTOR(8 DOWNTO 0); BEGIN 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;

+

a

b

cin cout

s

FA

a7 b7

s7

FA

a1 b1

s1

c7 c2 c1FA

a0 b0

s0

c0c8

(cin)(cout). . .

+

a

b

cin cout

s

FA

a7 b7

s7

FA

a1 b1

s1

c7 c2 c1FA

a0 b0

s0

c0c8

(cin)(cout). . .

Page 43: Sekvencijalni  kôd

Arhitektura mikrosistema

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);

c(0):=cin;-- i = 0 -----------------------------------------------------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 = 1 -----------------------------------------------------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 = 2 -----------------------------------------------------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 = 3 -----------------------------------------------------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);

Razotavanjepetlje

Sinteza

Page 44: Sekvencijalni  kôd

Arhitektura mikrosistema

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.

Page 45: Sekvencijalni  kôd

Arhitektura mikrosistema

Tipične greške u pisanju procesa za kombinaciona kola

PROCESS(a)BEGIN y <= a OR b OR c;END PROCESS;

ILI kolo

Nekomplenta lista senzitivnosti

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

Page 46: Sekvencijalni  kôd

Arhitektura mikrosistema

Tipične greške u pisanju procesa za kombinaciona kola

PROCESS(a,b)BEGIN IF(a=b) THEN eq <= '1'; END IF;END IF;END PROCESS;

Komparator jednakosti

A šta ako je a ≠ b?

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

IF(a=b) THEN eq <= '1';ELSE eq <= '0';END IF;

Treba ovako:

Bez obzira na vrednosti signala a i b, uvek eq dobija definisanu vrednost, 0 ili 1

Nedostaje ELSE grana

Page 47: Sekvencijalni  kôd

Arhitektura mikrosistema

Tipične greške u pisanju procesa za kombinaciona kola

PROCESS(a, b)BEGIN IF(a > b) THEN gt <= ‘1’; ELSIF(a = b) THEN eq <= ‘1’; ELSE lt <= ‘1’; END IF;END PROCESS;

Kompaktan, ali pogrešan opis potpunog komparatora

IF naredba je kompletna, ali grane IF naredbe nisu

PROCESS(a, b)BEGIN IF(a > b) THEN gt <= ‘1’; eq <= ‘0’; lt <= ‘0’; ELSIF (a = b) THEN gt <= ‘0’; eq <= ‘1’; lt <= ‘0’; ELSE gt <= ‘0’; eq <= ‘0’; lt <= ‘1’; END IF;END PROCESS;

Treba ovako: Ili ovako:

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;

Page 48: Sekvencijalni  kôd

Arhitektura mikrosistema

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.

t1 t2 t3 t4

CLK

D

Q (flip-flop)

Q (lec)

D lec

D Q

CLK

D FF

D Q

CLK

Page 49: Sekvencijalni  kôd

Arhitektura mikrosistema

Leč kola i flip-flopoviD 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 ISBEGIN PROCESS(clk) BEGIN 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 ISBEGIN PROCESS(d,clk) BEGIN IF clk = '1' THEN q <= d; END IF; END PROCESS;END lec;

Page 50: Sekvencijalni  kôd

Arhitektura mikrosistema

D FF sa dozvolom

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;-------------------------------------------

d

rst

en

q

rst clk en q*

1 x x 0 0 0 x q 0 1 x q 0 0 q 0 1 d

(a) (b)

Asinhroni reset

Page 51: Sekvencijalni  kôd

Arhitektura mikrosistema

D FF sa dozvolom

ARCHITECTURE dffe_v1 OF dffe ISBEGIN PROCESS(clk,rst) BEGIN IF(rst = ‘1’) THEN q <= ‘0’; ELSIF(clk'EVENT AND clk='1') THEN IF(en = ’1’) THEN q <= d; END IF; END IF; END PROCESS;END dffe_v1;

d

rst

en

q

(a)

Jednosegmentni kod - celokupan opis je u procesu:

Page 52: Sekvencijalni  kôd

Arhitektura mikrosistema

D FF sa dozvolomARCHITECTURE dffe_v2 OF dffe IS

SIGNAL q_reg, q_next : STD_LOGIC;

BEGIN

PROCESS(clk,rst)

BEGIN

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;

d

rst

qT

F

d

enclkrst

q_next

q_regq

Višesegmentni kod

Logika sledećeg stanja i izlaza van procesa

Page 53: Sekvencijalni  kôd

Arhitektura mikrosistema

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 …˝.

Page 54: Sekvencijalni  kôd

Arhitektura mikrosistema

Sinteza signala u flip-flopIF(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)BEGINIF(clk’EVENT AND clk=’1’)THEN out1 <= b; out2 <= a;END IF;out3 <= a;END PROCESS;

D FF

D FF

out1

out2

out3

clk

a

b

Sinhrone naredbe dodele

Bezuslovna naredba dodele

Page 55: Sekvencijalni  kôd

Arhitektura mikrosistema

D flip-flop sa komplementarnim izlazima

D FF

d q

clk not_q

ARCHITECTURE neispravna OF dff IS SIGNAL q_reg : STD_LOGIC;BEGIN PROCESS(clk) BEGIN IF(clk'EVENT AND clk='1') THEN q_reg <= d; not_q <= NOT q_reg; END IF; END PROCESS;END neispravna; D FF D FF

clk

d

q

not_q

Neispravno

Za signale u procesu važi odložena dodela

Page 56: Sekvencijalni  kôd

Arhitektura mikrosistema

D flip-flop sa komplementarnim izlazima

ARCHITECTURE dva_flip_flopa OF dff ISBEGIN PROCESS(clk) BEGIN 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

D FF

D FF

q

not_q

clk

d

Page 57: Sekvencijalni  kôd

Arhitektura mikrosistema

D flip-flop sa komplementarnim izlazima

ARCHITECTURE ispravna OF dff ISBEGIN PROCESS(clk) BEGIN IF(clk'EVENT AND clk='1') THEN q <= d; END IF; END PROCESS; not_q <= NOT q;END ispravna;

D FF

q

not_q

d

clk

Ispravno, jedan flip-flopa i jedan invertor

Page 58: Sekvencijalni  kôd

Arhitektura mikrosistema

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)

Page 59: Sekvencijalni  kôd

Arhitektura mikrosistema

Sinteza varijable u flip-flopARCHITECTURE . . . SIGNAL x : BIT;BEGIN. . .PROCESS(clk) VARIABLE v : BIT;BEGIN IF(clk’EVENT AND clk=’1’)THEN v := a; END IF; x <= v;END PROCESS; . . .END ARCHITECTURE;

Sinhrona dodela

Vrednost varijable se prenosi izvan procesa

Varijabla v se sintetiše u flip-flop

Page 60: Sekvencijalni  kôd

Arhitektura mikrosistema

Sinteza varijable u flip-flop

ARCHITECTURE pomreg OF pomreg ISBEGIN PROCESS (clk) VARIABLE a,b,c : BIT; BEGIN IF(clk'EVENT AND clk='1') THEN dout <= c; c := b; b := a; a := din; END IF; END PROCESS;END pomreg;

Svaka varijabla se koristi pre nego

što joj je dodeljena vrednost

D FF D FF D FF D FF

din

clk

dout

ARCHITECTURE pomreg OF pomreg ISBEGIN PROCESS (clk) VARIABLE a,b,c : BIT; BEGIN IF(clk'EVENT AND clk='1') THEN a := din; b := a; c := b; dout <= c; END IF; END PROCESS;END pomreg;

D FF

doutdin

clk

Sažima se na:c := din;

Neispravno

Ispravno

Page 61: Sekvencijalni  kôd

Arhitektura mikrosistema

Signali v.s. VarijableSIGNAL 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.

Page 62: Sekvencijalni  kôd

Arhitektura mikrosistema

Registarske komponente Sinhrona sekvencijalna digitalna kola standardne

(prepoznatljive) funkcije, poput prihvatnih (stacionarnih), pomeračkih i brojačkih registara.

d q

Izlazna logika

Logika sledećeg

stanja

Izlazi

Ulazi

clk

Registarstanja

N x D FF

r_regr_next

Funkcije blokova sledećeg stanja i izlaza mogu se izraziti jednostavnim i regularnim logičkim ili aritmetičkim funkcijama.

Page 63: Sekvencijalni  kôd

Arhitektura mikrosistema

Binarni brojač

bin_counter

q

4

coutrst

clk

q : ˝0000˝, ˝0001˝, ..., ˝1111˝, ˝0000˝, ...

Izlazni prenos. cout = ‘1’ za q = ˝1111˝

Asinhroni reset

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;

Page 64: Sekvencijalni  kôd

reg4xD FF

d q

rst

+1r_next r_reg

=1111

T

F

1

0clk

rst

q

cout

Arhitektura mikrosistema

Binarni brojač - ispravno rešenje 1Viš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) BEGIN 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;

Page 65: Sekvencijalni  kôd

Arhitektura mikrosistema

Binarni brojač - ispravno rešenje 2Jednosegmentni 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); BEGIN 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'; END IF; 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)

Page 66: Sekvencijalni  kôd

Binarni brojač - pogrešno rešenjeJednosegmentni kod sa signalom

ARCHITECTURE arch_v3 OF bin_counter IS SIGNAL r_reg : UNSIGNED(3 DOWNTO 0); BEGIN PROCESS(clk,rst) BEGIN 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 IF; END PROCESS; q <= STD_LOGIC_VECTOR(r_reg);END arch_v3;

cout se sintetiše u flip-flop => izlaz cout kasni za jedan taktni ciklus

Neophodno zbog

reg4xD FF

d q

rst

+1r_next r_reg

=1111

T

F

1

0

clk

rst

q

cout

D FF

d q

Linije koda 40-44

Page 67: Sekvencijalni  kôd

Arhitektura mikrosistema

Pomerački registarRešenje 1 - proces i signali

D FF D FF D FF D FF

d

clk

q

rst

ARCHITECTURE arch_v1 OF pomreg IS SIGNAL reg : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS (clk, rst) BEGIN 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

Page 68: Sekvencijalni  kôd

Arhitektura mikrosistema

Pomerački registar Rešenje 2 - proces i varijabla

ARCHITECTURE arch_v2 OF pomreg ISBEGIN PROCESS (clk, rst) VARIABLE reg : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN 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

Page 69: Sekvencijalni  kôd

Arhitektura mikrosistema

Univerzalni pomerački registar

shift_register

d3 d2 d1 d0

ctrl2

rstclk

q3 q2 q1 q0

1-bitnipomerac

ulevo

1-bitnipomerac udesno

00

01

10

11

reg(4 x D FF)

d q

rst

r_next r_reg

dctrl

clkrst

q44

d(3)

1

d(0)

1

42

3

3

4

(a) (b)

Š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˝

Page 70: Sekvencijalni  kôd

Arhitektura mikrosistema

Univerzalni pomerački registarTrosegmentni opisARCHITECTURE 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) BEGIN 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

Page 71: Sekvencijalni  kôd

Arhitektura mikrosistema

Univerzalni pomerački registarDvosegmentni opis

ARCHITECTURE arch_v2 OF shift_register IS SIGNAL r_reg : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS (clk,rst) BEGIN 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

Page 72: Sekvencijalni  kôd

Arhitektura mikrosistema

Programabilni brojač po modulu m - mod m brojač Sekvenca brojanja: 0, 1, ..., m-1

mod_mcounter

m4

4

q

clk

rst

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;

Page 73: Sekvencijalni  kôd

Arhitektura mikrosistema

Mod-m brojač - dvosegmentni kodARCHITECTURE arch_v1 OF prog_counter IS SIGNAL r_reg : UNSIGNED(3 DOWNTO 0); SIGNAL r_next : UNSIGNED(3 DOWNTO 0);BEGIN PROCESS(clk,rst) BEGIN 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

Page 74: Sekvencijalni  kôd

Arhitektura mikrosistema

Mod-m brojač - optimizovan dvosegmentni kod

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) BEGIN 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;

r_reg = (UNSIGNED(m) - 1) <=> r_reg + 1 = UNSIGNED(m)

Primena tehnike deoba operatora

Page 75: Sekvencijalni  kôd

Arhitektura mikrosistema

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;

reg4xD FF

d q

rst

T

F

r_next

+1

=

r_reg0

mclkrst

r_inc

q

reg4xD FF

d q

rst

T

F

r_next

+1

=

-1

r_reg0

m

clkrst

q

Jedan oduzimač manje, uz nešto veće propagaciono kašnjenje logike sledećeg stanja

Page 76: Sekvencijalni  kôd

Arhitektura mikrosistema

Mod-m brojač - jednosegmentni kod

ARCHITECTURE arch_v3 OF prog_counter IS SIGNAL r_reg : UNSIGNED(3 DOWNTO 0);BEGIN PROCESS(clk,rst) BEGIN 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 r_reg <= (OTHERS => '0'); END IF; 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

Page 77: Sekvencijalni  kôd

Arhitektura mikrosistema

Mod-m brojač - jednosegmentni kodARCHITECTURE arch_v4 OF prog_counter IS SIGNAL r_reg, r_inc : UNSIGNED(3 DOWNTO 0);BEGIN PROCESS(clk,rst) BEGIN IF(rst = '1') THEN r_reg <= (OTHERS => '0'); ELSIF(clk'EVENT AND clk = '1') THEN IF(r_inc = UNSIGNED(m)) THEN r_reg <= (OTHERS => '0'); ELSE r_reg <= r_inc; END IF; END IF; END PROCESS; r_inc <= r_reg + 1; q <= STD_LOGIC_VECTOR(r_reg);END arch_v4;

Ispravno

Registar +

multiplekser

Inkrementer

Ali, ovo nije jednosegmentni kod !

Page 78: Sekvencijalni  kôd

Arhitektura mikrosistema

Mod-m brojač - jednosegmentni kodARCHITECTURE arch_v5 OF prog_counter ISBEGIN PROCESS(clk,rst) VARIABLE q_tmp : UNSIGNED(3 DOWNTO 0); BEGIN 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 r_reg <= (OTHERS => '0'); ELSE r_reg <= q_tmp; END IF; END IF; END PROCESS; q <= STD_LOGIC_VECTOR(r_reg);END arch_v5;

Ispravno

Problem je rešen uvođenjem varijable

Page 79: Sekvencijalni  kôd

Arhitektura mikrosistema

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.

reč 0

reč 1

reč 2

. . .

RAM

addr

data_out

data_in

clk wr_ena

Page 80: Sekvencijalni  kôd

Arhitektura mikrosistema

RAM sa razdvojenim ulazim i izlazim portovima za podatke

reč 0

reč 1

reč 2

. . .

RAM

addr

data_out

data_in

clk wr_ena

ENTITY RAM ISPORT (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;

Page 81: Sekvencijalni  kôd

Arhitektura mikrosistema

RAM sa razdvojenim ulazim i izlazim portovima za podatke

Upis

Čitanje

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) BEGIN IF(wr_ena = '1') THEN IF(clk'EVENT AND clk='1') THEN memory(TO_INTEGER(UNSIGNED(addr))) <= data_in; END IF; END IF; END PROCESS; data <= memory(TO_INTEGER(UNSIGNED(addr)));END ram;

reč 0

reč 1

reč 2

. . .

RAM

addr

data_out

data_in

clk wr_ena

Page 82: Sekvencijalni  kôd

Arhitektura mikrosistema

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.

reč 0

reč 1

reč 2

. . .

RAM

addr bidir

clk wr_ena

ENTITY RAM ISPORT (wr_ena, clk : IN STD_LOGIC; addr : IN STD_LOGIC_VECTOR(3 DOWNTO 0); bidir : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END RAM;

Page 83: Sekvencijalni  kôd

Arhitektura mikrosistema

RAM sa bidirekcionim portom za podatke

ARCHITECTURE ram OF RAM ISTYPE mem_array IS ARRAY (0 TO 15) OF STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL memory : mem_array;BEGIN PROCESS(clk, wr_ena) BEGIN 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 IF; END PROCESS;END ram;

bidir

wr_ena

data_out

data_inRAM

Čitanje

Upis

Page 84: Sekvencijalni  kôd

Arhitektura mikrosistema

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.

udcounter

ldcedir

rstclk

4din

4

q

cout

ld ce dir Operacija

1 X X Paralelni upis

0 0 X Bez promene

0 1 0 Brojanje naviše

0 1 1 Brojanje naniže

Microsoft Word Document

Page 85: Sekvencijalni  kôd

Arhitektura mikrosistema

Sekvencijalni kod - ispitni zadatak

(10 poena) Kreirati VHDL opis kola sa Sl.4.

D FF D FF

clk

rst

p

Ulaz za asinhrono resetovanje flip-flopa

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) BEGIN 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;END zad5;

Page 86: Sekvencijalni  kôd

Arhitektura mikrosistema

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].

Page 87: Sekvencijalni  kôd

Arhitektura mikrosistema

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;

Page 88: Sekvencijalni  kôd

Arhitektura mikrosistema

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