Descrizione ed esempi sono disponibili in IEEE Std 1800-2012 § 11.5.1 "Selezione bit vettoriale e indirizzamento di selezione parte". Il primo aspetto IEEE è IEEE 1364-2001 (Verilog) § 4.2.1 "Selezione bit vettoriale e indirizzamento di selezione parte". Ecco un esempio diretto dalla 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
Se sel
è 0 allora dword[8*(0) +: 8] == dword[7:0]
Se sel
è 7 allora
Il valore sempre la sinistra indice iniziale. Il numero a destra è la larghezza e deve essere una costante positiva. il +
e -
indica di selezionare i bit di un valore di indice superiore o inferiore quindi l'indice di partenza.
Supponendo address
è in little endian ([msb: lsb]) formato, quindi if(address[2*pointer+:2])
equivale if({address[2*pointer+1],address[2*pointer]})
Questo è un duplicato vicino di http://stackoverflow.com/questions/17778418 – dwikle