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 de Portes en Verilog : Timing Précis pour Conceptions Numériques Fiables

Les éléments numériques sont des entités binaires et ne peuvent contenir que l'une des deux valeurs - 0 et 1. Cependant, la transition de 0 à 1 et de 1 à 0 a un délai de transition et chaque élément de porte a aussi un délai pour propager la valeur de son entrée vers sa sortie.

Par exemple, une porte ET à deux entrées doit commuter la sortie à 1 si les deux entrées deviennent 1 et revenir à 0 quand l'une de ses entrées devient 0. Ces délais de porte et de broche à broche peuvent être spécifiés en Verilog lors de l'instanciation des primitives logiques.

Délais de Montée, Descente et Coupure

Le temps pris pour que la sortie d'une porte change d'une certaine valeur à 1 est appelé un délai de montée (rise). Le temps pris pour que la sortie d'une porte change d'une certaine valeur à 0 est appelé un délai de descente (fall). Le temps pris pour que la sortie d'une porte change d'une certaine valeur à haute impédance est appelé délai de coupure (turn-off).

Ces délais sont en fait applicables à tout signal car ils peuvent tous monter ou descendre à tout moment dans les circuits réels et ne sont pas restreints aux seules sorties de portes. Il y a trois façons de représenter les délais de portes et le format à deux délais peut être appliqué à la plupart des primitives dont les sorties ne font pas transition vers la haute impédance. Comme un format à trois délais ne peut pas être appliqué à une porte ET car la sortie ne passera pas à Z pour aucune combinaison d'entrées.

// Délai unique spécifié - utilisé pour les trois types de délais de transition
or #(<délai>) o1 (out, a, b);
// Deux délais spécifiés - utilisés pour les transitions Montée et Descente
or #(<montée>, <descente>) o1 (out, a, b);
// Trois délais spécifiés - utilisés pour les transitions Montée, Descente et Coupure
or #(<montée>, <descente>, <coupure>) o1 (out, a, b);

Si un seul délai est spécifié, les trois types de délais utiliseront la même valeur donnée. S'il y a deux délais spécifiés, le premier représente la montée et le second la descente. S'il y a trois délais spécifiés, ils représentent respectivement les délais de montée, descente et coupure.

Format à Un Délai

module des (
  input a, b,
  output out1, out2
);
  // Porte AND a 2 unités de temps de délai de porte
  and #(2) o1 (out1, a, b);
  // Porte BUFIF0 a 3 unités de temps de délai de porte
  bufif0 #(3) b1 (out2, a, b);
endmodule
module tb;
  reg a, b;
  wire out1, out2;
  des d0 (.out1(out1), .out2(out2), .a(a), .b(b));
  initial begin
    {a, b} <= 0;
    $monitor ("T=%0t a=%0b b=%0b and=%0b bufif0=%0b", $time, a, b, out1, out2);
    #10 a <= 1;
    #10 b <= 1;
    #10 a <= 0;
    #10 b <= 0;
  end
endmodule

On voit que la sortie des portes ET change 2 unités de temps après qu'une de ses entrées change. Par exemple, b devient 1 alors que a est déjà à 1 à T=20. Mais la sortie devient 1 seulement à T=22. De même, a revient à zéro à T=30 et la sortie obtient la nouvelle valeur à T=32.

Le délai de porte est spécifié comme 3 unités de temps pour BUFIF0 et donc quand b change de 0 à 1 alors que a est déjà à 1, la sortie prend 3 unités de temps pour être mise à jour à Z et le fait finalement à T=23.

Journal de Simulation

ncsim> run
T=0 a=0 b=0 and=x bufif0=x
T=2 a=0 b=0 and=0 bufif0=x
T=3 a=0 b=0 and=0 bufif0=0
T=10 a=1 b=0 and=0 bufif0=0
T=13 a=1 b=0 and=0 bufif0=1
T=20 a=1 b=1 and=0 bufif0=1
T=22 a=1 b=1 and=1 bufif0=1
T=23 a=1 b=1 and=1 bufif0=z
T=30 a=0 b=1 and=1 bufif0=z
T=32 a=0 b=1 and=0 bufif0=z
T=40 a=0 b=0 and=0 bufif0=z
T=43 a=0 b=0 and=0 bufif0=0
ncsim: *W,RNQUIE: Simulation is complete.

