Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Verilog

D Vergrendeling

Een flip-flop vangt gegevens op aan de ingang aan de positieve of negatieve flank van een klok. Het belangrijkste om op te merken is dat wat er ook gebeurt met gegevens na de klokflank tot de volgende klokflank, niet wordt weerspiegeld in de uitvoer. Een vergrendeling aan de andere kant, registreert niet aan de rand van een klok, in plaats daarvan volgt de uitvoer de invoer zolang de activeringspen wordt bevestigd.

Ontwerp

In dit voorbeeld bouwen we een vergrendeling met drie ingangen en één uitgang. De invoer d staat voor gegevens die 0 of 1 kunnen zijn, rstn staat voor active-low reset en en staat voor enable die wordt gebruikt om de invoergegevens naar de uitvoer te vergrendelen. Reset actief-laag betekent eenvoudigweg dat het ontwerpelement wordt gereset wanneer deze ingang naar 0 gaat of met andere woorden, reset is actief wanneer de waarde laag is. De waarde van output q wordt bepaald door de invoer d , nl en 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

  

Merk op dat de gevoeligheidslijst voor de always blok bevat alle signalen die nodig zijn om de uitgang bij te werken. Dit blok wordt geactiveerd wanneer een van de signalen in de gevoeligheidslijst van waarde verandert. Ook q krijgt alleen de waarde van d als en is hoog en is daarom een ​​positief vergrendeling.

Schema

Testbank

  
  
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

  

Om ervoor te zorgen dat onze testbank signalen op een meer willekeurige manier bevestigt, hebben we een reg gedeclareerd. variabele genaamd vertraging van grootte 3 bits zodat het elke waarde van 0 tot 7 kan aannemen. Dan de vertraging variabele wordt gebruikt om de toewijzing van d . uit te stellen en nl om verschillende patronen in elke lus te krijgen.

Uitvoer

Simulatielogboek
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.

Klik op de afbeelding om hem groter te maken.


Verilog

  1. Common-Emitter-versterker
  2. Eenvoudige Op-Amp
  3. Precisie spanningsvolger
  4. Niet-inverterende versterker
  5. C# Basisinvoer en -uitvoer
  6. C++ basisinvoer/uitvoer
  7. C Ingang Uitgang (I/O)
  8. Python invoer, uitvoer en import
  9. Java basis invoer en uitvoer
  10. C++ Basisinvoer/uitvoer:Cout, Cin, Cerr Voorbeeld
  11. C - Invoer en uitvoer