Verificação de Sinais com Afirmações em SystemVerilog

As afirmações (Assertions) 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. desempenham um papel essencial na verificação de projetos, ajudando a definir claramente condições ou propriedades que os sinais devem satisfazer ao longo do tempo. Ao incorporar afirmações diretamente no código, você aumenta a confiabilidade do sistema e facilita a detecção precoce de problemas de lógica ou temporizaçãoTiming e Sensitivity: Disparando Ações em Eventos EspecíficosTiming e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas..

Este tutorial apresenta uma visão geral de como as propriedades e afirmações funcionam 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. e fornece exemplos para ilustrar como e quando você pode aplicá-las no seu fluxo 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..

Motivação para o Uso de Afirmações🔗

Imagine que você queira garantir que um sinal de habilitação (enable) sempre retorne ao valor lógico 0 após ter permanecido em 1 por um determinado número de ciclos. Sem afirmações, seria necessário instrumentar manualmente os testes ou verificar longas ondas 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. para garantir que esse comportamento ocorra de acordo com o esperado.

Com afirmações, basta descrever a expectativa (propriedade) e monitorar automaticamente se a condição foi atendida. Dessa forma, qualquer violação da propriedade interrompe a 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 gera um alerta, facilitando a depuração.

Conceitos Básicos de Propriedades🔗

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 propriedades (properties) descrevem formalmente uma condição que deve ser verdadeira ao longo do tempo. Elas podem ser combinadas a outros elementos 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. para criar afirmações (assertions), assunções (assumptions) ou coberturas (coverage).

A forma mais simples de declarar uma propriedade é:

property nome_da_propriedade;
    // Expressão temporal ou sequência
endproperty

Depois, essa propriedade pode ser utilizada em um bloco de afirmação:

assert property (nome_da_propriedade)
    else $error("A propriedade foi violada!");

A afirmação acima avisa, por meio do comando $error, se a propriedade não for atendida durante a 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..

Estrutura Geral de uma Afirmação🔗

Uma afirmação (assertion) é estruturada em três partes principais:

1. Sequência (sequence): define uma ou mais condições que ocorrem na linha do tempo (por exemplo, sinal sobe, permanece alto, depois desce).

2. Propriedade (property): declara como as sequências se relacionam e quando devem ser verificadas.

3. Afirmação (assert): instancia a propriedade e define o que ocorre em caso de violação ou sucesso.

Em termos práticos, você pode escrever:

sequence seq_subida_e_descida;
    req ##1 ack; // req em um ciclo, ack no próximo
endsequence
property prop_seq_subida_e_descida;
    @(posedge clk) disable iff (!reset_n) seq_subida_e_descida;
endproperty
assert property (prop_seq_subida_e_descida)
    else $display("Violação da propriedade: req não correspondeu ao ack.");

No código acima:

Principais Operadores de Propriedade🔗

A linguagem de afirmações 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. oferece diversos operadores para expressões temporais e sequências. A tabela a seguir reúne alguns dos principais:

OperadorExemploDescrição
##a ##[1:3] bDefine atraso entre sinais “a” e “b”. Pode ser exato ou um intervalo de ciclos.
[n]a[3]O item deve repetir exatamente 3 vezes.
[0:$]a[0:$]O item pode se repetir de 0 até infinito.
->a-> bSe “a” ocorre, “b” deve ocorrer imediatamente no ciclo seguinte.
##0a ##0 b“b” deve ocorrer no mesmo ciclo que “a”.
or, anda or b, a and bCombinação lógica de sequências/propriedades.

Esses operadores permitem que você construa sequências complexas que descrevam exatamente o comportamento esperado de um sinal ou conjunto de sinais durante a 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..

Exemplos Práticos de Propriedades🔗

Verificando Estabilidade de Sinal

Suponha que você precise garantir que o sinal data_bus mantenha um valor estável enquanto o valid estiver ativo. Isso pode ser expresso como:

property stable_data_while_valid;
    @(posedge clk) disable iff (!reset_n)
        valid |-> (##[1:$] data_bus == $past(data_bus));
endproperty
assert property (stable_data_while_valid)
    else $fatal("Data bus mudou de valor enquanto valid estava ativo.");

Explicação:

  • valid |-> (##[1:$] data_bus == $past(data_bus)) significa: assim que valid ficar alto, nos ciclos subsequentes (##[1:$]), data_bus deve permanecer igual ao valor anterior.

Garantindo um Pulso de Ativação Único

Para assegurar que um pulso de habilitação (enable) não ocorra duas vezes consecutivas sem ter sido resetado, você pode escrever:

sequence single_pulse;
    enable ##1 !enable;
endsequence
property no_double_enable;
    @(posedge clk) disable iff (!reset_n) !enable |-> single_pulse;
endproperty
assert property (no_double_enable)
    else $error("Detecção de pulso duplo em 'enable'.");

Explicação:

  • Quando o sinal não está ativado (!enable), é esperado que apareça um único pulso (enable), seguido imediatamente de !enable novamente no ciclo seguinte.

Boas Práticas e Considerações🔗

Conclusão🔗

Ao definir expectativas de sinais por meio de propriedades e afirmações 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., você obtém verificações mais diretas, automatizadas e confiáveis. Esse recurso não apenas ajuda a detectar falhas mais cedo na fase de desenvolvimento, mas também serve como uma forma de documentação viva do comportamento pretendido para cada bloco de design.

Estude as diversas formas de combinar operadores temporais e lógicos, implemente suas próprias sequências propriedades e aproveite a eficiência no monitoramento de comportamentos em cada etapa 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.. Com a prática, suas habilidades em criação de afirmações se tornarão um grande diferencial na hora de validar projetos e entregar soluções de qualidade.

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

Referências🔗

  • ASIC World - Site conhecido por oferecer explicações e exemplos práticos dos conceitos de SystemVerilog, úteis para entender sequências, propriedades e a lógica de assertions: www.asic-world.com/systemverilog/
  • ChipVerify - Um recurso detalhado sobre tutoriais de SystemVerilog, com ênfase na verificação e no uso de afirmações e propriedades: www.chipverify.com/systemverilog/systemverilog-tutorial
  • SystemVerilog.io - Plataforma com diversos materiais e exemplos para compreensão e aplicação dos conceitos de SystemVerilog, incluindo propriedades e assertions: www.systemverilog.io
  • Verification Academy - Recurso especializado em verificação digital que cobre o uso de afirmações e propriedades para a validação de designs em SystemVerilog: verificationacademy.com

Compartilhar artigo

Artigos Relacionados