Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Comprendre les Délais Inter- et Intra-Affectation en Verilog

Les instructions de délai Verilog peuvent avoir des délais spécifiés soit du côté gauche, soit du côté droit de l'opérateur d'affectation.

Délais Inter-Affectation

// Le délai est spécifié du côté gauche
#<délai> <LHS> = <RHS>

Une instruction de délai inter-affectation a la valeur de délai du côté LHS de l'opérateur d'affectation. Cela indique que l'instruction elle-même est exécutée après l'expiration du délai, et est la forme de contrôle de délai la plus couramment utilisée.

module tb;
  reg a, b, c, q;
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
    // Initialiser tous les signaux à 0 au temps 0
    a <= 0; b <= 0; c <= 0; q <= 0;
    // Délai inter-affectation : Attendre #5 unités de temps
    // puis affecter a et c à 1. Notez que 'a' et 'c'
    // sont mis à jour à la fin du pas de temps courant
    #5 a <= 1; c <= 1;
    // Délai inter-affectation : Attendre #5 unités de temps
    // puis affecter 'q' avec la valeur que RHS obtient évaluée
    #5 q <= a & b | c;
    #20;
  end
endmodule

Notez que q devient 1 à 10 unités de temps car l'instruction est évaluée à 10 unités de temps et le RHS qui est une combinaison de a, b et c s'évalue à 1.

Journal de Simulation

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

Délais Intra-Affectation

// Le délai est spécifié du côté droit
<LHS> = #<délai> <RHS>

Un délai intra-affectation est celui où il y a un délai du côté RHS de l'opérateur d'affectation. Cela indique que l'instruction est évaluée et les valeurs de tous les signaux du RHS sont capturées d'abord. Ensuite, elle est affectée au signal résultant seulement après l'expiration du délai.

module tb;
  reg a, b, c, q;
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
    // Initialiser tous les signaux à 0 au temps 0
    a <= 0; b <= 0; c <= 0; q <= 0;
    // Délai inter-affectation : Attendre #5 unités de temps
    // puis affecter a et c à 1. Notez que 'a' et 'c'
    // sont mis à jour à la fin du pas de temps courant
    #5 a <= 1; c <= 1;
    // Délai intra-affectation : D'abord exécuter l'instruction
    // puis attendre 5 unités de temps et puis affecter la valeur
    // évaluée à q
    q <= #5 a & b | c;
    #20;
  end
endmodule

Notez que l'affectation à q est manquante dans le log !

Journal de Simulation

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
xmsim: *W,RNQUIE: Simulation is complete.

C'est parce qu'à 5 unités de temps, a et c sont affectés en utilisant des instructions non-bloquantes. Et le comportement des instructions non-bloquantes est tel que le RHS est évalué, mais est affecté à la variable seulement à la fin de ce pas de temps.

Donc la valeur de a et c est évaluée à 1 mais pas encore affectée quand la prochaine instruction non-bloquante qui est celle de q est exécutée. Donc quand le RHS de q est évalué, a et c ont encore l'ancienne valeur de 0 et donc $monitor ne détecte pas de changement pour afficher l'instruction.

Pour observer le changement, changeons les instructions d'affectation à a et c de non-bloquantes à bloquantes.

...
// Non-bloquant changé en bloquant et le reste du
// code reste le même
#5 a = 1; c = 1;
q <= #5 a & b | c;
...

Journal de Simulation

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

Verilog

  1. Maîtriser Verilog : Tutoriel complet pour la conception de circuits numériques
  2. Maîtriser la concaténation Verilog : Guide pratique
  3. Comprendre les affectations Verilog : Types, Syntaxe et Bonnes Pratiques
  4. Verilog Blocking vs Non-Blocking : Différences Clés Expliquées
  5. Maîtriser les Fonctions Verilog pour une Conception RTL Efficace
  6. Comprendre les Tasks Verilog : Fonctions vs Tasks, Syntaxe et Utilisation
  7. Comprendre le Contrôle de Délai Verilog : Techniques de Timing et Bonnes Pratiques
  8. Comprendre les Délais de Portes en Verilog : Timing Précis pour Conceptions Numériques Fiables
  9. Générateur d'Horloge Verilog : Guide de Conception et d'Implémentation