logo

Verilog Fall Statement

Casesatsen kontrollerar om det givna uttrycket matchar ett av de andra uttrycken i listan och grenarna. Det är vanligtvis vana vid att implementera en enhet.

vad är en dubbel java

If-else-konstruktionen kanske inte är tillämplig om det finns en måttenhet för många förhållanden som ska kontrolleras och skulle syntetiseras till en prioritetskodare istället för en enhet.

I Verilog , innehåller en case-sats hela koden mellan Verilog-nyckelorden, case ('casez', 'casex') och endcase. Ett falluttalande kan vara en utvald-av-många-konstruktion som är ungefär som Associate in nursing if-else-if-påstående.

Syntax

En Verilog-fallsats börjar med nyckelordet case och slutar med nyckelordet slutcase.

Uttrycket inom parentes områdesenhet som syftar till att utvärderas specifikt en gång och jämförs med listan över alternativ i den ordning de skrivs.

Och påståendena om att urvalet stämmer överens med den givna uttrycksenheten för måtten död. Ett block med flera påståenden borde sorteras och finnas inom början och slutet.

 case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase 

Om inget av fallen stämmer överens med det givna uttrycket, är satser inom standardobjektets måttenhet döda. Standardsatsen är icke-obligatorisk, och det finns bara en standardsats i en case-sats. Falluttalanden är kapslade.

Exekvering kommer att avsluta case-blocket medan man inte gör en sak om inget av objekten matchar uttrycket och en standardsats inte ges.

Exempel

Följande modemodul innehåller en 2-bitars opt-signal för att dirigera en mellan de tre olika 3-bitars ingångarna till skylten som anges som out.

En case-sats används för att tilldela rätt indata till utdata som stöder värdet på sel. Eftersom sel kan vara en 2-bitars signal kommer den att ha tjugotvå kombinationer, noll till 3. Standardsatsen hjälper till att radera utdata till noll om sel är 3.

 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 

Header för ärendeutlåtande

En case-satshuvud består av nyckelordet case ('casez', 'casex') följt av case-uttrycket, vanligtvis allt på en kodrad.

När full_case- eller parallell_case-direktiv läggs till i en case-sats, läggs direktivets måttenhet till som en kommentar i realtid efter case-uttrycket i spetsen av case-satsens rubrik och före någon av case-sakerna på efterföljande kodrader.

Fallobjekt

Case-objektet är att biten, vektorn eller Verilog-uttrycket som är vant jämförs med case-uttrycket.

Till skillnad från olika högnivåprogrammeringsspråk som ' C ', inkluderar Verilog-fallssatsen implicita break-satser.

Den första case-posten som matchar detta case-uttryck gör att motsvarande case item-sats är död, så att resten av case-sakers måttenhet som hoppades över för detta genomgår case-satsen.

Ärendepostutlåtande

En case item-sats är en eller flera Verilog-satser döda om case-objektet matchar detta case-uttryck. Inte som VHDL, Verilog fall saker kan själva vara uttryck.

För att ändra tolkningen av Verilog-koddokument, bör Verilog-fallspostsatser vara inneslutna mellan nyckelorden 'Börja' och 'slutet' om över ett uttalande ska vara död för ett specifikt fall.

Casez

I Verilog finns det en casez-sats, en variant av case-satsen som aktiverar 'z' och '?' värden som ska behandlas genom fall-jämförelse som 'bryr sig inte'-värden.

'Z' och '?' måttenheter som behandlas som en bryr sig inte om de är inuti kasusuttrycket eller om de finns inuti kasusobjektet.

När du skriver ett case-uttalande i hemlighet med 'bryr sig inte', använd ett casez-uttalande och använd '?' tecken i stället för 'z'-tecken inuti fallet saker till syfte 'bryr sig inte' bitar.

Casex

I Verilog finns det en casex-sats, en variant av case-satsen som gör att 'z', '?' och 'x'-värden kan behandlas under jämförelsen som 'don't care'-värden.

'x', 'z' och '?' måttenheter som behandlas som en bryr sig inte om de är inuti kasusuttrycket eller om de finns inuti kasusobjektet.

Fullständigt ärendeutlåtande

En fullständig case-sats kan vara en case-sats inuti att alla getable case-expression binära mönster matchas till ett case-objekt eller en case-standard.

Om en case-sats inte omfattar en case-standard, och det går att titta på ett binärt case-uttryck som inte matchar någon av de utskrivna case-sakerna, är case-satsen inte full.

En fullständig case-sats kan vara en case-sats inuti att varje getable binär, icke-binär och blandning av binära och icke-binära mönster är inramad som en case-post i case-satsen.

Verilog vill inte att fallutlåtanden ska vara antingen syntes eller högdensitetslipoproteinsimulering fulla, men Verilogs falluttalanden görs fullständiga genom att lägga till en standard för fall. VHDL vill att fall uttalanden ska vara högdensitet lipoproteinsimulering full, som vanligtvis önskar Associate in Nursing 'andra' klausul.

linux vilket kommando

Parallellt fallbeskrivning

En parallell case-sats kan vara en case-sats inuti som det bara går att matcha ett case-uttryck med endast ett case-objekt.

Om det går att leta upp ett kasusuttryck som kan matcha över ett fallobjekt, anges den matchande case-ting-måttenheten som överlappande case-saker, och därför är case-satsen inte parallell.

Hårdvaruschema

RTL-koden är utarbetad för att få ett hårdvaruschema som representerar en 4 till 1 multiplexer.

Verilog Fall Statement

Efter exekvering av ovanstående design är utgången noll när sel är 3 och motsvarar de tilldelade ingångarna för andra värden.

 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. 

I en fallsats, lyckas jämförelsen bara när varje bit i uttrycket matchar ett av alternativen inklusive 0, 1, x och z. I exemplet ovan, om någon av bitarna i sel är antingen x eller z, standard uttalandet kommer att köras eftersom inget av de andra alternativen matchade. I ett sådant fall kommer alla utdata att vara nollor.

 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. 

Om case-satsen i design har x och z i case-postalternativen kommer resultaten att skilja sig.

 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 

Differentiering mellan fallet och if-else

Fallförklaringen skiljer sig från if-else-if på två sätt, till exempel:

  • Uttryck som ges i en om annat block är mer generella, medan i ett kasusblock matchas ett enda uttryck med flera objekt.
  • Fallet ger ett definitivt resultat när det finns X- och Z-värden i ett uttryck.