Sunteți pe pagina 1din 9

Lucrarea de laborator 2

Sinteza si implementarea circuitelor logice combinationale


Scopul lucrrii: Proiectarea, testarea i simularea circuitelor logice
combinaionale n mediul de dezvoltare software Altera Quartus II. Descrierea
circuitului va fi efectuat n limbajul VHDL, folosind codificarea structural i
comportamental.
Vom analiza etapele de proiectare a unui sumator/scztor de 4 bii (Fig. 1).
Circuitul const din 4 sumatoare complete de un bit, unite consecutiv i 4
pori XOR.
Intrrile circuitului:
- dou numere A i B de patru bii;
- intrarea de selecie SEL pentru alegerea modului de lucru: adunare sau
scdere.
Ieirile circuitului:
- suma Sum de patru bii;
- transportul Cout.

Figura 1. Sumator serial pe 4 bii.


Circuitul sumatorului complet este prezentat n Figura 2. Circuitul const din
dou pori XOR cu 2 intrri, trei pori I cu 2 intrri i o poart SAU cu 3 intrri.
Fiecare poart logic va fi descris utiliznd codificarea comportamental, dup
care aceste coduri vor fi folosite n descrierea structural a sumatorului complet.

Figura 2. Circuitul logic al sumatorului complet


Proiectarea sumatorului
1. Crearea unui proiect nou
2. Crearea, adugarea i compilarea fiierelor de proiect
a) Se selecteaz FileNew File din bara de meniu. Se alege VHDL File din
lista fiierelor de proiect.
Se introduce codul pentru descrierea comportamental a porii logice AND
cu dou intrri i se salveaz cu numele AND2 .
Program comportamental pentru poarta logic AND cu dou intrri
library ieee;
use ieee.std_logic_1164.all;
entity Gate_And2 is
port (x, y: in std_logic;
F: out std_logic);
end Gate_And2;
architecture Gate_And2_beh of Gate_And2 is
begin
process (x, y)
begin
F <= x and y;
end process;
end Gate_And2_beh;
Codul VHDL reprezint un program comportamental pentru poarta logic
AND cu dou intrri. n lista de sensibilitate a procesului sunt incluse semnalele x

i y. Deci, de fiecare dat, cnd unul dintre aceste semnale i va schimba valoarea,
procesul se va executa i va genera un nou rezultat.
b) Se creeaz un fiier VHDL nou i se introduce codul comportamental
pentru poarta logic XOR. Fiierul se salveaz cu numele XOR2.
Program comportamental pentru poarta logic XOR cu dou intrri
library ieee;
use ieee.std_logic_1164.all;
entity Gate_XOR2 is
port (x, y: in std_logic;
F: out std_logic);
end Gate_XOR2;
architecture Gate_XOR2_beh of Gate_XOR2 is
begin
process (x, y)
begin
F <= x XOR y;
end process;
end Gate_XOR2_beh;
c) Se creeaz un fiier VHDL nou i se introduce codul comportamental
pentru poarta logic OR cu trei intrri. Fiierul se salveaz cu numele OR3.
Program comportamental pentru poarta logic OR cu trei intrri
library ieee;
use ieee.std_logic_1164.all;
entity Gate_OR3 is
port (x, y, z: in std_logic;
F: out std_logic);
end Gate_OR3;
architecture Gate_OR3_beh of Gate_OR3 is
begin
process (x, y, z)
begin
F <= x OR y OR z;
end process;
end Gate_OR3_beh;
d) Se creeaz un fiier VHDL nou i se introduce codul structural pentru
sumatorul complet pe un bit (Tabelul 4). Fiierul se salveaz cu numele FullAdder.

Program structural pentru sumatorul complet pe un bit


library ieee;
use ieee.std_logic_1164.all;
entity FullAdder is
port (A, B, Cin: in std_logic; SUM, Cout: out std_logic);
end FullAdder;
architecture FullAdder_struct of FullAdder is
component Gate_And2 is
port (x, y: in std_logic; f: out std_logic); end component;
component Gate_XOR2 is
port (x, y: in std_logic; f: out std_logic); end component;
component Gate_OR3 is
port (x, y, z: in std_logic; f: out std_logic);
end component;
signal XOR2_0_out, AND2_0_out, AND2_1_out, AND2_2_out: std_logic;
begin
XOR2_0: Gate_XOR2 port map (A, B, XOR2_0_out);
XOR2_1: Gate_XOR2 port map (XOR2_0_out, Cin, Sum);
AND2_0: Gate_AND2 port map (A, B, AND2_0_out);
AND2_1: Gate_AND2 port map (A, Cin, AND2_1_out);
AND2_2: Gate_AND2 port map (B, Cin, AND2_2_out);
OR3_1: Gate_OR3 port map (AND2_0_out, AND2_1_out, AND2_2_out, Cout);
end FullAdder_struct;
Acest exemplu reprezint un program VHDL structural care utilizeaz mai
multe componente, create anterior. n program sunt folosite dou instanieri pentru
poarta XOR, trei pentru poarta AND i una pentru poarta OR. Fiecare
component utilizeaz modul poziional de atribuire a semnalelor. Semnalele
XOR2_0_out, AND2_0_out, AND2_1_out i AND2_2_out sunt semnale interne
ale circuitului.
e) n final se creeaz un fiier VHDL nou i se introduce codul structural pentru
sumatorul serial de patru bii (Tabelul 5). Fiierul se salveaz cu acelai nume ca
i numele entitii.
Program structural pentru sumatorul serial de patru bii
library ieee;
use ieee.std_logic_1164.all;
entity Lab2 is
port (A, B : in std_logic_vector (3 downto 0);
Sel: in std_logic;

Sum: out std_logic_vector (3 downto 0);


Cout: out std_logic);
end Lab2;
architecture AddSub_struct of Lab2 is
component Gate_XOR2 is
port (x, y: in std_logic;
f: out std_logic);
end component;
component FullAdder is
port (A, B, Cin: in std_logic;
Sum, Cout: out std_logic);
end component;
signal XOR2_0_out, XOR2_1_out, XOR2_2_out, XOR2_3_out: std_logic;
signal c1, c2, c3: std_logic;
begin
XOR2_0: Gate_XOR2 port map (B(0), Sel, XOR2_0_out);
XOR2_1: Gate_XOR2 port map (B(1), Sel, XOR2_1_out);
XOR2_2: Gate_XOR2 port map (B(2), Sel, XOR2_2_out);
XOR2_3: Gate_XOR2 port map (B(3), Sel, XOR2_3_out);
FullAdder_0: FullAdder port map (A(0), XOR2_0_out, Sel, Sum(0), c1);
FullAdder_1: FullAdder port map (A(1), XOR2_1_out, c1, Sum(1), c2);
FullAdder_2: FullAdder port map (A(2), XOR2_2_out, c2, Sum(2), c3);
FullAdder_3: FullAdder port map (A(3), XOR2_3_out, c3, Sum(3), Cout);
end AddSub_struct;

