VHDL
Linguagem de Descrição e
Síntese de Circuitos Digitais
Sistemas Digitais
Tópicos Abordados
 Aspectos gerais da linguagem
 Síntese de circuitos
 Entidade de projeto
 Classes de objetos: constante, variável e sinal
 Tipos
 Operadores
 Construção concorrente WHEN ELSE
 Construção concorrente WITH SELECT
 Processos e lista de sensibilidade
 Construção sequencial IF ELSE
 Construção sequencial CASE WHEN
 Circuitos síncronos
Aspectos Gerais da Linguagem
Síntese de Circuitos
Síntese de Circuitos
Etapas de um projeto
Síntese de Circuitos
Elaboração da Descrição VHDL
Descrição VHDL
Verificação do
Resultado
Compilador VHDL
Simulador VHDL
Estímulos de teste
Síntese de Circuitos
Síntese da descrição (ilustração das operações)
 descrição do circuito
 circuito nível RTL sintetizado
 circuito nível portas (final)
Síntese de Circuitos
Síntese da descrição (ilustração das operações)
 descrição do circuito
 circuito nível RTL sintetizado
 circuito nível portas (final)
Síntese de Circuitos
Síntese da descrição (ilustração das operações)
 descrição do circuito
 circuito nível RTL sintetizado
 circuito nível portas (final)
Síntese de Circuitos
Descrição VHDL
Ferramenta
de Síntese
Nível RTL
Dados da
Tecnologia
Nível de Portas
Opção de
Projeto
Otimização
velocidade/área
Rede de Ligações
Teste do circuito
sintetizado
Nova Descrição
VHDL
Temporização
Simulador VHDL
Estímulos
Síntese de Circuitos
Rede de Ligações
Ferramenta de
Posicionamento & Interligação
Implementação
Teste do circuito sintetizado:
Interligações definidas
Nova Descrição
VHDL
Temporização
Simulador VHDL
Estímulos
Descrição VHDL
Descrição VHDL
Descrição VHDL
Descrição VHDL
Modos de Portas
Descrição VHDL
Descrição VHDL
Objetos: são elementos que armazenam valor.
Quatro classes de objetos são definidas em VHDL
• CONSTANT – objeto com valor estático
• VARIABLE – valor imposto pode ser alterado e é empregado
em regiões de código sequencial
• SIGNAL – valor imposto pode ser alterado e é empregado em
regiões de código concorrente ou sequencial
• FILE – objetos associados à criação de arquivos
Descrição VHDL
Declarações de objetos das classes CONSTANT, VARIABLE e SIGNAL
--Classe
Lista de nomes
Tipo
Variável inicial
CONSTANT
CONSTANT
CONSTANT
nome_const
: tipo_x;
nome_const
: tipo_x := valor_inicial;
nome_1, nome_2 : tipo_x := valor_inicial;
--const mesmo tipo e vallor inicial
VARIABLE
VARIABLE
VARIABLE
nome_var
nome_var
nome1, nome2
: tipo_y;
: tipo_y := valor_inicial;
: tipo_y := valor_inicial;
--variável sem valor
--variável com valor inicial
--variáveis mesmo tipo e valor inicial
SIGNAL
SIGNAL
SIGNAL
inicial
nome_sinal
nome_sinal
nome1, nome2
: tipo_z;
: tipo_z := valor_inicial;
: tipo_z ;
--sinal sem valor
--sinal com valor inicial
--sinais mesmo tipo e sem valor
--const sem valor
Descrição VHDL
Transferência de Informações entre objetos
sinal_2
sinal_3
sinal_4
<= sinal_1;
<= variavel_1;
<= constant_1;
variavel_2
variavel_3
variavel_4
:= sinal_1;
:= variavel_1;
:= constant_1;
-- atribuição do valor de um sinal em outro sinal
-- atribuição do valor de uma variável em um sinal
-- atribuição do valor de uma constante em um sinal
-- atribuição do valor de um sinal em uma variável
-- atribuição do valor de uma variável em outra variável
-- atribuição do valor de uma constante em uma variável
Observe a presença de delimitadores
de atribuição diferentes!
Descrição VHDL
Descrição VHDL
Tipos VHDL
Tipos VHDL
Tipos VHDL
Tipos VHDL
Tipos VHDL
Tipos VHDL
Definição de novos tipos
 VHDL permite a criação de novos tipos enumerados, físicos e compostos
 Criação de novo tipo pode facilitar a leitura de um código, atribuindo
nomes específicos para determinadas condições
 Aqui será apresentada apenas uma introdução sobre o assunto
 Declaração de um tipo é feito a partir da palavra reservada TYPE
Exemplo:
TYPE estado IS (parado, inicio, seguindo_caminho, rotacionando,
desviando_obstaculo) -- declaração do tipo
SIGNAL x : estado := parado;
-- objeto sinal empregando o tipo estado
Operadores VHDL
Operadores VHDL
Operadores VHDL
Operadores VHDL
Operadores VHDL
Operadores VHDL
Exercícios
Compilar e simular as descrições
apresentadas nos 2 slides prévios!
Comandos Concorrentes Básicos
 Comandos concorrentes são executados conjuntamente.
 Logo, a sequência como são apresentados no código é irrelevante
 Um atraso delta é empregado para o simulador avaliar as iterações
