Sei sulla pagina 1di 39

hardwaredescriptionlanguage:HDL

O QUE É UM SISTEMA?

Executa uma função com base em


ais : Y2007/08

estímulos internos e/ou externos


Interligação de “módulos” que
podem ser elementares ou não
não.

L
Descrito de forma Hierarquizada, em
mas Digita

camadas,
d a partir
ti dde ffunções
õ mais
i
elementares
ho, J.P. @ Sistem

Vários níveis de complexidade

Modelação
M d l ã com dif
diferentes
t níveis
í i dde
abstracção
Coelh

Equações Diferenciais
hardwaredescriptionlanguage:HDL
2
SISTEMA GENÉRICO...

ENTRADAS A Transformação define o


SAÍDAS comportamento...
TRANSFORMAÇÃO
Um sistema pode ser decomposto em
ais : Y2007/08

sub-sistemas ou MÓDULOS

L
Sistema Digital como caso particular
de um sistema.
mas Digita

É neste contexto que as linguagens de


descrição para Hardware aparecem
ho, J.P. @ Sistem

VHDL – VHSIC @HDL

Presentemente as ferramentas de Software são uma componente essencial


no projecto de sistemas digitais.

-Melhoram
Melhoram a produtividade
Coelh

-Capacidade de prever o comportamento final


hardwaredescriptionlanguage:HDL
3
VHDL – VHSIC @HDL

VHSIC-HDL
Very High Speed Integrated Desenvolvido nos
Circuit Hardware Description
Language meados dos anos 80
pelo DoD e IEEE
ais : Y2007/08

L
Começou por ser uma linguagem para
modelação e documentação.
VHDL Presentemente existem ferramentas de
síntese baseadas em VHDL.
mas Digita

- Linguagem muito Descritiva


-Com reminiscências de Pascal e Ada
ho, J.P. @ Sistem

- Decomposição Hierárquica do projecto


-CASE INSENSITIVE
- Cada elemento possui uma Interface e
um Comportamento
- O comportamento pode ser especificado
por um algoritmo ou estrutura - Presentemente apenas definida para
- Temporização, concorrência e sistemas digitais
sequenciação podem ser modelados - Alguns esforços para estender para
- As operações lógicas podem ser sistemas analógicos e híbridos
Coelh

simuladas
hardwaredescriptionlanguage:HDL
4
ENTIDADE vs. ARQUITECTURA

Sistema Decomposto em MÓDULOS


ais : Y2007/08

L
mas Digita

Em VHDL a cada
módulo é dado o
nome de entidade
ho, J.P. @ Sistem

(ENTITY)

- As entradas e saídas das entidades são designadas por portas (PORT)..


- Cada sub-
sub-Módulo é uma instância de uma entidade
- Cada instância é uma entidade
entidade.
Coelh

- As entidades estão ligadas por sinais (SIGNAL


(SIGNAL))
hardwaredescriptionlanguage:HDL
5
ENTIDADE vs. ARQUITECTURA

Entidade Arquitectura
ais : Y2007/08

declaração das
entradas/saídas de descrição detalhada da

L
um módulo estrutura interna
i d
do
módulo e seu
comportamento
mas Digita
ho, J.P. @ Sistem

- Uma arquitectura pode usar várias


entidades
- Diversas
Di arquitecturas
it t podem
d usar
a mesma entidade
Coelh

Estrutura Hierárquica de Desenho


hardwaredescriptionlanguage:HDL
6
Componentes de um projecto VHDL
PACKAGE Pacote: constantes, bibliotecas;
E N TITY Entidade: pinos de entrada e saída;
A R C H ITE C TU R E A
Arquitectura:
it t i l
implementações
t õ d do projeto;
j t
ais : Y2007/08

C O N FIG U R A TIO N Configuração: define as arquiteturas que


serão utilizadas.

L
L IB R A R Y IE E E ;
U S E IE E E .S T D _ L O G IC _ 1 1 6 4 .a ll; P A C K A G E
U S E IE E E .S T D _ L O G IC _ U N S IG N E D .a ll; (B IB L IO T E C A S )
mas Digita

E N T I T Y e x e m p lo I S
P O R T (

< d e s c r iç ã o d o s p in o s d e e n t r a d a e s a íd a > E N T IT Y
(P IN O S D E I/O )
ho, J.P. @ Sistem

);
E N D e x e m p lo ;

A R C H I T E C T U R E t e s t e O F e x e m p lo I S
B E G IN
P R O C E S S ( < p in o s d e e n t r a d a e s ig n a l > )

B E G IN A R C H IT E C T U R E
(A R Q U IT E T U R A )
< d e s c r iç ã o d o c ir c u it o in t e g r a d o >
Coelh

