Leren Verilog: Een korte Tutorial-serie over digitale elektronica ontwerp met FPGA en Verilog HDL (19 / 21 stap)

Stap 19: VM 4.2: blokkeren vs. Non-Blocking Verilog verklaringen

Het lijkt misschien vreemd dat we overschakelen blokken te blokkeren/niet-blokkerende altijd te bespreken, maar dit de perfecte tijd is om een nieuw concept.

Wanneer we code in C/C++ schrijven, onze code regel voor regel in sequentiële volgorde is uitgevoerd totdat het programma wordt verteld om af te wijken van dit patroon (bijvoorbeeld naar een bepaalde regel springen). Een regel wordt uitgevoerd en pas na het afwerkingen uitvoeren is de volgende regel uitgevoerd. Voor de meest praktische doeleinden zien we niet iedere vertraging bij de eenvoudige consoletoepassingen. Maar in digitaal ontwerp, deze vertraging van het uitvoeren van één regel naar het volgende zeer negatieve en merkbare gevolgen zou kunnen hebben. Zelfs vertragingen van minder dan een nanoseconde kon veroorzaken problemen; glitches om precies te zijn.

Een glitch is formeel gedefinieerd als een kortstondige en ongewenste wijziging in de uitgang van een circuit als gevolg van een ingang voor het invoeren van een tijdelijke staat en de input hebben van ten minste twee paden door het circuit met geen gelijkwaardige gate vertragingen tussen paden.

Stel je voor dat je hebt twee schakelaars (sw0 en sw1) die beide een logica van 0 waren, en de daaruit voortvloeiende output van een enkele LED een logica een was mochten beide schakelaars een logica 0 (LED = ~(sw0 & sw1)), onder andere gewenste uitgangen. Maar zeggen dat u sw1 spiegelen naar een hoge staat van logica. Wat gebeurt er als alleen voor een kleine fractie van een seconde dat LED nog steeds een logica terwijl de spanning van de bron sw1 was "rimpelingen" weg "downstream" door de logic-poorten in haar verschillende paden totdat het tot de laatste in het circuit poort? Daarin ligt een fractie van een seconde waar de LED een logica een is wanneer theoretisch het moet een logica nul; uw circuit brak de regels van de vergelijkingen van zijn eigen logica!

Terwijl het punt van deze module is niet ter dekking van hoe op te lossen van storingen in uw logica verklaringen, is het punt dat zelfs mooi gevormde logica vergelijkingen voor circuits die zijn "glitch gratis" potentieel een glitch maken kunnen als u een blokkerende instructie gebruiken waar u moet hebt gebruikt een niet-blokkerende instructie en vice versa.

Hoe gaat dit gebeuren en waarom zou het verkeerde Verilog verklaring veroorzaken dit?

Een blokkerende instructie is een toe te wijzen (het hoeft niet noodzakelijkerwijs gebruik van het "toewijzen" sleutelwoord) verklaring die met de operator "=". Blokkerende instructies worden uitgevoerd als code in C/C++: opeenvolgend en in volgorde.

Een verklaring van niet-blokkerende is een vertaaltaken toe te wijzen-instructie waarin met de "< =" exploitant. Non-blocking verklaringen toen zette in hetzelfde bereik van code met andere niet-blokkerende verklaringen zal gelijktijdig worden uitgevoerd.

Re lees de bovenstaande definities zoals ze zeer belangrijk zijn.

Een gemeenschappelijke gedachte studenten kunnen hebben is "Verilog code een hardwarebeschrijvingstaal, is dus het moet niet uit wat voor soort verklaring ik schrijf omdat het synthetiseren in hetzelfde fysieke circuit en gedragen zich op dezelfde manier." Dit is niet noodzakelijkerwijs het geval, als de complexe Verilog compiler zal hebben om verschillende transistor patronen om door te geven van de verschillende signalen naar verschillende plaatsen te maken, en u moet opgeven als dit moet gebeuren op hetzelfde moment of op andere tijdstippen. Is het wellicht efficiënter om te bouwen van een circuit met verklaringen die signalen tegelijk handig om het circuit kunnen direct blokkeren, maar vaak is het belangrijk dat de twee of meer uitvoer veranderingen op in wezen hetzelfde moment plaatsvinden.

