Guia Completo SystemVerilog: Bit, Logic e Reg Explicados

Este tutorial aborda bitSistemas de Numeração e Conversão: Binário, Decimal, Octal e HexadecimalSistemas de Numeração e Conversão: Binário, Decimal, Octal e HexadecimalAprenda conversões de sistemas numéricos em eletrônica digital. Descubra métodos para converter entre decimal, binário, octal e hexadecimal com exemplos., logic e reg, três tipos de dados essenciais no SystemVerilogIntrodução ao SystemVerilog: História e EvoluçãoIntrodução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital. para representar e manipular sinais e variáveis. Você verá as diferenças entre cada tipo, seus usos mais comuns e as melhores práticas para utilização em projetos.

Visão Geral dos Tipos de Dados🔗

No SystemVerilogIntrodução ao SystemVerilog: História e EvoluçãoIntrodução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital., existem diferentes categorias de tipos para representação de sinal e armazenamento de dados. Entre eles, destacam-se:

A decisão de qual tipo utilizar depende do comportamento esperado do sinal (se ele pode assumir valores desconhecidos ou alta impedância) e se há necessidade de compatibilidade com códigos mais antigos (em que reg era o mais empregado).

Diferenças entre bit, logic e reg🔗

Uma forma clara de visualizar essas diferenças é por meio da tabela abaixo:

TipoQuantidade de EstadosUso TípicoExemplo de DeclaraçãoObservações
bit2 estados: 0 e 1Sinais que não requerem valores indefinidos ou alta impedânciabit [3:0] data;Não aceita X ou Z. Útil para otimizar desempenho de simulação e reduzir ambiguidade de sinal.
logic4 estados: 0, 1, X, ZVariáveis internas (combinações e/ou registros em SystemVerilog)logic [7:0] ctrl;Recomendado para novos projetos. Substitui reg em muitos cenários, trazendo clareza ao código.
reg4 estados: 0, 1, X, ZVariáveis herdadas de Verilog (código legado)reg [7:0] old_signal;Mantém compatibilidade com versões antigas. Geralmente substituído por logic.

bit

  • Principal Característica: Apenas dois estados (0 e 1).
  • Quando Usar:
    • Em sinais que jamais devem assumir X ou Z.
    • Onde a precisão de simulação pode ser reduzida em favor de desempenho.
  • Exemplo:
module bit_example;
  bit enable;
  bit [3:0] counter;
  initial begin
    enable = 1'b0;
    counter = 0;
    #5 enable = 1'b1;
    #5 counter = counter + 1;
  end
endmodule

Nesse exemplo, enable e counter podem apenas valer 0 ou 1. Caso surjam condições que gerassem X ou Z, essas condições não seriam representadas aqui.

logic

module logic_example;
  logic [7:0] data;
  logic valid_signal;
  initial begin
    data = 8'hFF;       // Carregando valor 0xFF
    valid_signal = 1'b0;
    #10 valid_signal = 1'b1;
    #10 data = 'X;      // Atribuindo valor indefinido, simulação assume 'X'
  end
endmodule

Observe que o logic aceita a atribuição de X, o que pode ser útil em situações de simulação onde o sinal ainda não foi definido.

reg

module reg_example;
  reg [7:0] data_reg;
  initial begin
    data_reg = 8'd15;
    #5 data_reg = 8'd100;
  end
endmodule

Apesar de continuar funcional, o uso de reg é menos recomendado em novos projetos que fazem uso pleno dos recursos do SystemVerilogIntrodução ao SystemVerilog: História e EvoluçãoIntrodução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital..

Boas Práticas de Uso🔗

1. Prefira logic em Novos ProjetosIntrodução ao SystemVerilog: História e EvoluçãoIntrodução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital.:

  • logic substitui boa parte dos usos de reg e traz maior clareza, permitindo que o compilador verifique corretamente sinais que precisam representar valores desconhecidos (X) ou alta impedância (Z).

2. Utilize bitSistemas de Numeração e Conversão: Binário, Decimal, Octal e HexadecimalSistemas de Numeração e Conversão: Binário, Decimal, Octal e HexadecimalAprenda conversões de sistemas numéricos em eletrônica digital. Descubra métodos para converter entre decimal, binário, octal e hexadecimal com exemplos. para Otimização ou Garantia de Dois Estados:

3. Mantenha reg Apenas para Compatibilidade:

4. Análise Permanente das Necessidades do ProjetoIntrodução ao SystemVerilog: História e EvoluçãoIntrodução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital.:

Exemplos Práticos🔗

A seguir, um exemplo simples que ilustra a combinação de bitSistemas de Numeração e Conversão: Binário, Decimal, Octal e HexadecimalSistemas de Numeração e Conversão: Binário, Decimal, Octal e HexadecimalAprenda conversões de sistemas numéricos em eletrônica digital. Descubra métodos para converter entre decimal, binário, octal e hexadecimal com exemplos., logic e reg em um mesmo módulo (embora, na prática, seja recomendável padronizar o uso em prol da clareza).

module tutorial_example;
  // Exemplo de sinal com valor apenas 0 ou 1
  bit flag;
  // Exemplo de sinal de quatro estados utilizado para controle
  logic busy;
  // Exemplo de variável herdada desde Verilog (menos recomendada)
  reg [7:0] count;
  initial begin
    flag = 1'b1;
    busy = 1'b0;
    count = 8'd0;
    #10 busy = 1'b1;      // busy passa a '1', sinal útil para controlar processos
    #10 count = count + 1;
  end
endmodule

Observações:

Conclusão🔗

O SystemVerilogIntrodução ao SystemVerilog: História e EvoluçãoIntrodução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital. oferece maior flexibilidade no uso de tipos de dados, permitindo escolher entre tipos de dois estados (bitSistemas de Numeração e Conversão: Binário, Decimal, Octal e HexadecimalSistemas de Numeração e Conversão: Binário, Decimal, Octal e HexadecimalAprenda conversões de sistemas numéricos em eletrônica digital. Descubra métodos para converter entre decimal, binário, octal e hexadecimal com exemplos.) e tipos de quatro estados (logic e reg). Em projetosIntrodução ao SystemVerilog: História e EvoluçãoIntrodução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital. modernos, logic é geralmente o tipo preferido, pois otimiza a legibilidade e eliminação de ambiguidade. O bitSistemas de Numeração e Conversão: Binário, Decimal, Octal e HexadecimalSistemas de Numeração e Conversão: Binário, Decimal, Octal e HexadecimalAprenda conversões de sistemas numéricos em eletrônica digital. Descubra métodos para converter entre decimal, binário, octal e hexadecimal com exemplos. é indicado para casos em que se deseja explicitamente apenas dois estados sem lidar com X ou Z. Por fim, o reg é principalmente mantido para compatibilidade, mas não é a opção recomendada para novos designs.

Com esse entendimento, você estará apto a escolher o tipo de dado correto ao modelar sinais e variáveis em SystemVerilogIntrodução ao SystemVerilog: História e EvoluçãoIntrodução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital., garantindo clareza no código e consistência na simulação.

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo