Ich gehe gerade einen Verilog-Testfall durch und habe eine Aussage gefunden
assign XYZ = PQR_AR[44*8 +: 64];
Was bedeutet der Operator "+:"? Ich habe versucht, dies auf Google zu finden, aber keine relevante Antwort erhalten.
Diese Syntax wird als indizierte Teilauswahl bezeichnet . Der erste Term ist der Bitversatz und der zweite Term ist die Breite. Sie können eine Variable für den Versatz angeben, die Breite muss jedoch konstant sein.
Beispiel aus dem 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
Zuletzt habe ich die Quellseite dafür, diese heißt Indexed Vector Part Select ("+:") .
Um es etwas näher zu erläutern
PQR_AR[44*8 +: 64];
Mit der in Verilog 2000 hinzugefügten indizierten Vektorteilauswahl können Sie einen Teil des Busses auswählen, anstatt den gesamten Bus auszuwählen.
44 * 8 Teil ist Startpunkt der Teileauswahlvariablen und 64 ist die Breite der Teileauswahl und ist konstant
input [415:0] PQR;
Wir wählen einen bestimmten Teil von PQR mit
PQR_AR[44*8 +: 64];
das ist PQR_AR [352+: 64] oder es bedeutet, dass wir von 352 bis 415 von 0 bis 415 teilnehmen.