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

Gate Delays in Verilog begrijpen: Accurate timing voor betrouwbare digitale ontwerpen

Dijtale elementen zijn binaire entiteiten en kunnen slechts een van de twee waarden vasthouden: 0 en 1. De overgang van 0 naar 1 en 1 naar 0 heeft echter een overgangsvertraging en zo heeft elk gate-element een vertraging om de waarde van input naar output te propageren.

Een twee-input AND-gate moet bijvoorbeeld de output naar 1 schakelen als beide inputs 1 worden en terug naar 0 wanneer een van de inputs 0 wordt. Deze gate- en pin-naar-pin vertragingen kunnen in Verilog gespecificeerd worden bij het instantiëren van logica-primitives.

Rise, Fall en Turn-Off Delays

De tijd die de output van een gate nodig heeft om van een bepaalde waarde naar 1 te veranderen heet een rise-vertraging. De tijd die de output nodig heeft om van een bepaalde waarde naar 0 te veranderen heet een fall-vertraging. De tijd die de output nodig heeft om van een bepaalde waarde naar high impedance te veranderen heet turn-off-vertraging.

Deze vertragingen zijn eigenlijk op elk signaal toepasbaar omdat ze allemaal kunnen rijzen of vallen in echte circuits en niet beperkt zijn tot alleen outputs van gates. Er zijn drie manieren om gate-delays weer te geven en het twee-delay-formaat kan toegepast worden op de meeste primitives wier outputs niet overgaan naar high impedance. Een drie-delay-formaat kan niet toegepast worden op een AND-gate omdat de output niet naar Z zal gaan voor enige input-combinatie.

// Enkele delay gespecificeerd - gebruikt voor alle drie typen overgangsvertragingen
or #(<delay>) o1 (out, a, b);

// Twee delays gespecificeerd - gebruikt voor Rise en Fall overgangen
or #(<rise>, <fall>) o1 (out, a, b);

// Drie delays gespecificeerd - gebruikt voor Rise, Fall en Turn-off overgangen
or #(<rise>, <fall>, <turn_off>) o1 (out, a, b);

Als slechts één delay gespecificeerd is, gebruiken alle drie typen vertragingen dezelfde gegeven waarde. Als er twee delays gespecificeerd zijn, vertegenwoordigt de eerste rise en de tweede fall-vertraging. Als er drie delays gespecificeerd zijn, vertegenwoordigen ze rise, fall en turn-off vertragingen respectievelijk.

Een Delay Formaat

module des (
  input a, b,
  output out1, out2
);
  // AND-gate heeft 2 tijdseenheden gate-delay
  and #(2) o1 (out1, a, b);
  // BUFIF0-gate heeft 3 tijdseenheden gate-delay
  bufif0 #(3) b1 (out2, a, b);
endmodule
module tb;
  reg a, b;
  wire out1, out2;
  des d0 (.out1(out1), .out2(out2), .a(a), .b(b));
  initial begin
    {a, b} <= 0;
    $monitor ("T=%0t a=%0b b=%0b and=%0b bufif0=%0b", $time, a, b, out1, out2);
    #10 a <= 1;
    #10 b <= 1;
    #10 a <= 0;
    #10 b <= 0;
  end
endmodule

Zie dat de output van AND gates 2 tijdseenheden verandert nadat een van de inputs verandert. Bijvoorbeeld, b wordt 1 terwijl a al 1 is op T=20. Maar de output wordt pas 1 op T=22. Op dezelfde manier gaat a terug naar nul op T=30 en de output krijgt de nieuwe waarde op T=32.

Gate-delay is gespecificeerd als 3 tijdseenheden voor BUFIF0 en dus wanneer b verandert van 0 naar 1 terwijl a al op 1 staat, duurt het 3 tijdseenheden voordat de output geüpdatet wordt naar Z en doet dit uiteindelijk op T=23.

Simulatie-log

ncsim> run
T=0 a=0 b=0 and=x bufif0=x
T=2 a=0 b=0 and=0 bufif0=x
T=3 a=0 b=0 and=0 bufif0=0
T=10 a=1 b=0 and=0 bufif0=0
T=13 a=1 b=0 and=0 bufif0=1
T=20 a=1 b=1 and=0 bufif0=1
T=22 a=1 b=1 and=1 bufif0=1
T=23 a=1 b=1 and=1 bufif0=z
T=30 a=0 b=1 and=1 bufif0=z
T=32 a=0 b=1 and=0 bufif0=z
T=40 a=0 b=0 and=0 bufif0=z
T=43 a=0 b=0 and=0 bufif0=0
ncsim: *W,RNQUIE: Simulation is complete.

Twee Delay Formaat

