Guia Completo: Recursos Sintetizáveis do SystemVerilog

Neste tutorial, abordaremos quais 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. são efetivamente sintetizáveis e as principais 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. que devem ser observadas na hora de implementar projetos em FPGA ou ASIC. Diferente do uso de 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 verificação, onde a linguagem é explorada em toda a sua extensão, a sínteseDicas de Desempenho: Simulação e SínteseDicas de Desempenho: Simulação e SínteseAprenda estratégias e recomendações para otimizar simulação e síntese em projetos SystemVerilog, melhorando verificação e resultados finais. impõe limitaçõ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. que visam garantir a conversão correta do código em circuitos digitais físicos. Vamos compreender os pontos mais importantes desse subconjunto da linguagem.

Visão Geral do Conceito de “Subconjunto Sintetizável”🔗

Quando falamos que algo é “sintetizável”, estamos nos referindo à capacidadeEscolha e Dimensionamento de Baterias para Projetos PortáteisEscolha e Dimensionamento de Baterias para Projetos PortáteisDescubra como escolher e dimensionar baterias para projetos portáteis com segurança, autonomia e eficiência, através de passos práticos e dicas essenciais. de uma ferramenta de EDA (Electronic Design Automation) de traduzir o código 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. em lógicas combinacionais e sequenciais. Ou seja, o objetivo é gerar uma netlist que descreva os caminhos físicos (portas, flip-flopsFlip-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., LUTs, etc.) dentro de um chip FPGA ou de um fluxo ASIC.

Algumas construções de 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. (principalmente as utilizadas em verificação e orientadas a objetosClasses e Objetos: Criando Estruturas ReutilizáveisClasses e Objetos: Criando Estruturas ReutilizáveisDescubra neste tutorial como usar classes e objetos em SystemVerilog para desenvolver testbenches modulares e eficientes, otimizando a manutenção do código.) não podem ser convertidas em hardwareBoas Práticas de Programação Embarcada e Otimização de CódigoBoas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos.. Portanto, para projetos de lógica de produção, precisamos nos restringir a um subconjunto da linguagem que os sintetizadores reconhecem.

Construções Básicas: Always_ff, Always_comb e Assign🔗

Um dos pontos modernos e úteis 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. é a especialização do bloco always em tipos diferentes, cada um com uma finalidade específica:

1. always_ffTiming 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.

2. always_combTiming 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.

3. assign

Os sintetizadores esperam esse modelo de codificação para diferenciar corretamente entre o que deve ser um “fio” combinacional ou um “registro” (flip-flopFlip-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.).

Tipos de Dados: O que Pode e o que Não Pode🔗

Em síntese, precisamos manter os tipos de dados mais simples e lineares. Embora 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. ofereça recursos avançados, como arrays dinâmicosVetores e Arrays em SystemVerilog: Tamanhos Fixos, Dinâmicos e AssociativosVetores e Arrays em SystemVerilog: Tamanhos Fixos, Dinâmicos e AssociativosAprenda a utilizar arrays fixos, dinâmicos e associativos no SystemVerilog, explorando definições, métodos e boas práticas para otimizar seus projetos. e classesClasses e Objetos: Criando Estruturas ReutilizáveisClasses e Objetos: Criando Estruturas ReutilizáveisDescubra neste tutorial como usar classes e objetos em SystemVerilog para desenvolver testbenches modulares e eficientes, otimizando a manutenção do código., essas construções não são suportadas em hardwareBoas Práticas de Programação Embarcada e Otimização de CódigoBoas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos.. Para projetos sintetizáveis:

Restrições de Comportamento e Fluxo🔗

A sínteseDicas de Desempenho: Simulação e SínteseDicas de Desempenho: Simulação e SínteseAprenda estratégias e recomendações para otimizar simulação e síntese em projetos SystemVerilog, melhorando verificação e resultados finais. não compreende comportamentos de alto nível que não possam ser diretamente mapeados em lógica. Assim, devemos evitar:

Tabela Resumida de Construções

ConstruçãoSintetizável?Observações
always_ff / always_combSimDiferenciam maximizando clareza para síntese
assign (contínuo)SimGera combinacional direta
loops “for”Sim (com cuidado)Expansão deve ser estática e finita
loops “while” ou “do…while”Em geral, não suportadoPode ser interpretado como loop infinito pela síntese
classes / OOPNãoEstrutura para verificação, não vira hardware
arrays dinâmicos e associativosNãoTamanho indefinido, não há suporte em hardware
tasks “time-consuming”NãoTarefas com wait, forever, etc. não são aceitas
funções sem espera (combin.)SimDesde que não usem temporização ou recursos restritos

Recomendações de Codificação🔗

Para garantir a portabilidade e a facilidade de manutenção do seu design, algumas boas práticas se destacam:

1. Separar Código 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. e Código de Síntese

Mantê-los em arquivos ou módulosOrganizaçã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. distintos reduz confusões e conflitos de construtos não sintetizáveis.

2. Sempre Usar always_ff e always_combTiming 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.

