Stavek case preveri, ali se dani izraz ujema z enim izmed drugih izrazov znotraj seznama in vej. Običajno se uporablja naprava.
Konstrukcija if-else morda ne bo uporabna, če je merska enota veliko pogojev, ki jih je treba preveriti in bi se sintetizirala v prednostni kodirnik namesto v napravo.
notri Verilog , stavek case vključuje vso kodo med ključnimi besedami Verilog, case ('casez', 'casex') in endcase. Stavek primera je lahko konstrukt izberite enega od mnogih, ki je približno podoben stavku Associate in nursing if-else-if.
Sintaksa
Stavek primera Verilog se začne s ključno besedo case in konča s ključno besedo endcase.
Izraz znotraj oklepajev je površinska enota, ki je namenjena enkratnemu ovrednotenju in se primerja s seznamom alternativ v vrstnem redu, v katerem so zapisane.
In trditve, da se izbor ujema z dano izrazno mersko enoto, so mrtve. Blok več stavkov mora biti razvrščen in biti znotraj začetka in konca.
case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase
Če se nobeden od primerov ne ujema z danim izrazom, so izjave znotraj privzete merske enote postavke mrtve. Privzeti stavek ni obvezen in obstaja samo en privzeti stavek v celotnem primeru. Stavki primerov so ugnezdeni.
Izvedba bo zapustila blok case, medtem ko ne bo naredila ene stvari, če se nobeden od elementov ne ujema z izrazom in privzeti stavek ni podan.
primerek java
Primer
Naslednji modul Vogue vključuje 2-bitno izbiro signala za usmerjanje enega izmed treh različnih 3-bitnih vhodov v znak, ki je naveden kot izhod.
Stavek case se uporablja za dodelitev pravilnega vhoda izhodu, ki podpira vrednost sel. Ker je sel lahko 2-bitni signal, bo imel dvajset kombinacij 2, od nič do 3. Privzeti stavek pomaga pri izhodu vrstice na nič, če je sel 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
Glava izjave o primeru
Glava stavka case je sestavljena iz ključne besede case ('casez', 'casex'), ki ji sledi izraz case, običajno vse v eni vrstici kode.
Pri dodajanju direktiv full_case ali parallel_case stavku case se merska enota direktiv doda kot komentar v realnem času po izrazu case na konici glave stavka case in pred katero koli stvarjo case v naslednjih vrsticah kode.
Predmet ohišja
Postavka primera je, da se bit, vektor ali Verilogov izraz primerja z izrazom primera.
Za razliko od različnih visokonivojskih programskih jezikov, kot je ' C ', izjava o primeru Verilog vključuje implicitne izjave o prekinitvi.
Prva postavka primera, ki se ujema s tem izrazom primera, povzroči, da je ustrezen stavek postavke primera mrtev, zato so vse ostale merske enote stvari v primeru, ki so za to preskočene, podvržene stavku primera.
Izjava o predmetu primera
Stavek case item je en ali več stavkov Verilog mrtev, če se element case ujema s tem izrazom case. Ne tako kot VHDL, so stvari v primeru Veriloga lahko same po sebi izrazi.
Če želite spremeniti razčlenjevanje kodnega dokumenta Verilog, je treba med ključne besede priložiti izjave primerov Verilog 'začeti' in 'konec' če več kot en stavek mora biti mrtev za določen primer.
ascii od a v Javi
Casez
V Verilogu je stavek casez, različica stavka case, ki omogoča 'z' in '?' vrednosti, ki jih je treba v celotni primerjavi primerov obravnavati kot vrednosti 'ni vseeno'.
'Z' in '?' merske enote, obravnavane kot a ni pomembno, ali so znotraj izraza malega primerka ali če so znotraj postavke malega primerka.
Ko tajno pišete stavek case z 'ne skrbi', uporabite stavek casez in uporabite '?' znaki namesto znakov 'z' znotraj velikih in malih črk v namen bitov 'ni mar'.
Casex
V Verilogu obstaja stavek casex, različica stavka case, ki omogoča, da se vrednosti 'z', '?' in 'x' med primerjavo obravnavajo kot vrednosti 'ni vseeno'.
algoritem za razvrščanje vstavljanja
'x', 'z' in '?' merske enote, obravnavane kot a ni pomembno, ali so znotraj izraza malega primerka ali če so znotraj postavke malega primerka.
Celotna izjava o primeru
Celoten stavek primera je lahko stavek primera znotraj tega, da se vsi binarni vzorci izraza velikih in malih črk, ki jih je mogoče pridobiti, ujemajo z elementom primera ali privzetim primerom.
Če stavek case ne zajema privzetega primera in je mogoče iskati binarni izraz case, ki se ne ujema z nobeno od natisnjenih stvari, stavek case ni poln.
Celoten stavek primera je lahko stavek primera, v katerem so vsi binarni, nebinarni in mešani binarni in nebinarni vzorci, ki jih je mogoče pridobiti, v okvirčku kot postavka primera znotraj stavka primera.
Verilog ne želi, da bi bili stavki primerov polni bodisi sinteze bodisi simulacije lipoproteinov visoke gostote, vendar so stavki primerov Verilog popolni z dodajanjem privzetega primera. VHDL želi, da so navedbe primerov polne simulacije lipoproteinov visoke gostote, kar običajno zahteva klavzulo 'drugo' za sodelavca v zdravstveni negi.
Izjava o vzporednem primeru
Vzporedni stavek case je lahko stavek case v notranjosti, ki ga je mogoče dobiti samo za ujemanje izraza case s samo enim elementom case.
Če je mogoče iskati primerni izraz, ki se lahko ujema z enim primerom, je ujemajoča se merska enota primerov navedena kot prekrivajoče se primeri, zato izjava primera ni vzporedna.
Shema strojne opreme
Koda RTL je izdelana tako, da dobi shemo strojne opreme, ki predstavlja multiplekser 4 proti 1.
Po izvedbi zgornje zasnove je izhod nič, ko je sel 3 in ustreza dodeljenim vhodom za druge vrednosti.
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.
V stavku case je primerjava uspešna le, če se vsak bit izraza ujema z eno od alternativ, vključno z 0, 1, x in z. V zgornjem primeru, če je kateri koli od bitov v sel x ali z, je privzeto stavek bo izveden, ker se nobena druga možnost ne ujema. V tem primeru bodo izhodne vrednosti vse ničle.
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.
Če ima izjava primera v načrtu x in z v alternativah elementa primera, se bodo rezultati razlikovali.
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
Razlikovanje med case in if-else
Stavek case se razlikuje od if-else-if na dva načina, na primer:
- Izrazi, navedeni v an če potem blok so bolj splošni, medtem ko se v primeru bloka en izraz ujema z več elementi.