Assertion-based Verification: Técnicas de Teste em SV

Assertion-based Verification (ABV) é uma poderosa abordagem de verificaçãoIntroduçã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. que utiliza assertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. (afirmaçõesPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware.) para monitorar e validar o comportamento de um design em tempo de simulação. Diferentemente dos testes convencionais que se baseiam apenas em estímulos e respostas, as assertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. fornecem uma forma de embutir regras, restriçõesIntegração de Randomização com Ferramentas de VerificaçãoIntegração de Randomização com Ferramentas de VerificaçãoDescubra como a integração da randomização em SystemVerilog e ferramentas de verificação potencializam a cobertura e qualidade dos testes em designs complexos. e expectativas diretamente no código, facilitando a identificação rápida de violações de projeto. Nesse tutorial, discutiremos como aplicar ABV 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. para garantir que módulos e blocos funcionem de acordo com suas especificações.

Por que Usar Assertion-based Verification?🔗

Conceitos Fundamentais de Assertions em SystemVerilog🔗

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., as assertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. podem ser classificadas em duas categorias gerais:

1. Immediate AssertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware.

2. Concurrent AssertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware.

A sintaxe para essas assertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. é relativamente simples, mas seu uso requer identificação precisa das propriedadesPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. que se deseja monitorar.

Immediate Assertions🔗

As immediate assertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. são executadas imediatamente durante o fluxo de simulaçãoSimulação e Depuração: Ferramentas e Dicas PráticasSimulação e Depuração: Ferramentas e Dicas PráticasAprenda técnicas de simulação e depuração em SystemVerilog, utilizando ferramentas, waveforms, asserts e logs para garantir designs confiáveis. ou quando a condição dentro do assert é atingida. Um trecho de código típico para immediate assertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. pode ser:

always_ff @(posedge clk) begin
    // Exemplo de verificação simples
    assert (data_in >= 0 && data_in < 256)
      else $fatal("data_in fora do intervalo esperado (0 - 255). Valor atual: %0d", data_in);
end

Neste exemplo:

Benefícios das Immediate Assertions

Concurrent Assertions🔗

Diferentemente das immediate assertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware., as concurrent assertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. permitem capturar propriedades que se estendem por vários ciclos de relógio ou dependem de sequências de eventos. Essas propriedadesPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. são expressas usualmente em blocos propertyPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. e avaliadas continuamente.

Estrutura Básica

property data_handshake;
  @(posedge clk) disable iff (!reset_n)
  req |-> ##[1:3] ack;
endproperty
assert property (data_handshake)
  else $error("Falha no handshake: 'ack' não ocorreu dentro do intervalo especificado após 'req'.");

No exemplo acima:

1. Definimos uma propriedadePropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. (data_handshake) que diz: “Sempre que req estiver ativo em uma borda de subidaFlip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Flip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Aprenda os conceitos de Flip-Flops e Latches, incluindo tipos SR, JK, D e T, além do impacto do clock na sincronização de circuitos digitais. do relógio, então ack deve ficar ativo dentro de 1 a 3 ciclos após req.”

2. O trecho disable iff (!reset_n) indica que a verificaçãoIntroduçã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. é desabilitada quando reset_n estiver em nível lógico baixo (reset ativo).

3. O operador |-> designa a relação de implicação. Caso req seja verdadeiro num ciclo, teremos de observar ack dentro de 1 a 3 ciclos.

4. A instrução assert propertyPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. (data_handshake) efetivamente ativa a monitoração. Caso a propriedadePropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. seja violada, é exibida a mensagem de erro.

Quando Usar Concurrent Assertions

Integrando Assertions ao Testbench🔗

A forma de organizar e integrar assertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. dentro de um testbenchCriando Testbenches Estruturados: Estratégias de VerificaçãoCriando Testbenches Estruturados: Estratégias de VerificaçãoAprenda a criar testbenches estruturados em SystemVerilog com estratégias de verificação, modularização e boas práticas para designs digitais confiáveis. varia conforme o framework ou metodologia utilizada, mas algumas recomendações gerais são:

Exemplo de Bind

module top_tb;
  // Instanciação do design e sinais
  dut my_dut (.clk(clk), .reset_n(reset_n), .req(req), .ack(ack));
  // Bloco de ligação de propriedades (bind)
  bind dut data_handshake_prop: data_handshake_mod data_handshake_inst (
      .clk(clk),
      .reset_n(reset_n),
      .req(req),
      .ack(ack)
  );
