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

D Loquet

Une bascule capture des données à son entrée sur le front positif ou négatif d'une horloge. La chose importante à noter est que tout ce qui arrive aux données après le front d'horloge jusqu'au prochain front d'horloge ne sera pas reflété dans la sortie. Un loquet d'autre part, ne capture pas au bord d'une horloge, à la place la sortie suit l'entrée tant que la broche d'activation est affirmée.

Conception

Dans cet exemple, nous allons construire un verrou qui a trois entrées et une sortie. L'entrée d représente des données qui peuvent être 0 ou 1, rstn signifie active-low reset et en signifie enable qui est utilisé pour verrouiller les données d'entrée sur la sortie. La réinitialisation étant active-basse signifie simplement que l'élément de conception sera réinitialisé lorsque cette entrée passe à 0 ou, en d'autres termes, la réinitialisation est active lorsque sa valeur est basse. La valeur de la sortie q est dicté par les entrées d , fr et rstn .

  
  
module d_latch (  input d,           // 1-bit input pin for data
                  input en,          // 1-bit input pin for enabling the latch
                  input rstn,        // 1-bit input pin for active-low reset
                  output reg q);     // 1-bit output pin for data output
 
   // This always block is "always" triggered whenever en/rstn/d changes
   // If reset is asserted then output will be zero
   // Else as long as enable is high, output q follows input d
   always @ (en or rstn or d)
      if (!rstn)
         q <= 0;
      else
         if (en)
            q <= d;
endmodule

  

Notez que la liste de sensibilité au always bloc 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 de sensibilité changera de valeur. Aussi q obtiendra la valeur de d uniquement lorsque en est élevé, et donc est positif loquet.

Schéma

Banc de test

  
  
module tb_latch;
   // Declare variables that can be used to drive values to the design
   reg d;  
   reg en;
   reg rstn;
   reg [2:0] delay;
   reg [1:0] delay2;
   integer i;
   
   // Instantiate design and connect design ports with TB signals
   d_latch  dl0 ( .d (d),
                  .en (en),
                  .rstn (rstn),
                  .q (q));

   // This initial block forms the stimulus to test the design
   initial begin
      $monitor ("[%0t] en=%0b d=%0b q=%0b", $time, en, d, q);
   
      // 1. Initialize testbench variables
      d <= 0;
      en <= 0;
      rstn <= 0;
      
      // 2. Release reset
      #10 rstn <= 1;
      
      // 3. Randomly change d and 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 nos signaux d'assertion et d'invalidation de testbench soient plus aléatoires, nous avons déclaré un reg variable appelée délai de taille 3 bits pour qu'il puisse prendre n'importe quelle valeur de 0 à 7. Puis le délai la variable est utilisée pour retarder l'affectation de d et fr pour obtenir des modèles différents dans 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
  2. Ampli-op simple
  3. Entrée et sortie de base C#
  4. Entrée/sortie de base C++
  5. C Entrée Sortie (E/S)
  6. Entrée, sortie et importation Python
  7. Entrée et sortie de base Java
  8. Entrée/Sortie de base C++ :Cout, Cin, Cerr Exemple
  9. C - Entrée et Sortie