Timing e Sensitivity em SystemVerilog: Guia de Boas Práticas
Guia Completo: Recursos Sintetizáveis do SystemVerilog
Neste tutorial, abordaremos quais recursos do 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. 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 à capacidade
Escolha 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 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. (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 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. é 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-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.).
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 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. 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í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. 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ção
Simulaçã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 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., 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çã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 Código de Síntese
Mantê-los em arquivos ou módulos
Organizaçã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_comb
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.
É mais explícito e confiável para as ferramentas de 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., evitando inferências indevidas.
3. Evitar Instruções Iniciais
Em ambiente de 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., initial só é válido para inicialização de valores em FPGAs
Processos 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 enum
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.
Torna o código mais legível, elimina define de estados e pode ajudar em debug
Simulaçã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í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.
Após cada etapa de 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., 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 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. 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 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. 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_comb
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.) 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
há 11 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 11 meses atrás
há 10 meses atrás
há 11 meses atrás
há 10 meses atrás
há 11 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 11 meses atrás
há 11 meses atrás
há 10 meses atrás