diferencia entre y en verilog?

7

¿Cuál es la diferencia entre >> y >>> en verilog / system verilog? Sé que == prueba solo para 1 y 0, mientras que === prueba para 1, 0, X, Z. Entonces, ¿cómo es eso similar al operador de cambio?

    
pregunta daut

2 respuestas

10

No es similar a == / === , si el operando de la izquierda está firmado, entonces >>> realiza la extensión de signo.

reg signed [9:0] b = 10'sb11_0101_0101;
reg signed [9:0] a_signed;
reg        [9:0] a_unsigned; 

always_comb begin
  a_signed   = b >>> 2;
  a_unsigned = b >>  2;
end

Resultado:

#a_signed   1111010101
#a_unsigned 0011010101

Ejemplo en EDA Playground .

    
respondido por el pre_randomize
6

Según IEEE1800-2012 >> es un cambio lógico binario, mientras que >>> es un cambio aritmético binario.

Básicamente, el cambio aritmético utiliza el contexto para determinar los bits de relleno, por lo que:

  • desplazamiento aritmético a la derecha ( >>> ): desplaza a la derecha el número especificado de bits, rellena con el valor del bit de signo si la expresión está firmada ;
  • Desplazamiento aritmético a la izquierda ( <<< ): desplaza a la izquierda el número especificado de bits, rellene con cero.

Por otra parte, el desplazamiento lógico ( << , >> ) siempre llena las posiciones de bit vacantes con ceros.

Por ejemplo:

a = 5'b10100;
b = a <<< 2; //b == 5'b10000
c = a >>> 2; //c == 5'b11101, 'cause sign bit was '1'
d = a <<  2; //d == 5'b10000
e = a >>  2; //e == 5'b00101
    
respondido por el Qiu

Lea otras preguntas en las etiquetas