Timing e Sensitivity em SystemVerilog: Guia de Boas Práticas

Nesta narrativa, exploraremos como o timing e a sensitivity 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. permitem disparar ações de forma consciente e sincronizada sempre que um 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 condição de interesse ocorre. Esse conceito é fundamental para o controle de processos concorrentes e para garantir que cada parte do design seja executada no momento correto.

Introdução ao Conceito de Sensitivity🔗

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., sensitivity descreve os sinais ou eventosEventos 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. que disparam a execução de um bloco de processo (como always ou always_comb). Isso significa que, assim que um desses sinais sofre alteração (ou uma borda específica é detectada), as instruções dentro do bloco são executadas novamente.

Um exemplo simples de sensitivity list é:

always @(posedge clk, negedge reset_n) begin
    // Código que será executado a cada subida de clk ou descida de reset_n
end

No exemplo acima, o bloco será invocado sempre que o sinal clk tiver uma mudança de borda de subidaFlip-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. ou quando reset_n tiver uma borda de descidaFlip-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..

Blocos always Especializados🔗

Para simplificar e tornar o código mais expressivo, 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. introduz blocos sempre especializados:

Esses blocos especializados são analisados pelo compilador para garantir que estejam sendo usados de forma coerente com o tipo de lógica que se deseja implementar (combinacional, sequencial ou latchFlip-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.).

Exemplo de always_ff

always_ff @(posedge clk or negedge reset_n) begin
    if (!reset_n)
        data_reg <= 0;
    else
        data_reg <= data_in;
end

No trecho acima, usamos always_ffPrimeiros Passos com SystemVerilog: Criando Seu Projeto de ExemploPrimeiros Passos com SystemVerilog: Criando Seu Projeto de ExemploDomine SystemVerilog com nosso tutorial completo: aprenda a estruturar, compilar e simular seu primeiro projeto com módulo contador. para deixar claro que estamos descrevendo 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..

Controle de Tempo (Timing Control)🔗

Além de monitorar sinais, podemos utilizar atrasos e esperas para agendar ou sincronizar eventosEventos 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.. Alguns recursos incluem:

Uso de aguardas (#delay) e eventos (@)

Um exemplo de controle de tempo envolvendo eventosEventos 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 atrasos:

initial begin
    // Aguarda 5 unidades de tempo
    #5;
    // Gera um pulso em start_signal
    start_signal = 1'b1;
    // Aguarda a borda de subida de clock
    @(posedge clk);
    // Redefine start_signal
    start_signal = 1'b0;
end

Nesse exemplo, primeiro esperamos um delay de 5 unidades de tempo, depois ativamos start_signal e, em seguida, esperamos até a próxima borda de subidaFlip-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. de clk para efetuar a próxima ação.

Eventos Customizados e Disparo Manual🔗

Além dos sinais tradicionais de hardware, 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. permite criar eventosEventos 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. customizados usando a palavraIntrodução à Eletrônica Digital: Conceitos básicos: bits, bytes, palavras, sinais de clock e sua importânciaIntrodução à Eletrônica Digital: Conceitos básicos: bits, bytes, palavras, sinais de clock e sua importânciaDomine fundamentos da eletrônica digital: bits, bytes, palavras e clock que impulsionam o desempenho e eficiência de sistemas modernos.-chave eventSincronização e Comunicação Entre ProcessosSincronização e Comunicação Entre ProcessosDomine a sincronização e comunicação em SystemVerilog com exemplos práticos de events, semáforos e mailboxes para evitar conflitos e deadlocks.. Esses eventosEventos 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. podem ser acionados (triggered) ou monitorados em qualquer ponto do código, conferindo maior flexibilidade na sincronizaçãoEventos 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..

event my_event;
// Disparando um evento
initial begin
    #10 ->my_event; // Dispara o evento depois de 10 unidades de tempo
end
// Reagindo a um evento
always @(my_event) begin
    $display("my_event foi acionado!");
end

Esse recurso é útil para coordenar múltiplas partes do design que não necessariamente estão conectadas por sinais de hardware, porém precisam ser sincronizadas por um 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. lógico.

Exemplo de Diagrama de Temporização🔗

Abaixo, apresentamos um diagrama simplificado que ilustra eventosEventos 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. de clock e reset acionando processos distintos. Cada processo pode disparar ações diferentes dependendo do timing e da sensibilidade configurados (este diagrama tem apenas caráter ilustrativo):

%% Exemplo de linha de tempo para clk e reset sequenceDiagram participant CLK as clk participant RST as reset_n Note over CLK,RST: Linha de tempo<br>para sinal de clock e reset CLK->>CLK: Sobe (posedge) RST->>RST: Alto (inicialmente) CLK->>CLK: Sobe (posedge) RST->>RST: Desce (negedge) CLK->>CLK: Sobe (posedge)

Nesse diagrama, cada borda de clk (posedge) e a borda de descidaFlip-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. de reset_n (negedge) podem disparar um bloco sensível a essas transições.

Boas Práticas🔗

1. Mantenha a coerência entre o tipo de sensibilidade e o objetivo de design. Para lógica combinacional, use always_comb, e para lógica sequencial, prefira always_ffPrimeiros Passos com SystemVerilog: Criando Seu Projeto de ExemploPrimeiros Passos com SystemVerilog: Criando Seu Projeto de ExemploDomine SystemVerilog com nosso tutorial completo: aprenda a estruturar, compilar e simular seu primeiro projeto com módulo contador..

2. Evite races e ambiguidades, assegurando que atrasos e waits não criem situações em que duas partes do código dependam de disparos no mesmo instante.

3. Seja explícito no uso de posedge e negedge, pois facilita a leitura e reduz chances de comportamento indevido.

4. Utilize eventosEventos 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. customizados quando precisar de um mecanismo de sincronizaçãoEventos 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 comunicação abstrato, afastado de sinais físicos.

Conclusão🔗

O controle de timing e sensitivity 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. é uma parte essencial para projetos de hardware e verificação, permitindo que ações ocorram exatamente quando necessário. Compreender e dominar esses recursos garante a construção de sistemas mais robustos, sincronizados e confiáveis, seja para lógica combinacional, sequencial ou processos mais complexos que exijam ações em momentos específicos.

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