Você está na página 1de 41

Eletrônica Digital

2
Maquina de Estado em Verilog

Gabriel Fanelli
Maquina de Estado em Verilog
 O processo de projeto pode ser resumido na
determinação de dois circuitos combinacionais e
união com um conjunto de flip-flops.

2
Maquina de Mealy
rst

Flip-Flops
s(t+1)
C1 Próximo s(t)
estado Estado z(t)
x(t)
Atual C2
entrada

clk

3
Maquina de Moore
rst

Flip - Flops
s(t+1) z(t)
C1 C2
Estado s(t)
Seguinte Estado
x(t)
Atual
Entrada
Pode não ser
utilizado,
dependendo
clk do estilo de
descrição
4
Codificação dos Estados
 Definição de um “Parâmetro”
Parameter é uma constante que pode ser definida dentro de um módulo. A constante
é local ao módulo. Entretanto, quando é criada uma chamada de um módulo, o valor de
parameter pode ser mudado no local que ocorre a chamada (instanciação do módulo).

module seq_rec (input CLK, input RESET, input X, output reg Z);
// declaração do registrador de estado:
reg [1:0] estado;

// declaração da combinação lógica dos estados:


parameter S0 = 2'b00, S1 = 2'b01, S2 = 2'b10, S3 = 2'b11;
// Ou:
//localparam S0 = 2'b00, S1 = 2'b01, S2 = 2'b10, S3 = 2'b11;

localparam é mais apropriado quando os valores designados aos estados


devem ser invisiveis/inacessiveis (ou modificados) para o módulo
5
onde o
código for utilizado.
Exemplo de máquina de estados
 Máquina de Estados Simples
 Sem entradas
 Máquina Moore

iniciar=1
S0/ S1/
00 01

S3/ S2/
10 11

6
Exemplo de
máquina de
estados
Circuito Combinacional
Lógica de Estado Seguinte

Registradores
de Estado

Circuito Combinacional
Lógica de Saída
7
Exemplo de máquina de estados
 Usando somente 2 Always
 Um armazena e atualiza o estado
 Outro produz as saídas

8
Exemplo de
máquina de
estados
 Usando somente
2 Always

Lógica de Estado Seguinte +


Registradores de Estado

Circuito Combinacional
Lógica de Saída
9
Exemplo de máquina de estados
Outra arquitetura de máquina de estados com 4 estados:
Alteração do estado agora depende da entrada “sobe”

sobe=0
iniciar=
1
S0/ S1/
00 sobe=1 01

sobe=0 sobe=1 sobe=1 sobe=0

S3/ sobe=1 S2/


10 11

sobe=0
10
Exemplo de
máquina de
estados

 Uso de estrutura
IF-ELSE para
codificar evolução
do estado com
entradas

11
Exemplo de máquina de estados
Diagrama de estados para máquina que detecta a sequência
101:

12
Exemplo de máquina de estados
Máquina que detecta a sequência 101:

13
Exemplo de máquina de estados

14
Exemplo de máquina de estados
Simulação para Máquina que detecta a sequencia 101:

15
Exemplo de máquina de estados
Diagrama de estados para máquina de Mealy que detecta a seqüência 101:

0
0
1
0 1
0
rst S0 S1

1
1
0
0
0 S2
16
0
Exemplo de máquina de estados
Código para máquina de Mealy que detecta a seqüência 101:

Descrição alternativa

Na máquina de Mealy a
decodificação das saídas
depende da entrada
17
Exemplo de máquina de estados
Código para máquina de Mealy que detecta a seqüência 101:

Evolução do Estado +
Registradores de Estado
Exemplo de máquina de estados

Simulação para máquina que detecta a seqüência 101:


Máquina de estados com 1 always
É possível descrever a máquina de estados completa usando somente
1 bloco always?
Máquina de estados com 1 always
O uso de um bloco always geralmente não é recomendado
⚫Em princípio, leva ao uso não desejado de registradores! O usuário pode perder
o controle desse uso.

