La declaración de caso verifica si la expresión dada coincide con una de las otras expresiones dentro de la lista y las ramas. Generalmente se acostumbra implementar un dispositivo.
La construcción if-else puede no ser aplicable si hay muchas condiciones por verificar en la unidad de medida y se sintetizaría en un codificador de prioridad en lugar de un dispositivo.
En Verilog , una declaración de caso incluye todo el código entre las palabras clave de Verilog, case ('casez', 'casex') y endcase. Una declaración de caso puede ser una construcción de selección de muchos que es más o menos como una declaración de Asociado en enfermería si-si no-si.
Sintaxis
Una declaración de caso de Verilog comienza con la palabra clave case y termina con la palabra clave endcase.
La expresión entre paréntesis es una unidad de área que pretende ser evaluada específicamente una vez y se compara con la lista de alternativas dentro del orden en que están escritas.
Y las afirmaciones de que la selección coincide con la unidad de medida de expresión dada están muertas. Un bloque de declaraciones múltiples debe estar ordenado y estar entre el principio y el final.
case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase
Si ninguno de los elementos del caso coincide con la expresión dada, las declaraciones dentro de la unidad de medida predeterminada del elemento están muertas. La declaración predeterminada no es obligatoria y solo hay una declaración predeterminada en toda declaración de caso. Las declaraciones de casos están anidadas.
La ejecución saldrá del bloque de casos sin hacer nada si ninguno de los elementos coincide con la expresión y no se proporciona una declaración predeterminada.
Ejemplo
0.0625 como fracción
El siguiente módulo de moda incluye una señal de opción de 2 bits para enrutar una de las otras tres entradas de 3 bits a la señal indicada como salida.
Se utiliza una declaración de caso para asignar la entrada correcta a la salida compatible con el valor de sel. Dado que sel puede ser una señal de 2 bits, tendrá veinte combinaciones 2, de cero a 3. La declaración predeterminada ayuda a alinear la salida a cero si sel es 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
Encabezado de declaración de caso
El encabezado de una declaración de caso consta de la palabra clave case ('casez', 'casex') seguida de la expresión case, generalmente todo en una línea de código.
Al agregar directivas full_case o paralelo_case a una declaración de caso, la unidad de medida de las directivas se agrega como un comentario en tiempo real después de la expresión del caso en la punta del encabezado de la declaración del caso y antes de cualquiera de los elementos del caso en las líneas de código siguientes.
Artículo del caso
El elemento del caso es que la expresión de bit, vector o Verilog utilizada se compare con la expresión del caso.
A diferencia de diferentes lenguajes de programación de alto nivel como ' C ', la declaración del caso Verilog incluye declaraciones de interrupción implícitas.
El primer elemento de caso que coincide con esta expresión de caso hace que la declaración de elemento de caso correspondiente esté muerta, por lo que el resto de las unidades de medida omitidas para esto pasan por la declaración de caso.
Declaración del elemento del caso
Una declaración de elemento de caso es una o varias declaraciones de Verilog inactivas si el elemento de caso coincide con esta expresión de caso. A diferencia de VHDL, las cosas en el caso Verilog pueden ser expresiones.
Para alterar el análisis del documento de código Verilog, las declaraciones de elementos de caso de Verilog deben incluirse entre las palabras clave 'comenzar' y 'fin' si más de una declaración está muerta para un elemento de caso específico.
casez
En Verilog, hay una declaración casez, una variación de la declaración case que habilita 'z' y '?' Los valores deben tratarse a lo largo de la comparación de casos como valores que 'no importan'.
govinda
'Z' y '?' unidad de medida tratada como no importa si están dentro de la expresión del caso o si están dentro del elemento del caso.
Cuando escriba en secreto una declaración de caso con 'no me importa', use una declaración casez y use '?' caracteres en lugar de caracteres 'z' dentro del caso, cosas para propósitos de bits que 'no me importan'.
casex
En Verilog, hay una declaración casex, una variación de la declaración case que permite que los valores 'z', '?' y 'x' se traten durante la comparación como valores 'no importa'.
'x', 'z' y '?' unidad de medida tratada como no importa si están dentro de la expresión del caso o si están dentro del elemento del caso.
transmitir cadena a int
Declaración completa del caso
Una declaración de caso completa puede ser una declaración de caso dentro de la cual todos los patrones binarios de expresión de caso que se pueden obtener coinciden con un elemento de caso o un valor predeterminado de caso.
Si una declaración de caso no incluye un caso predeterminado y es posible buscar una expresión de caso binaria que no coincida con ninguno de los elementos de caso impresos, la declaración de caso no está completa.
Una declaración de caso completa puede ser una declaración de caso dentro de la cual cada binario, no binario y combinación de patrones binarios y no binarios que se pueden obtener está encuadrado como un elemento de caso dentro de la declaración de caso.
A Verilog no le gustaría que las declaraciones de casos sean completas de síntesis o simulación de lipoproteínas de alta densidad, pero las declaraciones de casos de Verilog se completan agregando un caso predeterminado. VHDL desea que las declaraciones de casos sean una simulación completa de lipoproteínas de alta densidad, lo que generalmente desea la cláusula 'otros' de Asociado en Enfermería.
Declaración de caso paralelo
Una declaración de caso paralela puede ser una declaración de caso dentro de la cual solo se puede hacer coincidir una expresión de caso con un solo elemento de caso.
Si es posible buscar una expresión de caso que pueda coincidir con un elemento de caso, la unidad de medida de los elementos del caso coincidente se indica como elementos de caso superpuestos, por lo que la declaración del caso no es paralela.
Esquema de hardware
El código RTL se elabora para obtener un esquema de hardware que representa un multiplexor 4 a 1.
Después de ejecutar el diseño anterior, la salida es cero cuando sel es 3 y corresponde a las entradas asignadas para otros valores.
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ón de caso, la comparación solo tiene éxito cuando cada bit de la expresión coincide con una de las alternativas, incluidas 0, 1, x y z. En el ejemplo anterior, si alguno de los bits en sel es x o z, el por defecto La declaración se ejecutará porque ninguna de las otras alternativas coincide. En tal caso, la salida será todo ceros.
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 el enunciado del caso en diseño tiene x y z en las alternativas del elemento del caso, los resultados serán diferentes.
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ón entre el caso y if-else
La declaración de caso es diferente de if-else-if en dos formas, como por ejemplo:
- Expresiones dadas en un si no Los bloques son más generales, mientras que en un bloque de casos, una sola expresión coincide con varios elementos.