Pasé por el caso de prueba de verilog y encontré una declaración
assign XYZ = PQR_AR[44*8 +: 64];
¿Por qué el operador "+:" se conoce como. Intenté encontrar esto en google pero no obtuve ninguna respuesta relevante.
Pasé por el caso de prueba de verilog y encontré una declaración
assign XYZ = PQR_AR[44*8 +: 64];
¿Por qué el operador "+:" se conoce como. Intenté 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 LRM SystemVerilog 2012:
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
Finalmente obtuve la página de origen para esto, esto se llama como parte Vector indexado Seleccionar ("+:") .
Para explicarlo un poco más
PQR_AR[44*8 +: 64];
Con la selección de parte de vector indexado, que se agrega en Verilog 2000, puede seleccionar una parte del bus en lugar de seleccionar todo el bus.
44 * 8 parte es el punto de inicio de la variable de selección de parte y 64 es el ancho de selección de parte y es constante. Esto significa que si inicialmente se ha inicializado
input [415:0] PQR;
estamos seleccionando una parte particular de PQR usando
PQR_AR[44*8 +: 64];
que es PQR_AR [352+: 64] o significa que estamos participando de 352 a 415 de 0 a 415.
Lea otras preguntas en las etiquetas verilog