Wie heißt dieser Operator in Verilog „+:“?

14

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.

shailendra
quelle

Antworten:

22

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
dwikle
quelle
2

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.

shailendra
quelle
Aus der von LRM abgeleiteten Antwort dwikle, wenn wir einen Bus wie folgt initialisieren: input [415: 0] PQR; Dann sollte PQR_AR [44 * 8 +: 64] PQR_AR [352: 288] und nicht PQR_AR [415: 352] sein. Bitte korrigieren Sie mich, wenn ich in die falsche Richtung gehe.
ABX
@ABX Ich stimme der Richtung zu, außer es sollte PQR_AR [352: 289] sein, um ein 64 Bit breiter Bus zu sein
Peterbc