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

Maîtriser les verrous D : Conception, Fonctionnement et Différences Clés

Une bascule capture la donnée à son entrée au front positif ou négatif d'une horloge. L'important est que ce qui arrive aux données après le front d'horloge jusqu'au prochain front ne se reflétera pas à la sortie. Un verrou (latch), en revanche, ne capture pas au front d'horloge ; au lieu de cela, la sortie suit l'entrée aussi longtemps que la broche d'activation est assertée.

Conception

Dans cet exemple, nous allons construire un verrou avec trois entrées et une sortie. L'entrée d représente la donnée (0 ou 1), rstn signifie réinitialisation active basse et en signifie activation, utilisée pour verrouiller la donnée d'entrée sur la sortie. Une réinitialisation active basse signifie simplement que l'élément de conception sera réinitialisé lorsque cette entrée passe à 0, c'est-à-dire que la réinitialisation est active lorsque sa valeur est basse. La valeur de la sortie q est dictée par les entrées d, en et rstn.

module d_latch (
  input d,        // Broche d'entrée 1 bit pour la donnée
  input en,       // Broche d'entrée 1 bit pour activer le verrou
  input rstn,     // Broche d'entrée 1 bit pour réinitialisation active basse
  output reg q    // Broche de sortie 1 bit pour la donnée de sortie
);
  // Ce bloc always est "toujours" déclenché chaque fois que en/rstn/d change
  // Si la réinitialisation est assertée, la sortie sera zéro
  // Sinon, tant que l'activation est haute, la sortie q suit l'entrée d
  always @ (en or rstn or d)
    if (!rstn) q <= 0;
    else if (en) q <= d;
endmodule

Notez que la liste de sensibilité du bloc always contient tous les signaux nécessaires pour mettre à jour la sortie. Ce bloc sera déclenché chaque fois que l'un des signaux de la liste change de valeur. De plus, q prendra la valeur de d seulement lorsque en est haut, ce qui en fait un verrou positif.

Schéma

Testbench

module tb_latch;
  // Déclaration des variables pour piloter les valeurs vers la conception
  reg d;
  reg en;
  reg rstn;
  reg [2:0] delay;
  reg [1:0] delay2;
  integer i;
  // Instanciation de la conception et connexion des ports avec les signaux TB
  d_latch dl0 (
    .d (d),
    .en (en),
    .rstn (rstn),
    .q (q)
  );
  // Ce bloc initial forme le stimulus pour tester la conception
  initial begin
    $monitor ("[%0t] en=%0b d=%0b q=%0b", $time, en, d, q);
    // 1. Initialisation des variables du testbench
    d <= 0;
    en <= 0;
    rstn <= 0;
    // 2. Libération de la réinitialisation
    #10 rstn <= 1;
    // 3. Changement aléatoire de d et enable
    for (i = 0; i < 5; i=i+1) begin
      delay = $random;
      delay2 = $random;
      #(delay2) en <= ~en;
      #(delay) d <= i;
    end
  end
endmodule

Pour que notre testbench affirme et désaffirme les signaux de manière plus aléatoire, nous avons déclaré une variable reg appelée delay de 3 bits afin qu'elle puisse prendre toute valeur de 0 à 7. Ensuite, la variable delay est utilisée pour retarder l'affectation de d et en afin d'obtenir différents motifs à chaque boucle.

Sortie

Journal de simulation

ncsim> run
[0] en=0 d=0 q=0
[11] en=1 d=0 q=0
[18] en=0 d=0 q=0
[19] en=0 d=1 q=0
[20] en=1 d=1 q=1
[25] en=1 d=0 q=0
[27] en=0 d=0 q=0
[32] en=0 d=1 q=0
[33] en=1 d=1 q=1
[34] en=1 d=0 q=0
ncsim: *W,RNQUIE: Simulation is complete.

Cliquez sur l'image pour l'agrandir.

Verilog

  1. Amplificateur à émetteur commun : Conception, mesure et techniques de rétroaction
  2. Construction d'un amplificateur différentiel à gain élevé fonctionnant comme un amplificateur opérationnel
  3. Fondamentaux C# : Entrées et sorties essentielles
  4. Maîtriser l'entrée/sortie en C++ : Guide pratique
  5. Maîtriser l'entrée/sortie en C : scanf() et printf() expliqués
  6. Maîtriser les E/S et l'importation de modules en Python : Guide pratique
  7. Maîtriser l'entrée/sortie Java : Afficher, lire et formater vos données
  8. Maîtriser les flux C++ : cout, cin, cerr, clog – Guide pratique
  9. Maîtriser les entrées/sorties en C : Fonctions standards et fichiers