Diferença entre >> e >>> no verilog?

8

Qual é a diferença entre >>e >>>no verilog / system verilog? Eu sei que ==testa apenas 1 e 0, enquanto ===testa 1, 0, X, Z. Então, como isso é semelhante ao operador de turno?

daut
fonte

Respostas:

13

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 .

pre_randomize
fonte
2
Uau, isso é exatamente o oposto dos significados do Java >>e dos >>>operadores ... perversos.
Colin D Bennett
2
Verilog foi 10 anos antes de Java. : P
dave_59
1
@ dave_59, mas os valores assinados (além do integertipo de 32 bits ) e os operadores de deslocamento aritmético foram introduzidos apenas no Verilog no Verilog-2001.
The Photon
1
Verilog já teve >>que significar mudança lógica em 1985 (tirada de Pascal, que é de 1970). Portanto, tinha que usar >>>para a mudança aritmética.
dave_59 20/01/19
8

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:

  • aritmética direita shift ( >>>) - 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,
  • aritmética esquerda shift ( <<<) - 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
Qiu
fonte
Os resultados deste exemplo dependem da declaração de 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.
Clément