Arhitektura mikrosistema Konkurentne naredbe dodele Kôd sadržan u sekciji ARCHITECTURE Konkurentne naredbe dodele: Jednostavna konkurentna naredba dodele Naredba WHEN - uslovna naredba dodele Naredba SELECT - naredba dodele sa izborom vrednosti
Arhitektura mikrosistema
Konkurentne naredbe dodele Kôd sadržan u sekciji ARCHITECTURE Konkurentne naredbe dodele: Jednostavna konkurentna naredba dodele Naredba WHEN - uslovna naredba dodele Naredba SELECT - naredba dodele sa izborom
vrednosti
Arhitektura mikrosistema
Jednostavna konkurentna nareba dodele signal <= izraz; izraz – logički ili aritmetički izraz (sadrži
operatore AND, NOT, +, sll i sl.) s <= a AND (b OR c); enable <= ´1´; sel <= (r1 AND r2) OR (r3 AND r4); sum <= a + b + c – 1;
Za opis jednostavnih logičkih i aritmetičkih funkcija
Arhitektura mikrosistema
Konceptualna implementacija konkurentne naredbe dodele enable <= ´1´; sel <= (r1 AND r2) OR (r3 AND r4); sum <= a + b + c – 1;
enable
sel
++
-1
abc sum
r1r2
r3r4
1
Arhitektura mikrosistema
Konkurentna nareba dodelePrimer: multiplekser 4-u-1LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY mux IS
PORT ( a,b,c,d,s0,s1 : IN STD_LOGIC;y : OUT STD_LOGIC);
END mux;ARCHITECTURE log_funk OF mux ISBEGIN
y <= (a AND NOT s1 AND NOT s0) OR(b AND NOT s1 AND s0) OR(c AND s1 AND NOT s0) OR(d AND s1 AND s0);
END log_funk;
y
a
b
c
d
s1
s0
Nizak nivo opisa
Arhitektura mikrosistema
WHEN - konkurentna naredba uslovne dodele Uopštenje konkurentne naredbe dodele
S desne strane znaka <= može se naći više od jednog izraza. Sintaksa:sig <= izraz_1 WHEN uslov_1 ELSE
izraz_2 WHEN uslov_2 ELSE...
izraz_n-1 WHEN uslov_n-1 ELSEizraz_n;
˝uslov˝ - logički/relacioni izraz koji može biti tačan ili netačan, npr: (a OR b) ili (a > b)
˝uslovi˝ se ispituju redom, a signal dobija vrednost prvog izraza čiji je uslov tačan
Ako ni jedan uslov nije tačan, izvršava se izraz iz poslednje grane
Arhitektura mikrosistema
WHEN - primer
outp <= “000” WHEN (inp=΄0΄ OR reset=΄1΄) ELSE“101” WHEN ctl=΄1΄ ELSE“010”;
Ako važi inp=΄0΄ ili reset=΄1΄, tada outp <= “000”, inače
ako važi ctl=΄1΄ , tada outp <= “101”, inače
outp <= “010”
Arhitektura mikrosistema
WHEN Primer: MultiplekserLIBRARY ieee;USE ieee.std_logic_1164.all;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 when_arch OF mux ISBEGIN
y <= a WHEN sel = "00" ELSEb WHEN sel = "01" ELSEc WHEN sel = "10" ELSEd;
END when_arch;
abcd
y
2sel
00011011
Pokriva sel=˝11˝, ali i sve preostale, nebinarne
kombinacije, kao što su ˝0-˝, ˝LH˝, ˝ZW˝
Arhitektura mikrosistema
WHEN Primer: DekoderLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dek2u4 ISPORT (d : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
e : IN STD_LOGIC;y : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END dek2u4;ARCHITECTURE when_arch OF dek2u4 ISBEGINy <= "0000" WHEN e = ´0´ ELSE
"0001" WHEN d = "00" ELSE"0010" WHEN d = "01" ELSE"0100" WHEN d = "10" ELSE"1000";
END when_arch;
Dekoder2-u-4
e
d0 y0
y1
y2
y3
d1
e d1 d0 y3 y2 y1 y0
1 0 0 0 0 0 11 0 1 0 0 1 01 1 0 0 1 0 01 1 1 1 0 0 00 X X 0 0 0 0
Arhitektura mikrosistema
WHEN Primer: KoderLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY encoder ISPORT (x : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
y : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END encoder;ARCHITECTURE when_arch OF encoder ISBEGIN
y <= "00" WHEN x="0001" ELSE"01" WHEN x="0010" ELSE"10" WHEN x="0100" ELSE"11";
END when_arch;
Koder4-u-2
x3
x2
x1
x0
y1
y0
x3 x2 x1 x0 y1 y0 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 0 1 1 sve ostale komb. - -
Arhitektura mikrosistema
WHEN Primer: Prioritetni koderLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY pencoder IS
PORT (x : IN STD_LOGIC_VECTOR(3 DOWNTO 0);y : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);z : OUT STD_LOGIC);
END pencoder;ARCHITECTURE when_arch OF pencoder ISBEGIN
y <= "11" WHEN x(3) = '1' ELSE"10" WHEN x(2) = '1' ELSE"01" WHEN x(1) = '1' ELSE"00";
z <= '0' WHEN x = "0000" ELSE '1';
END when_arch;
Prioritetnikoder4-u-2
x3
x2
x1
x0
y1y0
z
x3 x2 x1 x0 y1 y0 z 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 - 0 1 1 0 1 - - 1 0 1 1 - - - 1 1 1
Arhitektura mikrosistema
Konceptualna implementacija WHEN naredbesig <= izraz_1 WHEN uslov_1 ELSE
izraz_2;
T
F
izraz_1
izraz_2
uslov_1
sig
Apstraktni multiplekser:T (true) - uslov je tačan
F (false) - uslov je netačan
Konceptualnidijagram
Arhitektura mikrosistema
Konceptualna implementacija WHEN naredbe
sig <= izraz_1 WHEN uslov_1 ELSEizraz_2 WHEN uslov_2 ELSE izraz_3 WHEN uslov_3 ELSEizraz_4;
T
F
izraz_1
izraz_2
izraz_3
izraz_4
uslov_3
T
F
T
F
uslov_2
uslov_1
sig
Arhitektura mikrosistema
Sinteza WHEN naredbeSIGNAL a,b,y : STD_LOGIC;. . .y <= ´0´ WHEN a=b ELSE
´1´;. . .
T
F
=ab
y0
1
a b a=b 0 0 1 0 1 0 1 0 0 1 1 1
ab
1
0y
U sintezi STD_LOGIC ima dve vrednosti: ‘0’ i ‘1’
U sintezi T - ‘1’, F - ‘0’
Arhitektura mikrosistema
Konceptualna implementacija WHEN naredbe - primerSIGNAL a,b,f : UNSIGNED(7 DOWNTO 0);SIGNAL x,y : UNSIGNED(3 DOWNTO 0);. . .f <= a+b WHEN x+y>1 ELSE
a-b-1 WHEN x>y AND y!=0 ELSEa+1;
. . .
T
F
T
Ff
a+b
a-b-1
a+1
x>y and y!=0
x+y>1
+
- -1
+1
>
!=
+
T
F
T
F
0
>1
xy
ab
f
Nije kraj sinteze !Sledi zamen apstraktnih blokova
Odgovarajućim modulima realizovanim pomoću logičkih kola
Arhitektura mikrosistema
SELECET - naredba dodele sa izborom vrednosti Sintaksa:
WITH selekcioni_izraz SELECTsig <= izraz_1 WHEN vrednost_1,
izraz_2 WHEN vrednost_2,...izraz_n WHEN vrednost_n;
selekcioni_izraz –aritmetički ili logički izraz Izračunata vrednost selekcioni_izraz, poredi se sa vrednostima iz
svih grana, a signal dobija vrednost izraza iz grane gde se javilo slaganje.
Zahtev: svaka moguća vrednost selekcionog_izraza mora biti pokrivena tačno jednom granom.
˝WHEN vrednost˝ može biti: WHEN vrednost; -- jedinstvena vrednost WHEN vrednost_1 TO vrednost_2; -- opseg vrednosti WHEN vrednost_1 | vrednost_2 | vrednost_3 ... -- više vrednosti
Arhitektura mikrosistema
SELECT Dozvoljeno korišćenje reči OTHERS:
WITH selekcioni_izraz SELECTsig <= izraz_1 WHEN vrednost_1,
izraz_2 WHEN vrednost_2,...izraz_n WHEN OTHERS;
Primer:WITH contol SELECT
outp <= “000” WHEN “00”“111” WHEN “01” | “10”“010” WHEN OTHERS;
Bira se ako vrednost selekcionog izraza nije
jednaka ni jednoj navedenoj vrednosti
Arhitektura mikrosistema
Realizacija tabele istinitosti
a b y 0 0 0 0 1 1 1 0 1 1 1 1
1 --------------------------------------------- 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 --------------------------------------------- 5 ENTITY tabela_istinitosti IS 6 PORT (a,b : IN STD_LOGIC; 7 y : OUT STD_LOGIC); 8 END tabela_istinitosti; 9---------------------------------------------- 10 ARCHITECTURE arch OF tabela_istinitosti IS 11 SIGNAL tmp : STD_LOGIC_VECTOR(1 DOWNTO 0); 12 BEGIN 13 tmp <= a & b; 14 WITH tmp SELECT 15 y <= '0' WHEN "00", 16 '1' WHEN "01", 17 '1' WHEN "10",, 18 '1' WHEN OTHERS; 19 END arch;
Arhitektura mikrosistema
OTHERS grana je neophodna kad se radi s tipom std_logic !
a b y 0 0 0 0 1 1 1 0 0 1 1 1
tmp <= a & b;WITH tmp SELECTy <= '0' WHEN "00",
'1' WHEN "01",'0' WHEN "10",'1' WHEN "11";
Sve moguće vrednosti selekcionog signala moraju biti pokrivene. Za tip std_logic to nisu samo ˝00˝, ˝01˝, ˝10˝, ˝11˝, već i ˝0X˝, ˝HL˝, … (sve ukupno 64).
Arhitektura mikrosistema
SELECTPrimer: Multiplekser
ARCHITECTURE select_arch OF mux4u1 ISBEGINWITH sel SELECT
y <= a WHEN "00", -- "," umesto ";"b WHEN "01",c WHEN "10",d WHEN OTHERS; -- ne moze d WHEN "11"
END select_arch;
abcd
y
2sel
00011011
Arhitektura mikrosistema
SELECTPrimer: Dekoder
ARCHITECTURE select_arch OF dek2u4 ISSIGNAL ed : STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGINed <= e & d;WITH ed SELECTy <= "1000" WHEN "100",
"0100" WHEN "101","0010" WHEN "110","0001" WHEN "111","0000" WHEN OTHERS;
END select_arch;
Dekoder2-u-4
e
d0 y0
y1
y2
y3
d1
Arhitektura mikrosistema
SELECTPrimer: KoderARCHITECTURE select_arch OF encoder ISBEGIN
WITH x SELECTy <= "00" WHEN "0001",
"01" WHEN "0010", "10" WHEN "0100", "11" WHEN OTHERS;
END select_arch;
Koder4-u-2
x3
x2
x1
x0
y1
y0
x3 x2 x1 x0 y1 y0 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 0 1 1 sve ostale komb. - -
Arhitektura mikrosistema
SELECTPrimer: Prioritetni koder
ARCHITECTURE select_arch OF pencoder ISBEGINWITH x SELECTy <="00" WHEN "0001",
"01" WHEN "0010" | "0011";"10" WHEN "0100" | "0101" | "0110" | "0111","11" WHEN OTHERS;
WITH x SELECT z <= '0' WHEN "0000",
'1' WHEN OTHERS;END select_arch;
Prioritetnikoder4-u-2
x3
x2
x1
x0
y1y0
z
x3 x2 x1 x0 y1 y0 z 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 - 0 1 1 0 1 - - 1 0 1 1 - - - 1 1 1
Arhitektura mikrosistema
Konceptualna implementacija naredbe SELECTWITH sel SELECT
sig <= izraz_1 WHEN v1,izraz_2 WHEN v2,
...izraz_n WHEN vn;
WITH sel SELECTsig <= izraz_1 WHEN v1,
izraz_2 WHEN v2,
izraz_3 WHEN OTHERS
izraz_1
izraz_2
izraz_n
sel
v1
sig
v2
vn
.
.
....
izraz_1
izraz_2
izraz_3
v1
v2
v3
v4
v5
sel
sig
Arhitektura mikrosistema
and
or
11
10
01
00
x
ab
0
s
x
ab
0
s(1)
s(0)
Konceptualna implementacija naredbe SELECT - primerSIGNAL s: STD_LOGIC_VECTOR(1 DOWNTO 0);. . .WITH s SELECT
x <= (a AND b) WHEN "11",(a OR b) WHEN "01" | "10",’0’ WHEN OTHERS;
. . .
Arhitektura mikrosistema
Konceptualna implementacija naredbe SELECT - primerSIGNAL a,b,r: UNSIGNED(7 DOWNTO 0);SIGNAL s: STD_LOGIC_VECTOR(1 DOWNTO 0);. . .WITH s SELECT
r <= a+1 WHEN "11",a-b-1 WHEN "10",a+b WHEN OTHERS;
. . .
11
10
01
00
+1
-
+
-1
a
b
s
r
Arhitektura mikrosistema
Optimizacija konkurentnog koda Cilj: sa što manje hardverskih resursa
realizovati željenu funkciju Minimizacija broja aritmetičkih i relacionih
operatora u kodu Dve tehnike: Deoba operatora i Deoba funkcija
Arhitektura mikrosistema
Deoba operatora Kako smanjiti broj aritmetičkih operatora u kodu?
Preurediti kôd tako da se se isti operator može iskoristiti za obavljanje više različitih operacija.
r <= a + b WHEN uslov ELSEa + c;
uslov
+ TF
+
ab
c
ostaliulazi
r
+
uslov
TF
ra
b
costaliulazi
x
x <= b WHEN uslov ELSEc;
r <= a + x;
Arhitektura mikrosistema
Složenost vs. kašnjenje
uslov
+ TF
+
ab
c
ostaliulazi
r
+
uslov
TF
ra
b
costaliulazi
x
Kašnjenje: max{Tsab, Tuslov} + Tmux
Složenost: 2 sabirača + multiplekser
Kašnjenje: Tsab + Tuslov + Tmux
Složenost: 1 sabirač + multiplekser
Arhitektura mikrosistema
Deoba operatora na primeru naredbe select:WITH uslov SELECTr <= a+b WHEN ˝00˝,
a+c WHEN ˝01˝,d+1 WHEN OTHERS;
+
+
ab
c
+1d
00011011
uslovostaliulazi
r
00011011
00011011
+ r
uslovostaliulazi
a
d
bc1
x0
x1
WITH uslov SELECTx0 <= a WHEN ˝00˝ | ˝01˝,
d WHEN OTHERS;WITH uslov SELECTx1 <= b WHEN ˝00˝,
c WHEN ˝01˝,˝00000001˝ WHEN OTHERS;
r <= x0 + x1;
Nivo ostvarene uštede zavisi od relativnog odnosa složenosti operatora i dodatnih multipleksera
Arhitektura mikrosistema
Deoba funkcija Više funkcija realizuju se tako da dele neke zajedničke delove
ili se jedna funkcija koristi za realizaciju neke druge funkcije.
+
-
ab 0
1
ctrl
r
ctrl operacija 0 a + b 1 a - b
ARCHITECTURE arch_v1 OF ADDSUB ISSIGNAL x0, x1, sum : SIGNED(7 DOWNTO 0);BEGINx0 <= SIGNED(a);x1 <= SIGNED(b);sum <= x0 + x1 WHEN ctrl = ‘0’ ELSE
x0 - x1;r <= STD_LOGIC_VECTOR(sum);END arch_v1;
Sabirač/oduzimač
Funkcionalna tabela
Arhitektura mikrosistema
Deoba funkcija – optimizovana realizacija sabirača/oduzimača
+01
rab
ctrl
cin
Oduzimanje je isto što i sabiranje s potpunim komplementom umanjioca:
a - b = a + b’ + 1 ARCHITECTURE arch_v2 OF ADDSUB ISSIGNAL x0, x1, sum : UNSIGNED(7 DOWNTO 0)SIGNAL cin : UNSIGNED(0 DOWNTO 0); BEGINx0 <= UNSIGNED(a);x1 <= UNSIGNED(b) WHEN ctrl=´0´ ELSE
UNSIGNED(NOT b);cin <= ˝0˝ WHEN ctrl=´0´ ELSE
˝1˝;sum <= x0 + x1 + cin;r <= STD_LOGIC_VECTOR(sum);END arch_v2;
˝multiplekser + niz invertora˝ < ˝oduzimač˝
Arhitektura mikrosistema
Deoba funkcija na primeru komparatora
Ka
b
gtlteq
a > b
a < b
a = b
Komparator (potpuni komparator)gt <= '1' WHEN a > b ELSE
'0';lt <= '1' WHEN a < b ELSE
'0';eq <= '1' WHEN a = b ELSE
'0';
>
<
=
ab gt
lt
eq
Arhitektura mikrosistema
Deoba funkcija na primeru komparatora
>
<
ab gt
lteq
a je jednako b, ako a nije ni veće ni manje od b
xgt <= '1' WHEN a > b ELSE'0';
xlt <= '1' WHEN a < b ELSE'0';
gt <= xgt;lt <= xlt; eq <= xgt NOR xlt;
Još efikasnije:
>
=
ab gt
lteq
Arhitektura mikrosistema
Tipovi podataka iz paketa IEEE numeric_std Uključuje se sa:
LIBRARY IEEE; USE IEEE.NUMERIC_STD.ALL;
Podrška za aritmetičke operacije Uvodi dva tipa podataka:
UNSIGNED – za neoznačene binarne brojeve SIGNED – za označene binarne brojeve
SIGNAL a, b : SIGNED(7 DOWNTO 0);
SIGNAL x : UNSIGNED(7 DOWNTO 0);
Arhitektura mikrosistema
Označeni i neoznačeni brojevi Šta predstavlja ˝˝1100˝ ? Zavisi od konteksta (tipa signala/varijable kome se dodeljuje) a <= ˝1100˝
a je tipa std_logic_vector Niz od 4 nezavisna bita
a <= ˝˝1100˝ a je tipa unsigned Neoznačen binarni broj, vrednosti 12
a <= ˝˝1100˝ a je tipa signed Označen binarni broj, vrednosti -4
Arhitektura mikrosistema
Operacije nad UNSIGNED i SIGNED
SIGNAL au, bu, cu, du, eu : UNSIGNED(7 DOWNTO 0);SIGNAL as, bs, cs, ds : SIGNED(7 DOWNTO 0);. . .au <= bu + cu; -- unsigned i unsigneddu <= cu + 1; -- unsigned i naturaleu <= (3 + au + bu) - cu; -- unsigned i naturalas <= bs + cs; -- signed i signedds <= bs – 1; -- signed i integer
Arhitektura mikrosistema
Dozvoljene i nedozvoljene operacijeLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.NUMERIC_STD.ALL;. . .SIGNAL a, b, c: SIGNED(7 DOWNTO 0);SIGNAL x, y, z: STD_LOGIC_VECTOR(7 DOWNTO 0);. . .c <= a + b; -- ispravno, aritmetičke operacije su dozvoljene nad tipom signedc <= a AND b; -- neispravno, logičke operacije nisu dozvoljene nad tipom signedz <= x + y; -- neispravno, aritmetičke operacije nisu dozvoljene nad -- tipom std_logic_vectorz <= x AND y; -- ispravno, logičke operacije su dozvoljene u tipu std_logic_vector
Arhitektura mikrosistema
Relacije nad UNSIGNED/SIGNED Da li važi ˝011˝ > ˝1000˝ ? Ako su: Std_logic_vector: NETAČNO Unsigned: NETAČNO
˝011˝ je 3, a ˝1000˝ je 8 Signed: TAČNO
˝011˝ je 3, a ˝1000˝ je -8
Arhitektura mikrosistema
Funkcije za konverziju iz paketa numeric_stdIz tipa U tip Funkcija za konverziju /
eksplicitna konverzija
unsigned, signed std_logic_vector std_logic_vector(a)
signed,std_logic_vector
unsigned unsigned(a)
unsigned,std_logic_vector
signed signed(a)
unsigned, signed integer to_integer(a)
natural unsigned to_unsigned(a, size)
integer signed to_signed(a, size)
Arhitektura mikrosistema
Eksplicitna konverzija tipa
SIGNAL u1, u2 : UNSIGNED(7 DOWNTO 0);SIGNAL v1, v2 : STD_LOGIC_VECTOR(7 DOWNTO 0);. . .u1<= UNSIGNED(v1); -- konvertuje std_logic_vector u unsignedv2<= STD_LOGIC_VECTOR(u1); -- konvertuje unsigned u std_logic_vector
Za konverziju podataka između tipova std_logic_vector, unsigned i signed
Arhitektura mikrosistema
Funkcija za konverziju
SIGNAL u: UNSIGNED(7 DOWNTO 0);
u <= 5;-- neispravno, neusklađeni tipovi
u <= TO_UNSIGNED(5, 8);
Treba ovako: Broj bita u rezultujućoj
binarnoj vrednosti
Vrednost koja se
konvertuje