Guia prático: Configuração de Ambiente para SystemVerilog
Guia Completo: Recursos Sintetizáveis do SystemVerilog
Neste tutorial, abordaremos quais recursos do SystemVerilogIntroduçã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ções
Integraçã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 SystemVerilog
Introduçã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íntese
Dicas 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ções
Integraçã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á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 SystemVerilog
Introduçã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-flops
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çã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 objetos
Classes 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 hardware
Boas 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çã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:
- Usado exclusivamente para descrever lógica sequencial, isto é, flip-flops
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. ou registradores
Contadores e Registradores: organização e aplicação em sistemas digitaisDescubra como contadores e registradores são essenciais na organização e manipulação de dados em circuitos digitais, fundamentais para a computação moderna..
- Garante que a síntese
Dicas 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. entenda claramente que dentro desse bloco há lógica de clock, reset, etc.
- Usado para lógica combinacional pura, sem elementos de armazenamento.
- Dessa forma, evitamos erros comuns como inferir flip-flops
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. involuntários.
3. assign
- Permite criar atribuições contínuas que geram lógicas combinacionais diretas entre sinais.
- É essencial para interligar sinais de forma declarativa em hardware
Boas 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..
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)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çã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âmicos
Vetores 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 classes
Classes 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 hardware
Boas 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:
- logic
Tipos de Dados Básicos: Bit, Logic e Reg em DetalhesDescubra as diferenças entre os tipos de dados Bit, Logic e Reg em SystemVerilog neste tutorial prático, com dicas de uso e melhores práticas. [N-1:0] ou bit
Sistemas 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. [N-1:0] são amplamente aceitos.
- arrays estáticos (pondo no cabeçalho o tamanho) são sintetizáveis.
- uniões
Estruturas e Uniões: Organizando Dados ComplexosAprenda como aplicar estruturas e uniões em SystemVerilog. Descubra a diferença entre packed e unpacked com exemplos práticos e dicas para um design otimizado. e structs
Estruturas e Uniões: Organizando Dados ComplexosAprenda como aplicar estruturas e uniões em SystemVerilog. Descubra a diferença entre packed e unpacked com exemplos práticos e dicas para um design otimizado. podem ser sintetizadas, desde que sejam de tamanho fixo e não armazenem dados dinâmicos.
- enums
Enums 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. são sintetizáveis e úteis para máquinas de estado, mas vale verificar as limitações
Integraçã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. de cada ferramenta (mapeamento de codificação pode variar).
- classes
Classes 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., interfaces
Interfaces SystemVerilog: Simplificando Conexões de SinalDescubra como utilizar interfaces em SystemVerilog para agrupar sinais e simplificar a conexão entre módulos, reduzindo erros e aumentando a eficiência. com métodos, strings
Strings em SystemVerilog: Manipulando Texto EficientementeExplore o tutorial detalhado sobre o uso de strings em SystemVerilog. Aprenda declaração, manipulação, operações essenciais e boas práticas para seu projeto. complexas, arrays associativos
Vetores 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. ou dinâmicos, não fazem parte do uso padrão para síntese.
Restrições de Comportamento e Fluxo🔗
A 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:
- Delays explícitos (ex.:
#5
), pois tempo de simulaçãoSimulaçã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. não faz sentido em hardware
Boas 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. real.
- Laços infinitos (
forever
) sem condições de parada. Em hardwareBoas 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., tudo deve ter uma expressão finita.
- Funções de verificação
Introduçã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. ou chamadas de sistema (ex.:
$display
,$monitor
, etc.), que não geram lógica física.Criando 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.
- Construtores orientados a objetos
Classes 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. (como herança
Herança e Polimorfismo: Expandindo FuncionalidadesAprenda a implementar herança e polimorfismo em SystemVerilog com exemplos práticos, dicas de boas práticas e guias para testes orientados a objetos., polimorfismo), pois não são suportados pelas ferramentas de síntese.
Tabela Resumida de Construções
Construção | Sintetizável? | Observações |
---|---|---|
always_ff / always_comb | Sim | Diferenciam maximizando clareza para síntese |
assign (contínuo) | Sim | Gera combinacional direta |
loops “for” | Sim (com cuidado) | Expansão deve ser estática e finita |
loops “while” ou “do…while” | Em geral, não suportado | Pode ser interpretado como loop infinito pela síntese |
classes / OOP | Não | Estrutura para verificação, não vira hardware |
arrays dinâmicos e associativos | Não | Tamanho indefinido, não há suporte em hardware |
tasks “time-consuming” | Não | Tarefas com wait , forever , etc. não são aceitas |
funções sem espera (combin.) | Sim | Desde 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çã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ó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í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í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ínteseAprenda estratégias e recomendações para otimizar simulação e síntese em projetos SystemVerilog, melhorando verificação e resultados finais.,
initial
só é válido para inicialização de valores em FPGAsProcessos 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.
Introduçã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ó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á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íntese
Dicas 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í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í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çã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:
- always_ff
Timing 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. descreve um flip-flop
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. acionado na borda de subida
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. de clk (com reset ativo em nível baixo).
- count é do tipo
logic
, sintetizável por qualquer ferramenta.Tipos de Dados Básicos: Bit, Logic e Reg em DetalhesDescubra as diferenças entre os tipos de dados Bit, Logic e Reg em SystemVerilog neste tutorial prático, com dicas de uso e melhores práticas. [7:0]
- Não utilizamos qualquer construção de delay
Timing 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., nem métodos de verificação
Introduçã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., mantendo o design 100% sintetizável.
Conclusão🔗
O SystemVerilogIntroduçã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ção
Introduçã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íntese
Dicas 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 hardware
Boas 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í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 hardware
Boas 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 FPGAs
Introduçã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 SystemVerilog
Introduçã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