Sto esaminando il test case di Verilog e ho trovato una dichiarazione
assign XYZ = PQR_AR[44*8 +: 64];
Cosa significa "+:" operatore. Ho provato a trovarlo su Google, ma non ho ricevuto alcuna risposta pertinente.
Sto esaminando il test case di Verilog e ho trovato una dichiarazione
assign XYZ = PQR_AR[44*8 +: 64];
Cosa significa "+:" operatore. Ho provato a trovarlo su Google, ma non ho ricevuto alcuna risposta pertinente.
Risposte:
Quella sintassi è chiamata selezione parziale indicizzata . Il primo termine è l'offset dei bit e il secondo termine è la larghezza. Consente di specificare una variabile per l'offset, ma la larghezza deve essere costante.
Esempio tratto da 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
Infine ho ottenuto la pagina di origine per questo, questo si chiama come Selezione vettoriale indicizzata ("+:") .
Per spiegarlo un po 'di più
PQR_AR[44*8 +: 64];
Con la selezione della parte vettoriale indicizzata, aggiunta in Verilog 2000, è possibile selezionare una parte del bus anziché selezionare l'intero bus.
44 * 8 parte è il punto iniziale della variabile selezione parte e 64 è la larghezza della selezione parte and è costante. Ciò significa che se inizialmente abbiamo inizializzato
input [415:0] PQR;
stiamo selezionando una parte particolare di PQR usando
PQR_AR[44*8 +: 64];
questo è PQR_AR [352+: 64] o significa che stiamo prendendo una parte da 352 a 415 da 0 a 415.