Stap 18: VM 4.1: de altijd blokkeren
Als iemand de woorden "Verilog" en "Behavioral" in dezelfde zin noemt, moet je hersenen hopelijk onmiddellijk denken "altijd blokkeren". Er is niet een echte vertaling tussen een altijd blok en om het even wat in een taal als C/C++, maar het concept is niet moeilijk te begrijpen. Maar als je een vergelijking met C/C++ hebben moet, een altijd blok is als een tijdje lus die heeft voorwaarde wanneer te evalueren is een puinhoop als verklaringen.In een notendop, een altijd blok is een deelgemeente van Verilog gecodeerd logica die wordt geëvalueerd telkens een trigger's toestand verandert.
Wat betekent dit? Laten we eens kijken naar een basic altijd blokkeren voor een circuit met twee ingangen, sw0 en sw1.
altijd @ (sw0, sw1)
beginnen
einde
Er geen code voorhanden is lichaam aan dit blok, maar laten we negeren dat voor nu. Aankondiging van de ' dat opbrengsten "always" ("always" is een sleutelwoord Verilog). Let ook op de verklaring van de binnenkant van de haakjes: "sw0, sw1".
Met behulp van een eenvoudige waarheid tabel, we weten dat de ingangen in voor twee ingangen er is een maximum van 4 unieke Staten zijn kon: beide hoge logica, zowel logica lage en hoge één laag voor beide ingangen.
De "altijd @ (sw0, sw1)" in wezen zegt "als op enig moment enige inbreng wijzigt haar status (dat wil zeggen wijzigen van rij op de waarheidstabel) dan de volgende code opnieuw te evalueren:".
Dit zou te simpel om te schrijven in C/C++, maar in Verilog zo simpel is het. Een altijd blok zal opnieuw evalueren van de code binnen het eigen bereik (tussen de begin- en eindtijden verklaringen na de verklaring "always") wanneer een van de genoemde triggers (die lijst heet een lijst gevoeligheid) wijzigingen van een logica een een logica nul of naar een logica van nul naar een logica een. Kunt u denken van een gemeenschappelijke logica circuit component of twee (of een bos!) dat meer eenvoudig konden worden geïmplementeerd in een altijd blokkeren?
Het klassieke voorbeeld is de multiplexor of, mux. Wanneer om het even welk van de select ingangen wijzigt, moet de mux opnieuw beslissen welke invoerbronnen te passeren op de uitgang. De volgende paar Tutorial Modules dekken welke code kunnen we schrijven "inside" een altijd blokkeren.
Pro tip: slechts één altijd blok per Verilog module (.v-bestand). Aanpassen van de lijst van de gevoeligheid in plaats van proberen te maken van een ander blok.
Hint (duplicate): U kunt alleen het instellen van waarden voor een reg in een altijd blokkeren, geen toewijzen waarden wilt typen van de draad. U kunt, nochtans, later de draad gelijkgesteld aan van de reg waarde toewijzen.