logo

Verilog Case Statement

Kasussætningen kontrollerer, om det givne udtryk matcher et af de andre udtryk i listen og grenene. Det er typisk vant til at implementere en enhed.

If-else-konstruktionen er muligvis ikke anvendelig, hvis der er mange måleenheder, der skal kontrolleres, og den vil syntetiseres til en prioritetskoder i stedet for en enhed.

I Verilog , indeholder en case-sætning hele koden mellem Verilog-nøgleordene, case ('casez', 'casex') og endcase. En case-erklæring kan være en udvalgt-en-af-mange-konstruktion, der er nogenlunde ligesom Associate in nursing if-else-if statement.

Syntaks

En Verilog-sagsudsagn starter med case-nøgleordet og slutter med endcase-nøgleordet.

mysql liste brugere

Udtrykket inden for parentes arealenhed, der sigter mod at blive evalueret specifikt én gang og sammenlignes med listen over alternativer i den rækkefølge, de er skrevet.

Og udsagn om, at udvælgelsen matcher den givne udtryksenhed for måleenhed døde. En blok af flere udsagn bør sorteres og være inden for start og slut.

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

Hvis ingen af ​​case-tingene matcher det givne udtryk, er udsagn inden for standardelementets måleenhed døde. Standarderklæringen er ikke-obligatorisk, og der er kun én standarderklæring gennem en sagserklæring. Sagsudsagn er indlejret.

Udførelse afslutter sagsblokken, mens der ikke gøres én ting, hvis ingen af ​​elementerne matcher udtrykket, og der ikke er givet en standardsætning.

Eksempel

fuld form pvr

Følgende vogue-modul inkluderer et 2-bit opt ​​for signal til at dirigere en blandt de tre forskellige 3-bit inputs til skiltet angivet som out.

En case-sætning bruges til at tildele det korrekte input til output understøttet værdien af ​​sel. Da sel kan være et 2-bit signal, vil det have 22 kombinationer, nul til 3. Standardsætningen hjælper med at linje output til nul, hvis sel er 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 

Sagserklæringsoverskrift

En case-udsagnsheader består af nøgleordet case ('casez', 'casex') efterfulgt af case-udtrykket, normalt alt på én linje kode.

Ved tilføjelse af fuld_tilfælde- eller paralleltilfælde-direktiver til en sagserklæring, tilføjes direktivets måleenhed som en kommentar i realtid efter sagsudtrykket i spidsen af ​​sagserklæringens header og før nogen af ​​sagstingene på efterfølgende kodelinjer.

Sagspost

Case-elementet er, at bit-, vektor- eller Verilog-udtrykket sammenlignes med case-udtrykket.

I modsætning til forskellige programmeringssprog på højt niveau som ' C ', indeholder Verilog-sagserklæringen implicitte pauseerklæringer.

Det første kasuselement, der matcher dette kasusudtryk, bevirker, at den tilsvarende kasuselementudsagn er død, og derfor gennemgår alle resten af ​​case-tingets måleenhed, der er sprunget over for dette, kasussætningen.

javascript onclick

Sagspunktsopgørelse

En case item-sætning er en eller flere Verilog-sætninger døde, hvis case-elementet matcher dette case-udtryk. Ikke ligesom VHDL, Verilog tilfælde ting kan selv være udtryk.

For at ændre parsingen af ​​Verilog-kodedokumentet, bør Verilog-sagselementudsagn omsluttes mellem nøgleordene 'begynde' og 'ende' hvis over én erklæring skal være død for en konkret sagspost.

Casez

I Verilog er der en casez-sætning, en variation af case-sætningen, der aktiverer 'z' og '?' værdier, der skal behandles gennem case-sammenligning som 'ligeglade' værdier.

'Z' og '?' måleenhed behandlet som en er ligeglad med, om de er inde i case-udtrykket, eller om de er inde i case-elementet.

Når du hemmeligt skriver en sagserklæring med 'det er ligeglad', skal du bruge en casez-erklæring og bruge '?' tegn i stedet for 'z' tegn inde i sagen ting til formål 'ligeglad' bits.

Casex

I Verilog er der en casex-sætning, en variation af case-sætningen, der gør det muligt at behandle 'z', '?' og 'x' værdier under sammenligningen som 'ligeglade' værdier.

'x', 'z' og '?' måleenhed behandlet som en er ligeglad med, om de er inde i case-udtrykket, eller om de er inde i case-elementet.

Fuld sagserklæring

En fuld case-sætning kan være en case-sætning inde i, at alle getable case-ekspression binære mønstre matches til et case-element eller en case-standard.

logo java

Hvis en case-sætning ikke omfatter en case-standard, og den er i stand til at se et binært case-udtryk, der ikke matcher nogen af ​​de udskrevne case-ting, er case-sætningen ikke fuld.

En fuld case-sætning kan være en case-sætning inde i, at hver getable binære, ikke-binære og blanding af binære og ikke-binære mønstre er indrammet som et case-element i case-sætningen.

Verilog ønsker ikke, at case-udsagn skal være enten syntese eller high-density lipoprotein-simulering fuld, men Verilog-case-udsagn gøres fuld ved at tilføje en case-standard. VHDL ønsker, at case-udsagn skal være fuld af lipoproteinsimulering med høj densitet, som normalt ønsker Associate in Nursing 'andre'-klausulen.

Parallel sagsfremstilling

En parallel case-sætning kan være en case-sætning inde i, at den kun er i stand til at matche et case-udtryk til kun ét case-element.

Hvis det er muligt at gå og kigge på et kasusudtryk, som kan matche over ét kasuselement, angives den matchende case-ting-måleenhed som overlappende case-ting, og derfor er kasussætningen ikke parallel.

Hardwareskema

RTL-koden er udarbejdet for at få et hardwareskema, der repræsenterer en 4 til 1 multiplekser.

Verilog Case Statement

Efter at have udført ovenstående design, er outputtet nul, når sel er 3 og svarer til de tildelte input for andre værdier.

mikrotjenester tutorial
 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 case-sætning lykkes sammenligningen kun, når hver bit af udtrykket matcher et af alternativerne inklusive 0, 1, x og z. I ovenstående eksempel, hvis nogen af ​​bits i sel er enten x eller z, er Standard sætningen vil blive udført, fordi ingen af ​​de andre alternativer matchede. I et sådant tilfælde vil output være alle nuller.

 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. 

Hvis case-sætningen i design har x og z i case-punktsalternativerne, vil resultaterne afvige.

 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 mellem sagen og if-else

Sagserklæringen er forskellig fra if-else-if på to måder, såsom:

  • Udtryk givet i en hvis ellers blok er mere generelle, mens et enkelt udtryk i en kasusblok matches med flere elementer.
  • Sagen vil give et endeligt resultat, når der er X- og Z-værdier i et udtryk.