Sunteți pe pagina 1din 41

MODALITI DE DESCRIERE A ARHITECTURILOR

- COMPORTAMENTAL
Tipuri de descriere :

- FLUX DE DATE
- STRUCTURAL

DESCRIEREA COMPORTAMENTAL

-Este o modalitate de descriere de nivel nalt.


-Definete un algoritm comportamental al entitii
logice (descrie
succesiunea n timp a evenimentelor).
-Unitatea de program care definete un algoritm se
numete PROCES.
-O arhitectur conine unul sau mai multe procese.
- Descrierea procesului se face cu instruciuni de tip
secvenial.

Sintaxa general a unui PROCES :


dac sunt
mai multe procese

nume_proces :

Lista senzitivitilor

process (

semnal 1 , semnal 2

, )

begin
instruciuni care definesc
algoritmul comportamental

end process

nume_proces

Lista senzitivitilor :
conine semnalele care declaneaz procesu

Senzitivitatea unui proces la semnale :

Un proces este senzitiv la o intrare x dac o schimbare a valorii x


poate s genereze o schimbare simultan a ieirii y din proces.

Un proces NU este senzitiv la o intrare x dac nici o schimbare a


valorii x nu genereaz o schimbare simultan a ieirii y din proces.

b
a
b
c
d
e

c
Proces

Procesul este senzitiv la semnalele

a, d

- Structurile COMBINAIONALE :
sunt senzitive la toate semnalele de intrare.

- Structurile

SECVENIALE :
-intrarea de sincronozare (clk)

- sunt senzitive la :
- intrrile asincrone.
- NU sunt senzitive la intrrile sincrone.

Exemplu : registru sincron cu reset asincron

clk
D

Q
reset

clk

reset
D

Procesul este senzitiv la clk i

reset

Procesul NU este senzitiv la D

DESCRIEA DE TIP FLUX DE DATE