f) Proiectul se compileaz tastnd butonul Start Compilation


de instrumente.

de pe Bara

3. Simularea funcional i temporal a proiectului


a) Pentru a putea realiza simularea funcional trebuie s crem un fiier cu
stimulii pentru intrri. Pentru a realiza acest lucru, din meniul File se selecteaz
opiunea New. n fereastra care apare selectm opiunea Vector Waveform File din
submeniul Other Files.
b) Adugarea semnalelor pentru simulare.
Se selecteaz Edit Insert Insert Node or Bus.
Se tasteaz butonul Node Finder n fereastra Insert Node or Bus
n meniul Filter se selecteaz Pins: all i se tasteaz butonul List (Figura 3).
Se selecteaz pe rnd pinii A, B, Sel i Sum i se transfer n fereastra Selected
Nodes, tastnd butonul

. Apoi se tasteaz OK.

Figura 3. Selectarea nodurilor pentru simulare


n fereastra Insert Node or Bus se selecteaz Unsigned Decimal n opiunea
Radix pentru a uura modul de introducere a valorilor de intrare i de vizualizare a
rezultatelor obinute la ieire.
Se selecteaz Edit End Time pentru a deschide fereastra End Time. Se
alege timpul de simulare de 500 ns i se tasteaz OK.
c) Atribuirea valorilor de intrare.
Se selecteaz intrarea A i se tasteaz Ctrl + Alt + B pentru a deschide fereastra
Arbitrary Value (Figura 4). n aceast fereastr se aleg urmtoarele valori:
Start time:
40 ns
End time:
160 ns
Numeric or named value: 10

Figura 4 Atribuirea valorilor de intrare

Procedura se repet pentru a atribui intrrii A valoarea 7 pe intervalul 160


-310 ns. Intrarea B va primi valoarea 5 pe intervalul 100 230 ns i valoarea 2 pe
intervalul 230 390 ns.
Semnalul Sel va primi valoarea 1 logic pe intervalele 130 - 200 ns i 270 350 ns. Pentru aceasta se selecteaz pe rnd intervalele menionate n fi ierul de
stimuli i se tasteaz Ctrl+Alt+1.
Fiierul de stimuli este prezentat n Figura 5. Acest fiier se salveaz
cu numele Lab2.vwf.

Figura 5. Fiierul de stimuli


d) Din bara de meniu se selecteaz Assignments Settings. Se allege
Simulator Settings i se seteaz Simulation Mode la Functional. Fiierul de
intrare trebuie s fie Lab2.vwf.
Proiectul se compileaz tastnd butonul Start Compilation
de pe Bara
de instrumente.
Se selecteaz Processing Generate Functional Simulation Netlist i se
tasteaz OK cnd procesul este complet.
Proiectul se simuleaz, tastnd butonul Start Simulation de pe bara de
instrumente. Formele de und pentru Sum i Cout dup simulare sunt prezentate
n Figura 6.

Figura 6. Formele de und dup simularea funcional


e) Se alege modul de simulare temporal i se repet simularea. De aceast
dat, diagrama de timp va conine anumite hazarduri de semnal (Figura 7).

Figura 7. Formele de und dup simularea temporal


4. Asignarea pinilor
Pentru a efectua implementarea practic a schemei n circuitul FPGA de pe
placa de dezvoltare DE2 este necesar ca pinii din schem s fie atribuii unor pini
fizici ai circuitului FPGA Cyclone II EP2C35F672C6. Acest lucru se realizeaz
prin selectarea opiunii Pins din meniul Assignments. n fereastra care se deschide
atribuim pinii, conform tabelului 1:
Tabel 1. Atribuirea pinilor

Se salveaz aceast atribuire i se compileaz nc o dat proiectul.


Dup aceasta se poate trece la implementarea proiectului pe placa de
dezvoltare.

Desfurarea lucrrii
1. Se va proiecta un sumator binar-zecimal pe o tetrad pentru codul 8421
(figura 8). Se va utiliza proiectarea ierarhic. Descrierea circuitului va fi
efectuat n limbajul VHDL, folosind codificarea structural i
comportamental.
2. Se va extinde proiectul pentru efectuarea adunrii a dou numere binarzecimale de patru cifre.
3. Se va proiecta un comparator n baz de sumator pe opt bii. Se va utiliza
proiectarea ierarhic. Descrierea circuitului va fi efectuat n limbajul
VHDL, folosind codificarea structural i comportamental.

Figura 8. Sumator binar-zecimal