Estoy pasando por el caso de prueba Verilog y encontré una declaración
assign XYZ = PQR_AR[44*8 +: 64];
¿Qué se conoce como operador "+:"? Traté de encontrar esto en google pero no obtuve ninguna respuesta relevante.
Esa sintaxis se denomina selección parcial indexada . El primer término es el desplazamiento de bits y el segundo término es el ancho. Le permite especificar una variable para el desplazamiento, pero el ancho debe ser constante.
Ejemplo del 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
Por último, obtuve la página de origen para esto, esto se llama como parte de Vector indexado Seleccionar ("+:") .
Para explicarlo un poco más
PQR_AR[44*8 +: 64];
Con la selección de parte del vector indexado, que se agrega en Verilog 2000, puede seleccionar una parte del bus en lugar de seleccionar el bus completo.
44 * 8 parte es el punto de partida de la variable de selección de parte y 64 es el ancho de la selección de parte y es constante. Esto significa que si inicialmente hemos inicializado
input [415:0] PQR;
estamos seleccionando una parte particular de PQR usando
PQR_AR[44*8 +: 64];
eso es PQR_AR [352+: 64] o significa que estamos tomando una parte de 352 a 415 de 0 a 415.