always@(posedge clk)
case (state)
s1: if (x1 == 1'b1) begin state <= s2; outp <= 1'b1; end
else begin state <= s3; outp <= 1'b0; end
s2: begin
state <= s4; outp <= 1'b1;
end
s3: begin
state <= s4; outp <= 1'b0;
end
s4: begin
state <= s1; outp <= 1'b0;
end
endcase
Máquina de estados com 1 always
O uso de um bloco always geralmente
não é recomendado
Configuração da Ferramenta de Síntese

23
Exemplos de Codificação
Códigos utilizados em codificação de estados
Binário One-hot Gray
0 0000 0000000000000001 00000000
1 0001 0000000000000010 00000001
2 0010 0000000000000100 00000011
3 0011 0000000000001000 00000111
4 0100 0000000000010000 00001111
5 0101 0000000000100000 00011111
6 0110 0000000001000000 00111111
7 0111 0000000010000000 01111111
8 1000 0000000100000000 11111111
9 1001 0000001000000000 11111110
10 1010 0000010000000000 11111100
11 1011 0000100000000000 11111000
12 1100 0001000000000000 11110000
13 1101 0010000000000000 11100000
14 1110 0100000000000000 11000000
15 1111 1000000000000000 10000000
Fluxo de projeto de Máquina de
Estado no software Quartus
Especificações da máquina de estados

Diagrama de Estados da máquina (Mealy ou Moore)

Elaboração da descrição em Verilog

Configuração da Codificação do Estado no Quartus

Compilação (Síntese) do circuito

Verificação do circuito inferido (RTL)

Simulação e verificação via Testbench


Exemplo
• Controle de um Farol
– Sensores de Trânsito: TA, TB (VERDADEIRO
quando há carros)

BR
Bravado
– Luzes: LA, LB Dining

459
Hall
LB

LA TB
LA

R. Brasópolis
Academic TA TA Ave.

Labs TB LB Dorms
Blvd.

Fields
Exemplo
• Inputs: CLK, Reset, TA, TB
• Outputs: LA, LB
CLK

TA Traffic LA
Light
TB Controller LB

Reset
Exemplo
• Inputs: CLK, Reset, TA, TB
• Outputs: LA, LB
Reset
S0
LA: green
LB: red
Exemplo
• Inputs: CLK, Reset, TA, TB
• Outputs: LA, LB
TA
Reset
S0 TA S1
LA: green LA: yellow
LB: red LB: red

S3 S2
LA: red LA: red
LB: yellow LB: green
TB
TB
TA
Reset
S0 TA S1

Exemplo
LA: green LA: yellow
LB: red LB: red

• Tabela de Transição de Estados


S3 S2
LA: red LA: red
LB: yellow LB: green
Current Next TB
TB
State Inputs State
S TA TB S'
S0 0 X S1
S0 1 X S0
S1 X X S2
S2 X 0 S3
S2 X 1 S2
S3 X X S0
TA
Reset
S0 TA S1

Exemplo
LA: green LA: yellow
LB: red LB: red

• Tabela de Transição de Estados


S3 S2
LA: red LA: red
LB: yellow LB: green
Current Next TB
TB
State Inputs State
S TA TB S' State Encoding
S0 0 X S1
S0 00
S0 1 X S0
S1 01
S1 X X S2
S2 X 0 S3 S2 10
S2 X 1 S2 S3 11
S3 X X S0 Codificação dos Estados
TA
Reset
S0 TA S1

Exemplo
LA: green LA: yellow
LB: red LB: red

• Código Verilog → Evolução dos Estados


S3 S2
LA: red LA: red
LB: yellow LB: green
TB
TB

Current Next
State Inputs State
S TA TB S'
S0 0 X S1
S0 1 X S0
S1 X X S2
S2 X 0 S3
S2 X 1 S2
S3 X X S0
Exemplo
• Codificação das Saídas
TA
Reset
S0 TA S1
Output Encoding LA: green
LB: red
LA: yellow
LB: red

green 001
yellow 010
S3 S2
LA: red LA: red
red 100 LB: yellow
TB
LB: green

TB
TA
Reset
S0 TA S1

Exemplo
LA: green LA: yellow
LB: red LB: red

• Código Verilog → Lógica de Saída


S3 S2
LA: red LA: red
LB: yellow LB: green
TB
TB

Output Encoding
green 001
yellow 010
red 100
Exemplo • Código Verilog Completo

TA
Reset
S0 TA S1
LA: green LA: yellow
LB: red LB: red

S3 S2
LA: red LA: red
LB: yellow LB: green
TB
TB
TA
Reset
S0 TA S1

Exemplo
LA: green LA: yellow
LB: red LB: red

• Resultado da Síntese (Nível RTL)


S3 S2
LA: red LA: red
LB: yellow LB: green
TB
TB
TA
Reset
S0 TA S1

Exemplo
LA: green LA: yellow
LB: red LB: red

• Resultado da Síntese (Máquina de Estados)


S3 S2
LA: red LA: red
LB: yellow LB: green
TB
TB
TA
Reset
S0 TA S1

Exemplo
LA: green LA: yellow
LB: red LB: red

• Máquina de Estados
• Tabela de Transição de Estados
S3 S2
LA: red LA: red
LB: yellow LB: green
TB
TB
TA
Reset
S0 TA S1

Exemplo
LA: green LA: yellow
LB: red LB: red

• Máquina de Estados
• Codificação de Estados
S3 S2
• Quartus configurado para opção “user-encoded” LA: red LA: red
LB: yellow LB: green
TB
TB
Exemplo
• Teste do circuito
(Testbench)
TA
Reset
S0 TA S1
LA: green LA: yellow

Exemplo LB: red LB: red

• Teste do circuito (Resultado da Simulação)


S3 S2
LA: red LA: red
LB: yellow LB: green
TB
TB

Você também pode gostar