Escolar Documentos
Profissional Documentos
Cultura Documentos
VHDL - Descrição e Síntese de Circuitos Digitais PDF
VHDL - Descrição e Síntese de Circuitos Digitais PDF
Tpicos
Aspectos gerais da linguagem
Sntese de circuitos
Entidade de projeto
Classes de objetos: constante, varivel e sinal
Tipos
Operadores
Construo concorrente WHEN ELSE
Construo concorrente WITH SELECT
Processos e lista de sensibilidade
Construo seqencial IF ELSE
Construo seqencial CASE WHEN
Circuitos sncronos
Sntese de circuitos
VHDL: no foi concebida para sntese de circuitos
- conseqncia: nem todas construes so suportadas
Motivos da limitao:
- falta de correspondncia da construo / descrio com um circuito
exemplo: flip flop com dois terminais de relgio
- impossibilidade da sntese direta
exemplo: multiplicao de dois nmeros reais
Simulador VHDL:
- compilao / simulao do cdigo
especificao
descrio VHDL
Simulador VHDL
Ferramenta de sntese
rede de ligaes
Ferramenta de
posicionamento & interligao
construo
especificao
Ferramenta de sntese
descrio VHDL
Simulador VHDL
Ferramenta de sntese
rede de ligaes
- descrio do circuito
Ferramenta de
posicionamento & interligao
construo
nvel portas
ENTITY soma IS
PORT (a, b : IN
c
END soma;
ARCHITECTURE teste OF soma IS
BEGIN
c <= a+b;
END teste;
nvel RTL
especificao
descrio VHDL
Simulador VHDL
Ferramenta de sntese
rede de ligaes
Ferramenta de
posicionamento & interligao
construo
Entidade de projeto
Pode representar:
uma simples porta lgica ..... a um sistema completo
Composta de duas partes:
- Declarao da entidade
- define portas de entrada e sada da descrio
(equivalente ao smbolo de um bloco em captura esquemtica)
- Arquitetura
- descreve as relaes entre as portas
(equivalente ao esquema contido no bloco em cap. esquemtica)
interfaces
Entity
i0
i1
Architecture
i2
Design
Entity
s1
s2
Declarao da entidade
interfaces
Entity
i0
i2
Design
Entity
s1
i1
Architecture
s2
:
:
:
:
IN
OUT
BUFFER
INOUT
tipo_a;
tipo_b;
tipo_c;
tipo_d);
-----
entradas
saidas
saida
entrada / saida
END entidade_abc;
10
:
:
:
:
IN
OUT
BUFFER
INOUT
tipo_a;
tipo_b;
tipo_c;
tipo_d);
-----
entradas
saidas
saida
entrada / saida
END entidade_abc;
x0
y0
IN
OUT
y1
IN
x1
y2
BUFFER
INOUT
INOUT
z0
z1
11
interfaces
Declarao da arquitetura
Entity
i0
i2
Design
Entity
s1
i1
Architecture
s2
12
<= sinal_1;
<= constante_1;
13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ENTITY atrib_1 IS
PORT (x1
: IN INTEGER;
y1,z1 : OUT INTEGER);
END;
ARCHITECTURE teste OF atrib_1 IS
SIGNAL
s1 : INTEGER;
CONSTANT c1 : INTEGER := 7;
BEGIN
y1 <= s1;
s1 <= x1;
-- porta entrada
-- portas saida
z1 <= c1;
END teste;
14
Signal s1 : Integer;
x1 : In Integer;
x1
32
32
s1 <= x1;
Constant c1 : Integer := 7;
32
y1
y1 <= s1;
z1
z1 <= c1;
5
6 ARCHITECTURE teste OF atrib_1 IS
7
SIGNAL
s1 : INTEGER;
8
CONSTANT c1 : INTEGER := 7;
9 BEGIN
10
y1 <= s1;
11
s1 <= x1;
12
13
z1 <= c1;
14 END teste;
VHDL Descrio e Sntese de Circuitos Digitais
15
Tipos
Objetos:
- devem ser declarados segundo uma especificao de tipo
Objetos de tipos diferentes:
- no permitida a transferncia de valores
Exemplo de tipos pr-definidos no pacote padro VHDL:
classes
tipos
classes
pr-definidos
scalar
enumerated
bit
boolean
composite
numeric
character
integer
array
real
bit_vector
string
16
tipos
Tipos escalares
scalar
composite
enumerated
bit
boolean
array
numeric
character
integer
bit_vector
real
string
So ordenados
- podem ser aplicados operadores: maior, menor
Classes: enumerado e numrico
classe
tipo
valor
exemplos
enumerado
BIT
um, zero
1, 0
BOOLEAN
verdadeiro, falso
TRUE, FALSE
CHARACTER
caracteres ASCII
a, b, c, A, B, C, ?, (
INTEGER
-231 x 231-1
numrico
2#11_11_011#
REAL
-3.651047 x +3.651047
17
tipos
Tipos escalares
scalar
composite
enumerated
bit
boolean
array
numeric
character
integer
bit_vector
real
string
classe
tipo
valor
exemplos
enumerado
BIT
um, zero
1, 0
BOOLEAN
verdadeiro, falso
TRUE, FALSE
CHARACTER
caracteres ASCII
a, b, c, A, B, C, ?, (
18
Tipos escalares
tipos
scalar
enumerated
bit
boolean
composite
array
numeric
character
integer
real
bit_vector
string
tipo
valor
numrico
INTEGER
-231 x 231-1
REAL
-3.651047 x +3.651047
exemplos
123, 8#173#, 16#7B#
2#11_11_011#
1.23, 1.23E+2, 16#7.B#E+1
19
Tipos compostos
tipos
scalar
enumerated
bit
boolean
composite
array
numeric
character
integer
real
bit_vector
string
Classe
tipo
valor
exemplos
vetor
BIT_VECTOR
1 , 0
STRING
tipo character
texto, incluindo_aspas
20
Tipos compostos
tipos
scalar
enumerated
bit
composite
array
numeric
boolean
character
integer
bit_vector
real
string
Declaraes:
- limites definidos por TO e DOWNTO
Exemplos de declaraes tipos: bit_vector e string:
21
Exemplo de operadores
Divididos em classes:
- as classes definem a precedncia dos operadores
- operadores de uma mesma classe: igual precedncia
Maior precedncia: classe diversos
Menor precedncia: classe lgicos
Operador not: operador lgico, est na classe diversos devido a precedncia
classe
lgicos
relacionais
adio
diversos
operadores
and
or
=
nand
/=
<
+
nor
xor
<=
>
xnor
>=
&
not
22
Operadores
Tipos envolvidos na operao
- maioria das operaes: operadores do mesmo tipo
Operadores lgicos:
- operandos: tipos bit e boolean
- podem ser empregados em vetores (arrays):
exemplo: bit_vector
- vetores devem ter o mesmo tamanho
- operao executada entre elementos de mesma posio
operadores
operando L
operando R
retorna
not
bit
bit
boolean
boolean
bit
bit
bit
boolean
boolean
boolean
and
or
nand
23
Operadores relacionais:
- igualdade e desigualdade (= /=): qualquer tipo
- a=b para escalares: a mesmo valor de b
- a=b para compostos: cada elemento de mesma posio igual
- ordenao (> < >= <=): tipos escalares (bit, boolean, character, integer, real, time)
operadores
>
/=
<
>=
<=
operando L
operando R
retorna
qualquer tipo
mesmo tipo de L
boolean
mesmo tipo de L
boolean
a(0)
a(1)
a(2)
a(3)
b(3)
1
b(2) b(1)
0
b(0)
c(0) c(1)
c(2)
c(3)
24
Operadores adio
- adio e subtrao (+
&
operando L
operando R
retorna
tipo numrico
o mesmo tipo de L
mesmo tipo
vetor unidimensional
vetor unidimensional
vetor unidimensional
vetor unidimensional
elemento
vetor unidimensional
elemento
vetor unidimensional
vetor unidimensional
elemento
elemento
vetor unidimensional
Exemplo:
a <= b & c;
-- a bit_vector 8 elementos,
x <= y & 1; -- x bit_vector 5 elementos,
25
16#b.0#
ENTITY std_a IS
PORT (s1,s2,s3,s4,s5
END std_a;
26
1
2
3
4
5
6
7
8
9
10
11
12
13
ENTITY std_xc IS
PORT (bv_a, bv_b
int_a, int_b
bv_c, bc_d
int_c
END std_xc;
:
:
:
:
IN
IN
OUT
OUT
27
Exerccios
Compilar e simular as descries:
- std_a
- std_xc
arquivo: std_a.vhd
arquivo: std_xc.vhd
28
29
i0
int0
i1
int1
i1
i2
ot
sel
i3
ot
4/1
s0
s1
s1 s0
ot
0
0
1
1
i0
i1
i2
i3
0
1
0
1
i2
int2
i3
int3
s0
s1
30
i0
i1
i2
i3
1
2
3
4
5
6
7
8
9
10
11
12
13
ENTITY mux_0 IS
PORT (i0, i1, i2, i3
s0, s1
ot
END mux_0;
:
:
:
s0
s1
ot
4/1
s1 s0 ot
0
0
1
1
0
1
0
1
i0
i1
i2
i3
IN BIT; -- entradas
IN BIT; -- selecao
OUT BIT); -- saida
31
i0
i1
i2
emprega 5 expresses
sinais internos: int0, int1, int2 e int3
observar concorrncia do cdigo:
- valor de ot,
determinado pelas expresses linhas 11, 12, 13 e 14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ENTITY mux_00 IS
PORT (i0, i1, i2, i3
s0, s1
ot
END mux_00;
:
:
:
i3
s0
s1
ot
4/1
s1 s0 ot
0
0
1
1
0
1
0
1
i0
i1
i2
i3
IN BIT; -- entradas
IN BIT; -- selecao
OUT BIT); -- saida
32
-- condicao_1 = verdadeira
-- condicao_2 = verdadeira
-- nenhuma condicao verdadeira
33
i3
s0
s1
ot
4/1
s1 s0 ot
0
0
1
1
0
1
0
1
i0
i1
i2
i3
opo de escolha:
linhas 10 e 11: operao AND entre s0 e s1
linha 12: s0 e s1 concatenados
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ENTITY mux_1 IS
PORT (i0, i1, i2, i3
s0, s1
ot
END mux_1;
:
:
:
IN BIT;
IN BIT;
OUT BIT);
34
WHEN
WHEN
WHEN
WHEN
WHEN
-- expressao_escolha =
condicao_1,
-- condicao_1
condicao_2,
-- condicao_2
condicao_3 | condicao_4,
-- condicao_3 ou condicao_4
condicao_5 TO condicao_7, -- condicao_5 ate condicao_7
OTHERS;
-- condicoes restantes
35
i2
i3
s0
s1
ot
4/1
s1 s0 ot
0
0
1
1
0
1
0
1
i0
i1
i2
i3
expresso de escolha:
sinal sel = s1 e s0 concatenados
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ENTITY mux_9 IS
PORT (i0, i1, i2, i3
s0, s1
ot
END mux_9;
: IN BIT;
: IN BIT;
: OUT BIT);
36
Exerccio
Desenvolver uma descrio para um codificador de prioridade empregando a
construo WHEN ELSE
- trs entradas denominadas p3, p2 e p1
- p3 a de maior privilgio
- cdigo da entrada: sadas c1 e c2
p3
p2
p1
codificador
de
prioridade
c1
c0
p3
1
0
0
0
p2
1
0
0
p1
1
0
c1
1
1
0
0
c0
1
0
1
0
- no importa
37
38
Comandos seqenciais
Comandos seqenciais podem ocorrer em:
- processos
- subprogramas
Processo
- um comando concorrente
- delimita uma regio contendo cdigo seqencial
Uma descrio: composta de comandos concorrentes
- todas so executadas concorrentemente
execuo
das
declaraes
abc:PROCESS
BEGIN
declarao 1
declarao 2
.
.
.
declarao n
END PROCESS abc;
declarao;
xyz:PROCESS
declarao;
abc:PROCESS
declarao;
execuo conjunta
xyz:PROCESS
BEGIN
declarao 1
declarao 2
.
.
.
declarao n
END PROCESS xyz;
execuo
das
declaraes
39
-- (lista de sensibilidade)
40
Incio da construo:
comandos IF
opcionais
Formato da construo:
IF condicao_1 THEN
comando_sequencial;
comando_sequencial;
ELSIF condicao_2 THEN
comando_sequencial;
comando_sequencial;
ELSIF condicao_3 THEN
comando_sequencial;
ELSE
comando_sequencial;
END IF;
41
i0
i1
i2
s0
i3
s1
ot
4/1
s1 s0 ot
0
0
1
1
0
1
0
1
i0
i1
i2
i3
ENTITY mux_4aa IS
PORT (i0, i1, i2, i3
s0, s1
ot
END mux_4aa;
:
:
:
IN BIT; -- entradas
IN BIT; -- selecao
OUT BIT); -- saida
42
=>
=>
=>
=>
=>
-- expressao_escolha =
comando_a;
-- condicao_1
comando_b; comando_c;
-- condicao_2
comando_d;
-- condicao_3 ou condicao_4
comando_d;
-- condicao_5 ate condicao_9
comando_e; comando_f;
-- condicoes restantes
43
i0
i1
i2
s0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ENTITY mux_3aa IS
PORT (i0, i1, i2, i3
s1, s0
ot
END mux_3aa;
:
:
:
i3
s1
ot
4/1
s1 s0 ot
0
0
1
1
0
1
0
1
i0
i1
i2
i3
IN BIT;
IN BIT;
OUT BIT);
44
45
46
enb
d
enb
d <= q ;
47
ENTITY latch3_1 IS
PORT (en
: IN
rst : IN
set : IN
d
: IN
q
: OUT
END latch3_1;
BIT;
-- habilita
BIT;
-- rst=1 leva q=000
BIT;
-- set=1 leva q=111
BIT_VECTOR(2 DOWNTO 0);
BIT_VECTOR(2 DOWNTO 0));
-- q=000 independente de en
-- q=111 independente de en
-- condicao do sinal para habilitar
48
49
Atributos
Informaes adicionais
- associadas: tipos objetos e unidades de projeto
- um objeto:
50
Atributos - exemplos
sSTABLE - verdadeiro: no ocorreu uma troca de valor
- falso caso contrario
sEVENT - verdadeiro: ocorreu uma troca de valor
- falso: caso contrario
a
b
event
stable
event
stable
s <= a AND b
200
400
stable
600
800
1000
1200
1400
1600
1800
t ns
Atributos - aplicao
- verificao de bordas de subida ou descida em sinais
(ck'EVENT AND ck ='1')
(ck'EVENT AND ck ='0')
(NOT ck'STABLE AND ck ='1')
(NOT ck'STABLE AND ck ='0')
VHDL Descrio e Sntese de Circuitos Digitais
-----
borda
borda
borda
borda
de
de
de
de
subida
descida
subida
descida
51
set
set
q
rst
ck
rst
d
q
52
ENTITY flip3_3 IS
PORT (ck
: IN
rst : IN
set : IN
d
: IN
q
: OUT
END flip3_3;
BIT;
-- relogio
BIT;
-- rst=1 leva q=000 assincrono
BIT;
-- set=1 leva q=111 assincrono
BIT_VECTOR(2 DOWNTO 0);
BIT_VECTOR(2 DOWNTO 0));
53
54
-- estado inicial
-- __/-- proximo estado
-- ciclo de estados
-- .
-- .
-- .
55
rst=1
estado
atual
00
01
estado
futuro
lgica
combinacional
registradores
relgio
10
sada
reset
11
rst
56
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ENTITY maq_est1 IS
PORT (ck
: IN
BIT;
-- relogio borda subida
rst
: IN
BIT;
-- rst=1, q=00
q
: BUFFER BIT_VECTOR (1 DOWNTO 0)); -- saida codigo Gray
END maq_est1;
ARCHITECTURE teste OF maq_est1 IS
BEGIN
abc: PROCESS (ck, rst)
BEGIN
IF rst = '1' THEN
q <= "00";
ELSIF (ck'EVENT and ck ='1') THEN
CASE q IS
WHEN "00" => q <= "01";
WHEN "01" => q <= "11";
WHEN "11" => q <= "10";
WHEN "10" => q <= "00";
END CASE;
END IF;
END PROCESS abc;
END teste;
-- estado inicial
-- ciclo de estados
57
58
Exerccio
Implementar uma mquina de estados
- contador crescente decrescente cdigo GRAY
- entrada sobe define sentido crescente / decrescente
0/00
3/10
1/01
2/11
estado
atual
sobe
relgio
sobe=0
sobe=1
lgica
combinacional
estado
futuro
reg.
R
lgica
combinacional
sada
rst
59
Fim
60
ENTITY pr_cod1 IS
PORT (p
: IN BIT_VECTOR(3 DOWNTO 1);
c
: OUT BIT_VECTOR(1 DOWNTO 0));
END pr_cod1;
ARCHITECTURE teste OF pr_cod1 IS
BEGIN
-- p3 p1 p0
c <= "11" WHEN p(3)='1' ELSE -- 1 - "10" WHEN p(2)='1' ELSE -- 0 1 "01" WHEN p(1)='1' ELSE -- 0 0 1
"00";
-- 0 0 0
END teste;
c1 c0
1 1
1 0
0 1
0 0
61
ENTITY pr_cod2 IS
PORT (p
: IN BIT_VECTOR(3 DOWNTO 1);
c
: OUT BIT_VECTOR(1 DOWNTO 0));
END pr_cod2;
ARCHITECTURE teste OF pr_cod2 IS
BEGIN
WITH p SELECT
c <= "11" WHEN "111"|"110"|"101"|"100",
"10" WHEN "011"|"010",
"01" WHEN "001",
"00" WHEN "000";
END teste;
-- p3 p1 p0
-- 1 - -- 0 1 -- 0 0 1
-- 0 0 0
c1 c0
1 1
1 0
0 1
0 0
62
ENTITY maq_est2 IS
PORT (ck
:
sobe
:
rst
:
q
:
END maq_est2;
IN
IN
IN
OUT
BIT;
BIT;
BIT;
BIT_VECTOR (1 DOWNTO 0));
-----
SELECT
WHEN 0,
WHEN 1,
WHEN 2,
WHEN 3;
63