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 initial-blokken: Doel, syntaxis en niet-synthetiseerbaar gebruik

Een set Verilog-statements wordt meestal sequentieel uitgevoerd in een simulatie. Deze statements worden geplaatst in een proceduraal blok. Er zijn twee hoofdtypen procedurale blokken in Verilog: initial en always.

Syntaxis

initial [enkel statement]
initial begin [meerdere statements] end

Waarvoor wordt het initial-blok gebruikt?

Een initial blok is niet synthetiseerbaar en kan niet omgezet worden in een hardwareschema met digitale elementen. Daarom dienen initial-blokken nauwelijks een doel dan voor simulaties. Ze worden primair gebruikt om variabelen te initialiseren en ontwerppoorten specifieke waarden te geven.

Wanneer start en eindigt een initial-blok?

Een initial blok start aan het begin van een simulatie op tijd 0 eenheden. Dit blok wordt slechts één keer uitgevoerd tijdens de gehele simulatie. De uitvoering eindigt zodra alle statements binnen het blok uitgevoerd zijn.

De afbeelding toont een module behave met twee interne signalen a en b. Het initial blok heeft één statement en hoeft niet in begin en end geplaatst te worden. Deze statement wijst de waarde 2'b10 toe aan a wanneer het initial-blok start op tijd 0.

Wat gebeurt er met een vertragingselement?

De onderstaande code heeft een extra statement dat een waarde toewijst aan signaal b. Dit gebeurt echter pas na 10 tijdseenheden na uitvoering van het vorige statement. Dit betekent dat a eerst de waarde krijgt en daarna na 10 tijdseenheden b op 0 gezet wordt.

Hoeveel initial-blokken zijn er toegestaan in een module?

Er is geen limiet aan het aantal initial blokken dat in een module gedefinieerd kan worden.

De onderstaande code heeft drie initial blokken die allemaal op hetzelfde moment starten en parallel draaien. Afhankelijk van de statements en vertragingen binnen elk blok, kan de tijd om het blok te voltooien variëren.

In dit voorbeeld heeft het eerste blok een vertraging van 20 eenheden, het tweede een totale vertraging van 50 (10 + 40) en het laatste 60 eenheden. De simulatie duurt dus 60 tijdseenheden omdat er tenminste één initial-blok nog actief is tot 60 tijdseenheden.

$finish is een Verilog-systeeltaak die de simulator vertelt de simulatie te beëindigen.

Als het laatste blok een vertraging van 30 tijdseenheden had, zou de simulatie op 30 tijdseenheden eindigen, waardoor alle andere actieve initial blokken gedood worden.

initial begin #30 $finish; end

Bekijk het flash-voorbeeld hieronder om te zien hoe een initial blok in een simulatie uitgevoerd wordt.

Klik hier voor een slideshow met simulatiefbeeld!

Verilog

  1. Verilog beheersen: Complete tutorial voor digitale schakelingontwerp
  2. Verilog concatenatie beheersen: Een praktische gids
  3. Verilog Essentials: Een beknopt overzicht
  4. Verilog-toewijzingen begrijpen: types, syntax en best practices
  5. Verilog Blocking vs. Non-Blocking: belangrijkste verschillen uitgelegd
  6. Verilog-functies beheersen voor efficiënt RTL-ontwerp
  7. Verilog Tasks begrijpen: Functions vs Tasks, Syntax en Gebruik
  8. Verilog Clock Generator: Ontwerp & Implementatie Gids
  9. Verilog Math Functions beheersen voor efficiënt Hardware-ontwerp
  10. Verilog $timeformat beheersen: Precisie en Weergave-controle
  11. Verilog Timescales begrijpen en printen in elke Scope