Laten we dezelfde testbench van boven toepassen op een ander Verilog-model waar rise en fall delays expliciet genoemd worden.

module des (
  input a, b,
  output out1, out2
);
  and #(2, 3) o1 (out1, a, b);
  bufif0 #(4, 5) b1 (out2, a, b);
endmodule

Simulatie-log

ncsim> run
T=0 a=0 b=0 and=x bufif0=x
T=3 a=0 b=0 and=0 bufif0=x
T=5 a=0 b=0 and=0 bufif0=0
T=10 a=1 b=0 and=0 bufif0=0
T=14 a=1 b=0 and=0 bufif0=1
T=20 a=1 b=1 and=0 bufif0=1
T=22 a=1 b=1 and=1 bufif0=1
T=24 a=1 b=1 and=1 bufif0=z
T=30 a=0 b=1 and=1 bufif0=z
T=33 a=0 b=1 and=0 bufif0=z
T=40 a=0 b=0 and=0 bufif0=z
T=45 a=0 b=0 and=0 bufif0=0
ncsim: *W,RNQUIE: Simulation is complete.

Drie Delay Formaat

module des (
  input a, b,
  output out1, out2
);
  and #(2, 3) o1 (out1, a, b);
  bufif0 #(5, 6, 7) b1 (out2, a, b);
endmodule

Simulatie-log

ncsim> run
T=0 a=0 b=0 and=x bufif0=x
T=3 a=0 b=0 and=0 bufif0=x
T=6 a=0 b=0 and=0 bufif0=0
T=10 a=1 b=0 and=0 bufif0=0
T=15 a=1 b=0 and=0 bufif0=1
T=20 a=1 b=1 and=0 bufif0=1
T=22 a=1 b=1 and=1 bufif0=1
T=27 a=1 b=1 and=1 bufif0=z
T=30 a=0 b=1 and=1 bufif0=z
T=33 a=0 b=1 and=0 bufif0=z
T=40 a=0 b=0 and=0 bufif0=z
T=46 a=0 b=0 and=0 bufif0=0
ncsim: *W,RNQUIE: Simulation is complete.

Min/Typ/Max Delays

Delays zijn niet hetzelfde in verschillende delen van de gefabriceerde chip noch voor verschillende temperaturen en andere variaties. Verilog biedt daarom een extra controle-niveau voor elk van de bovengenoemde delay-typen. Elke digitale gate en transistorcel heeft een minimum, typische en maximum delay gespecificeerd gebaseerd op procesknooppunt en wordt typisch geleverd door bibliotheken van de fabricage-foundry.

Voor elk type delay - rise, fall, en turn-off - kunnen drie waarden min, typ en max gespecificeerd worden en staan voor minimum, typische en maximum vertragingen.

module des (
  input a, b,
  output out1, out2
);
  and #(2:3:4, 3:4:5) o1 (out1, a, b);
  bufif0 #(5:6:7, 6:7:8, 7:8:9) b1 (out2, a, b);
endmodule

Simulatie-log

ncsim> run
T=0 a=0 b=0 and=x bufif0=x
T=4 a=0 b=0 and=0 bufif0=x
T=7 a=0 b=0 and=0 bufif0=0
T=10 a=1 b=0 and=0 bufif0=0
T=16 a=1 b=0 and=0 bufif0=1
T=20 a=1 b=1 and=0 bufif0=1
T=23 a=1 b=1 and=1 bufif0=1
T=28 a=1 b=1 and=1 bufif0=z
T=30 a=0 b=1 and=1 bufif0=z
T=34 a=0 b=1 and=0 bufif0=z
T=40 a=0 b=0 and=0 bufif0=z
T=47 a=0 b=0 and=0 bufif0=0
ncsim: *W,RNQUIE: Simulation is complete.

Verilog

  1. Verilog beheersen: Complete tutorial voor digitale schakelingontwerp
  2. Verilog concatenatie beheersen: Een praktische gids
  3. Verilog-toewijzingen begrijpen: types, syntax en best practices
  4. Verilog Blocking vs. Non-Blocking: belangrijkste verschillen uitgelegd
  5. Verilog Delay Control begrijpen: Timing-technieken en best practices
  6. Inter- en Intra-Assignment Delays in Verilog begrijpen
  7. Gate-Level Modeling: van hardware-schema's naar Verilog-code
  8. Praktisch Verilog Gate-Level Ontwerp: AND, OR, NOT Gates & 2x1 Multiplexer
  9. Verilog Clock Generator: Ontwerp & Implementatie Gids
  10. Verilog Math Functions beheersen voor efficiënt Hardware-ontwerp
  11. Verilog $timeformat beheersen: Precisie en Weergave-controle