Post on 09-Jan-2016
description
ComL@b – Laboratório de Comunicações Digitais
Aula 10 – Exp 8: Implementação de Máquinas de Estado
Fabbryccio Cardoso
Dalton S. Arantes
DECOM-FEEC-UNICAMP
www.decom.fee.unicamp.br/~cardoso
ComL@b – Laboratório de Comunicações Digitais
Exemplo1: identificar seq 1000
0 1
23
1/0
0/0
0/0
1/0
0/0
1/00/11/0
Estado1
Estado10
Estado100
ComL@b – Laboratório de Comunicações Digitais
Exemplo1: identificar seq 1000
0 1
23
1/0
0/0
0/0
1/0
0/0
1/00/11/0
I n Out Next
1 0 1
1 0 1
0 0 2
0 0 3
1 0 1
0 0 2
0 0 3
0 1 0
1 0 1
Estado1
Estado10
Estado100
ComL@b – Laboratório de Comunicações Digitais
Help (right click in Mcode)
ComL@b – Laboratório de Comunicações Digitais
Modelo
dbl fpt
vld
fpt dbl
out
dbl fpt
fonte
fpt dbl
estadoTime
Scope
[1 1 1 1 1 1 1 1 1]
Signal FromWorkspace1
[1 1 0 0 1 0 0 0 1]
Signal FromWorkspace xlmcodeseq1000
din
vin
dout
estado
MCode
Sy stemGenerator
double
din
double
v in
UFix_1_0
UFix_1_0
UFix_1_0 double
dout
UFix_2_0 doubleestado
ComL@b – Laboratório de Comunicações Digitais
Script em linguagem M (1/3)
function [dout, estado] = seq1000( din, vin )
persistent next, next = xl_state(0, {xlUnsigned, 2, 0});
atual = next;
dout = 0;
estado = atual;
if vin == 1
.......................... Switch .....
end
ComL@b – Laboratório de Comunicações Digitais
Script (2/3)
switch(atual)
case 0;
if din == 1
next = 1;
end
case 1;
if din == 0
next = 2;
end
case 2;
if din == 0
next = 3;
else
next = 1;
end
ComL@b – Laboratório de Comunicações Digitais
Script (3/3)
case 3;
if din == 0
next = 0;
dout = 1;
else
next = 1;
end
end
0 1
23
0/11/0
Estado1
Estado10
Estado100
ComL@b – Laboratório de Comunicações Digitais
Experimento
Identificar a seguinte seqüência de
pressionamento de botões: Up Down Up Down.
Entradas: Botões Up e Down.
Saída: Led_0 para indicar identificação de
sequência.
Saídas: Led_2 e Led_3 para indicar o estado atual.
Implementar a lógica de “debouncing” do
Experimento 7 usando o bloco Mcode.
Utilizar dois registradores (regU e regD) internos e
um único contador interno.
ComL@b – Laboratório de Comunicações Digitais
Modelo
dbl fpt
U
Terminator2
Terminator1
xlslice[a:b]
xlslice[a:b]
[1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1]
Signal FromWorkspace1
[1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1]
Signal FromWorkspace
Scope1
Scope
xlmcodedebouncer
Uin
Din
Uout
Dout
regU_D
MCode1
xlmcodeseqUDUD
Uin
Din
dout
estado
MCode
fpt dbl
Led_3
fpt dbl
Led_2
fpt dbl
Led_1
fpt dbl
Led_0
xlinv not
xlinv not
xlinv not
xlinv not
xlinv not
xlinv not
fpt dbl
fpt dbl
fpt dbl
dbl fpt
D
Sy stemGenerator
Uin
double
Uin
Din
double
Din
UFix_1_0
UFix_1_0
reg
double
reg
double
double
UFix_2_0 UFix_1_0
UFix_1_0
double
dout
doutUFix_1_0UFix_1_0
UFix_1_0
UFix_1_0
UFix_1_0
UFix_1_0
UFix_1_0
UFix_1_0
Dout
double
Dout
Uout
double
Uout
UFix_1_0
UFix_1_0
double
estado
{'ah4'}
{'ag3'}
{'ac4'}
{'ac3'}
{'aa6'}
{'aa5'}
10 nsAJ15
ComL@b – Laboratório de Comunicações Digitais
Máquina de Estados
0 1
23
D/0
U/0
U/0
D/1
D/0 U/0
D/0
U/0
Estado UD
Estado UDU
Estado Inicial
Estado U
ComL@b – Laboratório de Comunicações Digitais
Saída do Debouncer
ComL@b – Laboratório de Comunicações Digitais
Saída da Máquina de Estado
ComL@b – Laboratório de Comunicações Digitais
Implementação Debouncer 1/2
function [Uout, Dout, regU_D] = debouncer(Uin, Din)
persistent counter, counter = xl_state(0,
{xlUnsigned,27,0});
persistent regU, regU = xl_state(0, {xlUnsigned,1,0});
persistent regD, regD = xl_state(0, {xlUnsigned,1,0});
constante = xfix({xlUnsigned,27,0},100e6-1);
Uout = 0;
Dout = 0;
ComL@b – Laboratório de Comunicações Digitais
Implementação Debouncer 2/2
if Uin == 1
regU = 1;
end
if Din == 1
regD = 1;
end
regU_D = xl_or(regU, regD);
if regU == 1 | regD == 1
…………………………….
end
ComL@b – Laboratório de Comunicações Digitais
Implementação Máquina de Estados
function [dout, estado] = seqUDUD(Uin, Din)
persistent next, next = xl_state(0, {xlUnsigned,2,0});
persistent reg_dout, reg_dout = xl_state(0, {xlUnsigned, 1,
0});
atual = next;
estado = atual;
if Uin == 1 | Din == 1
............................................
end
dout = reg_dout;
ComL@b – Laboratório de Comunicações Digitais
Exemplo 2
Implementar passo a passo oscilador 0-1 de
período 1 segundo.
ComL@b – Laboratório de Comunicações Digitais
Exercício Parte 1
Repetir o exemplo do modelo “exemplo1.mdl”
para identificar a seqüência binária 0011.
ComL@b – Laboratório de Comunicações Digitais
Avaliação
Realização do experimento: 5,0 pontos.
Fontes do experimento e do exercício: 5,0 ponto.