Differenza tra >> e >>> in verilog?


8

Qual è la differenza tra >>e >>>in verilog / system verilog? So che ==esegue i test solo per 1 e 0, mentre i ===test per 1, 0, X, Z. Quindi, com'è simile all'operatore del turno?

Risposte:


13

Non è simile a ==/ ===, se l'operando di sinistra è firmato, >>>esegue l'estensione del segno.

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

Risultato:

#a_signed   1111010101
#a_unsigned 0011010101

Esempio su EDA Playground .


2
Wow, questo è esattamente l'opposto dei significati di Java >>e degli >>>operatori ... malvagi.
Colin D Bennett,

2
Verilog era 10 anni prima di Java. : P
dave_59,

1
@ dave_59, ma i valori con segno (a parte il tipo a 32 bit integer) e gli operatori di spostamento aritmetico sono stati introdotti in Verilog solo in Verilog-2001.
Il fotone

1
Verilog doveva già >>significare uno spostamento logico nel 1985 (tratto da Pascal, che è del 1970). Quindi ha dovuto usare >>>per il turno aritmetico.
dave_59,

8

Secondo IEEE1800-2012 >>è uno spostamento logico binario, mentre >>>è uno spostamento aritmetico binario.

Fondamentalmente, lo spostamento aritmetico utilizza il contesto per determinare i bit di riempimento, quindi:

  • arithmetic right shift ( >>>) - sposta a destra il numero specificato di bit, riempi con il valore del bit di segno se espressione è firmata , altrimenti riempi con zero,
  • shift aritmetico sinistro ( <<<) - sposta il numero di bit specificato a sinistra, riempi con zero.

D'altra parte, lo shift logico ( <<, >>) riempie sempre di zero le posizioni di bit liberate.

Per esempio:

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

I risultati di questo esempio dipendono dalla dichiarazione di c: se usi reg [4:0] c, otterrai 5'b00101, no 5'b11101. Aggiornare l'esempio per chiarire i tipi sarebbe utile, credo.
Clément,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.