logo

Verilog sakserklæring

Kasussetningen sjekker om det gitte uttrykket samsvarer med ett av de andre uttrykkene i listen og grenene. Det er vanligvis vant til å implementere en enhet.

If-else-konstruksjonen er kanskje ikke aktuelt hvis det er en måleenhet mange forhold som skal kontrolleres og vil syntetiseres til en prioritert koder i stedet for en enhet.

I Verilog , inkluderer en kasussetning all koden mellom Verilog-nøkkelordene, kasus ('casez', 'casex') og sluttbokstav. En saksuttalelse kan være en utvalgt-av-mange-konstruksjon som er omtrent som Associate in nursing if-else-if-utsagn.

Syntaks

En Verilog-saksuttalelse starter med case-nøkkelordet og slutter med endcase-nøkkelordet.

mysql liste brukere

Uttrykket innenfor parentes arealenhet som tar sikte på å bli evaluert spesifikt én gang og sammenlignes med listen over alternativer innenfor rekkefølgen de er skrevet.

Og utsagnene om at utvalget samsvarer med den gitte uttrykksenheten for mål døde. En blokk med flere utsagn bør sorteres og være innenfor start og slutt.

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

Hvis ingen av tilfellene samsvarer med det gitte uttrykket, vil utsagn i standardelementets måleenhet døde. Standardsetningen er ikke obligatorisk, og det er bare én standardsetning gjennom en sakserklæring. Saksuttalelser er nestet.

Utførelse vil avslutte saksblokken, mens du ikke gjør én ting hvis ingen av elementene samsvarer med uttrykket, og en standardsetning ikke er gitt.

Eksempel

full form pvr

Følgende vogue-modul inkluderer et 2-bits opt for signal for å rute en mellom de tre forskjellige 3-bits inngangene til skiltet som er oppgitt som ut.

En kasussetning brukes til å tilordne riktig inngang til utdata som støttes verdien av sel. Siden sel kan være et 2-bits signal, vil det ha tjueto kombinasjoner, null til og med 3. Standardsetningen hjelper til med å sette utdata til null 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 

Overskrift for saksuttalelse

En kasussetningsoverskrift består av nøkkelordet case ('casez', 'casex') etterfulgt av kasusuttrykket, vanligvis alt på én kodelinje.

Når du legger til full_case- eller parallel_case-direktiver til en saksuttalelse, ble direktivets måleenhet lagt til som en kommentar i sanntid etter kasusuttrykket på tuppen av saksuttalelsens overskrift og før noen av sakene på påfølgende kodelinjer.

Sakselement

Sakselementet er at biten, vektoren eller Verilog-uttrykket som er vant, sammenlignes med kasusuttrykket.

I motsetning til forskjellige programmeringsspråk på høyt nivå som ' C ', inkluderer Verilog-saksuttalelsen implisitte pauseutsagn.

Det første kasuselementet som samsvarer med dette kasusuttrykket fører til at den korresponderende kasuselementsetningen er død, og dermed gjennomgår alle resten av sakens måleenhet hoppet over for dette kasussetningen.

stable java

Sakspostuttalelse

En sakselementsetning er én eller mange Verilog-setninger døde hvis sakselementet samsvarer med dette kasusuttrykket. Ikke som VHDL, Verilog tilfelle ting kan i seg selv være uttrykk.

For å endre parsingen av Verilog-kodedokumentet, bør Verilog-sakselementutsagn omsluttes mellom nøkkelordene 'begynne' og 'slutt' hvis over én utsagn skal være død for en konkret sakspost.

Casez

I Verilog er det en casez-setning, en variant av case-setningen som aktiverer 'z' og '?' verdier som skal behandles gjennom case-sammenligning som 'bryr seg ikke'-verdier.

'Z' og '?' måleenhet behandlet som en ikke bryr seg om de er inne i kasusuttrykket eller om de er inne i kasuselementet.

Når du skriver en saksuttalelse i hemmelighet med 'bryr deg ikke', bruk en casez-uttalelse og bruk '?' tegn i stedet for 'z' tegn inne i saken ting til formål 'bryr seg ikke' biter.

Casex

I Verilog er det en casex-setning, en variant av case-setningen som gjør at 'z'-, '?'- og 'x'-verdier kan behandles gjennom sammenligningen som 'bryr seg ikke'-verdier.

'x', 'z' og '?' måleenhet behandlet som en ikke bryr seg om de er inne i kasusuttrykket eller om de er inne i kasuselementet.

Full sakserklæring

En fullstendig kasussetning kan være en kasussetning i at alle binære kasusuttrykksmønstre matches til et sakselement eller en saksstandard.

string.format java-streng

Hvis en kasussetning ikke omfatter en saksstandard, og det er mulig å se ut et binært kasusuttrykk som ikke samsvarer med noen av de trykte kasusuttrykkene, er ikke kasussetningen full.

En fullstendig kasussetning kan være en kasussetning i at hver enkelt binær, ikke-binær og blanding av binære og ikke-binære mønstre er innrammet som et kasuselement inne i kasussetningen.

Verilog ønsker ikke at kasussetninger skal være fulle av verken syntese eller lipoproteinsimulering med høy tetthet, men Verilog-tilfelleutsagn gjøres fullstendige ved å legge til en standardtilfelle. VHDL ønsker at saksuttalelser skal være fulle av lipoproteinsimulering med høy tetthet, som vanligvis ønsker Associate in Nursing 'andre'-klausulen.

Parallell saksuttalelse

En parallell kasussetning kan være en kasussetning inni som det bare er mulig å matche et kasusuttrykk med bare ett kasuselement.

Hvis det er mulig å se ut et kasusuttrykk som kan matche over ett kasuselement, er målenheten for samsvarende kasusting angitt som overlappende kasusting, og derfor er ikke kasussetningen parallell.

Maskinvareskjema

RTL-koden er utarbeidet for å få et maskinvareskjema som representerer en 4 til 1 multiplekser.

Verilog sakserklæring

Etter å ha utført designen ovenfor, er utgangen null når sel er 3 og tilsvarer de tilordnede inngangene for andre verdier.

hvordan slå av utviklermodus for Android
 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 kasussetning lykkes sammenligningen bare når hver bit av uttrykket samsvarer med et av alternativene inkludert 0, 1, x og z. I eksemplet ovenfor, hvis noen av bitene i sel er enten x eller z, vil misligholde setningen vil bli utført fordi ingen av de andre alternativene samsvarte. I et slikt tilfelle vil utgangen 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. 

Dersom case-utsagnet i design har x og z i case-postalternativene, vil resultatene avvike.

 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 

Differensiering mellom case og if-else

Saksuttalelsen er forskjellig fra if-else-if på to måter, for eksempel:

  • Uttrykk gitt i en hvis-annet blokk er mer generelle, mens i en kasusblokk matches et enkelt uttrykk med flere elementer.
  • Saken vil gi et definitivt resultat når det er X- og Z-verdier i et uttrykk.