Documente Academic
Documente Profesional
Documente Cultură
3
SEMNALE. PARAMETRI GENERICI. CONSTANTE
1. Scopul lucrării
Lucrarea prezintă unul dintre obiectele fundamentale de proiectare în
VHDL: semnalul. Este detaliat conceptul de semnal, precum şi noţiunile
fundamentale referitoare la acesta (vizibilitatea semnalelor, reguli de
asignare, modele de transmisie etc.). Se introduce şi se detaliază şi
conceptul de parametri generici (sunt prezentate exemple, domeniul de
aplicabilitate, avantaje şi dezavantaje) şi cel de constantă.
2. Consideraţii teoretice
2.1 Conceptul de semnal. Definiţie
Deşi în VHDL există cinci tipuri de moduri posibile ale unui semnal
(in, inout, out, buffer şi linkage) este recomandat să se utilizeze numai
primele trei dintre ele, deoarece ultimele două nu sunt acceptate de toate
instrumentele de sinteză. Cele mai folosite trei moduri pot fi descrise astfel:
- modul in: datele pot fi citite în interiorul modulului, dar nu pot fi
scrise de către arhitectura internă a modulului;
- modul out: datele pot fi generate în interiorul arhitecturii, dar nu
pot fi citite;
- modul inout: datele pot fi citite şi scrise în interiorul arhitecturii.
SEMNALE. PARAMETRI GENERICI.CONSTANTE 45
WE
CS_ROM CS_RAM
entity MEMORIE_RAM is
port(A_RAM: in BIT_VECTOR (3 downto 0); -- Adresele
CS_RAM: in BIT; -- Semnal selecţie cip, „Chip Select”
WE: in BIT; -- Semnal validare scriere, „Write Enable”
D_RAM: inout BIT_VECTOR(7 downto 0)); -- Bidirecţional
end MEMORIE_RAM;
Observaţii
1. Cuvântul cheie signal nu este necesar în declaraţia porturilor, deoarece
fiecare port este prin definiţie un semnal.
2. Semnalele interne nu au nevoie de declaraţii de mod (in, inout, out etc.)
3. Există posibilitatea să se specifice o valoare iniţială pentru fiecare
semnal intern.
Registrul C
7 0
7 0 7 0
Unitate
Aritmetică
Logică
7 0
Reacţie
Transport
Registrul A Registrul B
7 0 7 0
Câtul Q Restul R
entity UNITATE_DE_EXECUŢIE is
port (X, Y: in BIT_VECTOR (7 downto 0);
Q,R: out BIT_VECTOR (7 downto 0));
-- X, Y, Q şi R sunt semnale externe
end entity UNITATE_DE_EXECUŢIE;
architecture UEA of UNITATE_DE_EXECUŢIE is
signal C: BIT_VECTOR (7 downto 0);
signal REACŢIE: BIT_VECTOR (7 downto 0);
signal TRANSPORT: BIT; --A,B: registre de deplasare pe 8 biţi
-- C, REACŢIE şi TRANSPORT sunt semnale interne
begin
-- Descrierea structurii interne a Unităţii de execuţie
...
end UEA;
Q
Q
NQ
T0 + (2 × delta) NQ
T0
T0
a) b)
Figura 3.5 Întârzierile „delta”: a) punctul de vedere al simulatorului;
b) punctul de vedere al proiectantului
NQ
T0 T0 + 10 ns
T0 + 5 ns
Orice impuls prezent pe linia REF, a cărui durată este mai mică
decât 10 nanosecunde, nu va fi transmis pe SEMNAL1;
SEMNAL
1<=R
EFafter10n
s;--m erţial
odelul in
SEMNAL
2<=tran
sportRE
Fafter10n
s;--m
odelultran
sport
10n
s 50n
s 100n
s
Figura 3.7 Modelele de propagare inerţial şi transport
SEMNAL1<= REF after 10 ns; sau SEMNAL1<= inertial REF after 10 ns;
Filtrat! Păstrat!
10 ns 50 ns 100 ns
Pentru a asigna valori unui agregat, adică pentru a-l putea folosi în
membrul stâng al asignării, trebuie ca tipul agregatului să fie declarat şi ca
identificarea acestui tip să se poată face fără ambiguitate din punctul de
vedere al părţii drepte a instrucţiunii de asignare. Nu este permisă utilizarea
unei expresii calificate (tip_ obiect ‘(expresie) sau tip_obiect ‘agregat) în
membrul stâng.
Presupunând că semnalele A şi B sunt de tipul BIT şi că se cunoaşte
tipul BIT_VECTOR, am putea fi tentaţi să scriem:
Observaţie
La utilizarea unui agregat într-un element de formă de undă, aceleaşi
restricţii interzic utilizarea cuvântului cheie others; tipul agregatului din
stânga trebuie să poată fi identificat fără ambiguitate.
TRANSPORT INERŢIAL
A doua tranzacţie
Scrie peste prima
are loc înaintea Scrie peste prima tranzacţie
tranzacţie
primei tranzacţii.
A doua tranzacţie Adaugă a doua Scrie peste prima tranzacţie
are loc după prima tranzacţie la dacă valorile sunt diferite;
tranzacţie. semnal dacă nu, ambele sunt păstrate
begin
process
begin
IEŞIRE <= ‘1’ after 10 ns; -- prima tranzacţie
IEŞIRE <= ‘0’ after 5 ns; -- a doua tranzacţie
wait;
end process;
end;
begin
process
begin
IEŞIRE <= transport ‘1’ after 10 ns; -- prima tranzacţie
IEŞIRE <= transport ‘0’ after 5 ns; -- a doua tranzacţie
wait;
end process;
end;
Ieşire X 0
0 ns 5 ns 10 ns 15 ns
Figura 3.9
2) Inerţial – tranzacţia 2 are loc după tranzacţia 1, valori similare (figura
3.10).
begin
process
begin
IEŞIRE <= ‘0’ after 10 ns; -- prima tranzacţie
IEŞIRE <= ‘0’ after 15 ns; -- a doua tranzacţie
wait;
end process;
end;
SEMNALE. PARAMETRI GENERICI.CONSTANTE 57
Ieşire X 0
0 ns 5 ns 10 ns 15 ns
Figura 3.10
begin
process
begin
IEŞIRE <= ‘1’ after 10 ns; -- prima tranzacţie
IEŞIRE <= ‘0’ after 15 ns; -- a doua tranzacţie
wait;
end process;
end;
Ieşire X 0
0 ns 5 ns 10 ns 15 ns
Figura 3.11
4) Transport – tranzacţia 2 are loc după tranzacţia 1 (figura 3.12)
begin
process
begin
IEŞIRE <= transport ‘1’ after 10 ns; -- prima tranzacţie
IEŞIRE <= transport ‘0’ after 15 ns; -- a doua tranzacţie
wait;
end process;
end;
58 LIMBAJUL VHDL
Ieşire X 1 0
0 ns 5 ns 10 ns 15 ns
Figura 3.12
POARTA_ŞI: block
generic (NUMĂR_INTRĂRI: NATURAL := 2);
port (INTRĂRI: in BIT_VECTOR (1 to NUMĂR_INTRĂRI);
60 LIMBAJUL VHDL
IEŞIRE: out BIT);
generic map (NUMĂR_INTRĂRI => 8); -- Instanţierea unei porţi
-- ŞI cu 8 intrări
begin --Zona de instrucţiuni din cadrul blocului
process (INTRĂRI)
variable V: BIT:=’1’;
begin
for I in 1 to NUMĂR_INTRĂRI loop
V:= V and INTRĂRI(I);
end loop;
IEŞIRE <= V;
end process;
end POARTA_ŞI;
I
NTR
AR
ERe
c
unş
o
at
er
eas
ec
ve
nţ
eiŞ
AB
LO
Nd
eDE
T
EC
TA
T
Nb
iţ
i
entity RECUNOAŞTERE is
generic (SECVENŢA: BIT_VECTOR);
port (INTRARE, TACT: in BIT;
DETECTAT: out BIT);
end RECUNOAŞTERE;
Observaţii
1. Testul TACT = ’1’ e utilizabil deoarece TACT este de tipul BIT. Dacă, de
exemplu, TACT ar putea lua valorile ‘X’, ‘0’, ‘1’ sau ‘Z’, acest test ar fi
adevărat (în mod greşit) în decursul trecerilor de la ‘X’ la ‘1’ sau de la ‘Z’ la
‘1’. Ar trebui deci regândită expresia utilizând atribute adecvate.
2. Descrierea de mai sus se pretează foarte bine la o transformare în
arhitectură recursivă.
2.7 Constante
3. Desfăşurarea lucrării
3.1 Se vor crea entităţile Memorie_ROM şi Memorie_RAM
(conform figurii 3.2).
3.2 Se vor descrie prin arhitecturi structurile interne pentru
memoriile ROM şi RAM, utilizând semnale. Harta memoriilor
va fi cea necesară implementării următoarelor funcţii: f1 = (0,
2, 8, 10); f2 = (0, 1, 2, 5, 6, 8, 10); f3 = (1, 2, 4, 5, 7, 11);
f4 = (0, 2, 8, 9, 13, 15);
3.3 Se vor testa modelele de transmitere ale semnalelor pentru
semnalele definite în arhitecturile de la punctul 3.2.
3.4 Se vor implementa şi testa exemplele POARTA_ŞI şi
MUX_2_LA_1 descrise în lucrare pentru înţelegerea utilizării
parametrilor generici.