E N D P R O C E S S ;
E N D te s te ;
hardwaredescriptionlanguage:HDL
7
LIBRARY IEEE;
ARCHITECTURE
((ARQUITETURA)
Q )
USE IEEE.STD_LOGIC_1164.all;
PROCESSOS USE IEEE
IEEE.STD_LOGIC_UNSIGNED.all;
STD LOGIC UNSIGNED ll
entity placa is
port (
a : in bit_vector( 6 downto 0);
b : outt bit
bit_vector(
t ( 7 downto
d t 0)
n ENTITY );
ais : Y2007/08

(ENTIDADE)
PINOS DE I/O end placa;
architecture TTL of placa is

L
signal
i l pino_1
i 1 bit bit;
signal pino_2 bit;
signal pino_3 bit;
signal pino_4 bit;
mas Digita

signal pino_5
pino 5 bit;

begin
CI_X : process( a )
ho, J.P. @ Sistem

b i
begin
<descrição do processo>
end process CI_Y;

CI_Y : process( a )
begin
<descrição do processo>
end process CI_Z;
Coelh

end TTL;
hardwaredescriptionlanguage:HDL
8
Package
Os pacotes (biblioteca) contém uma coleção de elementos incluindo
descrição do tipos de dados.
ais : Y2007/08

IEEE.std_logic_arith – Funções Aritméticas

L
IEEE td l i
IEEE.std_logic_signed
i d – Funções
F õ Aritméticas
A it éti com Si
Sinall
IEEE.std_logic_unsigned – Funções Aritméticas sem Sinal
std_logic
IEEE.std og c_1164
6 – Ope
Operações
ações lógicas
óg cas
mas Digita

Entity
Descrição
ç da interface de I/O do sistema com a p
placa.
ho, J.P. @ Sistem

ENTITY <nome> IS
IN, OUT, INOUT, BUFFER
PORT(
sinal controlo: IN <tipo>;
sinal_controlo:
entrada: IN <tipo>; <tipo> : bit,
bit_vector,
saída: OUT <tipo>; std_logic_vector,
Coelh

); real,
END <nome>; inteiro, etc.
hardwaredescriptionlanguage:HDL
9
Architecture
ais : Y2007/08

L
mas Digita
ho, J.P. @ Sistem

Uma ARQUITECTURA p
possui:

-Parte DECLARATIVA (opcional) – onde, por exemplo, SINAIS, CONSTANTES e


VARIÁVEIS, são declaradas
Coelh

-Código – A partir de BEGIN


hardwaredescriptionlanguage:HDL
10
Arquitetura Concorrente
A arquitetura concorrente é uma forma mais complexa de descrever um
sistema, geralmente apresenta várias processos dentro de uma arquitetura.
ais : Y2007/08

L
mas Digita
ho, J.P. @ Sistem
Coelh
hardwaredescriptionlanguage:HDL
11
Tipos de Dados
LIBRARY std
td
BIT: assume valores ‘0’ e ‘1’ PACKAGE standard

BIT_VECTOR:
_ é um conjunto
j de bits. Ex.: “010001”
ais : Y2007/08

BOOLEAN: assume valores TRUE ou FALSE

L
REAL: sempre com ponto decimal. Ex.: -3.2, 4.56, 6.0, -2.3E+2

INTEGER: Inteiros de 32 bit (de -2,147,483,647 a +2,147,483,647)


mas Digita

SIGNAL x: BIT; -- x é declarado como um sinal de um bit.


ho, J.P. @ Sistem

SIGNAL y: BIT_VECTOR (3 DOWNTO 0);


-- y é um vector de 4 bit (o bit mais à esquerda
é o MSB)

SIGNAL w: BIT_VECTOR (0 TO 7);


-- y é um vector de 8 bit (o bit mais à direita
é o MSB).
Coelh
hardwaredescriptionlanguage:HDL
12
Afectação de Valores aos Sinais…

x <
<= '1'; --x
x é um sinal de 1 bit cujo valor é '1‘

y <= "0111"; --y é um sinal de 4 bit cujo valor é "0111" (MSB='0')

w <= "01110001“; --w é um sinal de 8 bit cujo valor é "01110001"


ais : Y2007/08

(MSB='1').

Pelica p
para bit e aspas
p para
p vector!!!

L
LIBRARY ieee
i
PACKAGE ieee.std_logic_1164
STD_LOGIC e STD_LOGIC_VECTOR
mas Digita

(‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘–’)


STD_ULOGIC e STD_ULOGIC_VECTOR
(‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘–’)
ho, J.P. @ Sistem

‘X’ Forcing Unknown (synthesizable unknown)


‘0’ Forcing Low (synthesizable logic ‘1’)
‘1’ Forcing High (synthesizable logic ‘0’)
‘Z’ High impedance (synthesizable tri-state buffer)
‘W’ Weak unknown
‘L’ Weak low
Coelh

‘H’
H Weak high
‘–’ Don’t care
‘U’ Unresolved
hardwaredescriptionlanguage:HDL
13
x0 <= '0'; -- bit, std_logic, ou std_ulogic com valor '0'
x1 <= "00011111"; -- bit_vector, std_logic_vector,
-- std_ulogic_vector,
std ulogic vector signed
signed, or unsigned
x2 <= "0001_1111"; -- underscore allowed to ease visualization
x3 <= "101111" -- binary representation of decimal 47
x4 <= B"101111" -- binary representation of decimal 47
x5 <= O"57" -- octal representation of decimal 47
ais : Y2007/08

x6 <= X"2F" -- hexadecimal representation of decimal 47


n <= 1200; -- integer
m <= 1
1_200;
200; -- integer,
integer underscore allowed

L
IF ready THEN... -- Boolean, executed if ready=TRUE
y <= 1.2E-5; -- real, not synthesizable
q <= d after 10 ns; -- physical, not synthesizable
mas Digita

SIGNAL a: BIT;
SIGNAL b: BIT_VECTOR(7 DOWNTO 0);
SIGNAL c: STD_LOGIC;;
ho, J.P. @ Sistem

SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0);