Ziet u hoe een reeks blokkerende instructies ongunstig van circuit gedrag zou kunnen beïnvloeden? De verklaringen van de hoogste niveau toewijzen blokkeren omdat de instructies worden alleen "uitgevoerd" eenmaal, maar iets als een decoder die kan "always" worden herevaluatie van voorwaarden moet u uitgangen tegelijkertijd wijzigen. Stel je de problemen die een ingenieur hebben zou als hun decoder-uitgang GS en uitgangssignalen EO gewijzigd op verschillende tijdstippen!

Neem een kijkje op enkele eenvoudige voorbeelden ("als" verklaringen vallen in de volgende module!):

Example #1
altijd @ (sw0, sw1)
beginnen
Als (sw0 == 1' b1)
beginnen
alle deze uitgangen krijgt hun
waarden op hetzelfde moment
Uitgang1 < = 1' b0;
output2 < = 1' b1;
output3 < = 1' b0;
einde
einde

Voorbeeld #2
altijd @ (sw0, sw1)
beginnen
Als (sw0 == 1' b1)
beginnen
het eerste resultaat krijgt, dan de volgende twee
gelijktijdig zal worden toegewezen
Uitgang1 = 1' b0;
output2 < = 1' b1;
output3 < = 1' b0;
einde
einde

Example #3
altijd @ (sw0, sw1)
beginnen
Als (sw0 == 1' b1)
beginnen
het eerste resultaat krijgt, dan de volgende twee zal
na elkaar worden toegewezen
Uitgang1 = 1' b0;
output2 = 1' b1;
output3 = 1' b0;
einde
einde

Nooit zetten een blokkerende instructie binnenkant van een blok van de structurele logica. Met andere woorden, Leg nooit een "=" binnenkant van een altijd blokkeren. Zelfs als u alleen het wijzigen van een uitgang is slechte praktijken een blokkerende instructie te gebruiken.

Altijd een blokkerende instructie gebruiken bij het gebruik van het sleutelwoord "toewijzen". Deze verklaringen vindt altijd plaats buiten een altijd blokkeren. Voorbeeld gebruik zou worden waarbij een reg waarvan de waarde die u wijzigt binnenkant van een altijd blokkeren, vervolgens toe te wijzen een draad output "=" van de reg waarde.

Hint: je meestal krijgt een reg een waarde door gebruik te maken van het formulier: < naam van reg >< = < waarde >;

Extra 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 echter later de draad gelijkgesteld aan van de reg waarde toewijzen.

Gerelateerde Artikelen

Hoe maak je een korting op de schouder lange mouwen jurk met riem

Hoe maak je een korting op de schouder lange mouwen jurk met riem

Turkoois, zwart of andere kleuren je wilt. Maak een mooie, dromerige jurk voor de lente! Stel dat u zal de afgunst tussen uw vrienden ;)Om deze jurk die je nodig hebt: jersey of lycra, pins, naaimachine, schaar, meten tape, krijt of potlood.Stap 1: E
Maken van een kort verhaal met niets, maar een willekeurige Object voor je

Maken van een kort verhaal met niets, maar een willekeurige Object voor je

Soms schrijven de moeilijkste manier om jezelf te uiten aan de wereld kan worden. Maar zodra u wat weet te schrijven en je zoveel oefenen hebt als je kunt krijgen, je bent een stap dichter bij steeds een groot schrijver.Uiteraard moet je een beetje m
LinKit een GPS Tutorial

LinKit een GPS Tutorial

Uit de talrijke functies die de Linkit één Raad van bestuur heeft, is GPS een van hen! Toen ik begon op proberen te gebruiken GPS de Linkit, kostte het me weken te halen op werking omdat:Was ik onbekend met de werking van GPSHet codevoorbeeld hoefde
Beginners Video Tutorial-serie voor IoT met Intel Edison (IntelIot)

Beginners Video Tutorial-serie voor IoT met Intel Edison (IntelIot)

Ongeveer een maand terug ik de gelegenheid gehad om deel uit te maken van IoT road show wordt georganiseerd door Intel in Pune, India. Het was een geweldige ervaring. Ik wilde een IoT gecontroleerde RC auto met paar functies te bouwen. Die hebben gew
SketchUp 3D modellering, Bestandsconversie en advies voor afdrukken in 3d, een korte handleiding

SketchUp 3D modellering, Bestandsconversie en advies voor afdrukken in 3d, een korte handleiding

Ik zag deze wedstrijd met betrekking tot afdrukken in 3d en dacht ik moet invoeren, deels omdat ik zou heel graag enkele van de prijzen en ook omdat ik denk dat dit instructable kan helpen u om uw 3D-modellering en vandaar animatie of 3d printen verm
Bouwen van een korte draak (16 voet 3 - Board Outrigger zeilen kano)

Bouwen van een korte draak (16 voet 3 - Board Outrigger zeilen kano)

Opmerking: versie 4.0 12 mei 2011--toegevoegde stap 7 over een korte trimaran conversie voor de uitdaging van de Everglades. Ik praat meer over zeilen (en andere dingen) op mijn blog, Tristram Shandy in de 21e eeuw, www.tristramshandy21st.blogspot.co
Krijgen begon met Python en programmeren - de korte Tutorial

Krijgen begon met Python en programmeren - de korte Tutorial

zodat ik zien dat u geïnteresseerd bent in het leren over programmeren... of slangen.Als u hier voor slangen, spijt dat is dit niet de plek voor jou. Nou, misschien...Als u hier bent om te leren over programmeren of Python dan u bent aangekomen. Deze
Een korte geschiedenis van de tijd

Een korte geschiedenis van de tijd

"Mensen begrijpen niet tijd. Het is niet wat u denkt dat het is. - Mensen veronderstellen dat de tijd een strikte progressie van oorzaak daartoe is... maar eigenlijk, vanuit het oogpunt van niet-lineaire, niet-subjectieve meer als een grote bal van w
Hoe schrijf je een kort verhaal

Hoe schrijf je een kort verhaal

IntroOm te leren hoe om te schrijven een kort verhaal, je moet kiezen uw thema's, instelling(en), tekens en het punt van uitzicht (1e persoon, 2de persoon, 3e persoon). Je moet hebben een interessant onderwerp en gebruik van grote woorden, zodat mens
Leren tekenen een stripfiguur

Leren tekenen een stripfiguur

Say goodbye te houden van mannen voor eeuwig! Dit Instructable leert u fundamentele beginselen die u kunnen helpen uw eigen indrukwekkende stripfiguur tekenen. Afhankelijk van hoe comfortabel u in tekenen bent, kan beheersen van dit eenvoudige karakt
Een volledig nieuwe theorie over de bouw van piramides (voor zover ik weet)

Een volledig nieuwe theorie over de bouw van piramides (voor zover ik weet)

Dus, hier is het uitgangspunt: U bent een miljardair dot com, of de uitvinder van een smaak van sociale media software app, of misschien u zojuist heb verlaten potjes door uw rijke oude oom en uw BFF pussycat heeft net verloren alle negen levens is d
Een andere How-To over verbetering van uw gezichtsvermogen natuurlijk.

Een andere How-To over verbetering van uw gezichtsvermogen natuurlijk.

ik zal open uw ogen tot een manier van verbeteren visie natuurlijk, door eenvoudige oog oefeningen die zal leiden tot een gezonde ogen en visie duidelijk te volgen. Ik zal vertellen dat u wilt dat ik weet, en ik wil horen van mensen die het toevoegen
Leren van een tweede taal een woord een dag armband

Leren van een tweede taal een woord een dag armband

de universele moeilijkheidsgraad van het leren van een tweede taal is het feit dat studenten oren, mond, ogen, handen en gedachten niet worden ondergedompeld in het milieu. Als ze niet de kans om te gebruiken wat ze leren al snel genoeg, vergeten stu
Hoe maak je een korte Film van Professional voor $80 (deel I - pre-productie).

Hoe maak je een korte Film van Professional voor $80 (deel I - pre-productie).

Deel II kan hier worden gevonden: How to make van een korte Film van Professional voor $80 (deel II - productie)Ik heb het maken van films sinds de vijfde klas. In deze tijd, heb ik talloze korte broek die voortdurend beter krijgen gemaakt. Als een s