É mais explícito e confiável para as ferramentas de sínteseDicas de Desempenho: Simulação e SínteseDicas de Desempenho: Simulação e SínteseAprenda estratégias e recomendações para otimizar simulação e síntese em projetos SystemVerilog, melhorando verificação e resultados finais., evitando inferências indevidas.

3. Evitar Instruções Iniciais

Em ambiente de sínteseDicas de Desempenho: Simulação e SínteseDicas de Desempenho: Simulação e SínteseAprenda estratégias e recomendações para otimizar simulação e síntese em projetos SystemVerilog, melhorando verificação e resultados finais., initialProcessos Always e Initial: Diferenças e AplicaçõesProcessos Always e Initial: Diferenças e AplicaçõesAprenda as diferenças e aplicações dos blocos always e initial em SystemVerilog, otimizando testes e projetos com explicações claras e práticas. só é válido para inicialização de valores em FPGAsIntrodução a Dispositivos Lógicos Programáveis: CPLD e FPGAIntrodução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes. (variando de acordo com a ferramenta). Em ASIC, normalmente não há suporte para isso.

4. Descrições de Máquinas de Estado com enumEnums e Typedef: Simplificando a Leitura de CódigoEnums e Typedef: Simplificando a Leitura de CódigoAprenda a organizar e otimizar seu código SystemVerilog com enums e typedef. Descubra boas práticas e exemplos para melhorar a legibilidade e a manutenção.

Torna o código mais legível, elimina define de estados e pode ajudar em debugSimulaçã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. durante a sínteseDicas de Desempenho: Simulação e SínteseDicas de Desempenho: Simulação e SínteseAprenda estratégias e recomendações para otimizar simulação e síntese em projetos SystemVerilog, melhorando verificação e resultados finais..

5. Verificar Relatórios de SínteseDicas de Desempenho: Simulação e SínteseDicas de Desempenho: Simulação e SínteseAprenda estratégias e recomendações para otimizar simulação e síntese em projetos SystemVerilog, melhorando verificação e resultados finais.

Após cada etapa de sínteseDicas de Desempenho: Simulação e SínteseDicas de Desempenho: Simulação e SínteseAprenda estratégias e recomendações para otimizar simulação e síntese em projetos SystemVerilog, melhorando verificação e resultados finais., analisar os warnings e as inferências feitas pela ferramenta. Muitos problemas de codificação podem ser identificados e corrigidos cedo.

Exemplo Prático de Código Sintetizável🔗

A seguir, um pequeno exemplo de lógica sequencial (contador) 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. sintetizável:

module contador_sintetizavel (
    input  logic        clk,
    input  logic        rst_n,
    input  logic        enable,
    output logic [7:0]  count
);
always_ff @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        count <= 8'h00;
    end else if (enable) begin
        count <= count + 1;
    end
end
endmodule

Nesse código:

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. fornece uma rica gama de recursos para 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. e modelagem de sistemas digitais. Entretanto, quando o objetivo é a sínteseDicas de Desempenho: Simulação e SínteseDicas de Desempenho: Simulação e SínteseAprenda estratégias e recomendações para otimizar simulação e síntese em projetos SystemVerilog, melhorando verificação e resultados finais., devemos ser cuidadosos na escolha das construções. Restringir-se ao subconjunto sintetizável garante que as ferramentas de EDA consigam mapear o código em blocos físicos de hardwareBoas Práticas de Programação Embarcada e Otimização de CódigoBoas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos., sem surpresas ou comportamentos indefinidos.

Em resumo, é essencial respeitar questões como tipos de dados estáticos, atribuições específicas (always_ff, always_combTiming 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.) e restrição de recursos não mapeáveis em hardwareBoas Práticas de Programação Embarcada e Otimização de CódigoBoas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos.. Com isso, asseguramos um fluxo de design mais confiável, portável e eficiente na implementação em FPGAsIntrodução a Dispositivos Lógicos Programáveis: CPLD e FPGAIntrodução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes. e ASICs, aproveitando o melhor que 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. pode oferecer.

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 apresenta explicações sobre SystemVerilog voltadas para design de hardware, discutindo construtores e limitações pertinentes à síntese em ASIC e FPGA: www.asic-world.com/systemverilog/
  • ChipVerify oferece tutoriais abrangentes sobre SystemVerilog, incluindo conteúdos relevantes para o entendimento do subconjunto sintetizável e suas restrições: www.chipverify.com/systemverilog/systemverilog-tutorial
  • O IEEE Standard é a base normativa do SystemVerilog e serve como referência para as especificações que determinam quais construções da linguagem podem ser utilizadas na síntese: www.ieee.org
  • O livro 'SystemVerilog for Design' foca no uso do SystemVerilog para modelagem de hardware, com ênfase em práticas de codificação sintetizável e uso de construtivos como always_ff e always_comb: www.amazon.com.br/SystemVerilog-Design-Using-Hardware-Modeling/dp/0387364943
  • SystemVerilog.io é um recurso dedicado à linguagem, que abrange tanto aspectos de síntese quanto de verificação, auxiliando na compreensão de práticas de codificação sintetizável: www.systemverilog.io

Compartilhar artigo

Artigos Relacionados