Respostas:
Não é semelhante a ==/ ===, se o operando esquerdo estiver assinado, ele >>>executará a extensão do sinal.
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
Exemplo no EDA Playground .
integertipo de 32 bits ) e os operadores de deslocamento aritmético foram introduzidos apenas no Verilog no Verilog-2001.
>>que significar mudança lógica em 1985 (tirada de Pascal, que é de 1970). Portanto, tinha que usar >>>para a mudança aritmética.
De acordo com IEEE1800-2012, >>é uma mudança lógica binária, enquanto >>>é uma mudança aritmética binária.
Basicamente, o deslocamento aritmético usa o contexto para determinar os bits de preenchimento, portanto:
>>>) - shift direita número especificado de bits, preencha com o valor do sinal de bit se a expressão for assinada , caso contrário, preencha com zero,<<<) - shift esquerda número especificado de bits, preencha com zero.Por outro lado, o deslocamento lógico ( <<, >>) sempre preenche as posições de bits desocupadas com zeros.
Por exemplo:
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: se você usar reg [4:0] c, receberá 5'b00101, não 5'b11101. Atualizar o exemplo para esclarecer os tipos seria útil, eu acho.
>>e dos>>>operadores ... perversos.