Tutorial Prático: Anotações de Tempo e Atrasos em SV

As anotações de tempo e os atrasos são recursos fundamentais no 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 permitir que projetistas controlem quando certas operações devem ocorrer durante a simulação. Por meio dessas abordagens, é possível definir explicitamente pausas, acomodar atrasos de propagação e organizar a execução de blocos de código conforme o tempo passa no ambiente 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!. Neste tutorial, vamos explorar os principais mecanismos do SystemVerilog que possibilitam esse controle de tempo e entender como aplicá-los de forma efetiva.

Conceitos de Tempo e Escala em SystemVerilog🔗

Todo projeto 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. opera sob uma unidade de tempo e uma precisão de tempo, geralmente definidas em um comando de compilação ou em um cabeçalho com timescale. Por exemplo:

`timescale 1ns/1ps

Esses valores permitem ajustar realismo ou simplificar o projeto, dependendo das necessidades 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..

Formas de Anotação de Atraso🔗

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. oferece diferentes maneiras de anotar atrasos para controlarmos a execução de instruções. As mais utilizadas são:

1. Atraso Direto com “#” (Delay-Based TimingTiming 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. Control)

É aplicada uma pausa explícita antes da execução da próxima instrução.

Exemplo:

// Pausa de 10 unidades de tempo antes de atribuir valor
#10 sinal_out = 1'b1;

2. Controle de EventoEventos e Semáforos: Controle de Fluxo ConcorrenteEventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes. com “@” (Event-Based Timing Control)

A instrução é executada quando ocorre um determinado eventoEventos e Semáforos: Controle de Fluxo ConcorrenteEventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes. em um sinal.

Exemplo:

// Aguarda a mudança de borda de subida (posedge) no sinal clock
@ (posedge clock);
sinal_out = 1'b0;

3. AtrasoTiming 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. em Atribuição (Intra-Assignment Delay)

Atribui-se um atrasoTiming 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. dentro da própria operação de atribuição. Permite que a avaliação do valor e a atribuição ocorram em tempos distintos.

Exemplo:

// Avalia sinal_in imediatamente, mas só atribui após 5 unidades de tempo
sinal_out <= #5 sinal_in;

Tabela Comparativa de Mecanismos de Controle de Tempo🔗

A tabela a seguir resume as principais características de cada forma de controle de tempoTiming 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.:

MecanismoSintaxeMomento de ExecuçãoExemplos de Uso
Atraso Direto#valorAguarda tempo fixo antes da instruçãoAtraso de propagação, simular retardo de hardware
Controle de Evento@(evento)Executa na ocorrência de um eventoReagir à borda de clock ou mudança em sinal de controle
Atraso em Atribuição<= #valor expr;Atribui somente após certo tempoModelos com latência específica em atribuições

Diferenças entre Atraso e Controle de Evento🔗

Em projetos reais, ambos se complementam. Por exemplo, é comum esperar uma borda de clockFlip-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. (@(posedgeTiming 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. clock)) e, em seguida, inserir atrasos artificiais para simular tempos de propagação ou latências internas.

Dicas Práticas de Uso🔗

1. Evite Atrasos Desnecessários: Sempre questione se o atraso é realmente necessário ou se há outra forma de sincronizar eventos. Atrasos em excesso podem tornar 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. menos previsível.

2. Documente seus Atrasos: Um simples #10 pode não ser evidente no futuro. Adicione comentáriosBoas 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. descrevendo o motivo e o que esse atraso representa no cenário de hardware.

3. Mix de Controle de EventoEventos e Semáforos: Controle de Fluxo ConcorrenteEventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes. e Atraso: Em muitos casos, mesclar @ (eventoEventos e Semáforos: Controle de Fluxo ConcorrenteEventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes.) com # atrasoTiming 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. ajuda a modelar sistemas que reagem a um gatilho mas levam algum tempo para produzir a resposta.

Exemplo: Esperar uma borda de clock e depois aguardar 5 unidades de tempo para indicar um retardo de propagação:
systemverilog
@(posedge clock);
#5 sinal_propagado <= sinal_entrada;

4. Timeunits e Timeprecision: Ajuste-os apropriadamente ao seu projeto. Uma resolução muito fina (por exemplo, 1 fs) pode tornar 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. mais lenta, enquanto uma muito grosseira pode mascarar detalhes importantes.

Exemplo Combinando Diferentes Abordagens🔗

A seguir, um pequeno trecho de código exemplificando o uso simultâneo de atraso e eventoEventos e Semáforos: Controle de Fluxo ConcorrenteEventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes.:

module controle_execucao(
    input  logic       clk,
    input  logic       rst_n,
    input  logic       start,
    input  logic [7:0] data_in,
    output logic [7:0] data_out
);
    // Vamos assumir que data_out precisa ser atualizado
    // 3 ciclos de clock após o sinal start, simulando latência
    always_ff @(posedge clk) begin
        if (!rst_n) begin
            data_out <= 8'd0;
        end else begin
            // Espera a ativação de start
            if (start) begin
                // Aguarda 3 ciclos de clock
                repeat (3) @(posedge clk);
                // Atribuindo o valor após um pequeno atraso de propagação
                #2 data_out <= data_in;
            end
        end
    end
endmodule

Neste exemplo:

Conclusão🔗

Controlar a execução com anotações de tempo e atrasos é essencial para representar a realidade física do hardware em um ambiente 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!. Como cada componente possui seu próprio retardo, é vital modelar essa característica para que o comportamento do sistema seja o mais fiel possível.

A prática constante e o entendimento dos diferentes tipos de controle de tempoTiming 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. ajudam a evitar possíveis erros de lógica em projetosIntroduçã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. complexos. A chave é entender quando usar atrasos fixosTipos de Resistores: Fixo, Variável, SMD e MaisTipos de Resistores: Fixo, Variável, SMD e MaisExplore os principais tipos de resistores, desde fixos até SMD, e aprenda como escolher o ideal para otimizar a segurança e desempenho dos seus circuitos., controle de eventoEventos e Semáforos: Controle de Fluxo ConcorrenteEventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes. ou combinações que melhor representem a operação real do circuito. Assim, você estará apto a criar modelos 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. bem mais robustos e previsíveis durante o processo de 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🔗

Compartilhar artigo

Artigos Relacionados