Co to jest operator nazywany w verilog „+:”

14

Przeglądam przypadek testowy Verilog i znalazłem oświadczenie

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

Co oznacza operator „+:”. Próbowałem znaleźć to w Google, ale nie otrzymałem żadnej odpowiedniej odpowiedzi.

shailendra
źródło

Odpowiedzi:

23

Ta składnia nazywa się indeksowanym wyborem części . Pierwszy składnik to przesunięcie bitu, a drugi to szerokość. Pozwala określić zmienną przesunięcia, ale szerokość musi być stała.

Przykład z 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
źródło
3

Wreszcie mam stronę źródłową, która nazywa się jako część indeksu wektorowego Select („+:”) .

Aby wyjaśnić to trochę więcej

PQR_AR[44*8 +: 64];

Za pomocą opcji Wybieranie części wektorowej indeksowanej, która jest dodawana w Verilog 2000, można wybrać część magistrali zamiast wybierać całą magistralę.

44 * 8 część jest punktem początkowym zmiennej wyboru części, a 64 to szerokość wyboru części i jest stała. Oznacza to, że jeśli początkowo zainicjowaliśmy

input [415:0] PQR;

wybieramy konkretną część PQR za pomocą

PQR_AR[44*8 +: 64];

to jest PQR_AR [352+: 64] lub oznacza, że ​​bierzemy udział od 352 do 415 z 0 do 415.

shailendra
źródło
Z dwikle odpowiedzi pochodzącej z LRM, kiedy inicjalizujemy magistralę: input [415: 0] PQR; Zatem PQR_AR [44 * 8 +: 64] powinien być PQR_AR [352: 288], a nie PQR_AR [415: 352]. Popraw mnie, jeśli idę w złym kierunku.
ABX,
@ABX Zgadzam się co do kierunku, z tym wyjątkiem, że PQR_AR [352: 289] to autobus o szerokości 64 bitów
peterbc