SIGNAL e: INTEGER RANGE 0 TO 255;
a <= b(5); -- legal (same scalar type: BIT)
b(0) <= a; -- legal
l l ((same scalar
l t
type: BIT)
c <= d(5); -- legal (same scalar type: STD_LOGIC)
d(0) <= c; -- legal (same scalar type: STD_LOGIC)
a <= c;
; -- illegal
g (
(type
yp mismatch: BIT x STD_LOGIC)
)
Coelh

b <= d; -- illegal (type mismatch: BIT_VECTOR x STD_LOGIC_VECTOR)


e <= b; -- illegal (type mismatch: INTEGER x BIT_VECTOR)
e <= d; -- illegal (type mismatch: INTEGER x STD_LOGIC_VECTOR)
hardwaredescriptionlanguage:HDL
14

Physical:
y representam
p uma medida física: voltagem,
g , capacitância,
p ,
tempo
Tipos pré-definidos: fs, ps, ns, um, ms, sec, min, hr.

Intervalos: permite determinar um intervalo de utilização dentro de um


ais : Y2007/08

determinado tipo.
range <valor_menor> to <valor_maior>

L
range <valor_maior> downto <valor_menor>

Array: em VHDL um array é definido como uma coleção de elementos


mas Digita

t d do
todos d mesmo tipo.
ti

Operadores
ho, J.P. @ Sistem

• Operadores de atribuição:
<= Usado para atribuir um valor a um SIGNAL.
SIGNAL
:= Usado para atribuir um valor a uma VARIABLE, CONSTANT, ou
GENERIC. Usada também para estabelecer os valores iniciais
de sinais
Coelh

=> Usado para atribuir valores a elementos individuais de um vector


ou para OTHERS.
hardwaredescriptionlanguage:HDL
15
Operadores (cont)
• operadores
d ló i
lógicos: and,
d or, nand,
d nor, xor, xnor e nott
• operadores numéricos: soma (+), subtracção (-), divisão (/),
multiplicação
p ç ((*),
), módulo ((mod),
), remanescente
(rem - ex.: 6 rem 4 = 2), expoente (**),
ais : Y2007/08

valor absoluto (abs)


• operadores relacionais: igual (=),
(=) diferente (/=),
(/=) menor do que (<),
(<)

L
menor ou igual (<=), maior do que (>), maior
ou igual (>=)
mas Digita

• operadores de deslocamento: sll (shift left logical), srl (shift right logical),
sla (shift left arithmetic), sra (shift
right arithmetic), rol (rotate left logical),
ho, J.P. @ Sistem

ror (rotate right logical)


• operador de concatenação: consiste em criar um novo vector a partir de
dois vectores já existentes, por exemplo:
dado1 : bit_vector(0 to 7); [01011011]
dado2 : bit_vector(0 to 7); [11010010]
novo_dado : bit_vector(0
( to 7);
);
Coelh

novo_dado <= (dado1(0 to 1) & dado2(2 to 5) & dado1(6 to 7)); [01010011]


hardwaredescriptionlanguage:HDL
16
Comandos Sequênciais
• Atribuição
At ib i ã de
d Variáveis
V iá i
1 a rc h ite c tu re to p o lo g ia _ a rq u ite tu ra o f te s te is
2 s ig n a l A , B , J , G : b it_ v e c to r(1 d o w n to 0 );
3 s ig n a l E , F : b it;
4 b e g in
ais : Y2007/08

5
6 p ro c e s s ( A , B , E , F , G , J )
7

L
8 v a ria b le C , D , H , Y : b it_ v e c to r(1 d o w n to 0 );
9 v a ria b le W : b it_ v e c to r(3 d o w n to 0 );
10 v a ria b le Z : b it_ v e c to r(7 to 0 );
11 v a ria b le X : b it;
mas Digita

12 v a ria b le DATA : b it_ v e c to r(3 1 d o w n to 0 );


13
14 b e g in
15 A < = “ 1 1 ” , B < = “ 0 1 ” , J < = “ 1 0 ” , G < = “ 0 0 ’’;;
ho, J.P. @ Sistem

16 E < = ‘0 ’, F < = ‘1 ’;
17 C := “0 1 ”;
18 X := E n a n d F ;
19 Z (0 to 3 ) := C & D ;
20 Z (4 to 0 ) := (n o t A ) & (A n o r B );
21 D := (‘1 ’, ‘0 ’);
22 W := (2 d o w n to 1 = > G , 3 = > ‘1 ’, o th e rs = > ‘0 ’);
23 DATA := (3 1 d o w n to 2 8 = > ‘1 ’, o th e rs = > ‘0 ’);
Coelh

24 e n d p ro c e s s ;
25 e n d to p o lo g ia _ a rq u ite tu ra ;
hardwaredescriptionlanguage:HDL
17
• Atribuição de Sinais
1 a rc h ite c tu re to p o lo g ia _ a rq u ite tu ra o f te s te is
2 i n a l A , B , C : b it;
s ig it
3 s ig n a l D : in te g e r;
4 b e g in
5
6 p ro c e s s ( A , B , C , D )
7
ais : Y2007/08

8 va ria b le L , M , N , Q b it;
9

L
10 b e g in
11 A <= ‘0 ’, ‘1 ’ a fte r 2 0 n s , ‘0 ’ a fte r 4 0 n s
12 B <= not L;
13 C <= ((
((L a n d M ) x o r ((N n a n d Q ));
mas Digita

14 D <= 3 , 5 a fte r 2 0 n s , 7 a fte r 4 0 n s , 9 a fte r 6 0 n s ;


16
17 e n d p ro c e s s ;
18 e n d to p o lo g ia _ a rq u ite tu ra ;
ho, J.P. @ Sistem

• Diferenças entre SIGNAL e VARIABLE


• Quando
Q d se utiliza
tili SIGNAL
SIGNAL, a atribuição
t ib i ã ocorre no final
fi l ddo processo,
enquanto que a atribuição VARIABLE ocorre simultaneamente.
• Nos próximos dois acetatos, mostra-se a diferença entre estas atribuições.
Coelh

<= (atribuição de signal)


:= (atribuição de variável)
hardwaredescriptionlanguage:HDL
18

A setta a verm
D <= 2;
p r o c e ss (C , D ) p r o c e ss (C , D ) p r o c e ss (C , D )
v a ria b le A v , B v , E v : in te g e r := 0 ; v a r ia b le A v , B v , E v : in te g e r := 0 ; v a ria b le A v , B v , E v : in te g e r := 0 ;
b e g in b e g in b e g in
A v := 2 ; A v := 2 ; A v := 2 ;
B v := A v + C ; B v := A v + C ; B v := A v + C ;
A v := D + 1 ; A v := D + 1 ; A v := D + 1 ;

melho mo
E v := A v * 2 ; E v := A v * 2 ; E v := A v * 2 ;
A <= A v; A <= A v; A <= A v;
ais : Y2007/08

B <= B v; B <= B v; B <= B v;


E <= E v; E <= E v; E <= Ev;
e n d p r o c e ss; e n d p r o c e ss; e n d p r o c e ss;

L
A = 1 A = 1 Av = 2

ostra a exxecução passo-a-passo…


A = 1 Av = 0
B = 1 B = 1 Bv = 0 B = 1 Bv = 0
C = 1 C = 1 C = 1
D = 2 D = 2 D = 2
E = 1 E = 1 Ev = 0 E = 1 Ev = 0
mas Digita

p r o c e ss (C , D ) p r o c e ss (C , D ) p r o c e ss (C , D )
v a ria b le A v , B v , E v : in te g e r := 0 ; v a ria b le A v , B v , E v : in te g e r := 0 ; v a ria b le A v , B v , E v : in te g e r := 0 ;
b e g in b e g in b e g in
A v := 2 ; A v := 2 ; A v := 2 ;
B v := A v + C ; B v := A v + C ; B v := A v + C ;
A v := D + 1 ; A v := D + 1 ; A v := D + 1 ;
ho, J.P. @ Sistem

E v := A v * 2 ; E v := A v * 2 ; E v := A v * 2 ;
A <= A v; A <= A v; A <= A v;
B <= B v; B <= B v; B <= B v;
E <= E v; E <= E v; E <= Ev;
end p r o c e ss; end p r o c e ss; e n d p r o c e ss;
A = 1 Av = 2 A = 1 Av = 3 A = 1 Av = 3
B = 1 Bv = 3 B = 1 Bv = 3 B = 1 Bv = 3
C = 1 C = 1 C = 1
D = 2 D = 2 D = 2
E = 1 Ev = 0 E = 1 Ev = 0 E = 1 Ev = 6


Coelh
hardwaredescriptionlanguage:HDL
19

A setta a verm
D <= 2;

process (C, D) process (C, D) process (C, D) process (C, D)


begin begin begin begin
A <= 2; A <= 2; A <= 2; A <= 2;
B <= A + C; B <= A + C; B <= A + C; B <= A + C
A <= D +1; A <= D +1; A <= D +1; A <= D +1;

melho mo
E <=
< A * 2; E <=
< A * 2; E <=
< A * 2; E <=
< A * 2;
end process; end process; end process; end process;
ais : Y2007/08

A=1 A=1 A=1 A <= 2 A = 1 A <= 2


B=1 B=1 B=1 B = 1 B <= A + C

L
ostra a exxecução passo-a-passo…
C=1 C=1 C=1 C=1
D=1 D=2 D=2 D=2
E=1 E=1 E=1 E=1
process (C, D) process (C, D) process (C, D) process (C, D)
mas Digita

b i
begin b i
begin b i
begin b i
begin
A <= 2; A <= 2; A <= 2; A <= 2;
B <= A + C; B <= A + C; B <= A + C; B <= A + C
A <= D +1; A <= D +1; A <= D +1; A <= D +1;
E <= A * 2; E <= A * 2; E <= A * 2; E <= A * 2;
ho, J.P. @ Sistem

end process; end process; end process; end process;

A=1 A <= D + 1 A = 1 A <= D + 1 A = 1 A <= 3 A=3


B=1 B <= A + C B = 1 B <= A + C B = 1 B <= 2 B=2 e não 3
C=1 C=1 C=1 C=1 A diferença
D=2 D=2 D=2 D=2 entre os valores
E=1 E=1 E <= A * 2; E = 1 E <= 2; E = 2 e não 6 deve-se à forma
de atribuição…


Coelh
hardwaredescriptionlanguage:HDL
20
Atributos dos Dados
‘LOW: Retorna o índice inferior do vector
‘HIGH Retorna
‘HIGH: R t o í
índice
di superior
i d
do vector
t
‘LEFT: Returna o índice mais à esquerda
‘RIGHT: Returna o índice mais à direita
‘LENGTH: Returna a dimensão do vector
‘RANGE: Returna a gama do vector
ais : Y2007/08

‘REVERSE_RANGE: Retorna a gama do vector em ordem inversa


Exemplo:

L
SIGNAL d : STD_LOGIC_VECTOR
STD LOGIC VECTOR (7 DOWNTO 0)
0);
d'LOW=0, d'HIGH=7, d'LEFT=7, d'RIGHT=0, d'LENGTH=8,
d'RANGE=(7 downto 0), d'REVERSE_RANGE=(0 to 7).
mas Digita

Atributos dos Sinais


‘EVENT: Retorna TRUE quando um evento ocorre
‘STABLE: Retorna TRUE quando nenhum evento ocorre
ho, J.P. @ Sistem

‘ACTIVE: Retorna TRUE se o sinal é ‘1’


‘QUIET <time>: Retorna TRUE se nenhum evento ocorreu em time
‘LAST_EVENT: Retorna o tempo dispendido desde o último evento
‘LAST
LAST_ACTIVE:
ACTIVE: Retorna o tempo dispendido desde o sinal =‘1’
1
‘LAST_VALUE: Retorna o valor do sinal desde o último evento.
Exemplo:
IF (clk'EVENT AND clk='1')...
Coelh

IF (NOT clk'STABLE AND clk='1')...


WAIT UNTIL (clk'EVENT AND clk='1');
IF RISING_EDGE(clk)... – chamada a uma função
hardwaredescriptionlanguage:HDL
21
Modo Concorrente vs. Modo Sequencial
WHEN
GENERATE
CONCORRENTE Circuitos Lógicos
g Combinatório
AND NOT
AND, NOT, etc
etc.
=> Código Concorrente
BLOCK
ais : Y2007/08

VHDL
Circuitos Lógico Sequenciais

L
PROCESS => Código Sequencial

SEQUENCIAL FUNCTION
mas Digita

PROCEDURE

CONCORRENTE: WHEN
ho, J.P. @ Sistem
Coelh
Coelh
ho, J.P. @ Sistem
mas Digita
ais : Y2007/08
22

hardwaredescriptionlanguage:HDL
L
hardwaredescriptionlanguage:HDL
23
SEQUENCIAL: PROCESS
ais : Y2007/08

> Um PROCESS deve ser instalado

L
no código principal.

> É executado sempre que um


mas Digita

sinal,
i l na sua lilista
t dde sensibilidades
ibilid d

> Condição de WAIT é preenchida.


ho, J.P. @ Sistem

As VARIABLES são opcionais


assim como o uso de etiquetas !!

Exemplo: Contador Mod10


Coelh
hardwaredescriptionlanguage:HDL
24
Comandos de Alteração do Fluxo
• Comando WAIT
- Este comando tem a finalidade de causar uma suspensão do processo
declarado ou procedimento
procedimento.
- O comando wait pode ser utilizado de quatro formas diferentes, são elas:
ais : Y2007/08

1 wait until <conditional>;; wait until CLK’event and CLK = ‘1’;;

L
2 wait on <signal_list>; wait on a, b;
3 wait for <time>; wait for 10ns;
4 wait; wait;
mas Digita

• Comando IF-THEN-ELSE

MODELO exemplo 1: exemplo 2:


ho, J.P. @ Sistem

if condição_1 then if ( A = ‘0’) then if (CLK’event and CLK =’1’) then


<comandos> B <= “00”; FF <= ‘0’;
elsif condição_2 then else elsif (CLK’event and CLK =’0’) then
<comandos> B<<= “11”;
11 ; FF <=
< ‘1’;
1;
else end if; elsif (J = ‘1’) and (K=’1’) then
<comandos> FM <= ‘1’;
end if; end if;
Coelh
hardwaredescriptionlanguage:HDL
25
• Comando LOOP FOR - WHILE
<label opcional>:
p for <parâmetros>
p p
in <valor_final> loop
<seqüência de comandos>
end loop <label opcional>;

1 process (A)
2
ais : Y2007/08

3 begin
4 Z <= “0000”;
0000 ;

L
5 for i in 0 to 3 loop
6 if(A = i) then
7 Z(i) <= ‘1’;
mas Digita

8 end if;
9 end loop;
10 end process;
ho, J.P. @ Sistem
Coelh
hardwaredescriptionlanguage:HDL
26

ais : Y2007/08

L
• Comando CASE
mas Digita

porta_programável : process (Mode, PrGIn1, PrGIn2)


begin
case Mode is
ho, J.P. @ Sistem

when “000” => PrGOut <= PrGIn1 and PrGIn2;


when “001” => PrGOut <= PrGIn1 or PrGIn2;
when “010” => PrGOut <= PrGIn1 nand PrGIn2;
when “011” => PrGOut <= PrGIn1 nor PrGIn2;
when “100” => PrGOut <= not PrGIn1;
when “101” => PrGOut <= not PrGIn2;
Coelh

when others => PrGOut <= ‘0’


0
end case;
end process porta_programavel;
hardwaredescriptionlanguage:HDL
27 Codificador BCD para sete-segmentos.
case codigo is
when “0000”
0000 => >
digito <=“0111111”;
when “0001” =>
digito <=“0000110”;
0000110 ;
when “0010” =>
ais : Y2007/08

digito <=“1011011”;
when “0011” =>

L
digito <=“1001111”;
.....
end case;
mas Digita

ULA (Unidade Lógica Aritmética)


if (mode = 1) then
case comando is
ho, J.P. @ Sistem

when “000” =>


resposta <= oper1 and oper2;
when “001” =>
resposta <= oper1 or oper2;
when “010” =>
resposta <= oper1 nor oper2;
Coelh

.....
end case;
else
hardwaredescriptionlanguage:HDL
28
- Os módulos podem ser descritos de várias formas distintas
- Dependendo da aplicação pode não descrever, internamente, a forma
exacta mas apenas o seu comportamento.
- O VHDL permite que o comportamento seja definido em forma de um
programa executável.
ais : Y2007/08

Conceitos Associados ao VHDL

L
Análise e Simulação
Síntese INTERFACES
mas Digita

COMPORTAMENTO
“Test Bench”
ho, J.P. @ Sistem

MODELAÇÃO DE INTERFACES

ENTIDADE

Descreve as PORTAS de I/O de um MÓDULO


Coelh
hardwaredescriptionlanguage:HDL
29

ais : Y2007/08

L
nome da entidade tipo do sinal
mas Digita

ENTITY porta_and IS
ho, J.P. @ Sistem

PORT(A B: IN BIT;Z: OUT BIT);


PORT(A,B:
END porta_and

nome da portas direcção do sinal identifica o final da declaração

As p
palavras em maiúsculas são reservadas.
Coelh
hardwaredescriptionlanguage:HDL
30
MODELAÇÃO DE COMPORTAMENTOS

ARQUITECTURA

Descreve o algoritmo executado pelo MÓDULO


É dividida em duas partes principais
ais : Y2007/08

- Parte Declarativa
- Parte Descritiva

L
nome da arquitectura nome da entidade

Comp
e um valor a um ssinal
mas Digita

paração de
ARCHITECTURE porta_and_arch OF porta_and IS

Vallor Lógico
BEGIN
ho, J.P. @ Sistem

d um Siinal com um
Z<='1' AFTER 10 ns WHEN A='1' and B='1’
ELSE '0' AFTER 10 ns;
buição de

o
END porta_and_arch
Atrib
Coelh

definição de tempo
hardwaredescriptionlanguage:HDL
31 ENTITY mAND IS
GENERIC(tp:TIME:=10 ns); -- tp - tempo de propagação
PORT(A,B: in BIT; Z: out BIT);
END ENTITY mAND;
ARCHITECTURE mAND_arch of mAND IS
BEGIN
Z<='1' AFTER tp WHEN (A AND B)='1' ELSE '0' AFTER tp;
END mAND_arch;

ENTITY mOR IS
ais : Y2007/08

GENERIC(tp:TIME:=10 ns); -- tp - tempo de propagação


PORT(A,B: in BIT; Z: out BIT);
END ENTITY mOR;

L
ARCHITECTURE mOR_arch of mOR IS
BEGIN
Z<='1' AFTER tp WHEN (A OR B)='1' ELSE '0' AFTER tp;
END mOR_arch;
mas Digita

ENTITY mNOT IS
GENERIC(tp:TIME:=10 ns); -- tp - tempo de prop.
PORT(A: in BIT; Z: out BIT);
END ENTITY mNOT;
ho, J.P. @ Sistem

ARCHITECTURE mNOT_arch of mNOT IS


BEGIN
Z<='1' AFTER tp WHEN (NOT A)='1' ELSE '0' AFTER tp;
END mNOT_arch;
Coelh
hardwaredescriptionlanguage:HDL
32
SIMULAÇÃO DO COMPONENTE

TEST BENCH ENTITY testbench IS


END testbench;
ARCHITECTURE testbench_arch OF testbench IS
Definição dos componentes do COMPONENT mAND
PORT(A,B: in BIT; Z: out BIT);
sistema END COMPONENT;
COMPONENT
COMPONENT mOR
Identifica as portas dos componentes
ais : Y2007/08

PORT(A,B: in BIT; Z: out BIT);


Parâmetros de simulação são END COMPONENT;
ppassados como GENERIC COMPONENT mNOT

L
PORT(A: in BIT; Z: out BIT);
END COMPONENT;
Cria 8 sinais do tipo booleano SIGNAL AA,BB,CC,SI1,SI2,SI3,SI4,ZZ:BIT;
BEGIN
AA<='0';
0 ;
mas Digita

BB<='1';
Comentários após dois hífens -- Instanciar componentes
seguidos porta1: mOR PORT MAP (A=>AA,B=>CC,Z=>SI1);
porta2: mNOT PORT MAP (A=>BB,Z=>SI2);
ho, J.P. @ Sistem

porta3: mNOT PORT MAP (A=>CC,Z=>SI3);


(A=>CC Z=>SI3);
porta4: mOR PORT MAP (A=>SI2,B=>SI3,Z=>SI4);
Cria um processo (sem lista de porta5: mAND PORT MAP (A=>SI1,B=>SI4,Z=>ZZ);
teste:PROCESS
sensibilidades) dentro da arquitectura
BEGIN
CC<='0';
Note-se como é feita a afectação dos WAIT FOR 100 ns;
sinais... CC<='1';
WAIT FOR 100 ns;
Observe a figura do acetato anterior...
Aguarda 100 nanosegundos....
nanosegundos CC<='0';
;
Coelh

WAIT FOR 100 ns;


END PROCESS teste;
END testbench_arch;
hardwaredescriptionlanguage:HDL
33
RESULTADOS DE SIMULAÇÃO

AA<=0, BB<=1
CC=0->1
ais : Y2007/08

L
Uma versão alternativa mais compacta...
mas Digita

ENTITY testbench IS
END testbench;
ARCHITECTURE testbench_arch OF testbench IS
ho, J.P. @ Sistem

SIGNAL A,B,C,Z,nC,nB,PSI,FI : BIT;


BEGIN
A<='0';
B<='1';
C<='0','1' AFTER 100 ns,'0' AFTER 200 ns;
nC<=NOT C AFTER 10 ns;
nB<=NOT B AFTER 10 ns;
FI<=A OR C AFTER 10 ns;
Coelh

PSI<=nB OR nC AFTER 10 ns;


Z<=FI AND PSI AFTER 10 ns;
END testbench_arch;
Coelh
ho, J.P. @ Sistem
mas Digita
ais : Y2007/08
34
Outro Exemplo:

hardwaredescriptionlanguage:HDL
L
hardwaredescriptionlanguage:HDL
35

Programa 1 Programa 2
--------------------------------------------------------- ---------------------------------------------------------
-- Arquivo componente_inv.vhd -- Arquivo componente_and.vhd
-- Modelo do inversor -- Modelo da porta AND
--------------------------------------------------------- ---------------------------------------------------------
ais : Y2007/08

library IEEE; library IEEE;


use IEEE.std_logic_1164.all; use IEEE.std_logic_1164.all;

L
entity componente_inv is entity componente_and is
port( port(
x : in bit;; a : in bit;;
mas Digita

y : out bit b : in bit;


); c : out bit
end componente_inv; );
end componente_and;
componente and;
ho, J.P. @ Sistem

architecture arquitetura_inv of
componente_inv is architecture arquitetura_and of componete_and is

begin b i
begin
y <= not x; c <= a and b;
end arquitetura_inv; end arquitetura_and;
Coelh
P ro g ra m a 3

hardwaredescriptionlanguage:HDL
36 ------------------------------------------------------
- - A r q u iv o c o m p o n e n t e _ s is t e m a . v h d
- - M o d e lo d a p o r t a A N D
------------------------------------------------------

l ib r a r y I E E E ;
u s e I E E E . s t d _ lo g ic _ 1 1 6 4 . a l l ;

e n t i t y c o m p o n e n t e _ s is t e m a i s
p o rt(
in 1 : i n b it ;
ais : Y2007/08

in 2 : i n b it ;
in 3 : i n b it ;
in 4 : i n b it ;

L
o u t 1 : o u t b it
);
e n d c o m p o n e n t e _ s is t e m a ;
mas Digita

a r c h i t e c t u r e a r q u it e t u r a _ s is t e m a o f c o m p o n e n t e _ s is t e m a i s

c o m p o n e n t c o m p o n e n te _ a n d
p o r t ( a : in b it ; b : i n b it ; c : o u t b it ) ;
e n d c o m p o n e n t;
ho, J.P. @ Sistem

c o m p o n e n t c o m p o n e n t e _ in v
p o r t ( x : i n b it ; y : o u t b it ) ;
e n d c o m p o n e n t;

s i g n a l s 1 , s 2 , s 3 , s 4 : b it ;

b e g in
a n d 1 : c o m p o n e n t e _ a n d p o r t m a p ( a = > in 1 , b = > in 2 , c = > s 1 ) ;
a n d 2 : c o m p o n e n t e _ a n d p o r t m a p ( a = > in 3 , b = > in 4 , c = > s 2 ) ;
Coelh

a n d 3 : c o m p o n e n te _ a n d p o r t m a p (a = > s 3 , b = > s 4 , c = > u t1 );


in v 1 : c o m p o n e n t e _ in v p o r t m a p ( x = > s 1 , y = > s 3 ) ;
in v 2 : c o m p o n e n t e _ in v p o r t m a p ( x = > s 2 , y = > s 4 ) ;
e n d a r q u it e t u r a _ s is t e m a ;
hardwaredescriptionlanguage:HDL
37
Exemplo: Somador Completo
ais : Y2007/08

L
- Modelar a partir das portas lógicas
mas Digita

- Modelar comportamento
Exemplo: Registo de 4 bits
ho, J.P. @ Sistem

PARA IMPLEMENTAR QUALQUER CIRCUITO SÍNCRONO É


NECESSÁRIO FORÇAR O VHDL A SER SEQUENCIAL E NÃO
CONCORRENTE COMO?
CONCORRENTE.

nome_processo: PROCESS (lista_de_sensibilidades)


BEGIN
Coelh

(…)
END PROCESS nome_processo
hardwaredescriptionlanguage:HDL
38
Exemplo: Registo de 4 bits (cont)
ais : Y2007/08

L
- Modelar comportamento Latch D
mas Digita

(td=2ns)
- Modelar comportamento gate
(td=2ns)
ho, J.P. @ Sistem

- Modelar registo
- Testar Registo
Coelh
hardwaredescriptionlanguage:HDL
39
Palavras Reservadas em VHDL
ais : Y2007/08

L
mas Digita
ho, J.P. @ Sistem
Coelh

FIM
Ref. LINGUAGEM DE DESCRIÇÃO DE HARDWARE, Prof. Anderson Royes Terroso

Potrebbero piacerti anche