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.
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.
Odpowiedzi:
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
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.