You are on page 1of 9

UNIVERSITA’ DEGLI STUDI DI CATANIA

Facoltà di Ingegneria
Corso di Laurea in Ingegneria Elettronica N.O.
A.A. 2004-2005

Progetto in VHDL

Corso di Microelettronica

Prof.Ing. Salvatore Pennisi


Ing. Rosario Mita, Ph.D

Fidone Vincenzo – 615/001060


Giuseppe Giuffrida – 615/000861
Greco Giuseppe Francesco Agatino – 615/000414
L’Episcopo Gaetano – 615/000440

DIPARTIMENTO DI INGEGNERIA ELETTRICA


ELETTRONICA E DEI SISTEMI
Progetto
Tesina n°22

Descrivere e verificare il circuito riportato in figura mediante linguaggio VHDL


utilizzando un qualunque approccio di descrizione.

Osserviamo che il nostro circuito è costituito dalla cascata di una porta OR


a 3 ingressi, una porta XOR a 2 ingressi, un Flip Flop D e un Buffer
Tristate.
Descriviamo adesso le singole parti del nostro circuito tramite il
linguaggio VHDL, utilizzando un approccio a livello behavioral.

2
Porta Or
Descrizione grafica:

out_or
B

Descrizione funzionale:
Il blocco in questione è una porta Or a tre ingressi (A,B,C), che dà in uscita uno 0
solo se tutti e tre gli ingressi sono a 0; in caso contrario se uno dei tre ingressi è
a 1, l’uscita è 1.

Tabella
della
verità
A B C Out_or
Descrizione VHDL: 0 0 0 0
0 0 1 1
library ieee;
use ieee.std_logic_1164.all; 0 1 0 1
entity portaor is port( 0 1 1 1
A,B,C :in std_logic;
out_or:out std_logic); 1 0 0 1
end portaor; 1 0 1 1
architecture portaor1 of portaor is
begin 1 1 0 1
out_or<=A or B or C; 1 1 1 1
end portaor1;

3
Porta Xor
Descrizione grafica:

out_xor

Descrizione funzionale:
Il blocco in questione è una porta Xor a due ingressi(E,F). Quando questi
sono uguali, l’uscita è a 1,altrimenti è a 0. L’ingresso E è l’uscita della
porta OR precedentemente vista.

Tabella E F Out_xor
della 0 0 0
Descrizione VHDL: verità 0 1 1
1 0 1
library ieee;
use ieee.std_logic_1164.all; 1 1 0
entity portaxor is port(
E,F:in std_logic;
out_xor:out std_logic);
end portaxor;
architecture portaxor1 of portaxor is
begin
out_xor<= E xor F;
end portaxor1;

4
Flip-Flop D:
Descrizione grafica:
D Q

clock

feedback

