Quel est cet opérateur appelé "+:" dans verilog

14

Je passe par le cas de test verilog et j'ai trouvé une déclaration

assign XYZ = PQR_AR[44*8 +: 64];

Que signifie l'opérateur "+:"? J'ai essayé de trouver cela sur Google, mais je n'ai pas obtenu de réponse pertinente.

shailendra
la source

Réponses:

22

Cette syntaxe est appelée sélection de partie indexée . Le premier terme est le décalage de bits et le second terme est la largeur. Il vous permet de spécifier une variable pour le décalage, mais la largeur doit être constante.

Exemple du SystemVerilog 2012 LRM:

logic [31: 0] a_vect;
logic [0 :31] b_vect;

logic [63: 0] dword;
integer sel;

a_vect[ 0 +: 8] // == a_vect[ 7 : 0]
a_vect[15 -: 8] // == a_vect[15 : 8]
b_vect[ 0 +: 8] // == b_vect[0 : 7]
b_vect[15 -: 8] // == b_vect[8 :15]

dword[8*sel +: 8] // variable part-select with fixed width
dwikle
la source
2

Enfin, j'ai obtenu la page source pour cela, cela s'appelle comme partie vectorielle indexée Select ("+:") .

Pour l'expliquer un peu plus

PQR_AR[44*8 +: 64];

Avec la sélection de partie vectorielle indexée, qui est ajoutée dans Verilog 2000, vous pouvez sélectionner une partie de bus plutôt que de sélectionner le bus entier.

44 * 8 pièce est le point de départ de la variable de sélection de pièce et 64 est la largeur de la pièce sélectionnée et est constante. Cela signifie que si nous avons initialement initialisé

input [415:0] PQR;

nous sélectionnons une partie particulière de PQR en utilisant

PQR_AR[44*8 +: 64];

c'est PQR_AR [352+: 64] ou cela signifie que nous prenons une part de 352 à 415 sur 0 à 415.

shailendra
la source
De la réponse dwikle dérivée de LRM, lorsque nous initialisons un bus comme: input [415: 0] PQR; Ensuite, PQR_AR [44 * 8 +: 64] doit être PQR_AR [352: 288] et non PQR_AR [415: 352]. Veuillez me corriger si je vais dans la mauvaise direction.
ABX
@ABX Je suis d'accord sur la direction, sauf que ce devrait être PQR_AR [352: 289] pour être un bus de 64 bits de large
peterbc