L'istruzione case controlla se l'espressione data corrisponde a una delle altre espressioni all'interno dell'elenco e dei rami. Solitamente si usa implementare un dispositivo.
Il costrutto if-else potrebbe non essere applicabile se ci sono molte condizioni da controllare come unità di misura e verrebbe sintetizzato in un codificatore di priorità anziché in un dispositivo.
In Verilog , un'istruzione case include tutto il codice tra le parole chiave Verilog, case ('casez', 'casex') e endcase. Un'istruzione case può essere un costrutto select-one-of-many che è più o meno come Associate nell'istruzione if-else-if infermieristica.
Sintassi
Un'istruzione case di Verilog inizia con la parola chiave case e termina con la parola chiave endcase.
L'unità di area dell'espressione tra parentesi vuole essere valutata specificatamente una volta e viene confrontata con l'elenco delle alternative nell'ordine in cui sono scritte.
metodo principale Java
E le affermazioni secondo cui la selezione corrisponde all'unità di misura dell'espressione data sono morte. Un blocco di più istruzioni dovrebbe essere ordinato e trovarsi all'interno di inizio e fine.
case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase
Se nessuno dei casi corrisponde all'espressione data, le istruzioni all'interno dell'unità di misura predefinita dell'elemento muoiono. L'istruzione default non è obbligatoria ed è presente una sola istruzione default in un'istruzione case. Le istruzioni Case sono nidificate.
L'esecuzione uscirà dal blocco case senza fare nulla se nessuno degli elementi corrisponde all'espressione e non viene fornita un'istruzione predefinita.
Esempio
Il seguente modulo Vogue include un segnale opt for a 2 bit per instradare uno dei tre diversi ingressi a 3 bit al segno indicato come out.
in.next java
Un'istruzione case viene utilizzata per assegnare l'input corretto all'output supportato dal valore sel. Poiché sel può essere un segnale a 2 bit, avrà venti combinazioni 2, da zero a 3. L'istruzione predefinita aiuta a allineare l'output a zero se 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
Intestazione della dichiarazione del caso
L'intestazione di un'istruzione case è costituita dalla parola chiave case ('casez', 'casex') seguita dall'espressione case, solitamente tutta su una riga di codice.
Quando si aggiungono le direttive full_case o parallel_case a un'istruzione case, l'unità di misura delle direttive viene aggiunta come commento in tempo reale dopo l'espressione case all'estremità dell'intestazione dell'istruzione case e prima di qualsiasi cosa case nelle righe di codice successive.
Oggetto della custodia
L'elemento case è che l'espressione bit, vettore o Verilog utilizzata viene confrontata con l'espressione case.
A differenza di diversi linguaggi di programmazione di alto livello come ' C ', l'istruzione case di Verilog include istruzioni break implicite.
Il primo elemento del caso che corrisponde a questa espressione case fa sì che la corrispondente istruzione dell'elemento del caso sia morta, quindi tutte le altre unità di misura del caso saltate per questo vengono sottoposte all'istruzione case.
Dichiarazione dell'elemento del caso
Un'istruzione case item è una o più istruzioni Verilog morte se l'elemento case corrisponde a questa espressione case. A differenza di VHDL, nel caso Verilog le cose possono essere esse stesse espressioni.
confrontare con la stringa
Per modificare l'analisi del documento di codice Verilog, le dichiarazioni degli elementi del caso Verilog dovrebbero essere racchiuse tra le parole chiave 'inizio' E 'FINE' se più di un'affermazione deve essere morta per un caso specifico.
Casez
In Verilog, c'è un'istruzione casez, una variazione dell'istruzione case che abilita 'z' e '?' valori da trattare durante il confronto tra casi come valori 'non interessati'.
'Z' e '?' unità di misura trattata come non importa se sono all'interno dell'espressione case o se sono all'interno dell'elemento case.
Quando scrivi in segreto un'istruzione case con 'non mi interessa', usa un'istruzione casez e usa '?' caratteri invece dei caratteri 'z' all'interno della custodia cose che hanno lo scopo di 'non interessare'.
Casex
In Verilog, c'è un'istruzione casex, una variazione dell'istruzione case che consente ai valori 'z', '?' e 'x' di essere trattati durante il confronto come valori 'non importa'.
'x', 'z' e '?' unità di misura trattata come non importa se sono all'interno dell'espressione case o se sono all'interno dell'elemento case.
Dichiarazione completa del caso
Un'istruzione case completa può essere un'istruzione case all'interno della quale tutti i modelli binari di espressione case ottenibili vengono abbinati a un elemento case o a un valore case default.
Se un'istruzione case non abbraccia un case default ed è possibile cercare un'espressione case binaria che non corrisponde a nessuno degli elementi case stampati, l'istruzione case non è completa.
la stringa Java contiene
Un'istruzione case completa può essere un'istruzione case all'interno della quale ogni modello binario, non binario e una combinazione di modelli binari e non binari ottenibili è racchiuso come elemento case all'interno dell'istruzione case.
Verilog non desidera che le dichiarazioni dei casi siano complete di sintesi o simulazione di lipoproteine ad alta densità, ma le dichiarazioni dei casi di Verilog vengono rese complete aggiungendo un caso predefinito. VHDL desidera che le dichiarazioni dei casi siano complete di simulazione delle lipoproteine ad alta densità, che di solito richiede la clausola 'altri' dell'Associato nell'assistenza infermieristica.
Dichiarazione di casi paralleli
Un'istruzione case parallela può essere un'istruzione case all'interno della quale è possibile far corrispondere un'espressione case solo a un solo elemento case.
Se è possibile cercare un'espressione di case che può corrispondere a un elemento del caso, l'unità di misura delle cose del caso corrispondente viene dichiarata come cose del caso sovrapposte, e quindi l'istruzione del caso non è parallela.
Schema dell'hardware
Il codice RTL viene elaborato per ottenere uno schema hardware che rappresenta un multiplexer 4 a 1.
Dopo aver eseguito il progetto di cui sopra, l'uscita è zero quando sel è 3 e corrisponde agli ingressi assegnati per altri valori.
come ottenere la data corrente in Java
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.
In un'istruzione case, il confronto riesce solo quando ciascun bit dell'espressione corrisponde a una delle alternative tra cui 0, 1, x e z. Nell'esempio precedente, se uno qualsiasi dei bit in sel è x o z, the predefinito l'istruzione verrà eseguita perché nessuna delle altre alternative corrisponde. In tal caso, l'output sarà tutto zero.
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.
Se la formulazione case nel progetto ha xez nelle alternative degli elementi case, i risultati saranno diversi.
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
Differenziazione tra caso e if-else
L'istruzione case è diversa da if-else-if in due modi, ad esempio:
- Espressioni date in an se altro block sono più generali, mentre in un case block una singola espressione viene abbinata a più elementi.