La instrucció case comprova si l'expressió donada coincideix amb una entre les altres expressions de la llista i les branques. Normalment s'acostuma a implementar un dispositiu.
La construcció if-else pot no ser aplicable si hi ha unitat de mesura moltes condicions a comprovar i es sintetitzaria en un codificador de prioritat en lloc d'un dispositiu.
En Verilog , una instrucció de cas inclou tot el codi entre les paraules clau de Verilog, cas ('casez', 'casex') i endcase. Una declaració de cas pot ser un constructe selecte-one-of-many que s'assembla aproximadament a la declaració d'associat en infermeria if-else-if.
Sintaxi
Una instrucció de cas de Verilog comença amb la paraula clau case i acaba amb la paraula clau endcase.
L'expressió dins de la unitat d'àrea entre parèntesis pretén ser avaluada específicament una vegada i es compara amb la llista d'alternatives dins l'ordre en què s'escriuen.
I les afirmacions que la selecció coincideix amb l'expressió donada unitat de mesura morta. Un bloc de declaracions múltiples s'hauria d'ordenar i estar dins de l'inici i el final.
case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase
Si cap de les coses del cas coincideix amb l'expressió donada, les declaracions dins de la unitat de mesura de l'element predeterminat estan morts. La declaració predeterminada no és obligatòria i només hi ha una declaració predeterminada al llarg d'una instrucció de cas. Les declaracions de cas estan imbricades.
cua java
L'execució sortirà del bloc de casos mentre que no es farà una cosa si cap dels elements coincideix amb l'expressió i no es dóna una instrucció predeterminada.
Exemple
El següent mòdul de moda inclou una opció de senyal de 2 bits per encaminar una entre les tres entrades diferents de 3 bits al signe indicat com a fora.
S'utilitza una instrucció de cas per assignar l'entrada correcta a la sortida compatible amb el valor de sel. Com que sel pot ser un senyal de 2 bits, tindrà vint-i-2 combos, de zero a 3. La instrucció predeterminada ajuda a la línia de sortida a zero si sel és 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
Capçalera de la declaració del cas
La capçalera d'una instrucció de cas consisteix en la paraula clau case ('casez', 'casex') seguida de l'expressió de cas, normalment tot en una línia de codi.
Quan s'afegeixen directives full_case o parallel_case a una instrucció de cas, la unitat de mesura de les directives s'afegeix com a comentari en temps real després de l'expressió de cas a la punta de la capçalera de la instrucció de cas i abans de qualsevol de les coses de cas a les línies de codi següents.
Element del cas
L'element de cas és que l'expressió de bit, vector o Verilog acostumada es compara amb l'expressió de cas.
A diferència de diferents llenguatges de programació d'alt nivell com ' C ', la instrucció de cas de Verilog inclou sentències de ruptura implícites.
El primer ítem de cas que coincideix amb aquesta expressió de cas fa que la instrucció d'element de cas corresponent estigui morta, per tant, la resta de les unitats de mesura de cas que s'ometen per a això se sotmeten a la instrucció de cas.
Declaració de l'article del cas
Una instrucció d'element de cas és una o moltes sentències de Verilog morts si l'element de cas coincideix amb aquesta expressió de cas. No com VHDL, les coses del cas de Verilog poden ser elles mateixes expressions.
quadre de llista html
Per alterar l'anàlisi del document de codi de Verilog, les declaracions d'element de cas de Verilog s'han d'incloure entre les paraules clau 'començar' i 'final' si més d'una declaració ha d'estar morta per a un cas concret.
Casez
A Verilog, hi ha una instrucció casez, una variació de la instrucció case que permet 'z' i '?' valors que s'han de tractar al llarg de la comparació de casos com a valors 'no m'importa'.
'Z' i '?' unitat de mesura tractada com una no importa si estan dins de l'expressió de cas o si estan dins de l'element de cas.
Quan escriviu en secret una declaració de cas amb 'no m'importa', feu servir una declaració casez i utilitzeu '?' caràcters en comptes de caràcters 'z' dins de les coses del cas per proposar els bits 'no m'importen'.
Casex
A Verilog, hi ha una declaració casex, una variació de la declaració case que permet que els valors 'z', '?' i 'x' es tracten durant la comparació com a valors 'no m'importa'.
'x', 'z' i '?' unitat de mesura tractada com una no importa si estan dins de l'expressió de cas o si estan dins de l'element de cas.
Declaració completa del cas
Una declaració de cas completa pot ser una declaració de cas dins de la qual tots els patrons binaris d'expressió de minúscules que es poden obtenir coincideixen amb un element de cas o un cas predeterminat.
Si una instrucció de cas no inclou un cas predeterminat i es pot anar buscant una expressió de cas binària que no coincideix amb cap de les coses de minúscules impreses, la instrucció de cas no està completa.
Una declaració de cas completa pot ser una declaració de cas dins de la qual tots els patrons binaris, no binaris i la barreja de patrons binaris i no binaris que es poden obtenir s'inclouen com a element de cas dins de la declaració de cas.
Verilog no vol que les declaracions de cas siguin completes ni de síntesi ni de simulació de lipoproteïnes d'alta densitat, però les declaracions de cas de Verilog es fan plenes afegint un cas predeterminat. VHDL vol que les declaracions de casos siguin una simulació de lipoproteïnes d'alta densitat completa, que sol desitjar la clàusula 'altres' d'Associat in Nursing.
Declaració de casos paral·lels
Una declaració de cas paral·lela pot ser una declaració de cas dins de la qual només es pot fer coincidir una expressió de cas amb un sol element de cas.
Si es pot buscar una expressió de cas que pot coincidir amb un element de cas, la unitat de mesura de les coses de cas que coincideix s'indica com a coses de cas que se superposen i, per tant, la declaració de cas no és paral·lela.
Esquema de maquinari
El codi RTL s'elabora per obtenir un esquema de maquinari que representa un multiplexor de 4 a 1.
Després d'executar el disseny anterior, la sortida és zero quan sel és 3 i correspon a les entrades assignades per a altres valors.
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.
En una declaració de cas, la comparació només té èxit quan cada bit de l'expressió coincideix amb una de les alternatives que inclouen 0, 1, x i z. A l'exemple anterior, si algun dels bits de sel és x o z, el per defecte s'executarà perquè cap de les altres alternatives coincideix. En aquest cas, la sortida serà tot zero.
algorisme k-nn
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.
Si la declaració de cas al disseny té x i z a les alternatives d'elements de cas, els resultats seran diferents.
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
Diferenciació entre el cas i el si més
La declaració de cas és diferent de if-else-if de dues maneres, com ara:
- Expressions donades en an si una altra cosa bloc són més generals, mentre que en un bloc de casos, una única expressió es combina amb diversos elements.