¿Cuál es la diferencia entre un casez y una declaración de casex en Verilog?

0

Sé que una declaración de caso en Verilog puede comenzar con caso, casex o casez. Sin embargo, con casex y casez, ¿cuándo usaría uno sobre el otro?

    
pregunta M.Mata

2 respuestas

1

Supongo que puedes leer el LRM, pero estás pidiendo una opinión: ¿Por qué ?

El problema es que muchas funciones de Verilog se incorporaron a la solicitud específica de un usuario, y algunas de esas funciones no son tan útiles. Y a veces se puso una característica porque parecía consistente y fácil de implementar en ese momento, pero al final resultó ser contraproducente. casex podría ser una de esas características. Pero gran parte de esto es historia perdida.

Nunca debes usar casex . casex es notorio por causar diferencias entre simulaciones previas y posteriores a la síntesis.

Usted usa casez para modelar las condiciones de "no importa" con un ? en el ítem de su caso. Sin embargo, si puedes moverte a SystemVerilog, la instrucción case inside es aún mejor porque solo se ve en la expresión de elemento de caso, no en la expresión de selección de caso.

    
respondido por el dave_59
0

El crédito va a ASIC World para obtener códigos de ejemplo.

casez

Trata todos los valores de z en la expresión de caso como "no importa".

Ejemplo:

casez(opcode)
          4'b1zzx : begin // Don't care about lower 2:1 bit, bit 0 match with x
                      out = a; 
                      $display("@%0dns 4'b1zzx is selected, opcode %b",$time,opcode);
                    end
          4'b01?? : begin
                      out = b; // bit 1:0 is don't care
                      $display("@%0dns 4'b01?? is selected, opcode %b",$time,opcode);
                    end
          4'b001? : begin  // bit 0 is don't care
                      out = c;
                      $display("@%0dns 4'b001? is selected, opcode %b",$time,opcode);

casex

Trata todos los valores de x y z en la expresión del caso como no importa.

Ejemplo:

 casex(opcode)
      4'b1zzx : begin // Don't care  2:0 bits
                  out = a; 
                  $display("@%0dns 4'b1zzx is selected, opcode %b",$time,opcode);
                end
      4'b01?? : begin // bit 1:0 is don't care
                  out = b; 
                  $display("@%0dns 4'b01?? is selected, opcode %b",$time,opcode);
                end
      4'b001? : begin // bit 0 is don't care
                  out = c;
                  $display("@%0dns 4'b001? is selected, opcode %b",$time,opcode);
                end

Por supuesto, necesitará un endcase al final de los módulos casez y casex .

    
respondido por el KingDuken

Lea otras preguntas en las etiquetas