Você está na página 1de 22

HPCIn - Greco - Petrobras

Curso SystemVerilog
Aula 3 Joo Paulo Fernandes Barbosa jpfernandes83@gmail.com

Roteiro
Tipos Enumerados. Maquinas de Estados. Diretivas do Compilador. Iteraes: For e While Trabalhando com Funes Exemplo: Mquina Detectora de Sequncias. Prtica: Sinal de Trnsito. Prtica: Soluo.

Tipo Enumerados
O programador SystemVerilog tem a possibilidade

de criar novos tipos enumerados. Para tanto, deve usar o modelo abaixo.
enum logic [tamanho-1: 0] {estado_0, estado_1, ... } estado; O comando acima define uma enumerao onde o estado

poder assumir qualquer valor entre os declarados entre chaves. Os parmetros entre colchetes define nmero de bits necessrios para representar o conjunto de estados.

Tipo Enumerados
Outra forma de declarar tipos enumerados

mostrada abaixo.
enum {estado_0,estado_1, ... } estados;
Neste caso a definio simplificada porm a ferramenta de

sntese usa um tamanho padro para representar o conjunto de estados. Possivelmente sero usados vetores de 32 bits para representar o conjunto de estados. Isso poder gerar grande disperdcio de componentes.

Tipo Enumerados
Exemplos de uso:

enum logic [1:0]{busca, decodifica, opera, reset} cont; cont <= busca; enum { verde, branco, grena } verdadeiro_tricolor; cor <= verde;

Mquinas de Estados
Quando a seqncia das aes no seu projeto

depende do estado de um elemento seqencial, uma mquina de estados finitos (FSM) pode ser implementada.
As mquinas de estados finitos so usadas em

atividades que requerem uma sequncia definida de aes. Tais aces so refletidas em seus estados.

Mquinas de Estados
Mquinas de estados podem ser consideradas como

pequenos elementos de processamento.


O prximo estado de uma mquina de estados ir

depender do estado atual e do conjunto de entradas e sinais internamente armazenados.


Em SystemVerilog definimos um tipo enumerado e

usamos a construo case para implementar mquinas de estados.


7

Mquinas de Estados
Uma mquina de estados em SystemVerilog possui

o seguinte formato.

module nome_modulo (

input ,

output );

enum logic [tamanho-1: 0] {estado_0, estado_1, ... } estado; always_ff @ (negedge reset or posedge clk) if (reset == 1'b0) state <= state_0; else case (estado) estado_0: estado <= estado_1; estado_1: ... ... default: estado <= estado_0; endcase always_comb ... 8 endmodule

Iteraes
Atravs de interaes podemos definir blocos de

comandos seqenciais.
Em SystemVerilog temos dois tipos de iterao.
Iterao for Iterao do while

Iteraes
Loop For
Modelo:
for(<var_inicio>; <expresso>; <passos_for>)begin // Comandos end

Exemplo:
for(i = 0, i2 = 0; i < 8; i++, i2 *= 8) begin // Comandos end

10

Iteraes
Iteraes do while
Modelo
do begin // Comandos end while(<expresso>);

Exemplo
int a ; do begin a++; // Comandos while( a < 100);
11

Funes
Em SystemVerilog possvel criar funes que sero

chamadas em diferentes partes do circuito.


Modelo de Declarao
Function <tipo_retorno> <nome_funcao>(<declaracao_argumentos>); // Bloco opcional de declaraes // Comandos endfunction

12

Funes
Exemplo de Funo
function int add( int a, int b = 1); return a + b; endfunction

Exemplo de Uso
int i1, i2, i3; i3 = add(i1,i2);

13

Diretivas do Compilador
Em SystemVerilog temos algumas diretivas que se

assemelham muito quelas pertencentes linguagem C.


A diretiva define funciona exatamente igual #define de C

e pode ser usada para a declarao de valores globais.


define BUS_WIDTH 16 logic [ `BUS_WIDTH - 1 : 0 ] System_Bus;

Temos a diretiva include que, assim como em C, serve para

incluir outro arquivo.


include fulladder.sv

14

Exemplo
Mquina detectora de seqncia.
Dispositivo capaz de receber uma seqncia de sinais

de um bit e que ativa seu sinal de sada caso dois zeros ou dois uns seqenciais dem entrada.
reset

reset_state
0 1

out_bit = 0
1

out_bit = 0 read_1_zero
0
0 0

read_1_one

out_bit = 0

read_2_zero

read_2_one

15

out_bit = 1

out_bit = 1

Exemplo
module seq_detect ( input clock, reset, in_bit, output logic out_bit); enum logic [2:0] { reset_state, read_1_zero, read_1_one, read_2_zero, read_2_one } state; always_ff @ (posedge clock or posedge reset) if (reset) state <= reset_state; else read_1_zero: if (in_bit == 0) state <= read_2_zero; else state <= read_1_one; read_2_zero: if (in_bit == 0) state <= read_2_zero; else state <= read_1_one; read_1_one: if (in_bit == 0) state <= read_1_zero; else state <= read_2_one;

case (state)
reset_state: if (in_bit == 0) state <= read_1_zero; else state <= read_1_one; 16

Exemplo
read_2_one: if (in_bit == 0) state <= read_1_zero; else state <= read_2_one; default: state <= reset_state; endcase always_comb out_bit <= ( (state == read_2_zero) || (state== read_2_one)); endmodule

17

Prtica
Construa uma mquina de estados que implemente

um controlador de sinal de trnsito.


Tal semforo bem simples e pode ser descrito

atravs do seguinte diagrama

Contador de Tempo Controle do Semforo


18

Prtica
O contador de tempo indicado no diagrama do slide

anterior ir fazer com que a mquina de estados mude de estado. Ele recebe um sinal do controle indicando qual seu estado.

O controle do semforo possui como entradas e sadas:


Clk (1 bit): entrada que representa o clock do sistema Rst (1 bit): entrada que indica que a mquina deve se

reinicializada Tempo (1 bit): entrada vinda do controle de tempo. Sinal (2 bits): sada que indica qual o estado que a mquina est e qual a luz deve ser indicada no semforo.

19

Prtica
Descrio do funcionamento da mquina.
A

mquina de estados deve indicar que um determinado sinal deve estar ativo at que o valor da entrada tempo seja ativado. Nesse caso a mquina muda de estado. real de um sinal de trnsito.

A seqncia de estados deve relfetir o funcionamento

O contador de tempo no deve ser implementado.

Apenas o seu conportamento deve ser simulado.

20

Prtica
O diagrama de estados do controle do semforo

est apresentado na figura abaixo.

O sinal Tempo o estmulo externo que muda o

estado da mquina
21

Dvidas?
Sugestes?
jpfernandes83@gmail.com

22

Você também pode gostar