Mots-clés : délai de porte, bascule D
Types de délai de porte
Les circuits au niveau porte introduits dans les deux sections précédentes n'ont aucun délai ; les circuits au niveau porte réels ont tous un délai.
Verilog permet aux utilisateurs de spécifier des délais de porte afin de définir le délai de propagation des entrées vers les signaux de sortie.
Il existe principalement trois types de délais de porte.
Délai de montée
Lorsqu'une entrée de porte change, le temps de transition nécessaire pour que la sortie de la porte passe de 0, x, z à 1 est appelé délai de montée.

Délai de descente
Lorsqu'une entrée de porte change, le temps de transition nécessaire pour que la sortie de la porte passe de 1, x, z à 0 est appelé délai de descente.

Délai de désactivation
Le délai de désactivation fait référence au temps de transition nécessaire pour que la sortie de la porte passe de 0, 1, x à l'état de haute impédance z.

Le temps de transition nécessaire pour qu'une sortie de porte passe de 0, 1, z à x n'est pas explicitement défini, mais le temps nécessaire peut être déterminé par les autres types de délais ; il correspond à la plus petite des trois valeurs de délai ci-dessus.
Les délais de porte peuvent être définis lors de l'instanciation d'une primitive de porte. Le format de définition est le suivant :
gate_type [delay] [instance_name] (signal_list) ;
Ici, le nombre de délais peut être 0, 1, 2 ou 3.
Le tableau suivant montre les valeurs de délai pour différents nombres de spécifications de délai.
| Type de délai | Aucun délai | 1 délai (d) | 2 délais (d1, d2) | 3 délais (d1, d2, d3) |
|---|---|---|---|---|
| Montée | 0 | d | d1 | d1 |
| Descente | 0 | d | d2 | d2 |
| Désactivation | 0 | d | min(d1, d2) | d3 |
| to_x | 0 | d | min(d1, d2) | min(d1, d2, d3) |
Si aucune valeur de délai n'est spécifiée, le délai par défaut est 0.
Si l'utilisateur spécifie 1 valeur de délai, alors tous les types de valeurs de délai sont égaux à cette valeur.
Si l'utilisateur spécifie 2 valeurs de délai, elles représentent respectivement le délai de montée et le délai de descente, et les délais de désactivation et "to_x" sont tous deux égaux à la plus petite de ces 2 valeurs de délai.
Si l'utilisateur spécifie 3 valeurs de délai, elles représentent respectivement le délai de montée, le délai de descente et le délai de désactivation, et le délai "to_x" est le plus petit de ces 3 valeurs de délai.
Une instanciation de primitive de niveau porte avec des valeurs de délai est la suivante :
Exemple
and #(1) (OUT1, IN1, IN2) ;
//délai de montée = 2.1, délai de descente = 2, délai de désactivation = 2
or #(2.1, 2) (OUT2, IN1, IN2) ;
//délai de montée = 2, délai de descente = 1, délai de désactivation = 1.3
bufif0 #(2, 1, 1.3) (OUT3, IN1, CTRL) ;
Il convient de noter que les portes à entrées multiples (telles que les portes AND) et les portes à sorties multiples (telles que les portes NOT) ne peuvent définir que 2 délais au maximum, car la sortie ne sera pas z.
Les portes trois états et les commutateurs unidirectionnels (transistors MOS, transistors CMOS, etc.) peuvent définir 3 délais.
Les portes pull-up et pull-down n'ont aucun délai, car elles représentent un attribut matériel ; l'état pull-up/pull-down ne change pas et il n'y a pas de valeur de sortie.
Les commutateurs bidirectionnels (tran) n'ont aucun délai lors de la transmission des signaux, et les définitions de délai ne sont pas autorisées.
Les commutateurs bidirectionnels avec bornes de commande (tranif1, tranif0) ont un délai d'activation ou de désactivation lors de la commutation. Ces commutateurs bidirectionnels peuvent être spécifiés avec 0, 1 ou 2 délais, par exemple :
Exemple
tranif0 #(1) (inout1, inout2, CTRL);
//délai d'activation = 1, délai de désactivation = 1.2
tranif1 #(1, 1.2) (inout3, inout4, CTRL);
Délais minimum/typique/maximum
En raison des différences entre les procédés de fabrication des circuits intégrés, le délai des dispositifs dans les circuits réels fluctue toujours dans une certaine plage. En Verilog, les utilisateurs peuvent non seulement spécifier les 3 types de délais de porte, mais aussi spécifier les valeurs minimale, typique et maximale pour chaque type. Au stade de la compilation ou de la simulation, l'une de ces valeurs de délai peut être sélectionnée, ce qui permet une simulation plus réaliste.
- Valeur minimale: le délai minimal que possède la primitive de porte.
- Valeur typique: le délai typique que possède la primitive de porte.
- Valeur maximale: le délai maximal que possède la primitive de porte.
L'exemple d'instanciation suivant illustre l'utilisation des délais minimum, typique et maximum.
Exemple
and #(1:2:3) (OUT1, IN1, IN2) ;
//délai de montée : min 1, typique 2, max 3
//délai de descente : min 3, typique 4, max 5
//délai de désactivation : min min(1,3), typique min(2,4), max min(3,5)
or #(1:2:3, 3:4:5) (OUT2, IN1, IN2) ;
//délai de montée : min 1, typique 2, max 3
//délai de descente : min 3, typique 4, max 5
//délai de désactivation : min 2, typique 3, max 4
bufif0 #(1:2:3, 3:4:5, 2:3:4) (OUT3, IN1, CTRL) ;
Bascule D
Ensuite, nous concevons une bascule D du point de vue de la modélisation au niveau des portes.
Bascule SR
Le schéma structurel de la bascule SR et sa table de vérité sont les suivants.
- 1. Lorsque S est à l'état bas, la sortie Q de G1 est à l'état haut et est renvoyée vers l'entrée de G2. Si R est à l'état haut à ce moment-là, la sortie Q' de G2 est à l'état bas.
- 2. Lorsque R est à l'état bas et S à l'état haut, l'analyse est similaire.
- 3. Lorsque S et R sont tous deux à l'état haut, si Q = 1 (Q' = 0), alors après que Q est renvoyé vers l'entrée de G2, la sortie Q' reste à 0 ; après que Q' est renvoyé vers l'entrée de G1, la sortie Q reste à 1, ce qui montre un état stable. Si Q = 0 (Q' = 1), l'analyse est similaire, et Q et Q' restent inchangés. Autrement dit, lorsque S et R sont tous deux à l'état haut, le circuit possède une fonction de maintien.
- 4. Si S et R sont tous deux à l'état bas, alors les sorties Q et Q' sont toutes deux à l'état haut, et elles ne sont plus complémentaires. Par conséquent, ce cas est interdit.


Verrou SR
L'ajout de deux portes NAND devant la bascule SR de base forme un verrou SR avec une entrée de validation.
Le verrou SR et sa table de vérité sont les suivants.
- Lorsque EN=0, G3 et G4 sont désactivées, et le verrou SR maintient son état de sortie inchangé.
- Lorsque EN=1, il fonctionne exactement comme la bascule SR de base.


Verrou D
Les entrées de la bascule SR de base ne peuvent pas être simultanément à 0, et les entrées du verrou SR avec une entrée de validation ne peuvent pas être simultanément à 1 ; sinon, cela crée une contradiction où les sorties Q et Q' ne sont pas complémentaires.
Pour éliminer cet état interdit, un module inverseur est ajouté au verrou SR avec une entrée de validation, garantissant que les 2 entrées sont toujours logiquement opposées, formant ainsi un verrou D.
Son schéma structurel et sa table de vérité sont les suivants.
- 1. Lorsque EN=1, l'état de sortie change avec l'état d'entrée.
- 2. Lorsque EN=0, l'état de sortie reste inchangé.


Un verrou D est déclenché par niveau.
Si le signal d'entrée D change plusieurs fois d'état pendant la période active où EN=1, la sortie Q changera également plusieurs fois d'état. Cela réduit l'immunité au bruit du circuit et ne constitue pas un circuit sûr pour les exigences pratiques.
Pour améliorer la fiabilité de la bascule et renforcer l'immunité au bruit du circuit, la bascule D, qui capture le signal à un instant précis, a été inventée.
Bascule D
La mise en cascade de deux verrous D avec l'horloge inversée forme une bascule D simple, également appelée Flip-flop.
Son schéma structurel et sa table de vérité sont les suivants.
Le verrou D du premier étage est aussi appelé verrou maître, qui verrouille lorsque CP est bas. Le verrou D du second étage est aussi appelé verrou esclave ; son horloge est opposée à celle du verrou maître, et il verrouille lorsque CP est haut.


- 1. Lorsque CP=1, la sortie Qm du verrou maître suit les variations du signal d'entrée D, tandis que le verrou esclave est à l'état de maintien et sa sortie Qs reste inchangée.
- 2. Lorsque CP passe de l'état haut à l'état bas, le verrou maître verrouille l'état actuel de D, le transfère à la sortie Qm et le maintient inchangé. La sortie Qs du verrou esclave suit les variations de Qm. À ce moment, le verrou maître à l'état verrouillé maintient Qm inchangé, donc après que la sortie Qs de la bascule D reçoit la nouvelle valeur de Qm, elle reste également inchangée.
En résumé, la sortie Qs de la bascule D ne verrouille le signal en D que sur le front descendant de l'horloge CP ; à d'autres moments, le signal de sortie a une fonction de maintien.
L'extension du verrou D à deux étages en une structure au niveau des portes est illustrée dans la figure suivante.

Nous effectuons une modélisation au niveau des portes de la bascule D et ajoutons des délais au niveau des portes. Le modèle Verilog est le suivant :
Exemple
input D, CP,
output Q, QR);
parameter RISE_TIME = 0.11 ;
parameter FALL_TIME = 0.07 ;
//partie 1, porte NON
wire CPN, DN ;
not #(RISE_TIME, FALL_TIME) (CPN, CP);
not #(RISE_TIME, FALL_TIME) (DN, D);
//partie 2, déclencheur maître
wire G3O, G4O ;
nand #(RISE_TIME, FALL_TIME) (G3O, D, CP);
nand #(RISE_TIME, FALL_TIME) (G4O, DN, CP);
wire #(RISE_TIME, FALL_TIME) G1O, G2O ;
nand #(RISE_TIME, FALL_TIME) (G1O, G3O, G2O);
nand #(RISE_TIME, FALL_TIME) (G2O, G4O, G1O);
//partie 3, déclencheur esclave
wire G7O, G8O ;
nand #(RISE_TIME, FALL_TIME) (G7O, G1O, CPN);
nand #(RISE_TIME, FALL_TIME) (G8O, G2O, CPN);
wire G5O, G6O ;
nand #(RISE_TIME, FALL_TIME) (G5O, G7O, G6O);
nand #(RISE_TIME, FALL_TIME) (G6O, G8O, G5O);
assign Q = G5O ;
assign QR = G6O ;
endmodule
Le banc de test est écrit comme suit :
Exemple
module test ;
reg D, CP = 0 ;
wire Q, QR ;
always #5 CP = ~CP ;
initial begin
D = 0 ;
#12 D = 1 ;
#10 D = 0 ;
#14 D = 1 ;
#3 D = 0 ;
#18 D = 0 ;
end
D_TRI u_d_trigger(
.D (D),
.CP (CP),
.Q (Q),
.QR (QR));
initial begin
forever begin
#100;
//$display("---gyc---%d", $time);
if ($time >= 1000) begin
$finish ;
end
end
end
endmodule // test
Les résultats de la simulation sont les suivants.
Comme on peut le voir sur la figure, les deux signaux Q/QR capturent le signal D sur le front descendant de l'horloge CP, restent inchangés pendant un seul cycle, et la sortie présente un retard.

Agrandissez le moment cap3 et tracez le retard, comme indiqué dans la figure ci-dessous.
- Il y a un retard de montée de CP à CPN de 110ps;
- Il y a un retard de descente de CPN à G8O de 70ps;
- Il y a un retard de montée de G8O à G6O de 110ps;
- Il y a un retard de descente de G6O à Q de 70ps;
- Le total est de 360ps, ce qui correspond au délai de porte configuré.

Télécharger le code source de ce chapitre
Téléchargement