¿Cómo se llama este operador como "+:" en verilog

14

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.

shailendra
fuente

Respuestas:

22

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
dwikle
fuente
2

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.

shailendra
fuente
De la respuesta dwikle derivada de LRM, cuando inicializamos un bus como: input [415: 0] PQR; Entonces, PQR_AR [44 * 8 +: 64] debería ser PQR_AR [352: 288] y no PQR_AR [415: 352]. Por favor corrígeme si voy en la dirección equivocada.
ABX
@ABX Estoy de acuerdo con la dirección, excepto que debería ser PQR_AR [352: 289] para ser un bus de 64 bits de ancho
peterbc