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
Arhitektura mikrosistema
Sekvencijalni kôd Sekvencijalni kôd je sadržan u:
Procesu (PROCESS) Proceduri (PROCEDURE) Funkciji (FUNCTION)
Sekvencijalne naredbe: IF WAIT CASE LOOP
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
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
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;
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
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
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;
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;
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 …
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 .
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
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
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
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
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).
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
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
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
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
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
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
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
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
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
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}
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
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
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
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
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
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
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;
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
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
Arhitektura mikrosistema
LOOP Za kreiranje petlji u sekvencijalnom kôdu Tri oblika:
FOR LOOP WHILE LOOP LOOP
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
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
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;
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;
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;
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č
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). . .
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
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.
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
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
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;
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
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;
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
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:
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
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 …˝.
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
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
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
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
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)
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
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
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.
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.
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;
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;
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)
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
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
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
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˝
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
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
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;
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
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
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
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
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 !
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
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
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;
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
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;
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
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
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;
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].
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;
Arhitektura mikrosistema
Sekvencijalni kod - ispitno pitanje Objasniti razliku u radu sledeća dva VHDL procesa