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

Verilog Scheduling Semantics begrijpen: Timing, Events, en Uitvoeringsvolgorde

Verilog-ontwerp en testbench hebben typisch veel regels code bestaande uit always of initial blokken, continue toewijzingen en andere procedurale statements die op verschillende tijden actief worden tijdens een simulatie.

Elke waardeverandering van een signaal in het Verilog-model wordt beschouwd als een update-event. En processen zoals always en assign blokken die gevoelig zijn voor deze update-events worden geëvalueerd in een willekeurige volgorde en heet een evaluation-event. Aangezien deze events op verschillende tijden kunnen gebeuren, worden ze beter beheerd en gegarandeerd op hun correcte uitvoeringsvolgorde door ze in te plannen in event-wachtrijen die gerangschikt zijn op simulatiettijd.

module tb;
  reg a, b, c;
  wire d;
  // 'always' is een proces dat geëvalueerd wordt wanneer 'a' of 'b' geüpdatet wordt.
  // Wanneer 'a' of 'b' van waarde verandert heet het een 'update-event'.
  // Wanneer 'always'-blok getriggerd wordt door verandering in 'a' of 'b' heet het een evaluation-event.
  always @ (a or b) begin
    c = a & b;
  end
  // Hier is 'assign' een proces geëvalueerd wanneer 'a' of 'b' of 'c' geüpdatet wordt
  assign d = a | b ^ c;
endmodule

Event-wachtrij

Een simulatiestap gesegmenteerd in vier verschillende regio's. Een actieve event-wachtrij is een set processen die op de huidige tijd moeten uitvoeren wat kan leiden tot meer processen die in de actieve of andere event-wachtrijen gepland worden. Events kunnen aan elke regio toegevoegd worden, maar altijd verwijderd uit de actieve regio.

  • Actieve events vinden plaats op de huidige simulatiettijd en kunnen in willekeurige volgorde verwerkt worden.
  • Inactieve events vinden plaats op de huidige simulatiettijd, maar worden verwerkt na afloop van alle actieve events.
  • Nonblocking toewijzing events die eerder geëvalueerd zijn, worden toegewezen na afloop van alle actieve en inactieve events.
  • Monitor events worden verwerkt na alle actieve, inactieve en non-blocking toewijzingen.

Wanneer alle events in de actieve wachtrij voor de huidige tijdstap uitgevoerd zijn, schuift de simulator de tijd vooruit naar de volgende tijdstap en voert de actieve wachtrij uit.

module tb;
  reg x, y, z;
  initial begin
    #1 x = 1; y = 1;
    #1 z = 0;
  end
endmodule

Simulatie start op tijd 0, en de eerste statement wordt gepland om uitgevoerd te worden wanneer simulatiettijd 1 tijdseenheid bereikt waar x en y 1 toegewezen krijgen. Dit is de actieve wachtrij voor de huidige tijd wat 1 tijdseenheid is. De simulator plant dan de volgende statement na 1 meer tijdseenheid waar z 0 toegewezen krijgt.

Wat maakt simulatie non-deterministisch?

Er kunnen race-condities optreden tijdens simulatie die leiden tot verschillende outputs voor hetzelfde ontwerp en testbench. Een van de redenen voor non-deterministisch gedrag is omdat actieve events uit de wachtrij gehaald en in willekeurige volgorde verwerkt kunnen worden.

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-functies beheersen voor efficiënt RTL-ontwerp
  6. Verilog Tasks begrijpen: Functions vs Tasks, Syntax en Gebruik
  7. Verilog Clock Generator: Ontwerp & Implementatie Gids
  8. Verilog Math Functions beheersen voor efficiënt Hardware-ontwerp
  9. Verilog $timeformat beheersen: Precisie en Weergave-controle
  10. Verilog Timescales begrijpen en printen in elke Scope
  11. Verilog File I/O onder de knie: Openen, Lezen, Schrijven en Sluiten