Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
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
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.
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.
20
Prtica
O diagrama de estados do controle do semforo
estado da mquina
21
Dvidas?
Sugestes?
jpfernandes83@gmail.com
22