Was ist der Unterschied zwischen >>
und >>>
in Verilog / System Verilog? Ich weiß, dass ==
nur für 1 und 0 ===
getestet wird , während für 1, 0, X, Z getestet wird. Wie ähnelt das dem Schichtführer?
8
Was ist der Unterschied zwischen >>
und >>>
in Verilog / System Verilog? Ich weiß, dass ==
nur für 1 und 0 ===
getestet wird , während für 1, 0, X, Z getestet wird. Wie ähnelt das dem Schichtführer?
Es ist nicht ähnlich zu ==
/ ===
, wenn der linke Operand signiert ist, >>>
führt er eine Vorzeichenerweiterung durch.
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
Ergebnis:
#a_signed 1111010101
#a_unsigned 0011010101
Beispiel auf dem EDA-Spielplatz .
>>
und>>>
Operatoren ... böse.integer
Typ) und die arithmetischen Verschiebungsoperatoren wurden erst in Verilog-2001 in Verilog eingeführt.>>
1985 eine logische Verschiebung bedeuten (entnommen aus Pascal, das aus dem Jahr 1970 stammt). Also musste es>>>
für die arithmetische Verschiebung verwendet werden.Gemäß IEEE1800-2012
>>
handelt es sich um eine binäre logische Verschiebung, während>>>
es sich um eine binäre arithmetische Verschiebung handelt.Grundsätzlich verwendet die arithmetische Verschiebung den Kontext, um die Füllbits zu bestimmen, also:
>>>
) - Verschiebung der angegebenen Anzahl von Bits nach rechts, mit dem Wert des Vorzeichenbits füllen, wenn der Ausdruck vorzeichenbehaftet ist , andernfalls mit Null füllen,<<<
) - Verschiebt die angegebene Anzahl von Bits nach links und füllt sie mit Null.Andererseits füllt die logische Verschiebung (
<<
,>>
) die frei gewordenen Bitpositionen immer mit Nullen.Zum Beispiel:
quelle
c
: Wenn Sie verwendenreg [4:0] c
, erhalten Sie5'b00101
nicht5'b11101
. Ich denke, es wäre nützlich, das Beispiel zu aktualisieren, um die Typen zu verdeutlichen.