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

Inter- en Intra-Assignment Delays in Verilog begrijpen

Verilog delay-statements kunnen vertragingen gespecificeerd hebben aan de linkerkant of rechterkant van de toewijzingsoperator.

Inter-assignment Delays

// Vertraging gespecificeerd aan de linkerkant
#<delay> <LHS> = <RHS>

Een inter-assignment delay-statement heeft de delay-waarde aan de LHS van de toewijzingsoperator. Dit geeft aan dat de statement zelf uitgevoerd wordt nadat de vertraging verstreken is, en is de meest gebruikte vorm van delay-control.

module tb;
  reg a, b, c, q;
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
    // Initialiseer alle signalen op 0 op tijd 0
    a <= 0; b <= 0; c <= 0; q <= 0;
    // Inter-assignment delay: Wacht #5 tijdseenheden
    // en wijs dan a en c 1 toe. Let op dat 'a' en 'c'
    // geüpdatet worden aan het einde van de huidige tijdstap
    #5 a <= 1; c <= 1;
    // Inter-assignment delay: Wacht #5 tijdseenheden
    // en wijs 'q' toe met de waarde waar RHS naar evalueert
    #5 q <= a & b | c;
    #20;
  end
endmodule

Let op dat q 1 wordt op tijd 10 eenheden omdat de statement geëvalueerd wordt op 10 tijdseenheden en RHS (combinatie van a, b, c) evalueert naar 1.

Simulatie-log

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

Intra-assignment Delays

// Vertraging gespecificeerd aan de rechterkant
<LHS> = #<delay> <RHS>

Een intra-assignment delay is een vertraging aan de RHS van de toewijzingsoperator. Dit geeft aan dat de statement eerst geëvalueerd wordt en waarden van alle signalen op de RHS vastgelegd worden. Daarna wordt het pas aan het resultaatssignaal toegewezen nadat de vertraging verstreken is.

module tb;
  reg a, b, c, q;
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
    // Initialiseer alle signalen op 0 op tijd 0
    a <= 0; b <= 0; c <= 0; q <= 0;
    // Inter-assignment delay: Wacht #5 tijdseenheden
    // en wijs dan a en c 1 toe.
    #5 a <= 1; c <= 1;
    // Intra-assignment delay: Eerst statement uitvoeren
    // dan 5 tijdseenheden wachten en dan geëvalueerde waarde toewijzen aan q
    q <= #5 a & b | c;
    #20;
  end
endmodule

Let op dat de toewijzing aan q ontbreekt in de log!

Simulatie-log

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
xmsim: *W,RNQUIE: Simulation is complete.

Dit komt omdat op 5 tijdseenheden a en c toegewezen worden met non-blocking statements. Het gedrag van non-blocking statements is zo dat RHS geëvalueerd wordt, maar pas aan de variabele toegewezen wordt aan het einde van die tijdstap.

De waarde van a en c wordt geëvalueerd naar 1 maar nog niet toegewezen wanneer de volgende non-blocking statement (die van q) uitgevoerd wordt. Bij evaluatie van RHS van q hebben a en c nog de oude waarde 0 en daarom detecteert $monitor geen verandering om de statement weer te geven.

Om de verandering te observeren, laten we de toewijzingsstatements voor a en c van non-blocking naar blocking veranderen.

...
// Non-blocking gewijzigd naar blocking, rest van de
// code blijft hetzelfde
#5 a = 1; c = 1;
q <= #5 a & b | c;
...

Simulatie-log

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

Verilog

  1. Verilog Basics: Uw Eerste AND-poort Ontwerpen
  2. Verilog beheersen: Complete tutorial voor digitale schakelingontwerp
  3. Verilog-syntaxis beheersen: Essentiële regels & best practices
  4. Verilog concatenatie beheersen: Een praktische gids
  5. Verilog-toewijzingen begrijpen: types, syntax en best practices
  6. Verilog Blocking vs. Non-Blocking: belangrijkste verschillen uitgelegd
  7. Verilog-functies beheersen voor efficiënt RTL-ontwerp
  8. Verilog Tasks begrijpen: Functions vs Tasks, Syntax en Gebruik
  9. Verilog Delay Control begrijpen: Timing-technieken en best practices
  10. Gate Delays in Verilog begrijpen: Accurate timing voor betrouwbare digitale ontwerpen
  11. Verilog Clock Generator: Ontwerp & Implementatie Gids