resultantes dos comando concorrentes.
O Atraso Delta Δ
 Ordem dos comandos no código não deve interferir no resultado
final da simulação
 O simulador necessita de um atraso interno, denominado Δ, para
coordenação da avaliação de eventos concorrentes
 Para todos os comandos ativados, o resultado é transferido 1Δ após
 A nova condição pode ativar novos comandos, e o processo se
repete por sucessivas iterações até atingir uma condição estável
Comandos Concorrentes Básicos
O Atraso Delta Δ
Observe que em uma linguagem sequencial, o comando da linha 9
deveria ser apresentado antes do comando da linha 8!
1 | ENTITY
sig_tes0
2 |
PORT( sa
:
3 |
sb, sc :
4 | END
sig_tes0;
5 |
6 | ARCHITECTURE
teste
7 | BEGIN
8 |
sc
<=
sb;
9 |
sb
<=
sa;
10 | END
teste;
IS
IN
BUFFER
OF
BIT;
BIT);
sig_tes0
IS
Comandos Concorrentes Básicos
O Atraso Delta Δ
Simulador
Comportamento real
Comandos Concorrentes Básicos
O Atraso Delta Δ – condição instável
Os simuladores normalmente limitam o número máximo de iterações e
abortam a simulação!
Comandos Concorrentes Básicos
Atribuição de valor a um sinal
 Pode ocorrer tanto em regiões de código concorrente quanto sequencial
 Quando a atribuição ocorre em região concorrente, a ordem dos comandos
é irrelevante
 A atribuição emprega o delimitador “<=“
 A informação pode ser originada de um outro sinal ou expressão
 VHDL é rigorosa com relação a operações envolvendo tipos diferentes, não
permitindo transferência de valor entre objetos nesse caso
Comandos Concorrentes Básicos
Atribuição de valor a um sinal
Exemplo: MUX (Circuito de Seleção)
Comandos Concorrentes Básicos
Atribuição de valor a um sinal
Comandos Concorrentes Básicos
Atribuição de valor a um sinal
Comandos Concorrentes Básicos
Construção WHEN ELSE
Comandos Concorrentes Básicos
Construção WHEN ELSE
s1_s0 <= s1 & s0;
Comandos Concorrentes Básicos
Construção WITH SELECT
Comandos Concorrentes Básicos
Construção WITH SELECT
Comandos Concorrentes Básicos
WHEN ELSE versus WITH SELECT
 Na construção WHEN ELSE a ordem de apresentação das condições
indica a precedência na execução
 Primeira condição tem prioridade máxima e a última mínima
 Na construção WITH SELECT todas as condições possuem igual
prioridade
 Tais diferenças podem ser aproveitadas pelo projetista para obter
circuitos mais eficientes e descrições mais sucintas
 O exercício a seguir ilustra o caso onde a construção WHEN ELSE
leva vantagem sobre a construção WITH SELECT
Exercícios
1
2
3
4
5
6
7
8
9
10
11
12
| ENTITY
pr_cod
|
PORT( p :
|
c :
| END pr_cod;
|
| ARCHITECTURE
| BEGIN
|
c <= “11” WHEN
|
“10” WHEN
|
“01” WHEN
|
“00”;
| END teste1;
1
2
3
4
5
6
7
8
9
10
11
12
13
| ENTITY
pr_cod
|
PORT( p :
|
c :
| END pr_cod;
|
| ARCHITECTURE
| BEGIN
|
WITH p SELECT
|
c <= “11” WHEN
|
“10” WHEN
|
“01” WHEN
|
“00” WHEN
| END teste2;
Exercícios
IS
IN
OUT
BIT_VECTOR(3 DOWNTO 1);
BIT_VECTOR(1 DOWNTO 0));
teste1
OF
pr_cod
p(3) = ‘1’
p(2) = ‘1’
p(1) = ‘1’
ELSE
ELSE
ELSE
-----
IS
IN
OUT
teste2
1
0
0
0
1
0
0
IS
-- p3 p2 p1 c1 c0
1 1
1 0
1
0 1
0
0 0
BIT_VECTOR(3 DOWNTO 1);
BIT_VECTOR(1 DOWNTO 0));
OF
“111”|”110”|”101”|”100”,
“011”|”010” ,
“001”,
“000”;
pr_cod
-----
IS
p3 p2 p1 c1
1
1
0 1 1
0
0 1
0
0
0 0
0
c0
1
0
1
0
Comandos Concorrentes Básicos
Criação de latch com as construções
WHEN ELSE e WITH SELECT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| ENTITY
latch
IS
|
PORT( enb, d1, d2, d3 :
IN
|
q1, q2, q3,
:
BUFFER
| END latch;
|
| ARCHITECTURE
funcionamento
| BEGIN
|
q1 <= d1 WHEN enb = ‘1’ ELSE
|
q1;
|
q2 <= d2 WHEN enb = ‘1’;
|
WITH enb SELECT
|
q3
<= d3
WHEN ‘1’;
|
q3
WHEN ‘0’;
| END funcionamento;
BIT;
BIT);
OF
latch
IS
Download

Construção WITH SELECT