- Indic modul n care datele sunt transferate de la intrri spre ieiri (fluxu
f`r a acorda importan ordinii n timp a acestor transferuri.
- Se recomand descrierea prin instruciuni concurente.
( Se pot folosi i instruciuni secveniale. In acest caz descrierea se face
cadrul unui proces, sezitiv la toate mrimile de intrare ).

Descrieri :

- de nivel cobort (se indic schema exact a entitii lo

- de nivel nalt (se indic doar funcionarea entitii logi

Exemplu : comparator de 2 x 2 bii

A1
A0

B1
B0

COMP
2x2

descriere de nivel cobort, folosind instruciuni concurente :


Descrierea arhitecturii unui comparator 2 x 2 bii, folosind funcii logice :

library ieee;
use ieee.std_logic_1164.all;

A1
A0

B1
B0

entity COMP is port


(A , B : in std_logic_vector (1 downto 0);
Y : out std_logic);
end COMP;
architecture arch_COMP_1 of COMP is
signal u , v : std_logic ;
begin

u <= NOT( A(1) XOR B(1) ) ;


v <= NOT( A(0) XOR B(0) ) ;
y <= u AND v ;
end arch_COMP_1;

--semnale interne

u
Y
v

descriere de nivel nalt, folosind o instruciune concurent :

Aceluiai comparator 2 x 2 bii, descris cu instruciunea concurent when-else

library ieee;
use ieee.std_logic_1164.all;

A1
A0

B1
B0

entity COMP is port


(A , B : in std_logic_vector (1 downto 0);
Y : out std_logic);
end COMP;
architecture arch_COMP_2 of COMP is
begin

Y <= 1 when A = B else


0 ;
end arch_COMP_2;

COMP
2x2

descriere de nivel nalt, folosind o instruciune secvenial :

Aceluiai comparator 2 x 2 bii, descris cu instruciunea concurent when-else

library ieee;
use ieee.std_logic_1164.all;

A1
A0

B1
B0

entity COMP is port


(A , B : in std_logic_vector (1 downto 0);
Y : out std_logic);
end COMP;
architecture arch_COMP_2 of COMP is
begin

process(A , B)
begin
if A = B then Y <= 1 ;
else Y <= 0 ;
end if ;
end process;
end arch_COMP_2;

COMP
2x2

DESCRIERI DE TIP STRUCTURAL

-Indic explicit structura (schema ) intern a entitii logice des

- Folosesc blocuri funcionale predefinite, pe care le extrag din b


i indic modul de interconectare a acestora.
-Dac blocurile funcionale nu exist n bibliotec, ele pot fi create
i salvate ca articole de bibliotec .

Descrierea structural a arhitecturii unui comparator 2 x 2 bii :

Exemplu :

A0

u0

xnor2

A1

X0

and2
Y

X1

B0
B1
xnor2

u1

u2

library ieee;
use ieee.std_logic_1164.all;

use work.gates_pkg.all ;
entity COMP is port
(A , B : in std_logic_vector (0 to 1);
Y : out std_logic);
end COMP;
architecture arch_COMP of COMP is
signal X : std_logic_vector(0 to 1);
begin

--biblioteca ce conine porile


--logice xnor2 i and2
--declar portul schemei

--se definesc semnalele interne X

u0 : xnor2 port map (A(0) , B(0) , X(0));


u1 : xnor2 port map (A(1) , B(1) , X(1));
u2 : and2 port map (X(0) , X(1) , Y);
end arch_COMP;

-- se definesc conexiunile ntre


-- porile logice din schem

DESCRIEREA STRUCTURILOR

COMBINAIONALE

-comportamentale
descrieri :
Se folosesc :

-flux de date
-structurale

instruciuni :

-concurente
- secveniale

recomandate

DESCRIEREA STRUCTURILOR COMBINAIONALE


FOLOSIND INSTRUCIUNI CONCURENTE

-ecuaii logice (booleene)

3 tipuri de instruciuni concurente :-instruciunea de selecie with-select-whe


- instrucinea condiional when-else

1.

DESCRIEREA PRIN ECUAII LOGICE (BOOLEENE)

Operatori logici predefinii :

NOT , AND , OR , NAND , XOR , XN

- bit
Pot opera cu semnale de tip -: bit_vector
- std_logic
- std_logic vector

NU exist prioriti predefinite pentru operatorii logici


Operaiile se execut n ordinea scrierii operatorilor.
Exemplu :

a OR b AND c

Prioritile se definesc prin


Exemplu :

a+bc

se va evalua ca :

(a + b)c

paranteze.

se codeaz :

NOT(a) OR (b AND NOT(c) )

Exemplu : descrierea prin ecuaii booleene a unui multiplexor 4:1 de 4 bii


a3
a2
a1
a0

00

b3
b2
b1
b0

01

Reprezentare simplificat :

MUX 4:1

c3
c2
c1
c0

10

d3
d2
d1
d0

11

y3
y2
y1
y0

a [3:0]

00

b [3:0]

01

c [3:0]

10

d [3:0]

11

y [3:0]

s [1:0]
s 1 s0

library ieee;
use ieee.std_logic_1164.all
entity MUX is
port ( a , b , c , d : in std_logic_vector(3 downto 0) ;
s : in std_logic_vector(1 downto 0) ;
y : out std_logic_vector(3 downto 0) ) ;
end MUX;
architecture arch_MUX of MUX is
begin
y(3) <= (a(3) and not (s(1)) and not (s(0))) or (b(3) and not (s(1)) and not (s(0)))
or (c(3) and not (s(1)) and not (s(0))) or (d(3) and not (s(1)) and not (s(0)));
y(2) <= (a(2) and not (s(1)) and s(0)) or (b(2) and not (s(1)) and s(0))
or (c(2) and not (s(1)) and s(0)) or (d(2) and not (s(1)) and s(0));
y(1) <= (a(1) and s(1) and not (s(0))) or (b(1) and s(1) and not (s(0)))
or (c(1) and s(1) and not (s(0))) or (d(1) and s(1) and not (s(0)));
y(0) <= (a(0) and s(1) and s(0)) or (b(0) and s(1) and s(0))
or (c(0) and s(1) and s(0)) or (d(0) and s(1) and s(0));
end arch_MUX;

2. INSTRUCIUNEA DE SELECIE

with-select-when

-Atribuie valori unui semnal n funcie de valorile unui

flux de date.

- Realizeaz o descriere de tip

with

semnal_selecie

semnal_ieire

<=

selecto

select

valoare_1
valoare_2

when
when

valoare_1_semnal_selecie

valoare_2_semnal_selecie

valoare_n-1
valoare_n

Cuvntul rezervat
Se folosete

others

obligatoriu

when valoare_n-1_semnal_seleci
when others ;

: desemneaz toate valorile posibile ale selectoru


n afar de cele specificate n instruciune.
la sfritul instruciunii.

Exemplu : MUX 4:1 de 4 bii

a [3:0]

00

b
[3:0]

01

library ieee;
use ieee.std_logic_1164.all

y [3:0]

10

c [3:0]
d
[3:0]

11

s [1:0]

entity MUX is port


( a , b , c , d : in std_logic_vector(3 downto 0);
s : in std_logic_vector(1 downto 0);
y : out std_logic_vector(3 downto 0) );
end MUX;
architecture arch_MUX of MUX is
begin
with s select
y <= a when "00" ,
b when "01" ,
c when "10" ,
d when others ;
end arch_MUX;

Modul de operare al instruciunii with-select-when :

selectorul

s = "00"
DA

y <= a

s = "01"
DA

s = 10"
DA

y <= b

ieirea

y <= c

s = alte
valori
DA

y <= d

-Ordinea n timp
de testare
a valorilor
selectorului s
nu are importan.

Exemplu : MUX 5:1


a

000

001

010

011

100

Semnal selecie
s
s2 s1 s0

s [2:0]

0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
alte valori

y=a
y=b
y=c
y=d
y=e
y=0

..
with s select
y <= a when "000",
b when "001",
c when "010",
d when "011",
e when "100",
'0' when others ;
..

Instruciunea with-select-when cu valori multiple


Exemplu :

a 1 a2 a 3 y

Circuit combinaional :
a1
a2

CLC

a3

0
0
0
0
0
1
1
1
1

0
0
1
1
0
0
0
1
1

0
1
0
1
1
0
1
0
1

1
0
0
1
0
0
1
0
0

library ieee;
use ieee.std_logic_1164.all
entity CLC is port
( a : in std_logic_vector(1 to 3);
y : out std_logic ) ;
end CLC;
architecture arch_CLC of CLC is
begin
with a select
y <= 1 when "000" | "011 | "101" ,
0 when others ;
end arch_MUX;

are semnificaia
operatorului SAU

3. INSTRUCIUNEA CONDIIONAL

when-else

-Atribuie valori unui semnal n funcie de realizarea unei


- Realizeaz o descriere de tip

nume_semnal

<=

condiii

flux de date.

valoare_1

when

condiie_1

valoare_2

when

condiie_2

else
else

...
valoare_n-1
valoare_n

when

condiie_n-1

else

Modul de operare al instruciunii when-else este asemntor cu


al instruciunii with-select-when.
Nu are importan ordinea n care se testeaz condiiile.

Exemplu : MUX 4:1 de 4 bii

a [3:0]
b
[3:0]

00
01

y [3:0]

10

c [3:0]
d
[3:0]

library ieee;
use ieee.std_logic_1164.all

11

s [1:0]

entity MUX is port


( a , b , c , d : in std_logic_vector(3 downto 0) ;
s : in std_logic_vector(1 downto 0) ;
y : out std_logic_vector(3 downto 0) ) ;
end MUX;
architecture arch_MUX of MUX is
begin
y <= a when s = "00" else
b when s = "01" else
c when s = "10" else
d;
"11"

end arch_MUX;

-- y=d pentru s =

Folosirea condiiilor compuse n instruciunea when-else

Condiie compus : succesiune de condiii simple concatenate prin o


Exemplu : Comparator de egalitate 2 x 4 bii, cu validarea ieirii :
oe
a [3:0]

Comp.

b [3:0]
oe

relaia a,b

ab
y

0
a=b
ab

a=b

architecture archCOMP of COMP is


begin
y <= '1' when ( a = b AND oe = '1 ) else
'0' ;
end archCOMP;

Folosirea operatorilor relaionali n instruciunea when-els


Descrierea condiiilor n cadrul instruciunii se poate face sintetic folosind
operatorii relaionali :
Relia ntre variabile

a egal cu b
a diferit de b
a mai mic ca b
a mai mic sau egal cu b
a mai mare ca b
a mai mare sau egal cu b

operatorul relaional

a = b
a /= b
a < b
a <= b
a > b
a >= b

!!

-Rezultatul operaiei relaionale este de tip boolean (true/false).


- Pentru SEMNALE sunt predefinii numai operatorii

- Operanzii trebuie s fie de acelai tip.

= i /=

Exemplu :

signal a : std_logic_vector(3 downto 0);


signal y: std_logic;

y <= '1' when ( a = 9 ) else


--operaia va genera o eroare,
'0';
--ntruct a este de tip SIGNAL,
--iar 9 este de tip INTEGER

Extinderea domeniului de aplicare a operatorilor (overloading)

-Prin overloading operatorii relaionali pot fi aplicai ntre variabile


de tipuri diferite.
-Prin overloading se extinde aplicarea operatorilor < , >, <=, >= i
Extinderea se face prin apelarea unor biblioteci specializate.

Exemplu :
biblioteca work.std_arith extinde utilizarea operatorilor relaionali
i aritmetici la semnalele de tip std_logic i std_logic_vector.

Detector de 9 :

Exemplu :

a3
a

a 3 a2 a1 a 0

a1

1 0

a0

alte valori

a2

Detect 9

0 1

library ieee;
use ieee.std_logic_1164.all ;
use work.std_arith.all;
entity DETECT9 is port
( a : in std_logic_vector(3 downto 0);
y : out std_logic );
end DETECT9;
architecture arch_DETECT9 of DETECT9 is
begin
y <= '1' when (a = 9) else '0' ;
end arch_DETECT9;

Exemplu :

Comparator relaional de 2 x 4 bii :


aEGALb

a [3:0]
Comp.

b [3:0]

aINFb
aSUPb

library ieee;
use ieee.std_logic_1164.all;
use work.std_arith.all;

Relaia a EGAL b a INF b a SUP b


a, b
a=b
1
0
0
a<b
0
1
0
a>b
0
0
1

extinde operatorii < i > la

semnale

entity COMP is
port (a , b : in std_logic_vector(3 downto 0);
aEGALb, aINFb, aSUPb : out std_logic);
end COMP;
architecture arch_COMP of COMP is
begin
aEGALb <= '1' when a = b else
'0 ;
aINFb <= '1' when a < b else
else

'0 ;
aSUPb <= '1' when a > b else
'0';
end arch_COMP;

3 instruciuni when-

Sumator de 2 x 16 bii :

Exemplu :

a
b

16

16

16

suma

library ieee;
use ieee.std_logic_1164.all;
use work.std_arith.all;
-- extinde operatorul + la
semnale
entity SUM is
port (a , b : in std_logic_vector(15 downto 0);
suma : out std_logic_vector(15 downto 0) );
end SUM;
architecture arch_SUM of SUM is
begin

suma <= a + b ;
end arch_SUM;
Obs. : - din bibliotec se apeleaz schema unui sumator cu schem predefinit ;
- sumatorul predefinit este omogen (operanzii i suma au acelai numr de bii ;
- biblioteca conine dispozitive aritmetice pentru toate operaiile uzuale (+ , - , * , / ).

DESCRIEREA STRUCTURILOR COMBINAIONALE


FOLOSIND INSTRUCIUNI SECVENIALE

-Descriu un algoritm comportamental al entitii


Instruciunile secveniale :

-Se pot folosi numai n cadrul unui proces.

modul de operare al schemei


- Ordinea instruciunilor determin
:
n timp
ordinea de prioritate a
semnalelor

NU se recomand folosirea instruciunilor


secveniale
pentru descrierea structurilor
combinaionale.

INSTRUCIUNEA SECVENIAL

if - then - else

Instruciunea if - then - else simpl :

if

then

condiie

else

aciune_1
aciune_2 ;

end if ;
if
condiie
else

da

then

nu

aciune_2

aciune_1

Instruciunea if - then - else compus :

if

condiie_1

then

aciune_1 ;

elsif

condiie_2

then

aciune_2 ;

elsif

condiie_3

then

aciune_3 ;

else
end if ;

aciune_4 ;

if
condiie_1
elsif

then
aciune_1

nu

condiie_2
elsif

da

da

then
aciune_2

nu

condiie_3
nu

else
aciune_4

da

then
aciune_3

Modul secvenial de aciune :


- condiiile sunt testate
n ordinea n care
sunt scrise n surs ;
- schema logic sintetizat
este de tip serial ;
- instruciunea descrie
un algoritm comportamental
al entitii logice,
deci se cere ncadrat
ntr-un P R O C E S .

Exemplu

a [3:0]
b [3:0]
c [3:0]
d [3:0]
e [3:0]
f [3:0]
g [3:0]
h [3:0]

MUX 8:1 de 4 bii


000
001
010
011
100
101
110
111

s [2:0]

y [3:0]

library ieee;
use ieee.std_logic_1164.all
entity MUX is port
( a, b, c, d, e, f, g, h : in std_logic_vector(3 downto 0);
s : in std_logic_vector(2 downto 0);
y : out std_logic_vector(3 downto 0) );
end MUX;
architecture arch_MUX of MUX is
begin
process ( a , b , c , d , e, f , g , h , s )
begin
if
s = "000" then y <= a ;
elsif s = "001" then y <= b ;
elsif s = "010" then y <= c ;
elsif s = "011" then y <= d ;
elsif s = "100" then y <= e ;
elsif s = "101" then y <= f ;
elsif s = "110" then y <= g ;
else y <= h ;
--pentru s = "111"
end if ;
end process ;
end arch_MUX;

INSTRUCIUNEA SECVENIAL

case - when

- Execut diverse aciuni n funcie de valoarea unui selector.


- Selectorul poate fi : un semnal, o variabil, elementul unui tip enumerat, etc.

- Instruciunea se poate folosi numai n cadrul unui P R O C E S .


Sintaxa general :

case

nume_selector

is

when

valoare_selector_1

=>

aciune_1

when

valoare_selector_2

=>

aciune_2

valoare_selector_n-1

=>

aciune_n-1

.
.
.

when

when others
end case ;

=>

aciune_n

Obs. :

a)

=> este operatorul de asociere (asociaz valoarea selectorulu


cu aciunea specificat);

b) pentru o valoare a selectorului pot fi specificate aciuni multiple

when valoare_selector => aciune_1 , aciune_2 , aciune_3 ,


c) Este obligatorie specificarea tuturor valorilor selectorului
n cadrul instruciunii.
Dac aceasta nu este posibil, se va folosi specificaia others
la finalul instruciunii .

Modul de aciune al instruciunii case-when :

when
da
valoare_1
nu
aciune_1

when

Modul secvenial de aciune :

- valorile selectorului sunt testat


n ordinea n care sunt scrise ;

da
valoare_2
nu
aciune_2

when
da
valoare_3
nu
aciune_3

when others

- instruciunea descrie un
algoritm comportamental
al entitii logice,
deci se cere ncadrat
ntr-un P R O C E S .

aciune_4

Obs. :
instruciunile case-when i if-then-else pot fi folosite n
cadrul aceluiai proces.

Exemplu : codificator zecimal / binar de 2 bii


Z0

10

B1

Z1
Z2
Z3

B0
2

intrare zecimal
Z0 Z 1 Z 2 Z 3
1
0
0
0

0
1
0
0

0
0
1
0

0
0
0
1

library ieee ;
use ieee.std_logic_1164.all ;
entity CODIF is port
( z : in std_logic_vector (0 to 3) ;
b : out std_logic_vector (1 downto 0)) ;
end CODIF ;
architecture arch_CODIF of CODIF is
begin
process (z)
case z is
when "1000" => b<="00" ;
when "0100" => b<="01" ;
when "0010" => b<="10" ;
when others => b<="11" ;
end case ;
end process ;

ieire binar
B1
B0
0
0
1
1

0
1
0
1

Atenie
la ordonarea
vectorilor
logici !

others este
obligatoriu pt. c
nu sunt folosite
toate combinaiile
posibile de 4 bii

Instruciuni
de selecie

Instruciuni
concurentewith - select - when

Instruciuni
condiionale
- Descriu structuri logice prin relaiide tip
intrare - ieire.
when - else

i f - then - else
Instruciuni
secveniale case - when

i
if - elsif - else

Execut aciuni
n funcie de
valoarea unii
selector.

- Ordinea n care se scriu instruciunile este


indiferent.
- Recomandate n descrierea structurilor
combinaionale.
- Definesc un algoritm comportamental al
entitii logice.
- Se folosesc n cadrul unui PROCES.
- Ordinea n care se scriu instruciunile
este foarte important.

- Obligatorii n descrierea structurilor


secveniale.
Execut aciuni
n funcie de
realizarea unei
condiii.

S-ar putea să vă placă și