Délai de porte Verilog
Les éléments numériques sont des entités binaires et ne peuvent contenir que l'une ou l'autre des deux valeurs - 0 et 1. Cependant, la transition de 0 à 1 et de 1 à 0 a un retard de transition, tout comme chaque élément de porte pour propager la valeur de l'entrée à sa sortie.
Par exemple, une porte ET à deux entrées doit commuter la sortie sur 1 si les deux entrées deviennent 1 et revenir à 0 lorsque l'une de ses entrées devient 0. Ces retards de porte et de broche à broche peuvent être spécifiés dans Verilog lors de l'instanciation de primitives logiques. /P>
Retards de montée, de descente et d'extinction
Le temps mis par la sortie d'une porte pour passer d'une certaine valeur à 1 est appelé une montée retard. Le temps mis par la sortie d'une porte pour passer d'une certaine valeur à 0 est appelé une chute retard. Le temps nécessaire à la sortie d'une porte pour passer d'une certaine valeur à une haute impédance est appelé désactivation retard.
Ces retards sont en fait applicables à n'importe quel signal car ils peuvent tous monter ou descendre à tout moment dans des circuits réels et ne sont pas limités aux seules sorties des portes. Il existe trois façons de représenter les retards de porte et le format à deux retards peut être appliqué à la plupart des primitives dont les sorties ne passent pas à haute impédance. Comme un format à trois retards ne peut pas être appliqué à une porte ET car la sortie n'ira pas à Z pour n'importe quelle combinaison d'entrée.
// Single delay specified - used for all three types of transition delays
or #(<delay>) o1 (out, a, b);
// Two delays specified - used for Rise and Fall transitions
or #(<rise>, <fall>) o1 (out, a, b);
// Three delays specified - used for Rise, Fall and Turn-off transitions
or #(<rise>, <fall>, <turn_off>) 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 augmentation et le second représente la chute retard. S'il y a trois retards spécifiés, ils représentent augmenter , tomber et désactiver retards respectivement.
Format à un délai
module des ( input a, b,
output out1, out2);
// AND gate has 2 time unit gate delay
and #(2) o1 (out1, a, b);
// BUFIF0 gate has 3 time unit gate delay
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
Vérifiez que la sortie de AND les portes changent de 2 unités de temps après le changement d'une de ses entrées. Par exemple, b devient 1 alors que a vaut déjà 1 à T=20. Mais la sortie ne devient 1 qu'à T=22. De même, a revient à zéro à T=30 et la sortie prend la nouvelle valeur à T=32.
Le délai de porte est spécifié comme 3 unités de temps pour BUFIF0 et donc lorsque b passe de 0 à 1 alors que a est déjà à 1, la sortie prend 3 unités de temps pour être mise à jour vers Z et le fait finalement à T=23.
Journal de simulationncsim> 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 d'essai montré ci-dessus à un modèle Verilog différent montré ci-dessous où rise et tomber les retards 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.
Retards Min/Typ/Max
Les retards ne sont pas les mêmes dans les différentes parties de la puce fabriquée ni pour les différentes températures et autres variations. Ainsi, Verilog fournit également un niveau de contrôle supplémentaire pour chacun des types de retard mentionnés ci-dessus. Chaque porte numérique et cellule de transistor a un délai minimum, typique et maximum spécifié en fonction du nœud de processus et est généralement fourni par les bibliothèques de la fonderie de fabrication.
Pour chaque type de retard - montée, descente et désactivation - trois valeurs min , taper et maximum peuvent être spécifiés et représentent des retards minimum, typiques 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