Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

Entendendo Semântica de Escalonamento em Verilog: Timing, Eventos e Ordem de Execução

Design e testbench Verilog típicos têm muitas linhas de código com blocos always ou initial, atribuições contínuas e outras instruções procedurais que ficam ativas em diferentes tempos na simulação.

Toda mudança de valor de sinal no modelo Verilog é considerada um evento de atualização (update event). Processos como always e blocos assign sensíveis a estes eventos são avaliados em ordem arbitrária = evento de avaliação (evaluation event). Como eventos acontecem em tempos diferentes, são gerenciados e ordenados corretamente agendando-os em filas de eventos (event queues) organizadas por tempo de simulação.

module tb;
  reg a, b, c;
  wire d;
  
  // 'always' é processo avaliado quando 'a' ou 'b' atualizado
  // Mudança em 'a' ou 'b' = 'update event'
  // 'always' disparado por mudança = 'evaluation event'
  always @ (a or b) begin
    c = a & b;
  end
  
  // 'assign' é processo avaliado quando 'a', 'b' ou 'c' atualizados
  assign d = a | b ^ c;
endmodule

Fila de Eventos (Event Queue)

Um passo de simulação pode ser segmentado em quatro regiões. Fila ativa = conjunto de processos para executar no tempo atual, podendo agendar mais processos na ativa ou outras filas. Eventos podem ser adicionados a qualquer região, mas sempre removidos da ativa.

Quando todos eventos na fila ativa do passo de tempo atual executados, simulador avança tempo para próximo passo e executa sua fila ativa.

module tb;
  reg x, y, z;
  
  initial begin
    #1 x = 1; y = 1;
    #1 z = 0;
  end
endmodule

Simulação inicia no tempo 0, primeira instrução agendada para tempo 1 (atribui x=1, y=1). Fila ativa para tempo 1. Simulador agenda próxima instrução após 1 unidade (tempo 2) onde z=0.

O que torna simulação não-determinística?

Podem haver condições de corrida (race conditions) dando saídas diferentes para mesmo design/testbench. Uma razão: eventos ativos podem ser removidos da fila e processados em qualquer ordem.

Verilog

  1. Domine o Verilog: Tutorial Completo para Projeto de Circuitos Digitais
  2. Dominando Concatenação Verilog: Guia Prático
  3. Entendendo Atribuições em Verilog: Tipos, Sintaxe e Boas Práticas
  4. Verilog Blocking vs Non-Blocking: Diferenças Essenciais Explicadas
  5. Dominando Funções em Verilog para Design RTL Eficiente
  6. Entendendo Tasks em Verilog: Funções vs Tasks, Sintaxe e Uso
  7. Gerador de Clock Verilog: Guia de Design e Implementação
  8. Dominando Funções Matemáticas do Verilog para Design de Hardware Eficiente
  9. Dominando $timeformat do Verilog: Precisão e Controle de Exibição
  10. Entendendo e Imprimindo Timescales do Verilog em Qualquer Escopo