endmodule : top_tb
module data_handshake_mod(input clk, input reset_n, input req, input ack);
  property handshake_prop;
    @(posedge clk) disable iff (!reset_n)
    req |-> ##[1:3] ack;
  endproperty
  assert property(handshake_prop)
    else $error("Falha no handshake detectada em 'dut'");
endmodule : data_handshake_mod

Nesse fragmento, bind é utilizado para “injuntar” (data_handshake_mod) ao móduloOrganização de Projeto: Divisão em MódulosOrganização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. dut sem modificar diretamente o código fonteMOSFET: Tipos, Condução e ChaveamentoMOSFET: Tipos, Condução e ChaveamentoDescubra como MOSFETs operam na condução e chaveamento, aprendendo sobre seleção, tipos e aplicações com eficiência e robustez. do DUT.

Boas Práticas e Dicas Finais🔗

1. Mantenha as PropriedadesPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. Simples: Se possível, quebre propriedadesPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. complexas em partes menores para facilitar o debug.

2. Comente as AssertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware.: Descreva a intenção de cada assertionPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. para futuras manutenções.

3. Use Ferramentas de SimulaçãoFerramentas de Simulação: Simulação prática: construção e teste de circuitos combinacionaisFerramentas de Simulação: Simulação prática: construção e teste de circuitos combinacionaisAprenda a simular circuitos combinacionais com ferramentas como Logisim, Proteus e Multisim. Teste, valide e otimize seus projetos digitais. Confira!: Configure seus scripts para exibir mensagens de assertionPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. claramente no log de simulaçãoSimulação e Depuração: Ferramentas e Dicas PráticasSimulação e Depuração: Ferramentas e Dicas PráticasAprenda técnicas de simulação e depuração em SystemVerilog, utilizando ferramentas, waveforms, asserts e logs para garantir designs confiáveis..

4. Reutilização: PropriedadesPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. bem escritas podem ser facilmente reaplicadas a designs semelhantes ou evoluir para bibliotecas de verificação.

Conclusão🔗

Assertion-based Verification é uma técnica essencial para verificação 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., pois ajuda a detectar rapidamente violações de propriedades e facilita a depuração. Ao combinar immediate assertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. para checagens pontuais com concurrent assertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. para validar sequências de eventos, você pode criar um ambiente de testeAutomatização de Testes e Geração de RelatóriosAutomatização de Testes e Geração de RelatóriosAprenda a automatizar testes e gerar relatórios em SystemVerilog de forma eficiente, reduzindo erros e otimizando o fluxo de verificação dos projetos. robusto, capaz de capturar erros logo quando eles ocorrem. Essa abordagem, além de fortalecer a documentação do design, reduz o tempo no ciclo de verificação e aumenta a confiabilidade do seu projeto.

Com as assertionsPropriedades e Afirmações: Definindo Expectativas de SinaisPropriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware., é possível extrair o máximo de informações a cada simulaçãoSimulação e Depuração: Ferramentas e Dicas PráticasSimulação e Depuração: Ferramentas e Dicas PráticasAprenda técnicas de simulação e depuração em SystemVerilog, utilizando ferramentas, waveforms, asserts e logs para garantir designs confiáveis. e garantir que o design evolua de forma consistente e previsível. Lembre-se sempre de manter o foco nos comportamentos críticos e nas interações que efetivamente impactam a funcionalidade do projeto.

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

Referências🔗

  • Accellera: Organização responsável pelo desenvolvimento dos padrões SystemVerilog, importante para entender o contexto normativo da ABV: www.accellera.org
  • ASIC World: Oferece tutoriais e exemplos sobre SystemVerilog, servindo como boa referência para aprendizado prático: www.asic-world.com/systemverilog/
  • ChipVerify: Um tutorial abrangente sobre SystemVerilog que pode complementar o entendimento das features de ABV: www.chipverify.com/systemverilog/systemverilog-tutorial
  • IEEE Standard: Fonte para os padrões e especificações do SystemVerilog, incluindo diretrizes para implementações de assertions: www.ieee.org
  • SystemVerilog.io: Repositório de conteúdos e recursos sobre SystemVerilog, útil para aprofundar o conhecimento no assunto: www.systemverilog.io

Compartilhar artigo

Artigos Relacionados