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 Latches Onder de Knie: Ontwerp, Werking en Belangrijke Verschillen

Een flip-flop vangt data op zijn input op de positieve of negatieve flank van een klok. Het belangrike is dat wat er met de data gebeurt na de klokflank tot de volgende klokflank, niet weerspiegeld wordt in de output. Een latch daarentegen, vangt niet op de flank van een klok, maar de output volgt de input zolang de enable pin geassert is.

Ontwerp

In dit voorbeeld bouwen we een latch met drie inputs en één output. De input d staat voor data (0 of 1), rstn voor actieve-lage reset en en voor enable waarmee de input data naar de output gelatcht wordt. Reset actief-laag betekent dat het ontwerverelement gereset wordt wanneer deze input 0 wordt. De waarde van output q wordt bepaald door inputs d, en en rstn.

Blokdiagram van de D latch

module d_latch (
  input d,     // 1-bit input voor data
  input en,    // 1-bit input voor enable
  input rstn,  // 1-bit input voor actieve-lage reset
  output reg q // 1-bit output voor data
);
  // Dit always blok wordt getriggerd wanneer en/rstn/d verandert
  // Als reset geassert is, wordt output 0
  // Anders, zolang enable hoog is, volgt output q input d
  always @ (en or rstn or d)
    if (!rstn) q <= 0;
    else if (en) q <= d;
endmodule

Let op dat de gevoeligheidslijst van het always blok alle signalen bevat die nodig zijn om de output bij te werken. Dit blok wordt getriggerd wanneer een van de signalen in de lijst zijn waarde verandert. Ook krijgt q alleen de waarde van d wanneer en hoog is, en is dus een positieve latch.

Schema

Schema van de D latch

Testbench

Testbench schema

module tb_latch;
  // Variabelen om waarden naar het ontwerp te sturen
  reg d;
  reg en;
  reg rstn;
  reg [2:0] delay;
  reg [1:0] delay2;
  integer i;

  // Instantieer ontwerp en verbind poorten met TB signalen
  d_latch dl0 (
    .d (d),
    .en (en),
    .rstn (rstn),
    .q (q)
  );

  // Stimulus voor het testen van het ontwerp
  initial begin
    $monitor ("[%0t] en=%0b d=%0b q=%0b", $time, en, d, q);
    // 1. Initialiseer testbench variabelen
    d <= 0; en <= 0; rstn <= 0;
    // 2. De-assert reset
    #10 rstn <= 1;
    // 3. Willekeurig d en enable veranderen
    for (i = 0; i < 5; i = i+1) begin
      delay = $random;
      delay2 = $random;
      #(delay2) en <= ~en;
      #(delay) d <= i;
    end
  end
endmodule

Om onze testbench signalen meer willekeurig te asserten en de-asserten, hebben we een reg variabele delay van 3 bits gedeclareerd die waarden van 0 tot 7 kan aannemen. Deze variabele wordt gebruikt om de toewijzing van d en en te vertragen voor verschillende patronen in elke lus.

Output

Simulatie Log:

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.

Golfformaat van de D latch simulatie

Verilog

  1. Common‑Emitter Versterker: Ontwerp, Meting, en TerugkoppelingsTechnieken
  2. Een Hoog‑Versterking Differentiele Versterker Bouwen Die Werkt als Op‑Amp
  3. Precisie Spanningvolger: Op-amp Terugkoppeling Onder de Loep voor Accuraat Signaalvolgen
  4. Niet-Inverterende Versterker: Bouwen, Testen en Beheersen van Op-amp Versterkingscontrole
  5. C# Fundamentals: Invoer en Uitvoer Basis
  6. C++ input en output: een praktische gids
  7. C Input en Output (I/O) Beheersen: scanf() en printf() Uitgelegd
  8. C++ Streams Beheersen: cout, cin, cerr, clog – Praktische Handleiding
  9. Invoer en uitvoer in C programmeren: Volledige gids
  10. Python I/O en Module Imports onder de knie krijgen: Een praktische gids
  11. Java Input & Output beheersen: printen, lezen en formatteren