De case-instructie controleert of de gegeven expressie overeenkomt met een van de andere expressies in de lijst en vertakkingen. Het is doorgaans gebruikelijk om een apparaat te implementeren.
De if-else-constructie is mogelijk niet toepasbaar als er veel meeteenheden zijn die moeten worden gecontroleerd en zou worden samengevoegd tot een prioriteitsencoder in plaats van een apparaat.
In Verilog , bevat een case-instructie alle code tussen de Verilog-trefwoorden case ('casez', 'casex') en endcase. Een casusverklaring kan een select-one-of-many-constructie zijn die ongeveer lijkt op de if-else-if-verklaring van Associate in de verpleegkunde.
Syntaxis
Een Verilog-case-instructie begint met het trefwoord case en eindigt met het trefwoord endcase.
De uitdrukking tussen haakjes is een gebiedseenheid die specifiek één keer moet worden geëvalueerd en wordt vergeleken met de lijst met alternatieven in de volgorde waarin ze zijn geschreven.
En de uitspraken dat de selectie overeenkomt met de gegeven uitdrukkingseenheid zijn dood. Een blok met meerdere instructies moet worden gesorteerd en tussen begin en einde staan.
case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase
Als geen van de zaken overeenkomt met de gegeven uitdrukking, zijn uitspraken binnen de standaard meeteenheid van het item dood. De standaardinstructie is niet verplicht en er is slechts één standaardinstructie in een casusinstructie. Case-instructies zijn genest.
De uitvoering verlaat het case-blok, terwijl er niets wordt gedaan als geen van de items overeenkomt met de expressie, en er wordt geen standaardinstructie gegeven.
Voorbeeld
De volgende Vogue-module bevat een 2-bits opt-for-signaal om één van de drie verschillende 3-bits ingangen naar het bord te leiden dat als 'uit' wordt vermeld.
Een case-instructie wordt gebruikt om de juiste invoer toe te wijzen aan uitvoer die de waarde van sel ondersteunt. Omdat sel een 2-bits signaal kan zijn, heeft het tweeëntwintig combo's, nul tot en met 3. De standaardinstructie helpt om de uitvoer naar nul te leiden als sel 3 is.
module my_mux (input [2:0] a, b, c, // three 3-bit inputs [1:0]sel, // 2-bit opt for signal to choose on from a, b, c output reg [2:0] out); // Output 3-bit signal // invariably block is dead whenever a, b, c or sel changes in value invariably @ (a, b, c, sel) begin case(sel) 2'b00 : out = a; // If sel=0, output can be a 2'b01 : out = b; // If sel=1, output is b 2'b10 : out = c; // If sel=2, output is c default : out = 0; // If sel is something, out is commonly zero endcase end endmodule
Kop van case-instructie
Een header van een case-instructie bestaat uit het trefwoord case ('casez', 'casex'), gevolgd door de case-expressie, meestal allemaal op één regel code.
Bij het toevoegen van full_case- of parallelle_case-richtlijnen aan een case-instructie, wordt de maateenheid van de richtlijn als commentaar in realtime toegevoegd na de case-expressie aan het uiteinde van de case-instructiekop en vóór elk van de case-dingen op daaropvolgende coderegels.
Zaakartikel
Het case-item is dat de gebruikelijke bit-, vector- of Verilog-expressie wordt vergeleken met de case-expressie.
Java versus c++
In tegenstelling tot verschillende programmeertalen op hoog niveau, zoals ' C ', bevat de Verilog case-instructie impliciete break-instructies.
Het eerste case-item dat overeenkomt met deze case-expressie zorgt ervoor dat de corresponderende case-iteminstructie dood is, waardoor alle overige case-items die hiervoor zijn overgeslagen, de case-instructie ondergaan.
Case-itemverklaring
Een case-iteminstructie is een of meerdere Verilog-instructies dood als het case-item overeenkomt met deze case-expressie. In tegenstelling tot VHDL kunnen de zaken van Verilog zelf uitdrukkingen zijn.
Om de parsering van het Verilog-codedocument te wijzigen, moeten Verilog-zaakiteminstructies tussen de trefwoorden worden ingesloten 'beginnen' En 'einde' als meer dan één verklaring dood moet zijn voor een specifiek case-item.
Casez
In Verilog is er een casez-instructie, een variatie op de case-instructie die 'z' en '?' waarden die tijdens de casusvergelijking moeten worden behandeld als 'maakt niet uit'-waarden.
'Z' en '?' meeteenheid die wordt behandeld als: het maakt niet uit of ze zich in de case-expressie bevinden of in het case-item.
Als je in het geheim een case-statement schrijft met 'maakt niet uit', gebruik dan een casez-statement en gebruik '?' tekens in plaats van 'z'-tekens in hoofdletters en kleine letters om 'maakt niet uit'-bits te gebruiken.
Casex
In Verilog is er een casex-instructie, een variatie op de case-instructie waarmee de waarden 'z', '?' en 'x' tijdens de vergelijking kunnen worden behandeld als 'maakt niet uit'-waarden.
'x', 'z' en '?' meeteenheid die wordt behandeld als: het maakt niet uit of ze zich in de case-expressie bevinden of in het case-item.
Volledige casusverklaring
Een volledige case-instructie kan een case-instructie zijn waarin alle verkrijgbare binaire patronen voor case-expressie worden gekoppeld aan een case-item of een case-standaard.
es5 versus es6
Als een case-instructie geen case-standaard omarmt, en het is mogelijk om op zoek te gaan naar een binaire case-expressie die niet overeenkomt met de afgedrukte case-dingen, dan is de case-instructie niet vol.
Een volledige case-instructie kan een case-instructie zijn, waarbij elke verkrijgbare binaire, niet-binaire en combinatie van binaire en niet-binaire patronen als case-item in de case-instructie is ingesloten.
Verilog wil niet dat case-statements ofwel synthese ofwel volledige lipoproteïne-simulatie met hoge dichtheid bevatten, maar Verilog-case-statements worden volledig gemaakt door een case-standaard toe te voegen. VHDL wil dat casusverklaringen volledig zijn met lipoproteïnesimulatie met hoge dichtheid, wat meestal de 'anderen'-clausule van Associate in Nursing verlangt.
Parallelle casusverklaring
Een parallelle case-instructie kan een case-instructie zijn, waarbij het alleen mogelijk is om een case-expressie aan slechts één case-item te koppelen.
Als het mogelijk is om op zoek te gaan naar een case-expressie die kan overeenkomen met één case-item, wordt de overeenkomende maateenheid van case-dingen aangegeven als overlappende case-dingen, en dus is de case-instructie niet parallel.
Hardwareschema
De RTL-code is uitgewerkt om een hardwareschema te krijgen dat een 4 op 1 multiplexer vertegenwoordigt.
Nadat het bovenstaande ontwerp is uitgevoerd, is de uitvoer nul wanneer sel 3 is en komt overeen met de toegewezen invoer voor andere waarden.
ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0b11 out=0x0 [10] a=0x5 b=0x5 c=0x5 sel=0b10 out=0x5 [20] a=0x1 b=0x5 c=0x6 sel=0b01 out=0x5 [30] a=0x5 b=0x4 c=0x1 sel=0b10 out=0x1 [40] a=0x5 b=0x2 c=0x5 sel=0b11 out=0x0 ncsim: *W,RNQUIE: Simulation is complete.
In een case-instructie slaagt de vergelijking alleen als elk bit van de uitdrukking overeenkomt met een van de alternatieven, waaronder 0, 1, x en z. Als in het bovenstaande voorbeeld een van de bits in sel x of z is, wordt de standaard statement zal worden uitgevoerd omdat geen van de andere alternatieven overeenkwam. In een dergelijk geval zal de uitvoer uitsluitend uit nullen bestaan.
ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0bxx out=0x0 [10] a=0x3 b=0x5 c=0x5 sel=0bzx out=0x0 [20] a=0x5 b=0x2 c=0x1 sel=0bxx out=0x0 [30] a=0x5 b=0x6 c=0x5 sel=0bzx out=0x0 [40] a=0x5 b=0x4 c=0x1 sel=0bxz out=0x0 [50] a=0x6 b=0x5 c=0x2 sel=0bxz out=0x0 [60] a=0x5 b=0x7 c=0x2 sel=0bzx out=0x0 [70] a=0x7 b=0x2 c=0x6 sel=0bzz out=0x0 [80] a=0x0 b=0x5 c=0x4 sel=0bxx out=0x0 [90] a=0x5 b=0x5 c=0x5 sel=0bxz out=0x0 ncsim: *W,RNQUIE: Simulation is complete.
Als de case-instructie in het ontwerp x en z bevat in de case-itemalternatieven, zullen de resultaten verschillen.
module mux (input [2:0] a, b, c, output reg [2:0] out); // Case items have x and z, and sel has to match the exact value for // output to be assigned with the corresponding input always @ (a, b, c, sel) begin case(sel) 2'bxz: out = a; 2'bzx: out = b; 2'bxx: out = c; default: out = 0; endcase end endmodule
Differentiatie tussen het geval en if-else
De case-instructie verschilt op twee manieren van if-else-if, zoals:
- Uitdrukkingen gegeven in een als-anders blok zijn algemener, terwijl in een case-blok een enkele expressie wordt gekoppeld aan meerdere items.