Descrizione funzionale:
Il blocco in questione è un Flip-Flop D, circuito sequenziale, che assegna
all’uscita Q il valore dell’ingresso D, che è poi il segnale di uscita della
precedente porta XOR solo nel caso in cui il segnale di clock sia attivo,
cioè al momento del fronte di salita del clock. In caso contrario lo stato di
Q rimane invariato.
In seguito tale stato assegnato a Q viene a sua volta assegnato al feedback,
un altro segnale.
Tabella della Verità (durante il fronte di salita del nostro D Q
clock...negli altri casi si conserva l’uscita Q precedente): 0 0
1 1
Descrizione VHDL:
library ieee;
use ieee.std_logic_1164.all;
entity flipflopD is port(
D,clk:in std_logic;
Q:out std_logic);
signal feedback:std_logic;
end flipflopD;
architecture flipflopD1 of flipflopD is
begin
process(clk)
begin
if(clk'event and clk='1') then Q<=D;
end if;
if(clk'event and clk='1') then feedback<=D;
end if;
end process;
end flipflopD1;

5
Buffer tristate:
Descrizione grafica:
control

Descrizione funzionale:
Il blocco in questione è un buffer tristate, che in ingresso ha l’uscita del
flip-flop D ed il segnale di controllo Control. Se Control è uguale ad 1, fa
sì che l’uscita H sia uguale all’ingresso G, altrimenti lo stato di uscita è Z,
cioè uno stato di uscita ad alta impedenza, non ben definito tra 0 e 1.
Tabella della Verità: Control G H
0 0 Z
0 1 Z
1 0 0
1 1 1
Descrizione VHDL:

library ieee;
use ieee.std_logic_1164.all;
entity buffertristate is port(
G,control:in std_logic;
H:out std_logic);
end buffertristate;
architecture buffertristate1 of buffertristate is
begin
H<=G when (control='1') else 'Z';
end buffertristate1;

6
Descrizione VHDL del circuito totale:
A questo punto occorre interconnettere le nostre 4 componenti del nostro
circuito in modo da formare una sola porta logica, che rappresenta poi la
totalità del nostro circuito, non a caso l’abbiamo chiamata “Total”, i cui
ingressi sono i segnali A,B,C,F,clk,control e la cui uscita è H.
Il livello di astrazione qui usato è lo structural.
library ieee;
use ieee.std_logic_1164.all;
entity total is port(
A,B,C,F,clk,control:in std_logic;
H:out std_logic);
end total;
architecture structure of total is
component buffertristate port(
G,control:in std_logic;
H:out std_logic);
end component;
component flipflopD port(
D,clk:in std_logic;
Q:out std_logic);
end component;
component portaxor port(
E,F:in std_logic;
out_xor:out std_logic);
end component;
component portaor port(
A,B,C :in std_logic;
out_or:out std_logic);
end component;

signal E,out_or,D,out_xor,G,Q:std_logic;
begin

buffer3:buffertristate port map (G=>G,


control=>control,
H=>H);
flipD1:flipflopD port map (D=>D,
clk=>clk,
Q=>G);
xor1:portaxor port map (E=>E,
F=>F,
out_xor=>D);
or1:portaor port map (A=>A,
B=>B,
C=>C,
out_or=>E);
end structure;

7
Testbench:
A questo punto scriviamo un testbench per verificare, simulandolo, il
corretto funzionamento del nostro circuito.
library ieee;
use ieee.std_logic_1164.all;
entity testbenche is
end testbenche;
architecture structure of testbenche is
component total port(
A,B,C,F,clk,control:in std_logic;
H:out std_logic);
end component;
signal A,B,C,F,clk,control:std_logic;
signal H:std_logic;

begin
DUT: total port map(A,B,C,F,clk,control,H);
clock: process
variable clktmp: std_logic:='0';
begin
clktmp := not clktmp;
clk <= clktmp;
wait for 20 ns;
end process;
stimulus : process
begin
A<='0';
B<='0';
C<='0';
F<='0';
control<='0';
wait for 40 ns;
A<='0';
B<='0';
C<='0';
F<='0';
control<='1';
wait for 40 ns;
A<='0';
B<='0';
C<='1';
F<='0';
control<='0';
wait for 40 ns;
A<='0';
B<='0';
C<='1';
F<='0';
control<='1';
wait for 40 ns;
8
A<='0';
B<='1';
C<='1';
F<='0';
control<='0';
wait for 40 ns;
A<='0';
B<='1';
C<='1';
F<='1';
control<='1';
wait for 40 ns;
A<='1';
B<='1';
C<='1';
F<='1';
control<='1';
wait for 40 ns;
end process;
end structure;

Dal test effettuato con i suddetti dati si è ricavata la seguente forma d’onda che
verifica il corretto funzionamento della struttura:

I risultati ottenuti dalla simulazione sono stati soddisfacenti, in quanto il


comportamento del nostro circuito, e le sue uscite, coincidono con quello
che ci aspettavamo sin dall’inizio...