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.
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.
Réponses:
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
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.