Format à Deux Délais

Appliquons le même banc de test montré ci-dessus à un modèle Verilog différent montré ci-dessous où les délais de montée et descente sont explicitement mentionnés.

module des (
  input a, b,
  output out1, out2
);
  and #(2, 3) o1 (out1, a, b);
  bufif0 #(4, 5) b1 (out2, a, b);
endmodule

Journal de Simulation

ncsim> run
T=0 a=0 b=0 and=x bufif0=x
T=3 a=0 b=0 and=0 bufif0=x
T=5 a=0 b=0 and=0 bufif0=0
T=10 a=1 b=0 and=0 bufif0=0
T=14 a=1 b=0 and=0 bufif0=1
T=20 a=1 b=1 and=0 bufif0=1
T=22 a=1 b=1 and=1 bufif0=1
T=24 a=1 b=1 and=1 bufif0=z
T=30 a=0 b=1 and=1 bufif0=z
T=33 a=0 b=1 and=0 bufif0=z
T=40 a=0 b=0 and=0 bufif0=z
T=45 a=0 b=0 and=0 bufif0=0
ncsim: *W,RNQUIE: Simulation is complete.

Format à Trois Délais

module des (
  input a, b,
  output out1, out2
);
  and #(2, 3) o1 (out1, a, b);
  bufif0 #(5, 6, 7) b1 (out2, a, b);
endmodule

Journal de Simulation

ncsim> run
T=0 a=0 b=0 and=x bufif0=x
T=3 a=0 b=0 and=0 bufif0=x
T=6 a=0 b=0 and=0 bufif0=0
T=10 a=1 b=0 and=0 bufif0=0
T=15 a=1 b=0 and=0 bufif0=1
T=20 a=1 b=1 and=0 bufif0=1
T=22 a=1 b=1 and=1 bufif0=1
T=27 a=1 b=1 and=1 bufif0=z
T=30 a=0 b=1 and=1 bufif0=z
T=33 a=0 b=1 and=0 bufif0=z
T=40 a=0 b=0 and=0 bufif0=z
T=46 a=0 b=0 and=0 bufif0=0
ncsim: *W,RNQUIE: Simulation is complete.

Délais Min/Typ/Max

Les délais ne sont pas les mêmes dans différentes parties de la puce fabriquée ni pour différentes températures et autres variations. Verilog fournit donc un niveau de contrôle supplémentaire pour chacun des types de délais mentionnés ci-dessus. Chaque porte numérique et cellule de transistor a un délai minimum, typique et maximum spécifié basé sur le nœud de processus et est généralement fourni par les bibliothèques de la fonderie de fabrication.

Pour chaque type de délai - montée, descente et coupure - trois valeurs min, typ et max peuvent être spécifiées et représentent les délais minimum, typique et maximum.

module des (
  input a, b,
  output out1, out2
);
  and #(2:3:4, 3:4:5) o1 (out1, a, b);
  bufif0 #(5:6:7, 6:7:8, 7:8:9) b1 (out2, a, b);
endmodule

Journal de Simulation

ncsim> run
T=0 a=0 b=0 and=x bufif0=x
T=4 a=0 b=0 and=0 bufif0=x
T=7 a=0 b=0 and=0 bufif0=0
T=10 a=1 b=0 and=0 bufif0=0
T=16 a=1 b=0 and=0 bufif0=1
T=20 a=1 b=1 and=0 bufif0=1
T=23 a=1 b=1 and=1 bufif0=1
T=28 a=1 b=1 and=1 bufif0=z
T=30 a=0 b=1 and=1 bufif0=z
T=34 a=0 b=1 and=0 bufif0=z
T=40 a=0 b=0 and=0 bufif0=z
T=47 a=0 b=0 and=0 bufif0=0
ncsim: *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. Comprendre le Contrôle de Délai Verilog : Techniques de Timing et Bonnes Pratiques
  6. Comprendre les Délais Inter- et Intra-Affectation en Verilog
  7. Modélisation au Niveau des Portes : Relier Schémas Matériels au Code Verilog
  8. Conception Pratique Verilog Niveau Portes : Portes ET, OU, NON & Multiplexeur 2x1
  9. Générateur d'Horloge Verilog : Guide de Conception et d'Implémentation