Respuestas:
No es similar a ==/ ===, si el operando de la izquierda está firmado, entonces >>>realiza la extensión del 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 .
integertipo de 32 bits ) y los operadores de desplazamiento aritmético solo se introdujeron en Verilog en Verilog-2001.
>>que significar un cambio lógico en 1985 (tomado de Pascal, que es de 1970). Por lo tanto, tuvo que usarse >>>para el cambio aritmético.
Según IEEE1800-2012 >>es un cambio lógico binario, mientras que >>>es un cambio aritmético binario.
Básicamente, el desplazamiento aritmético utiliza el contexto para determinar los bits de relleno, por lo que:
>>>): desplaza a la derecha el número de bits especificado, rellene con el valor del bit de signo si la expresión está firmada ; de lo contrario, rellene con cero<<<): desplaza a la izquierda el número especificado de bits, rellene con cero.Por otro lado, el desplazamiento lógico ( <<, >>) siempre llena las posiciones de bit desocupadas 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
c: si usa reg [4:0] c, obtendrá 5'b00101, no 5'b11101. Creo que sería útil actualizar el ejemplo para aclarar los tipos.
>>y los>>>operadores ... malvados.