VHDL
Linguagem de Descrição e
Síntese de Circuitos Digitais
Sistemas Digitais
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

VHDL-Aula02