Naredba case provjerava podudara li se dani izraz s jednim među ostalim izrazima unutar popisa i grana. To je obično navikla implementirati uređaj.
Konstrukcija if-else možda neće biti primjenjiva ako postoji mjerna jedinica mnogo uvjeta koje treba provjeriti i sintetizirala bi se u prioritetni koder umjesto u uređaj.
U Verilog , izjava o slučaju uključuje sav kod između ključnih riječi Veriloga, slučaja ('casez', 'casex') i kraja slučaja. Izjava slučaja može biti konstrukt odabira jednog od više koji je otprilike poput naredbe Associate in nursing if-else-if.
Sintaksa
Verilogova izjava o slučaju počinje ključnom riječi case i završava ključnom riječi endcase.
Izraz unutar jedinice površine u zagradama ima za cilj da se procijeni posebno jednom i uspoređuje se s popisom alternativa unutar redoslijeda kojim su napisani.
java arraylist
I izjave da odabir odgovara zadanoj jedinici mjere izraza mrtve. Blok od više naredbi treba biti razvrstan i biti unutar početka i kraja.
case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase
Ako se niti jedna velika i mala veličina ne podudara s danim izrazom, izjave unutar zadane mjerne jedinice stavke su mrtve. Zadana izjava nije obavezna i postoji samo jedna zadana izjava u cijeloj izjavi slučaja. Iskaz slučaja je ugniježđen.
Izvršenje će izaći iz bloka slučaja dok se neće raditi jedna stvar ako niti jedna od stavki ne odgovara izrazu, a zadana izjava nije dana.
Primjer
Sljedeći modni modul uključuje 2-bitnu opciju za signal za usmjeravanje jednog između tri različita 3-bitna ulaza na znak koji je naveden kao izlaz.
Iskaz slučaja koristi se za dodjeljivanje ispravnog ulaza izlazu koji podržava vrijednost sel. Budući da sel može biti 2-bitni signal, imat će dvadeset 2 kombinacija, od nula do 3. Zadana izjava pomaže da se linijski izlaz postavi na nulu ako 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
Zaglavlje izjave o slučaju
Zaglavlje naredbe case sastoji se od ključne riječi case ('casez', 'casex') iza koje slijedi izraz case, obično sve u jednom retku koda.
Prilikom dodavanja direktiva full_case ili parallel_case naredbi case, mjerna jedinica direktive dodaje se kao komentar u stvarnom vremenu nakon izraza case na vrhu zaglavlja naredbe case i prije bilo koje stvari case u sljedećim linijama koda.
Stavka kućišta
Stavka slučaja je da se bit, vektor ili Verilog izraz navikli uspoređivati s izrazom slučaja.
Za razliku od različitih programskih jezika visoke razine poput ' C ', Verilog case izjava uključuje implicitne break izjave.
df.loc
Prva stavka slučaja koja odgovara ovom izrazu slučaja uzrokuje da odgovarajući iskaz stavke slučaja bude mrtav, stoga sve ostale mjerne jedinice stvari slučaja preskočene za ovo prolaze kroz iskaz slučaja.
Izjava o predmetu
Izjava stavke slučaja je jedna ili više Verilog izjava mrtvih ako stavka slučaja odgovara ovom izrazu slučaja. Ne poput VHDL-a, stvari u slučaju Veriloga mogu same po sebi biti izrazi.
Da biste promijenili raščlanjivanje dokumenta Verilog koda, Verilog izjave o stavkama slučaja trebale bi biti priložene između ključnih riječi 'početi' i 'kraj' ako preko jedne izjave treba biti mrtva za određenu stavku slučaja.
Casez
U Verilogu postoji naredba casez, varijacija naredbe case koja omogućuje 'z' i '?' vrijednosti koje treba tretirati tijekom usporedbe slučajeva kao vrijednosti koje nisu važne.
'Z' i '?' jedinica mjere koja se tretira kao ne zanima jesu li unutar izraza slučaja ili unutar stavke slučaja.
Kada tajno pišete naredbu slučaja s 'nije me briga', upotrijebite naredbu casez i upotrijebite '?' znakovi umjesto 'z' znakovi unutar velikih i malih slova stvari u svrhu 'ne zanimaju' bitovi.
Casex
U Verilogu postoji naredba casex, varijacija naredbe case koja omogućuje da se vrijednosti 'z', '?' i 'x' tijekom usporedbe tretiraju kao vrijednosti 'ne zanimaju'.
'x', 'z' i '?' jedinica mjere koja se tretira kao ne zanima jesu li unutar izraza slučaja ili unutar stavke slučaja.
Potpuna izjava o slučaju
Potpuna izjava o slučaju može biti izjava o slučaju unutar koje se svi binarni uzorci izraza velikih i malih slova koji se mogu dobiti podudaraju sa stavkom slučaja ili zadanim slučajem.
Ako naredba case ne obuhvaća zadani case i može se tražiti binarni izraz case koji ne odgovara nijednoj od ispisanih stvari case, naredba case nije puna.
Potpuna naredba slučaja može biti naredba slučaja unutar koje je svaki binarni, nebinarni i mješavina binarnih i nebinarnih uzoraka uokviren kao stavka slučaja unutar naredbe slučaja.
Verilog ne želi da iskazi slučaja budu puni sinteze ili simulacije lipoproteina visoke gustoće, ali Verilogovi iskazi slučajeva postaju potpuni dodavanjem zadanog slučaja. VHDL želi da iskazi slučajeva budu puni simulacije lipoproteina visoke gustoće, što obično zahtijeva klauzulu 'ostalo' za suradnika u medicinskoj sestri.
Iskaz paralelnog slučaja
Paralelna naredba slučaja može biti naredba slučaja unutar koje se može dobiti samo podudaranje izraza slučaja sa samo jednom stavkom slučaja.
Ako je moguće tražiti padežni izraz koji se može podudarati s jednom padežnom stavkom, podudarna mjerna jedinica za padežne stvari navodi se kao preklapajuće padežne stvari, pa iskaz o padežima nije paralelan.
Shema hardvera
RTL kod je razrađen kako bi se dobila hardverska shema koja predstavlja 4 na 1 multiplekser.
za petlju java
Nakon izvršenja gornjeg dizajna, izlaz je nula kada je sel 3 i odgovara dodijeljenim ulazima za druge vrijednosti.
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.
U izjavi slučaja, usporedba je uspješna samo kada svaki bit izraza odgovara jednoj od alternativa uključujući 0, 1, x i z. U gornjem primjeru, ako je bilo koji od bitova u sel ili x ili z, zadano naredba će se izvršiti jer nijedna druga alternativa nije odgovarala. U tom slučaju, izlaz će biti samo nule.
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.
Ako izjava slučaja u dizajnu ima x i z u alternativama stavke slučaja, rezultati će se razlikovati.
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 između case i if-else
Naredba case razlikuje se od if-else-if na dva načina, kao što su:
- Izrazi navedeni u an ako-drugače blok su općenitiji, dok se u bloku slučaja jedan izraz podudara s više stavki.