Quelle est la différence entre >>
et >>>
dans verilog / verilog système? Je sais que les ==
tests pour seulement 1 et 0, tandis que les ===
tests pour 1, 0, X, Z. Alors, comment est-ce similaire à l'opérateur de décalage?
8
Quelle est la différence entre >>
et >>>
dans verilog / verilog système? Je sais que les ==
tests pour seulement 1 et 0, tandis que les ===
tests pour 1, 0, X, Z. Alors, comment est-ce similaire à l'opérateur de décalage?
Il n'est pas similaire à ==
/ ===
, si l'opérande de gauche est signé puis >>>
effectue l'extension du signe.
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
Résultat:
#a_signed 1111010101
#a_unsigned 0011010101
Exemple sur EDA Playground .
>>
et des>>>
opérateurs ... méchants.integer
) et les opérateurs de décalage arithmétique n'ont été introduits dans Verilog que dans Verilog-2001.>>
signifier un changement logique en 1985 (tiré de Pascal, qui date de 1970). Il a donc dû utiliser>>>
pour le décalage arithmétique.Selon IEEE1800-2012, il
>>
s'agit d'un décalage logique binaire, alors qu'il>>>
s'agit d'un décalage arithmétique binaire.Fondamentalement, le décalage arithmétique utilise le contexte pour déterminer les bits de remplissage, donc:
>>>
) - décalage à droite du nombre de bits spécifié, remplir avec la valeur du bit de signe si l'expression est signée , sinon remplir avec zéro,<<<
) - décalage gauche spécifié nombre de bits, remplir avec zéro.D'un autre côté, le décalage logique (
<<
,>>
) remplit toujours les positions de bits libérées avec des zéros.Par exemple:
la source
c
: si vous utilisezreg [4:0] c
, vous obtiendrez5'b00101
, non5'b11101
. Mettre à jour l'exemple pour clarifier les types serait utile, je pense.